xref: /aosp_15_r20/external/libhevc/encoder/ihevce_coarse_me_pass.h (revision c83a76b084498d55f252f48b2e3786804cdf24b7)
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