| /****************************************************************************** |
| * |
| * 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_ */ |