1*c83a76b0SSuyog Pawar /****************************************************************************** 2*c83a76b0SSuyog Pawar * 3*c83a76b0SSuyog Pawar * Copyright (C) 2018 The Android Open Source Project 4*c83a76b0SSuyog Pawar * 5*c83a76b0SSuyog Pawar * Licensed under the Apache License, Version 2.0 (the "License"); 6*c83a76b0SSuyog Pawar * you may not use this file except in compliance with the License. 7*c83a76b0SSuyog Pawar * You may obtain a copy of the License at: 8*c83a76b0SSuyog Pawar * 9*c83a76b0SSuyog Pawar * http://www.apache.org/licenses/LICENSE-2.0 10*c83a76b0SSuyog Pawar * 11*c83a76b0SSuyog Pawar * Unless required by applicable law or agreed to in writing, software 12*c83a76b0SSuyog Pawar * distributed under the License is distributed on an "AS IS" BASIS, 13*c83a76b0SSuyog Pawar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*c83a76b0SSuyog Pawar * See the License for the specific language governing permissions and 15*c83a76b0SSuyog Pawar * limitations under the License. 16*c83a76b0SSuyog Pawar * 17*c83a76b0SSuyog Pawar ***************************************************************************** 18*c83a76b0SSuyog Pawar * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore 19*c83a76b0SSuyog Pawar */ 20*c83a76b0SSuyog Pawar /*! 21*c83a76b0SSuyog Pawar ****************************************************************************** 22*c83a76b0SSuyog Pawar * \file ihevce_coarse_me_pass.h 23*c83a76b0SSuyog Pawar * 24*c83a76b0SSuyog Pawar * \brief 25*c83a76b0SSuyog Pawar * Interfaces to create, control and run the Coarse ME module 26*c83a76b0SSuyog Pawar * 27*c83a76b0SSuyog Pawar * \date 28*c83a76b0SSuyog Pawar * 22/10/2012 29*c83a76b0SSuyog Pawar * 30*c83a76b0SSuyog Pawar * \author 31*c83a76b0SSuyog Pawar * Ittiam 32*c83a76b0SSuyog Pawar * 33*c83a76b0SSuyog Pawar ****************************************************************************** 34*c83a76b0SSuyog Pawar */ 35*c83a76b0SSuyog Pawar 36*c83a76b0SSuyog Pawar #ifndef _IHEVCE_COARSE_ME_PASS_H_ 37*c83a76b0SSuyog Pawar #define _IHEVCE_COARSE_ME_PASS_H_ 38*c83a76b0SSuyog Pawar 39*c83a76b0SSuyog Pawar /*****************************************************************************/ 40*c83a76b0SSuyog Pawar /* Constant Macros */ 41*c83a76b0SSuyog Pawar /*****************************************************************************/ 42*c83a76b0SSuyog Pawar 43*c83a76b0SSuyog Pawar /*****************************************************************************/ 44*c83a76b0SSuyog Pawar /* Function Macros */ 45*c83a76b0SSuyog Pawar /*****************************************************************************/ 46*c83a76b0SSuyog Pawar 47*c83a76b0SSuyog Pawar /*****************************************************************************/ 48*c83a76b0SSuyog Pawar /* Typedefs */ 49*c83a76b0SSuyog Pawar /*****************************************************************************/ 50*c83a76b0SSuyog Pawar 51*c83a76b0SSuyog Pawar /*****************************************************************************/ 52*c83a76b0SSuyog Pawar /* Enums */ 53*c83a76b0SSuyog Pawar /*****************************************************************************/ 54*c83a76b0SSuyog Pawar 55*c83a76b0SSuyog Pawar /*****************************************************************************/ 56*c83a76b0SSuyog Pawar /* Structure */ 57*c83a76b0SSuyog Pawar /*****************************************************************************/ 58*c83a76b0SSuyog Pawar 59*c83a76b0SSuyog Pawar /*****************************************************************************/ 60*c83a76b0SSuyog Pawar /* Extern Variable Declarations */ 61*c83a76b0SSuyog Pawar /*****************************************************************************/ 62*c83a76b0SSuyog Pawar 63*c83a76b0SSuyog Pawar /*****************************************************************************/ 64*c83a76b0SSuyog Pawar /* Extern Function Declarations */ 65*c83a76b0SSuyog Pawar /*****************************************************************************/ 66*c83a76b0SSuyog Pawar 67*c83a76b0SSuyog Pawar /*! 68*c83a76b0SSuyog Pawar ****************************************************************************** 69*c83a76b0SSuyog Pawar * \if Function name : ihevce_me_get_num_mem_recs \endif 70*c83a76b0SSuyog Pawar * 71*c83a76b0SSuyog Pawar * \brief 72*c83a76b0SSuyog Pawar * Number of memory records are returned for ME module 73*c83a76b0SSuyog Pawar * 74*c83a76b0SSuyog Pawar * 75*c83a76b0SSuyog Pawar * \return 76*c83a76b0SSuyog Pawar * Number of memory records 77*c83a76b0SSuyog Pawar * 78*c83a76b0SSuyog Pawar * \author 79*c83a76b0SSuyog Pawar * Ittiam 80*c83a76b0SSuyog Pawar * 81*c83a76b0SSuyog Pawar ***************************************************************************** 82*c83a76b0SSuyog Pawar */ 83*c83a76b0SSuyog Pawar WORD32 ihevce_coarse_me_get_num_mem_recs(); 84*c83a76b0SSuyog Pawar 85*c83a76b0SSuyog Pawar /*! 86*c83a76b0SSuyog Pawar ****************************************************************************** 87*c83a76b0SSuyog Pawar * \if Function name : ihevce_coarse_me_get_mem_recs \endif 88*c83a76b0SSuyog Pawar * 89*c83a76b0SSuyog Pawar * \brief 90*c83a76b0SSuyog Pawar * Memory requirements are returned for coarse ME. 91*c83a76b0SSuyog Pawar * 92*c83a76b0SSuyog Pawar * \param[in,out] ps_mem_tab : pointer to memory descriptors table 93*c83a76b0SSuyog Pawar * \param[in] ps_init_prms : Create time static parameters 94*c83a76b0SSuyog Pawar * \param[in] i4_num_proc_thrds : Number of processing threads for this module 95*c83a76b0SSuyog Pawar * \param[in] i4_mem_space : memspace in whihc memory request should be done 96*c83a76b0SSuyog Pawar * 97*c83a76b0SSuyog Pawar * \return 98*c83a76b0SSuyog Pawar * Number of records 99*c83a76b0SSuyog Pawar * 100*c83a76b0SSuyog Pawar * \author 101*c83a76b0SSuyog Pawar * Ittiam 102*c83a76b0SSuyog Pawar * 103*c83a76b0SSuyog Pawar ***************************************************************************** 104*c83a76b0SSuyog Pawar */ 105*c83a76b0SSuyog Pawar WORD32 ihevce_coarse_me_get_mem_recs( 106*c83a76b0SSuyog Pawar iv_mem_rec_t *ps_mem_tab, 107*c83a76b0SSuyog Pawar ihevce_static_cfg_params_t *ps_init_prms, 108*c83a76b0SSuyog Pawar WORD32 i4_num_proc_thrds, 109*c83a76b0SSuyog Pawar WORD32 i4_mem_space, 110*c83a76b0SSuyog Pawar WORD32 i4_resolution_id); 111*c83a76b0SSuyog Pawar 112*c83a76b0SSuyog Pawar /*! 113*c83a76b0SSuyog Pawar ****************************************************************************** 114*c83a76b0SSuyog Pawar * \if Function name : ihevce_coarse_me_init \endif 115*c83a76b0SSuyog Pawar * 116*c83a76b0SSuyog Pawar * \brief 117*c83a76b0SSuyog Pawar * Intialization for ME context state structure . 118*c83a76b0SSuyog Pawar * 119*c83a76b0SSuyog Pawar * \param[in] ps_mem_tab : pointer to memory descriptors table 120*c83a76b0SSuyog Pawar * \param[in] ps_init_prms : Create time static parameters 121*c83a76b0SSuyog Pawar * \param[in] pv_osal_handle : Osal handle 122*c83a76b0SSuyog Pawar * 123*c83a76b0SSuyog Pawar * \return 124*c83a76b0SSuyog Pawar * Handle to the ME context 125*c83a76b0SSuyog Pawar * 126*c83a76b0SSuyog Pawar * \author 127*c83a76b0SSuyog Pawar * Ittiam 128*c83a76b0SSuyog Pawar * 129*c83a76b0SSuyog Pawar ***************************************************************************** 130*c83a76b0SSuyog Pawar */ 131*c83a76b0SSuyog Pawar void *ihevce_coarse_me_init( 132*c83a76b0SSuyog Pawar iv_mem_rec_t *ps_mem_tab, 133*c83a76b0SSuyog Pawar ihevce_static_cfg_params_t *ps_init_prms, 134*c83a76b0SSuyog Pawar WORD32 i4_num_proc_thrds, 135*c83a76b0SSuyog Pawar void *pv_osal_handle, 136*c83a76b0SSuyog Pawar WORD32 i4_resolution_id, 137*c83a76b0SSuyog Pawar UWORD8 u1_is_popcnt_available); 138*c83a76b0SSuyog Pawar 139*c83a76b0SSuyog Pawar /*! 140*c83a76b0SSuyog Pawar ****************************************************************************** 141*c83a76b0SSuyog Pawar * \if Function name : ihevce_coarse_me_reg_thrds_sem \endif 142*c83a76b0SSuyog Pawar * 143*c83a76b0SSuyog Pawar * \brief 144*c83a76b0SSuyog Pawar * Intialization for ME context state structure with semaphores . 145*c83a76b0SSuyog Pawar * 146*c83a76b0SSuyog Pawar * \param[in] pv_me_ctxt : pointer to Coarse ME ctxt 147*c83a76b0SSuyog Pawar * \param[in] ppv_sem_hdls : Arry of semaphore handles 148*c83a76b0SSuyog Pawar * \param[in] i4_num_proc_thrds : Number of processing threads 149*c83a76b0SSuyog Pawar * 150*c83a76b0SSuyog Pawar * \return 151*c83a76b0SSuyog Pawar * none 152*c83a76b0SSuyog Pawar * 153*c83a76b0SSuyog Pawar * \author 154*c83a76b0SSuyog Pawar * Ittiam 155*c83a76b0SSuyog Pawar * 156*c83a76b0SSuyog Pawar ***************************************************************************** 157*c83a76b0SSuyog Pawar */ 158*c83a76b0SSuyog Pawar void ihevce_coarse_me_reg_thrds_sem(void *pv_me_ctxt, void **ppv_sem_hdls, WORD32 i4_num_proc_thrds); 159*c83a76b0SSuyog Pawar 160*c83a76b0SSuyog Pawar /*! 161*c83a76b0SSuyog Pawar ****************************************************************************** 162*c83a76b0SSuyog Pawar * \if Function name : ihevce_coarse_me_delete \endif 163*c83a76b0SSuyog Pawar * 164*c83a76b0SSuyog Pawar * \brief 165*c83a76b0SSuyog Pawar * Destroy Coarse ME module 166*c83a76b0SSuyog Pawar * Note : Only Destroys the resources allocated in the module like 167*c83a76b0SSuyog Pawar * semaphore,etc. Memory free is done Separately using memtabs 168*c83a76b0SSuyog Pawar * 169*c83a76b0SSuyog Pawar * \param[in] pv_me_ctxt : pointer to Coarse ME ctxt 170*c83a76b0SSuyog Pawar * \param[in] ps_init_prms : Create time static parameters 171*c83a76b0SSuyog Pawar * 172*c83a76b0SSuyog Pawar * \return 173*c83a76b0SSuyog Pawar * None 174*c83a76b0SSuyog Pawar * 175*c83a76b0SSuyog Pawar * \author 176*c83a76b0SSuyog Pawar * Ittiam 177*c83a76b0SSuyog Pawar * 178*c83a76b0SSuyog Pawar ***************************************************************************** 179*c83a76b0SSuyog Pawar */ 180*c83a76b0SSuyog Pawar void ihevce_coarse_me_delete( 181*c83a76b0SSuyog Pawar void *pv_me_ctxt, ihevce_static_cfg_params_t *ps_init_prms, WORD32 i4_resolution_id); 182*c83a76b0SSuyog Pawar 183*c83a76b0SSuyog Pawar /** 184*c83a76b0SSuyog Pawar ******************************************************************************* 185*c83a76b0SSuyog Pawar * \if Function name : ihevce_me_set_resolution \endif 186*c83a76b0SSuyog Pawar * 187*c83a76b0SSuyog Pawar * \brief 188*c83a76b0SSuyog Pawar * Sets the resolution for ME state 189*c83a76b0SSuyog Pawar * 190*c83a76b0SSuyog Pawar * \par Description: 191*c83a76b0SSuyog Pawar * ME requires information of resolution to prime up its layer descriptors 192*c83a76b0SSuyog Pawar * and contexts. This API is called whenever a control call from application 193*c83a76b0SSuyog Pawar * causes a change of resolution. Has to be called once initially before 194*c83a76b0SSuyog Pawar * processing any frame. Again this is just a glue function and calls the 195*c83a76b0SSuyog Pawar * actual ME API for the same. 196*c83a76b0SSuyog Pawar * 197*c83a76b0SSuyog Pawar * \param[in,out] pv_me_ctxt: Handle to the ME context 198*c83a76b0SSuyog Pawar * \param[in] n_enc_layers: Number of layers getting encoded 199*c83a76b0SSuyog Pawar * \param[in] p_wd : Pointer containing widths of each layer getting encoded. 200*c83a76b0SSuyog Pawar * \param[in] p_ht : Pointer containing heights of each layer getting encoded. 201*c83a76b0SSuyog Pawar * 202*c83a76b0SSuyog Pawar * \returns 203*c83a76b0SSuyog Pawar * none 204*c83a76b0SSuyog Pawar * 205*c83a76b0SSuyog Pawar * \author 206*c83a76b0SSuyog Pawar * Ittiam 207*c83a76b0SSuyog Pawar * 208*c83a76b0SSuyog Pawar ******************************************************************************* 209*c83a76b0SSuyog Pawar */ 210*c83a76b0SSuyog Pawar void ihevce_coarse_me_set_resolution( 211*c83a76b0SSuyog Pawar void *pv_me_ctxt, WORD32 n_enc_layers, WORD32 *p_wd, WORD32 *p_ht); 212*c83a76b0SSuyog Pawar 213*c83a76b0SSuyog Pawar void ihevce_coarse_me_get_rc_param( 214*c83a76b0SSuyog Pawar void *pv_me_ctxt, 215*c83a76b0SSuyog Pawar LWORD64 *i8_acc_frame_hme_cost, 216*c83a76b0SSuyog Pawar LWORD64 *i8_acc_frame_hme_sad, 217*c83a76b0SSuyog Pawar LWORD64 *i8_acc_num_blks_higher_sad, 218*c83a76b0SSuyog Pawar LWORD64 *i8_total_blks, 219*c83a76b0SSuyog Pawar WORD32 i4_is_prev_pic_same_scene); 220*c83a76b0SSuyog Pawar /*! 221*c83a76b0SSuyog Pawar ****************************************************************************** 222*c83a76b0SSuyog Pawar * \if Function name : ihevce_me_frame_init \endif 223*c83a76b0SSuyog Pawar * 224*c83a76b0SSuyog Pawar * \brief 225*c83a76b0SSuyog Pawar * Frame level ME initialisation function 226*c83a76b0SSuyog Pawar * 227*c83a76b0SSuyog Pawar * \par Description: 228*c83a76b0SSuyog Pawar * The following pre-conditions exist for this function: a. We have the input 229*c83a76b0SSuyog Pawar * pic ready for encode, b. We have the reference list with POC, L0/L1 IDs 230*c83a76b0SSuyog Pawar * and ref ptrs ready for this picture and c. ihevce_me_set_resolution has 231*c83a76b0SSuyog Pawar * been called atleast once. Once these are supplied, the following are 232*c83a76b0SSuyog Pawar * done here: a. Input pyramid creation, b. Updation of ME's internal DPB 233*c83a76b0SSuyog Pawar * based on available ref list information 234*c83a76b0SSuyog Pawar * 235*c83a76b0SSuyog Pawar * \param[in] pv_ctxt : pointer to ME module 236*c83a76b0SSuyog Pawar * \param[in] ps_frm_ctb_prms : CTB characteristics parameters 237*c83a76b0SSuyog Pawar * \param[in] ps_frm_lamda : Frame level Lambda params 238*c83a76b0SSuyog Pawar * \param[in] num_ref_l0 : Number of reference pics in L0 list 239*c83a76b0SSuyog Pawar * \param[in] num_ref_l1 : Number of reference pics in L1 list 240*c83a76b0SSuyog Pawar * \param[in] num_ref_l0_active : Active reference pics in L0 dir for current frame (shall be <= num_ref_l0) 241*c83a76b0SSuyog Pawar * \param[in] num_ref_l1_active : Active reference pics in L1 dir for current frame (shall be <= num_ref_l1) 242*c83a76b0SSuyog Pawar * \param[in] pps_rec_list_l0 : List of recon pics in L0 list 243*c83a76b0SSuyog Pawar * \param[in] pps_rec_list_l1 : List of recon pics in L1 list 244*c83a76b0SSuyog Pawar * \param[in] ps_enc_lap_inp : pointer to input yuv buffer (frame buffer) 245*c83a76b0SSuyog Pawar * \param[in] i4_frm_qp : current picture QP 246*c83a76b0SSuyog Pawar * 247*c83a76b0SSuyog Pawar * \return 248*c83a76b0SSuyog Pawar * None 249*c83a76b0SSuyog Pawar * 250*c83a76b0SSuyog Pawar * \author 251*c83a76b0SSuyog Pawar * Ittiam 252*c83a76b0SSuyog Pawar * 253*c83a76b0SSuyog Pawar ***************************************************************************** 254*c83a76b0SSuyog Pawar */ 255*c83a76b0SSuyog Pawar void ihevce_coarse_me_frame_init( 256*c83a76b0SSuyog Pawar void *pv_me_ctxt, 257*c83a76b0SSuyog Pawar ihevce_static_cfg_params_t *ps_stat_prms, 258*c83a76b0SSuyog Pawar frm_ctb_ctxt_t *ps_frm_ctb_prms, 259*c83a76b0SSuyog Pawar frm_lambda_ctxt_t *ps_frm_lamda, 260*c83a76b0SSuyog Pawar WORD32 num_ref_l0, 261*c83a76b0SSuyog Pawar WORD32 num_ref_l1, 262*c83a76b0SSuyog Pawar WORD32 num_ref_l0_active, 263*c83a76b0SSuyog Pawar WORD32 num_ref_l1_active, 264*c83a76b0SSuyog Pawar recon_pic_buf_t **pps_rec_list_l0, 265*c83a76b0SSuyog Pawar recon_pic_buf_t **pps_rec_list_l1, 266*c83a76b0SSuyog Pawar ihevce_lap_enc_buf_t *ps_enc_lap_inp, 267*c83a76b0SSuyog Pawar WORD32 i4_frm_qp, 268*c83a76b0SSuyog Pawar ihevce_ed_blk_t *ps_layer1_buf, //EIID 269*c83a76b0SSuyog Pawar ihevce_ed_ctb_l1_t *ps_ed_ctb_l1, 270*c83a76b0SSuyog Pawar UWORD8 *pu1_me_reverse_map_info, 271*c83a76b0SSuyog Pawar WORD32 i4_temporal_layer_id); 272*c83a76b0SSuyog Pawar 273*c83a76b0SSuyog Pawar /*! 274*c83a76b0SSuyog Pawar ****************************************************************************** 275*c83a76b0SSuyog Pawar * \if Function name : ihevce_me_process \endif 276*c83a76b0SSuyog Pawar * 277*c83a76b0SSuyog Pawar * \brief 278*c83a76b0SSuyog Pawar * Frame level ME function 279*c83a76b0SSuyog Pawar * 280*c83a76b0SSuyog Pawar * \par Description: 281*c83a76b0SSuyog Pawar * Processing of all layers starting from coarse and going 282*c83a76b0SSuyog Pawar * to the refinement layers, all layers 283*c83a76b0SSuyog Pawar * that are encoded go CTB by CTB. Outputs of this function are populated 284*c83a76b0SSuyog Pawar * ctb_analyse_t structures, one per CTB. 285*c83a76b0SSuyog Pawar * 286*c83a76b0SSuyog Pawar * \param[in] pv_ctxt : pointer to ME module 287*c83a76b0SSuyog Pawar * \param[in] ps_enc_lap_inp : pointer to input yuv buffer (frame buffer) 288*c83a76b0SSuyog Pawar * \param[in,out] ps_ctb_out : pointer to CTB analyse output structure (frame buffer) 289*c83a76b0SSuyog Pawar * \param[out] ps_cu_out : pointer to CU analyse output structure (frame buffer) 290*c83a76b0SSuyog Pawar * \param[in] pd_intra_costs : pointerto intra cost buffer 291*c83a76b0SSuyog Pawar * \param[in] ps_multi_thrd_ctxt : pointer to multi thread ctxt 292*c83a76b0SSuyog Pawar * \param[in] thrd_id : Thread id of the current thrd in which function is executed 293*c83a76b0SSuyog Pawar * 294*c83a76b0SSuyog Pawar * \return 295*c83a76b0SSuyog Pawar * None 296*c83a76b0SSuyog Pawar * 297*c83a76b0SSuyog Pawar * \author 298*c83a76b0SSuyog Pawar * Ittiam 299*c83a76b0SSuyog Pawar * 300*c83a76b0SSuyog Pawar ***************************************************************************** 301*c83a76b0SSuyog Pawar */ 302*c83a76b0SSuyog Pawar void ihevce_coarse_me_process( 303*c83a76b0SSuyog Pawar void *pv_me_ctxt, 304*c83a76b0SSuyog Pawar ihevce_lap_enc_buf_t *ps_enc_lap_inp, 305*c83a76b0SSuyog Pawar multi_thrd_ctxt_t *ps_multi_thrd_ctxt, 306*c83a76b0SSuyog Pawar WORD32 thrd_id, 307*c83a76b0SSuyog Pawar WORD32 i4_ping_pong); 308*c83a76b0SSuyog Pawar 309*c83a76b0SSuyog Pawar /*! 310*c83a76b0SSuyog Pawar ****************************************************************************** 311*c83a76b0SSuyog Pawar * \if Function name : ihevce_me_frame_dpb_update \endif 312*c83a76b0SSuyog Pawar * 313*c83a76b0SSuyog Pawar * \brief 314*c83a76b0SSuyog Pawar * Frame level ME initialisation function 315*c83a76b0SSuyog Pawar * 316*c83a76b0SSuyog Pawar * \par Description: 317*c83a76b0SSuyog Pawar * Updation of ME's internal DPB 318*c83a76b0SSuyog Pawar * based on available ref list information 319*c83a76b0SSuyog Pawar * 320*c83a76b0SSuyog Pawar * \param[in] pv_ctxt : pointer to ME module 321*c83a76b0SSuyog Pawar * \param[in] num_ref_l0 : Number of reference pics in L0 list 322*c83a76b0SSuyog Pawar * \param[in] num_ref_l1 : Number of reference pics in L1 list 323*c83a76b0SSuyog Pawar * \param[in] pps_rec_list_l0 : List of recon pics in L0 list 324*c83a76b0SSuyog Pawar * \param[in] pps_rec_list_l1 : List of recon pics in L1 list 325*c83a76b0SSuyog Pawar * 326*c83a76b0SSuyog Pawar * \return 327*c83a76b0SSuyog Pawar * None 328*c83a76b0SSuyog Pawar * 329*c83a76b0SSuyog Pawar * \author 330*c83a76b0SSuyog Pawar * Ittiam 331*c83a76b0SSuyog Pawar * 332*c83a76b0SSuyog Pawar ***************************************************************************** 333*c83a76b0SSuyog Pawar */ 334*c83a76b0SSuyog Pawar void ihevce_coarse_me_frame_dpb_update( 335*c83a76b0SSuyog Pawar void *pv_me_ctxt, 336*c83a76b0SSuyog Pawar WORD32 num_ref_l0, 337*c83a76b0SSuyog Pawar WORD32 num_ref_l1, 338*c83a76b0SSuyog Pawar recon_pic_buf_t **pps_rec_list_l0, 339*c83a76b0SSuyog Pawar recon_pic_buf_t **pps_rec_list_l1); 340*c83a76b0SSuyog Pawar 341*c83a76b0SSuyog Pawar /*! 342*c83a76b0SSuyog Pawar ****************************************************************************** 343*c83a76b0SSuyog Pawar * \if Function name : ihevce_me_get_lyr_prms_job_que \endif 344*c83a76b0SSuyog Pawar * 345*c83a76b0SSuyog Pawar * \brief Returns to the caller key attributes related to dependency between layers 346*c83a76b0SSuyog Pawar * for multi-thread execution 347*c83a76b0SSuyog Pawar * 348*c83a76b0SSuyog Pawar * 349*c83a76b0SSuyog Pawar * \par Description: 350*c83a76b0SSuyog Pawar * This function requires the precondition that the width and ht of encode 351*c83a76b0SSuyog Pawar * layer is known, and ME API ihevce_me_set_resolution() API called with 352*c83a76b0SSuyog Pawar * this info. Based on this, ME populates useful information for the encoder 353*c83a76b0SSuyog Pawar * to execute the multi-thread (concurrent across layers) in this API. 354*c83a76b0SSuyog Pawar * The number of layers, number of vertical units in each layer, and for 355*c83a76b0SSuyog Pawar * each vertial unit in each layer, its dependency on previous layer's units 356*c83a76b0SSuyog Pawar * From ME's perspective, a vertical unit is one which is smallest min size 357*c83a76b0SSuyog Pawar * vertically (and spans the entire row horizontally). This is CTB for encode 358*c83a76b0SSuyog Pawar * layer, and 8x8 / 4x4 for non encode layers. 359*c83a76b0SSuyog Pawar * 360*c83a76b0SSuyog Pawar * \param[in] pv_ctxt : ME handle 361*c83a76b0SSuyog Pawar * \param[in] ps_curr_inp : Input buffer descriptor 362*c83a76b0SSuyog Pawar * \param[out] pi4_num_hme_lyrs : Num of HME layers (ME updates) 363*c83a76b0SSuyog Pawar * \param[out] pi4_num_vert_units_in_lyr : Array of size N (num layers), each 364*c83a76b0SSuyog Pawar * entry has num vertical units in that particular layer 365*c83a76b0SSuyog Pawar * \param[in] ps_me_job_q_prms : Array of job queue prms, one for each unit in a 366*c83a76b0SSuyog Pawar * layer. Note that this is contiguous in order of processing 367*c83a76b0SSuyog Pawar * All k units of layer N-1 from top to bottom, followed by 368*c83a76b0SSuyog Pawar * all m units of layer N-2 .... ends with X units of layer 0 369*c83a76b0SSuyog Pawar * 370*c83a76b0SSuyog Pawar * \return 371*c83a76b0SSuyog Pawar * None 372*c83a76b0SSuyog Pawar * 373*c83a76b0SSuyog Pawar * \author 374*c83a76b0SSuyog Pawar * Ittiam 375*c83a76b0SSuyog Pawar * 376*c83a76b0SSuyog Pawar ***************************************************************************** 377*c83a76b0SSuyog Pawar */ 378*c83a76b0SSuyog Pawar void ihevce_coarse_me_get_lyr_prms_job_que( 379*c83a76b0SSuyog Pawar void *pv_me_ctxt, 380*c83a76b0SSuyog Pawar ihevce_lap_enc_buf_t *ps_curr_inp, 381*c83a76b0SSuyog Pawar WORD32 *pi4_num_hme_lyrs, 382*c83a76b0SSuyog Pawar WORD32 *pi4_num_vert_units_in_lyr, 383*c83a76b0SSuyog Pawar multi_thrd_me_job_q_prms_t *ps_me_job_q_prms); 384*c83a76b0SSuyog Pawar 385*c83a76b0SSuyog Pawar /*! 386*c83a76b0SSuyog Pawar ****************************************************************************** 387*c83a76b0SSuyog Pawar * \if Function name : ihevce_me_frame_end \endif 388*c83a76b0SSuyog Pawar * 389*c83a76b0SSuyog Pawar * \brief 390*c83a76b0SSuyog Pawar * End of frame update function performs GMV collation 391*c83a76b0SSuyog Pawar * 392*c83a76b0SSuyog Pawar * \param[in] pv_ctxt : pointer to ME module 393*c83a76b0SSuyog Pawar * 394*c83a76b0SSuyog Pawar * \return 395*c83a76b0SSuyog Pawar * None 396*c83a76b0SSuyog Pawar * 397*c83a76b0SSuyog Pawar * \author 398*c83a76b0SSuyog Pawar * Ittiam 399*c83a76b0SSuyog Pawar * 400*c83a76b0SSuyog Pawar ***************************************************************************** 401*c83a76b0SSuyog Pawar */ 402*c83a76b0SSuyog Pawar void ihevce_coarse_me_frame_end(void *pv_me_ctxt); 403*c83a76b0SSuyog Pawar 404*c83a76b0SSuyog Pawar void ihevce_coarse_me_get_lyr1_ctxt( 405*c83a76b0SSuyog Pawar void *pv_me_ctxt, void *pv_layer_ctxt, void *pv_layer_mv_bank_ctxt); 406*c83a76b0SSuyog Pawar 407*c83a76b0SSuyog Pawar void ihevce_coarse_me_set_lyr1_mv_bank( 408*c83a76b0SSuyog Pawar void *pv_me_ctxt, 409*c83a76b0SSuyog Pawar ihevce_lap_enc_buf_t *ps_enc_lap_inp, 410*c83a76b0SSuyog Pawar void *pv_mv_bank, 411*c83a76b0SSuyog Pawar void *pv_ref_idx_bank, 412*c83a76b0SSuyog Pawar WORD32 i4_curr_idx); 413*c83a76b0SSuyog Pawar 414*c83a76b0SSuyog Pawar WORD32 ihevce_coarse_me_get_lyr_buf_desc( 415*c83a76b0SSuyog Pawar void *pv_me_ctxt, UWORD8 **ppu1_decomp_lyr_bufs, WORD32 *pi4_lyr_buf_stride); 416*c83a76b0SSuyog Pawar 417*c83a76b0SSuyog Pawar #endif /* _IHEVCE_COARSE_ME_PASS_H_ */ 418