xref: /aosp_15_r20/external/libhevc/encoder/ihevce_lap_enc_structs.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_lap_enc_structs.h
23*c83a76b0SSuyog Pawar *
24*c83a76b0SSuyog Pawar * \brief
25*c83a76b0SSuyog Pawar *    This file contains structure definations shared between Encoder and LAP
26*c83a76b0SSuyog Pawar *
27*c83a76b0SSuyog Pawar * \date
28*c83a76b0SSuyog Pawar *    18/09/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_LAP_ENC_STRUCTS_H_
37*c83a76b0SSuyog Pawar #define _IHEVCE_LAP_ENC_STRUCTS_H_
38*c83a76b0SSuyog Pawar 
39*c83a76b0SSuyog Pawar /*****************************************************************************/
40*c83a76b0SSuyog Pawar /* Constant Macros                                                           */
41*c83a76b0SSuyog Pawar /*****************************************************************************/
42*c83a76b0SSuyog Pawar #define MAX_NUM_BUFS_LAP_ENC 15
43*c83a76b0SSuyog Pawar #define MAX_REF_PICS 16
44*c83a76b0SSuyog Pawar #define MAX_PICS_FOR_SGI 16 /*max pics to be hold for Sub-Gop Interleave*/
45*c83a76b0SSuyog Pawar #define MAX_DUPLICATE_ENTRIES_IN_REF_LIST 2
46*c83a76b0SSuyog Pawar #define MAX_LAP_WINDOW_SIZE 60
47*c83a76b0SSuyog Pawar #define MAX_SUB_GOP_SIZE 16
48*c83a76b0SSuyog Pawar #define MAX_SCENE_NUM 30
49*c83a76b0SSuyog Pawar #define INIT_HEVCE_QP_RC (-300)
50*c83a76b0SSuyog Pawar #define MAX_TEMPORAL_LAYERS 3
51*c83a76b0SSuyog Pawar #define NUM_LAP2_LOOK_AHEAD 25
52*c83a76b0SSuyog Pawar 
53*c83a76b0SSuyog Pawar #define INFINITE_GOP_CDR_TIME_S 3
54*c83a76b0SSuyog Pawar #define FRAME_PARALLEL_LVL 0
55*c83a76b0SSuyog Pawar #define NUM_SG_INTERLEAVED (1 + FRAME_PARALLEL_LVL)
56*c83a76b0SSuyog Pawar 
57*c83a76b0SSuyog Pawar #define MAX_NUM_ENC_LOOP_PARALLEL 1
58*c83a76b0SSuyog Pawar #define MAX_NUM_ME_PARALLEL 1
59*c83a76b0SSuyog Pawar #define DIST_MODE_3_NON_REF_B 0  // disabled for normal cases
60*c83a76b0SSuyog Pawar 
61*c83a76b0SSuyog Pawar #define DENOM_DEFAULT 7
62*c83a76b0SSuyog Pawar #define WGHT_DEFAULT (1 << DENOM_DEFAULT)
63*c83a76b0SSuyog Pawar 
64*c83a76b0SSuyog Pawar #define MAX_NON_REF_B_PICS_IN_QUEUE_SGI MAX_PICS_FOR_SGI  //ELP_RC
65*c83a76b0SSuyog Pawar 
66*c83a76b0SSuyog Pawar /*minimum stagger in non sequential operation*/
67*c83a76b0SSuyog Pawar #define MIN_L1_L0_STAGGER_NON_SEQ 1
68*c83a76b0SSuyog Pawar 
69*c83a76b0SSuyog Pawar /* Enable or disable Psedo presets*/
70*c83a76b0SSuyog Pawar #undef PSEUDO_PRESETS
71*c83a76b0SSuyog Pawar 
72*c83a76b0SSuyog Pawar /**
73*c83a76b0SSuyog Pawar *******************************************************************************
74*c83a76b0SSuyog Pawar @brief Ivalid POC value since negative POCs are also valid as per syntax
75*c83a76b0SSuyog Pawar *******************************************************************************
76*c83a76b0SSuyog Pawar  */
77*c83a76b0SSuyog Pawar #define INVALID_POC -16384
78*c83a76b0SSuyog Pawar /*****************************************************************************/
79*c83a76b0SSuyog Pawar /* Function Macros                                                           */
80*c83a76b0SSuyog Pawar /*****************************************************************************/
81*c83a76b0SSuyog Pawar 
82*c83a76b0SSuyog Pawar /*****************************************************************************/
83*c83a76b0SSuyog Pawar /* Typedefs                                                                  */
84*c83a76b0SSuyog Pawar /*****************************************************************************/
85*c83a76b0SSuyog Pawar 
86*c83a76b0SSuyog Pawar /*****************************************************************************/
87*c83a76b0SSuyog Pawar /* Enums                                                                     */
88*c83a76b0SSuyog Pawar /*****************************************************************************/
89*c83a76b0SSuyog Pawar /* Scenetype enums */
90*c83a76b0SSuyog Pawar typedef enum SCENE_TYPE_E
91*c83a76b0SSuyog Pawar {
92*c83a76b0SSuyog Pawar     SCENE_TYPE_NORMAL = 0,
93*c83a76b0SSuyog Pawar     SCENE_TYPE_SCENE_CUT,
94*c83a76b0SSuyog Pawar     SCENE_TYPE_FLASH,
95*c83a76b0SSuyog Pawar     SCENE_TYPE_FADE_IN,
96*c83a76b0SSuyog Pawar     SCENE_TYPE_FADE_OUT,
97*c83a76b0SSuyog Pawar     SCENE_TYPE_DISSOLVE,
98*c83a76b0SSuyog Pawar     SCENE_TYPE_PAUSE_TO_RESUME,
99*c83a76b0SSuyog Pawar     MAX_NUM_SCENE_TYPES
100*c83a76b0SSuyog Pawar } SCENE_TYPE_E;
101*c83a76b0SSuyog Pawar /*****************************************************************************/
102*c83a76b0SSuyog Pawar /* Structure                                                                 */
103*c83a76b0SSuyog Pawar /*****************************************************************************/
104*c83a76b0SSuyog Pawar 
105*c83a76b0SSuyog Pawar /**
106*c83a76b0SSuyog Pawar ******************************************************************************
107*c83a76b0SSuyog Pawar  *  @brief   Logo structure
108*c83a76b0SSuyog Pawar ******************************************************************************
109*c83a76b0SSuyog Pawar  */
110*c83a76b0SSuyog Pawar 
111*c83a76b0SSuyog Pawar typedef struct
112*c83a76b0SSuyog Pawar {
113*c83a76b0SSuyog Pawar     /** i4_is_logo_on  : Specifies if logo is on or off */
114*c83a76b0SSuyog Pawar     WORD32 i4_is_logo_on;
115*c83a76b0SSuyog Pawar 
116*c83a76b0SSuyog Pawar     /** logo_width  : Width of the logo in pixels */
117*c83a76b0SSuyog Pawar     WORD32 logo_width;
118*c83a76b0SSuyog Pawar 
119*c83a76b0SSuyog Pawar     /** logo_height  : Width of the logo in pixels */
120*c83a76b0SSuyog Pawar     WORD32 logo_height;
121*c83a76b0SSuyog Pawar 
122*c83a76b0SSuyog Pawar     /** logo_x_offset  : horizontal offset for logo from the right end of pic */
123*c83a76b0SSuyog Pawar     WORD32 logo_x_offset;
124*c83a76b0SSuyog Pawar 
125*c83a76b0SSuyog Pawar     /** logo_y_offset  : vertical offset for logo from the bottom end of pic */
126*c83a76b0SSuyog Pawar     WORD32 logo_y_offset;
127*c83a76b0SSuyog Pawar 
128*c83a76b0SSuyog Pawar } ihevce_logo_attrs_t;
129*c83a76b0SSuyog Pawar 
130*c83a76b0SSuyog Pawar typedef struct
131*c83a76b0SSuyog Pawar {
132*c83a76b0SSuyog Pawar     /**
133*c83a76b0SSuyog Pawar     *  Input YUV buffers pointers and related parameters
134*c83a76b0SSuyog Pawar     */
135*c83a76b0SSuyog Pawar     ihevce_lap_params_t s_lap_params;
136*c83a76b0SSuyog Pawar 
137*c83a76b0SSuyog Pawar     /** Width of input luma */
138*c83a76b0SSuyog Pawar     WORD32 i4_width;
139*c83a76b0SSuyog Pawar 
140*c83a76b0SSuyog Pawar     /** Height of input luma */
141*c83a76b0SSuyog Pawar     WORD32 i4_height;
142*c83a76b0SSuyog Pawar 
143*c83a76b0SSuyog Pawar     /** Max closed gop period  : Max spacing between IDR frames  */
144*c83a76b0SSuyog Pawar     WORD32 i4_max_closed_gop_period;
145*c83a76b0SSuyog Pawar 
146*c83a76b0SSuyog Pawar     /** Min closed gop period  : Min spacing between IDR frames  */
147*c83a76b0SSuyog Pawar     WORD32 i4_min_closed_gop_period;
148*c83a76b0SSuyog Pawar 
149*c83a76b0SSuyog Pawar     /** Max CRA open gop period: Max spacing between CRA frames  */
150*c83a76b0SSuyog Pawar     WORD32 i4_max_cra_open_gop_period;
151*c83a76b0SSuyog Pawar 
152*c83a76b0SSuyog Pawar     /** Max i open gop period: Max spacing between I frames  */
153*c83a76b0SSuyog Pawar     WORD32 i4_max_i_open_gop_period;
154*c83a76b0SSuyog Pawar 
155*c83a76b0SSuyog Pawar     /** limits Max gopsize = 2 ^ i4_max_temporal_layers - 1 */
156*c83a76b0SSuyog Pawar     WORD32 i4_max_temporal_layers;
157*c83a76b0SSuyog Pawar 
158*c83a76b0SSuyog Pawar     /** Minimum temporal ID from which B-pictures are coded; Tid=1 (default) 0 (no B) */
159*c83a76b0SSuyog Pawar     WORD32 i4_min_temporal_id_for_b;
160*c83a76b0SSuyog Pawar 
161*c83a76b0SSuyog Pawar     /** Maximum number of reference frames */
162*c83a76b0SSuyog Pawar     WORD32 i4_max_reference_frames;
163*c83a76b0SSuyog Pawar 
164*c83a76b0SSuyog Pawar     /** Interlace field */
165*c83a76b0SSuyog Pawar     WORD32 i4_src_interlace_field;
166*c83a76b0SSuyog Pawar 
167*c83a76b0SSuyog Pawar     /* Frame rate*/
168*c83a76b0SSuyog Pawar     WORD32 i4_frame_rate;
169*c83a76b0SSuyog Pawar 
170*c83a76b0SSuyog Pawar     /** Enable Logo flag */
171*c83a76b0SSuyog Pawar     WORD32 i4_enable_logo;
172*c83a76b0SSuyog Pawar 
173*c83a76b0SSuyog Pawar     /** Bit Depth */
174*c83a76b0SSuyog Pawar     WORD32 i4_internal_bit_depth;
175*c83a76b0SSuyog Pawar 
176*c83a76b0SSuyog Pawar     WORD32 i4_input_bit_depth;
177*c83a76b0SSuyog Pawar 
178*c83a76b0SSuyog Pawar     /* 0 - 400; 1 - 420; 2 - 422; 3 - 444 */
179*c83a76b0SSuyog Pawar     UWORD8 u1_chroma_array_type;
180*c83a76b0SSuyog Pawar 
181*c83a76b0SSuyog Pawar     WORD32 ai4_quality_preset[IHEVCE_MAX_NUM_RESOLUTIONS];
182*c83a76b0SSuyog Pawar 
183*c83a76b0SSuyog Pawar     WORD32 i4_rc_pass_num;
184*c83a76b0SSuyog Pawar 
185*c83a76b0SSuyog Pawar     /* If enable, enables blu ray compatibility of op*/
186*c83a76b0SSuyog Pawar     WORD32 i4_blu_ray_spec;
187*c83a76b0SSuyog Pawar 
188*c83a76b0SSuyog Pawar     IV_ARCH_T e_arch_type;
189*c83a76b0SSuyog Pawar 
190*c83a76b0SSuyog Pawar     UWORD8 u1_is_popcnt_available;
191*c83a76b0SSuyog Pawar 
192*c83a76b0SSuyog Pawar     WORD32 i4_mres_single_out;
193*c83a76b0SSuyog Pawar 
194*c83a76b0SSuyog Pawar     WORD32 i4_luma_size_copy_src_logo;
195*c83a76b0SSuyog Pawar 
196*c83a76b0SSuyog Pawar } ihevce_lap_static_params_t;
197*c83a76b0SSuyog Pawar 
198*c83a76b0SSuyog Pawar /**
199*c83a76b0SSuyog Pawar   *  @biref luma and chroma weight and offset container structure
200*c83a76b0SSuyog Pawar   */
201*c83a76b0SSuyog Pawar typedef struct
202*c83a76b0SSuyog Pawar {
203*c83a76b0SSuyog Pawar     /**
204*c83a76b0SSuyog Pawar     *  flag to control the weighted pred for luma component of
205*c83a76b0SSuyog Pawar     *  this reference frame
206*c83a76b0SSuyog Pawar     *  Range [0 : 1]
207*c83a76b0SSuyog Pawar     */
208*c83a76b0SSuyog Pawar     UWORD8 u1_luma_weight_enable_flag;
209*c83a76b0SSuyog Pawar 
210*c83a76b0SSuyog Pawar     /**
211*c83a76b0SSuyog Pawar     *  flag to control the weighted pred for chroma component of
212*c83a76b0SSuyog Pawar     *  this reference frame
213*c83a76b0SSuyog Pawar     *  Range [0 : 1]
214*c83a76b0SSuyog Pawar     */
215*c83a76b0SSuyog Pawar     UWORD8 u1_chroma_weight_enable_flag;
216*c83a76b0SSuyog Pawar 
217*c83a76b0SSuyog Pawar     /**
218*c83a76b0SSuyog Pawar     *  luma weight factor for a reference frame,
219*c83a76b0SSuyog Pawar     *  Range [0 : 128]
220*c83a76b0SSuyog Pawar     *  Default = 1 << as_wght_offst
221*c83a76b0SSuyog Pawar     */
222*c83a76b0SSuyog Pawar     WORD16 i2_luma_weight;
223*c83a76b0SSuyog Pawar 
224*c83a76b0SSuyog Pawar     /**
225*c83a76b0SSuyog Pawar     *  luma offset to be added after weighing for reference frame
226*c83a76b0SSuyog Pawar     *  Range [-128 : 127]
227*c83a76b0SSuyog Pawar     *  Default = 0
228*c83a76b0SSuyog Pawar     */
229*c83a76b0SSuyog Pawar     WORD16 i2_luma_offset;
230*c83a76b0SSuyog Pawar 
231*c83a76b0SSuyog Pawar     /**
232*c83a76b0SSuyog Pawar     *  chroma weight factor for a reference frame, Default = 1
233*c83a76b0SSuyog Pawar     */
234*c83a76b0SSuyog Pawar     WORD16 i2_cb_weight;
235*c83a76b0SSuyog Pawar 
236*c83a76b0SSuyog Pawar     /**
237*c83a76b0SSuyog Pawar     *  chroma offset to be added after weighing for reference frame, Default = 0
238*c83a76b0SSuyog Pawar     */
239*c83a76b0SSuyog Pawar     WORD16 i2_cb_offset;
240*c83a76b0SSuyog Pawar 
241*c83a76b0SSuyog Pawar     /**
242*c83a76b0SSuyog Pawar     *  chroma weight factor for a reference frame, Default = 1
243*c83a76b0SSuyog Pawar     */
244*c83a76b0SSuyog Pawar     WORD16 i2_cr_weight;
245*c83a76b0SSuyog Pawar 
246*c83a76b0SSuyog Pawar     /**
247*c83a76b0SSuyog Pawar     *  chroma offset to be added after weighing for reference frame, Default = 0
248*c83a76b0SSuyog Pawar     */
249*c83a76b0SSuyog Pawar     WORD16 i2_cr_offset;
250*c83a76b0SSuyog Pawar 
251*c83a76b0SSuyog Pawar } ihevce_wght_offst_t;
252*c83a76b0SSuyog Pawar 
253*c83a76b0SSuyog Pawar /**
254*c83a76b0SSuyog Pawar   *  @biref defines the attributes of a reference picture
255*c83a76b0SSuyog Pawar   */
256*c83a76b0SSuyog Pawar typedef struct
257*c83a76b0SSuyog Pawar {
258*c83a76b0SSuyog Pawar     /**
259*c83a76b0SSuyog Pawar     *  weighted prediction attribute for each duplicate entry of a ref pic
260*c83a76b0SSuyog Pawar     *  Note : Duplicate entries help in using same reference with different
261*c83a76b0SSuyog Pawar     *         weights and offsets. Example being partial flashes in scence
262*c83a76b0SSuyog Pawar     */
263*c83a76b0SSuyog Pawar     ihevce_wght_offst_t as_wght_off[MAX_DUPLICATE_ENTRIES_IN_REF_LIST];
264*c83a76b0SSuyog Pawar 
265*c83a76b0SSuyog Pawar     /**
266*c83a76b0SSuyog Pawar     * delta POC of reference frame w.r.t current Picture POC,
267*c83a76b0SSuyog Pawar     */
268*c83a76b0SSuyog Pawar     WORD32 i4_ref_pic_delta_poc;
269*c83a76b0SSuyog Pawar 
270*c83a76b0SSuyog Pawar     /**
271*c83a76b0SSuyog Pawar     * flag indicating if this reference frame is to be used as
272*c83a76b0SSuyog Pawar     * reference by current picture
273*c83a76b0SSuyog Pawar     * shall be 0 or 1
274*c83a76b0SSuyog Pawar     */
275*c83a76b0SSuyog Pawar     WORD32 i4_used_by_cur_pic_flag;
276*c83a76b0SSuyog Pawar 
277*c83a76b0SSuyog Pawar     /**
278*c83a76b0SSuyog Pawar     * Indicates the number of duplicate entries of a reference picture
279*c83a76b0SSuyog Pawar     * in the reference picture list. A reference picture may see multiple
280*c83a76b0SSuyog Pawar     * entries in the reference picture list, since that allows the LAP to
281*c83a76b0SSuyog Pawar     * assign multiple weighting related parameters to a single reference picture.
282*c83a76b0SSuyog Pawar     * Range [1, MAX_DUPLICATE_ENTRIES_IN_REF_LIST]
283*c83a76b0SSuyog Pawar     *
284*c83a76b0SSuyog Pawar     * Used only when weighted prediction is enabled
285*c83a76b0SSuyog Pawar     *
286*c83a76b0SSuyog Pawar     */
287*c83a76b0SSuyog Pawar     WORD32 i4_num_duplicate_entries_in_ref_list;
288*c83a76b0SSuyog Pawar 
289*c83a76b0SSuyog Pawar } ihevce_ref_pic_attrs_t;
290*c83a76b0SSuyog Pawar 
291*c83a76b0SSuyog Pawar /* @brief IV_YUV_BUF_T: This structure defines attributes
292*c83a76b0SSuyog Pawar  *        for the input yuv used in enc and lap buffer
293*c83a76b0SSuyog Pawar  */
294*c83a76b0SSuyog Pawar typedef struct
295*c83a76b0SSuyog Pawar {
296*c83a76b0SSuyog Pawar     /** i4_size of the structure */
297*c83a76b0SSuyog Pawar     WORD32 i4_size;
298*c83a76b0SSuyog Pawar 
299*c83a76b0SSuyog Pawar     /** Pointer to Luma (Y) Buffer  */
300*c83a76b0SSuyog Pawar     void *pv_y_buf;
301*c83a76b0SSuyog Pawar 
302*c83a76b0SSuyog Pawar     /** Pointer to Chroma (Cb) Buffer  */
303*c83a76b0SSuyog Pawar     void *pv_u_buf;
304*c83a76b0SSuyog Pawar 
305*c83a76b0SSuyog Pawar     /** Pointer to Chroma (Cr) Buffer */
306*c83a76b0SSuyog Pawar     void *pv_v_buf;
307*c83a76b0SSuyog Pawar 
308*c83a76b0SSuyog Pawar     /** Width of the Luma (Y) Buffer in pixels */
309*c83a76b0SSuyog Pawar     WORD32 i4_y_wd;
310*c83a76b0SSuyog Pawar 
311*c83a76b0SSuyog Pawar     /** Height of the Luma (Y) Buffer in pixels */
312*c83a76b0SSuyog Pawar     WORD32 i4_y_ht;
313*c83a76b0SSuyog Pawar 
314*c83a76b0SSuyog Pawar     /** Stride/Pitch of the Luma (Y) Buffer */
315*c83a76b0SSuyog Pawar     WORD32 i4_y_strd;
316*c83a76b0SSuyog Pawar 
317*c83a76b0SSuyog Pawar     /** Luma Process start offset : x dir. */
318*c83a76b0SSuyog Pawar     WORD32 i4_start_offset_x;
319*c83a76b0SSuyog Pawar 
320*c83a76b0SSuyog Pawar     /** Luma Process start offset : y dir. */
321*c83a76b0SSuyog Pawar     WORD32 i4_start_offset_y;
322*c83a76b0SSuyog Pawar 
323*c83a76b0SSuyog Pawar     /** Width of the Chroma (Cb / Cr) Buffer in pixels */
324*c83a76b0SSuyog Pawar     WORD32 i4_uv_wd;
325*c83a76b0SSuyog Pawar 
326*c83a76b0SSuyog Pawar     /** Height of the Chroma (Cb / Cr) Buffer in pixels */
327*c83a76b0SSuyog Pawar     WORD32 i4_uv_ht;
328*c83a76b0SSuyog Pawar 
329*c83a76b0SSuyog Pawar     /** Stride/Pitch of the Chroma (Cb / Cr) Buffer */
330*c83a76b0SSuyog Pawar     WORD32 i4_uv_strd;
331*c83a76b0SSuyog Pawar 
332*c83a76b0SSuyog Pawar } iv_enc_yuv_buf_t;
333*c83a76b0SSuyog Pawar 
334*c83a76b0SSuyog Pawar typedef struct
335*c83a76b0SSuyog Pawar {
336*c83a76b0SSuyog Pawar     /** i4_size of the structure */
337*c83a76b0SSuyog Pawar     WORD32 i4_size;
338*c83a76b0SSuyog Pawar 
339*c83a76b0SSuyog Pawar     /** Pointer to Luma (Y) Buffer  */
340*c83a76b0SSuyog Pawar     void *pv_y_buf;
341*c83a76b0SSuyog Pawar 
342*c83a76b0SSuyog Pawar     /** Pointer to Chroma (Cb) Buffer  */
343*c83a76b0SSuyog Pawar     void *pv_u_buf;
344*c83a76b0SSuyog Pawar 
345*c83a76b0SSuyog Pawar     /** Pointer to Chroma (Cr) Buffer */
346*c83a76b0SSuyog Pawar     void *pv_v_buf;
347*c83a76b0SSuyog Pawar 
348*c83a76b0SSuyog Pawar } iv_enc_yuv_buf_src_t;
349*c83a76b0SSuyog Pawar 
350*c83a76b0SSuyog Pawar typedef struct
351*c83a76b0SSuyog Pawar {
352*c83a76b0SSuyog Pawar     /*********** common params for both lap_out and rc_lap_out ****************/
353*c83a76b0SSuyog Pawar 
354*c83a76b0SSuyog Pawar     /* hevc pic types : IDR/CDR/I/P/B etc */
355*c83a76b0SSuyog Pawar     WORD32 i4_pic_type;
356*c83a76b0SSuyog Pawar     /* picture order count */
357*c83a76b0SSuyog Pawar     WORD32 i4_poc;
358*c83a76b0SSuyog Pawar     /* temporal layer of the current picture */
359*c83a76b0SSuyog Pawar     WORD32 i4_temporal_lyr_id;
360*c83a76b0SSuyog Pawar     /**
361*c83a76b0SSuyog Pawar      * indicates if the current frame is reference pic
362*c83a76b0SSuyog Pawar      * 0 : not ref pic
363*c83a76b0SSuyog Pawar      * 1 : ref pic at lower layers (w.r.t to highest layer id)
364*c83a76b0SSuyog Pawar      * 2 : ref pic at highest temporal layer id layer
365*c83a76b0SSuyog Pawar      */
366*c83a76b0SSuyog Pawar     WORD32 i4_is_ref_pic;
367*c83a76b0SSuyog Pawar     /**
368*c83a76b0SSuyog Pawar       * Scene type such as Scene Cut, fade in/ out, dissolve, flash etc
369*c83a76b0SSuyog Pawar       * enum used is IHEVCE_SCENE_TYPE
370*c83a76b0SSuyog Pawar     */
371*c83a76b0SSuyog Pawar     WORD32 i4_scene_type;
372*c83a76b0SSuyog Pawar     /**
373*c83a76b0SSuyog Pawar       * Scene number helps to identify the reference frames
374*c83a76b0SSuyog Pawar       *  for the current frame of same scene and
375*c83a76b0SSuyog Pawar       * also it can be used to reset the RC model
376*c83a76b0SSuyog Pawar       *  for each layer whenever scene cut happens
377*c83a76b0SSuyog Pawar     */
378*c83a76b0SSuyog Pawar     UWORD32 u4_scene_num;
379*c83a76b0SSuyog Pawar     /*display order num*/
380*c83a76b0SSuyog Pawar     WORD32 i4_display_num;
381*c83a76b0SSuyog Pawar 
382*c83a76b0SSuyog Pawar     WORD32 i4_quality_preset;
383*c83a76b0SSuyog Pawar 
384*c83a76b0SSuyog Pawar     /*********** parameters specific to lap_out structure **************/
385*c83a76b0SSuyog Pawar     /* cra pic type flag */
386*c83a76b0SSuyog Pawar     WORD32 i4_is_cra_pic;
387*c83a76b0SSuyog Pawar     /** IDR GOP number */
388*c83a76b0SSuyog Pawar     WORD32 i4_idr_gop_num;
389*c83a76b0SSuyog Pawar     /** weighted prediction enable flag     */
390*c83a76b0SSuyog Pawar     WORD8 i1_weighted_pred_flag;
391*c83a76b0SSuyog Pawar     /** weighted bipred enable flag         */
392*c83a76b0SSuyog Pawar     WORD8 i1_weighted_bipred_flag;
393*c83a76b0SSuyog Pawar     /* number of references for current pic */
394*c83a76b0SSuyog Pawar     WORD32 i4_num_ref_pics;
395*c83a76b0SSuyog Pawar     /**
396*c83a76b0SSuyog Pawar      * common denominator used for luma weights across all ref pics
397*c83a76b0SSuyog Pawar      * Default = 0, Shall be in the range [0:7]
398*c83a76b0SSuyog Pawar     */
399*c83a76b0SSuyog Pawar     WORD32 i4_log2_luma_wght_denom;
400*c83a76b0SSuyog Pawar     /**
401*c83a76b0SSuyog Pawar      * common denominator used for chroma weights across all ref pics
402*c83a76b0SSuyog Pawar      * Default = 0, Shall be in the range [0:7]
403*c83a76b0SSuyog Pawar     */
404*c83a76b0SSuyog Pawar     WORD32 i4_log2_chroma_wght_denom;
405*c83a76b0SSuyog Pawar     /* ref pics to str current Picture POC */
406*c83a76b0SSuyog Pawar     ihevce_ref_pic_attrs_t as_ref_pics[MAX_REF_PICS];
407*c83a76b0SSuyog Pawar     /* Structure for the ITTIAM logo */
408*c83a76b0SSuyog Pawar     ihevce_logo_attrs_t s_logo_ctxt;
409*c83a76b0SSuyog Pawar     /* first field flag */
410*c83a76b0SSuyog Pawar     WORD32 i4_first_field;
411*c83a76b0SSuyog Pawar     /* associated IRAP poc */
412*c83a76b0SSuyog Pawar     WORD32 i4_assoc_IRAP_poc;
413*c83a76b0SSuyog Pawar     WORD32 i4_is_prev_pic_in_Tid0_same_scene;
414*c83a76b0SSuyog Pawar 
415*c83a76b0SSuyog Pawar     WORD32 i4_is_I_in_any_field;
416*c83a76b0SSuyog Pawar     WORD32 i4_used;
417*c83a76b0SSuyog Pawar 
418*c83a76b0SSuyog Pawar     WORD32 i4_end_flag;
419*c83a76b0SSuyog Pawar     WORD32 i4_force_idr_flag;
420*c83a76b0SSuyog Pawar     WORD32 i4_out_flush_flag;
421*c83a76b0SSuyog Pawar     WORD32 i4_first_frm_new_res;
422*c83a76b0SSuyog Pawar 
423*c83a76b0SSuyog Pawar     /***** Spatial QP offset related *****/
424*c83a76b0SSuyog Pawar     float f_strength;
425*c83a76b0SSuyog Pawar 
426*c83a76b0SSuyog Pawar     long double ld_curr_frame_8x8_log_avg[2];
427*c83a76b0SSuyog Pawar     long double ld_curr_frame_16x16_log_avg[3];
428*c83a76b0SSuyog Pawar     long double ld_curr_frame_32x32_log_avg[3];
429*c83a76b0SSuyog Pawar 
430*c83a76b0SSuyog Pawar     LWORD64 i8_curr_frame_8x8_avg_act[2];
431*c83a76b0SSuyog Pawar     LWORD64 i8_curr_frame_16x16_avg_act[3];
432*c83a76b0SSuyog Pawar     LWORD64 i8_curr_frame_32x32_avg_act[3];
433*c83a76b0SSuyog Pawar 
434*c83a76b0SSuyog Pawar     WORD32 i4_i_pic_lamda_offset;
435*c83a76b0SSuyog Pawar 
436*c83a76b0SSuyog Pawar     double f_i_pic_lamda_modifier;
437*c83a76b0SSuyog Pawar 
438*c83a76b0SSuyog Pawar     WORD32 i4_curr_frm_qp;
439*c83a76b0SSuyog Pawar 
440*c83a76b0SSuyog Pawar     iv_enc_yuv_buf_t s_input_buf;
441*c83a76b0SSuyog Pawar 
442*c83a76b0SSuyog Pawar     /** Frame - level L0 satd accum*/
443*c83a76b0SSuyog Pawar     LWORD64 i8_frame_l0_acc_satd;
444*c83a76b0SSuyog Pawar 
445*c83a76b0SSuyog Pawar     /* Frame - level L1 Activity factor */
446*c83a76b0SSuyog Pawar     LWORD64 i8_frame_level_activity_fact;
447*c83a76b0SSuyog Pawar     /*bits esimated for frame calulated for sub pic rc bit control */
448*c83a76b0SSuyog Pawar     WORD32 ai4_frame_bits_estimated[IHEVCE_MAX_NUM_BITRATES];
449*c83a76b0SSuyog Pawar     float f_pred_factor;
450*c83a76b0SSuyog Pawar 
451*c83a76b0SSuyog Pawar } ihevce_lap_output_params_t;
452*c83a76b0SSuyog Pawar 
453*c83a76b0SSuyog Pawar /**
454*c83a76b0SSuyog Pawar ******************************************************************************
455*c83a76b0SSuyog Pawar  *  @brief   Encoder and LAP I/O structutre
456*c83a76b0SSuyog Pawar  *  s_input_buf : input buffer will be populated by applciation
457*c83a76b0SSuyog Pawar  *  when LAP gets this buffer only input will be populated
458*c83a76b0SSuyog Pawar  *  During the time of seeting the encode order for current buffer
459*c83a76b0SSuyog Pawar  *  LAP should populate the s_lap_out structure.
460*c83a76b0SSuyog Pawar ******************************************************************************
461*c83a76b0SSuyog Pawar  */
462*c83a76b0SSuyog Pawar typedef struct
463*c83a76b0SSuyog Pawar {
464*c83a76b0SSuyog Pawar     /**
465*c83a76b0SSuyog Pawar     *  Input YUV buffers pointers and related parameters
466*c83a76b0SSuyog Pawar     */
467*c83a76b0SSuyog Pawar     iv_input_data_ctrl_buffs_t s_input_buf;
468*c83a76b0SSuyog Pawar 
469*c83a76b0SSuyog Pawar     /**
470*c83a76b0SSuyog Pawar     * Following parameters are output of LAP
471*c83a76b0SSuyog Pawar     * for the current buffer to be encoded
472*c83a76b0SSuyog Pawar     */
473*c83a76b0SSuyog Pawar     ihevce_lap_output_params_t s_lap_out;
474*c83a76b0SSuyog Pawar     /**
475*c83a76b0SSuyog Pawar     * Following parameters are output of LAP
476*c83a76b0SSuyog Pawar     * for the current buffer to be encoded,
477*c83a76b0SSuyog Pawar     * which are RC specific parameters
478*c83a76b0SSuyog Pawar     */
479*c83a76b0SSuyog Pawar     rc_lap_out_params_t s_rc_lap_out;
480*c83a76b0SSuyog Pawar 
481*c83a76b0SSuyog Pawar     /**
482*c83a76b0SSuyog Pawar     * Following parameters are context of LAP QUEUE
483*c83a76b0SSuyog Pawar     */
484*c83a76b0SSuyog Pawar     frame_info_t s_frame_info;
485*c83a76b0SSuyog Pawar } ihevce_lap_enc_buf_t;
486*c83a76b0SSuyog Pawar 
487*c83a76b0SSuyog Pawar /*****************************************************************************/
488*c83a76b0SSuyog Pawar /* Extern Variable Declarations                                              */
489*c83a76b0SSuyog Pawar /*****************************************************************************/
490*c83a76b0SSuyog Pawar 
491*c83a76b0SSuyog Pawar /*****************************************************************************/
492*c83a76b0SSuyog Pawar /* Extern Function Declarations                                              */
493*c83a76b0SSuyog Pawar /*****************************************************************************/
494*c83a76b0SSuyog Pawar 
495*c83a76b0SSuyog Pawar #endif /* _IHEVCE_LAP_ENC_STRUCTS_H_ */
496