blob: 28d22b773a3842fb1543b0659afd03e369e9e0ea [file] [log] [blame]
/******************************************************************************
*
* Copyright (C) 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*****************************************************************************
* Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
*/
/*!
******************************************************************************
* \file ihevce_dep_mngr_interface.h
*
* \brief
* This file contains infertace prototypes of Sync manager functions
*
* \date
* 13/12/2013
*
* \author
* Ittiam
*
******************************************************************************
*/
#ifndef _IHEVCE_DEPENDENCY_MANAGER_INTERFACE_H_
#define _IHEVCE_DEPENDENCY_MANAGER_INTERFACE_H_
/*****************************************************************************/
/* Constant Macros */
/*****************************************************************************/
/*****************************************************************************/
/* Function Macros */
/*****************************************************************************/
/*****************************************************************************/
/* Typedefs */
/*****************************************************************************/
/*****************************************************************************/
/* Enums */
/*****************************************************************************/
typedef enum
{
DEP_MNGR_FRM_FRM_SYNC = 0, /*!< To be used for multi threads Frame-
Frame level sync, where threads entering
a particular frame processing stage at
a particular index waits for all the threads
to complete the that stage at the same index
in the previous iteration
Ex: Wait for Encloop at Index i frame
to complete before starting encloop of
MAX_NUM_ENCLOOP + i frame at Index i
(FRAME LEVEl SYNCS)*/
DEP_MNGR_ROW_FRM_SYNC, /*!< To be used for multi threads Row-
Frame level sync, where multiple threads
entering a particular frame processing stage at
a particular index waits for corresponding
row to be completely processed in the
dependent stage
Ex: Multiple threads Wait in ME at a
particular row X (of Frame I)
until encloop of row X in Frame I
is completed
(REVERSE ME DEPENDENCY SYNC)*/
DEP_MNGR_ROW_ROW_SYNC, /*!< To be used for multi threads Row-
Row level sync, where a thread
entering a particular frame processing stage at
a particular index waits for corresponding
row to be processed til dependent position
in the dependent stage
Ex: (ENC LOOP to ME FORWARD Sync)
( TOP RIGHT SYNC) */
DEP_MNGR_MAP_SYNC
} DEP_MNGR_MODE_T;
typedef enum
{
MAP_CTB_INIT = 0,
MAP_CTB_RECON_DONE = 1,
MAP_CTB_COMPLETE = 2, //after hpel plane creation
} DEP_MNGR_MAP_CTB_STATUS_T;
/*****************************************************************************/
/* Structure */
/*****************************************************************************/
/*****************************************************************************/
/* Extern Variable Declarations */
/*****************************************************************************/
/*****************************************************************************/
/* Extern Function Declarations */
/*****************************************************************************/
/* Create APIs */
WORD32 ihevce_dmgr_get_num_mem_recs(void);
WORD32 ihevce_dmgr_get_mem_recs(
iv_mem_rec_t *ps_mem_tab,
WORD32 dep_mngr_mode, /* should be part of DEP_MNGR_MODE_T*/
WORD32 max_num_vert_units,
WORD32 num_tile_cols,
WORD32 num_threads,
WORD32 i4_mem_space);
WORD32 ihevce_dmgr_map_get_mem_recs(
iv_mem_rec_t *ps_mem_tab, WORD32 num_units, WORD32 num_threads, WORD32 i4_mem_space);
void *ihevce_dmgr_init(
iv_mem_rec_t *ps_mem_tab,
void *pv_osal_handle,
WORD32 dep_mngr_mode, /* should be part of DEP_MNGR_MODE_T*/
WORD32 max_num_vert_units,
WORD32 max_num_horz_units,
WORD32 num_tile_cols,
WORD32 num_threads,
WORD32 sem_enable);
void *ihevce_dmgr_map_init(
iv_mem_rec_t *ps_mem_tab,
WORD32 max_num_vert_units,
WORD32 max_num_horz_units,
WORD32 sem_enable,
WORD32 num_threads,
WORD32 ai4_tile_xtra_ctb[4]);
void ihevce_dmgr_reg_sem_hdls(
void *pv_dep_mngr_state, void **ppv_thread_sem_hdl, WORD32 num_threads);
/* Row-Row sync Process APIs*/
void ihevce_dmgr_rst_row_row_sync(void *pv_dep_mngr_state);
WORD32 ihevce_dmgr_chk_row_row_sync(
void *pv_dep_mngr_state,
WORD32 cur_offset,
WORD32 dep_offset,
WORD32 dep_row,
WORD32 cur_tile_col,
WORD32 thrd_id);
WORD32 ihevce_dmgr_set_row_row_sync(
void *pv_dep_mngr_state, WORD32 cur_offset, WORD32 cur_row, WORD32 cur_tile_col);
/* Row-Frame sync Process APIs*/
void ihevce_dmgr_rst_row_frm_sync(void *pv_dep_mngr_state);
/* Frame-Frame sync Process APIs*/
void ihevce_dmgr_set_done_frm_frm_sync(void *pv_dep_mngr_state);
void ihevce_dmgr_set_prev_done_frm_frm_sync(void *pv_dep_mngr_state);
WORD32 ihevce_dmgr_chk_frm_frm_sync(void *pv_dep_mngr_state, WORD32 thrd_id);
WORD32 ihevce_dmgr_update_frm_frm_sync(void *pv_dep_mngr_state);
/* Map sync Process APIs*/
void ihevce_dmgr_map_rst_sync(void *pv_dep_mngr_state);
WORD32 ihevce_dmgr_map_chk_sync(
void *pv_dep_mngr_state,
WORD32 thrd_id,
WORD32 offset_x,
WORD32 offset_y,
WORD32 i4_sr_ctb_x,
WORD32 i4_sr_ctb_y);
WORD32 ihevce_dmgr_map_set_sync(
void *pv_dep_mngr_state, WORD32 offset_x, WORD32 offset_y, WORD32 e_map_value);
/* Delete APIs */
void ihevce_dmgr_del(void *pv_dep_mngr_state);
#endif /* _IHEVCE_DEPENDENCY_MANAGER_INTERFACE_H_ */