xref: /aosp_15_r20/external/libhevc/encoder/ihevce_rc_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 ******************************************************************************
23*c83a76b0SSuyog Pawar *
24*c83a76b0SSuyog Pawar * @file ihevce_rc_structs.h
25*c83a76b0SSuyog Pawar *
26*c83a76b0SSuyog Pawar * @brief
27*c83a76b0SSuyog Pawar *  This file contains rc interface structures and prototypes
28*c83a76b0SSuyog Pawar *
29*c83a76b0SSuyog Pawar * @author
30*c83a76b0SSuyog Pawar *  Ittiam
31*c83a76b0SSuyog Pawar *
32*c83a76b0SSuyog Pawar ******************************************************************************
33*c83a76b0SSuyog Pawar */
34*c83a76b0SSuyog Pawar 
35*c83a76b0SSuyog Pawar #ifndef _IHEVCE_RC_STRUCTS_H_
36*c83a76b0SSuyog Pawar #define _IHEVCE_RC_STRUCTS_H_
37*c83a76b0SSuyog Pawar 
38*c83a76b0SSuyog Pawar /*****************************************************************************/
39*c83a76b0SSuyog Pawar /* Constant Macros                                                           */
40*c83a76b0SSuyog Pawar /*****************************************************************************/
41*c83a76b0SSuyog Pawar 
42*c83a76b0SSuyog Pawar #define MAX_NUM_TEMPORAL_LAYERS 4
43*c83a76b0SSuyog Pawar #define HALF_MAX_SCENE_ARRAY_QP MAX_SCENE_NUM / 2
44*c83a76b0SSuyog Pawar 
45*c83a76b0SSuyog Pawar /*moderate value of fsim to be passed when LAP is not enabled*/
46*c83a76b0SSuyog Pawar #define MODERATE_FSIM_VALUE 110
47*c83a76b0SSuyog Pawar #define MODERATE_LAP2_COMPLEXITY_Q7 25
48*c83a76b0SSuyog Pawar 
49*c83a76b0SSuyog Pawar /*also present in RATE CONTROL HEADER FILE with same name*/
50*c83a76b0SSuyog Pawar #define MAX_LAP_COMPLEXITY_Q7 90
51*c83a76b0SSuyog Pawar 
52*c83a76b0SSuyog Pawar /*value of maximum variance in content used to generate offline model.*/
53*c83a76b0SSuyog Pawar #define MAX_LAP_VAR 1000
54*c83a76b0SSuyog Pawar #define AVG_LAP_VAR 400
55*c83a76b0SSuyog Pawar 
56*c83a76b0SSuyog Pawar /*buffer to store bit consumption between rdopt and entropy to calculate correction in entropy thread*/
57*c83a76b0SSuyog Pawar #define NUM_BUF_RDOPT_ENT_CORRECT (NUM_FRMPROC_ENTCOD_BUFS + 1)  //+(1<<FRAME_PARALLEL_LVL))
58*c83a76b0SSuyog Pawar 
59*c83a76b0SSuyog Pawar /*****************************************************************************/
60*c83a76b0SSuyog Pawar /* Enums                                                                     */
61*c83a76b0SSuyog Pawar /*****************************************************************************/
62*c83a76b0SSuyog Pawar /**
63*c83a76b0SSuyog Pawar ******************************************************************************
64*c83a76b0SSuyog Pawar  *  @brief      Enumeration for memory records requested by entropy module
65*c83a76b0SSuyog Pawar ******************************************************************************
66*c83a76b0SSuyog Pawar  */
67*c83a76b0SSuyog Pawar typedef enum
68*c83a76b0SSuyog Pawar {
69*c83a76b0SSuyog Pawar     RC_CTXT = 0,
70*c83a76b0SSuyog Pawar     RC_QSCALE_TO_QP,
71*c83a76b0SSuyog Pawar     RC_QP_TO_QSCALE,
72*c83a76b0SSuyog Pawar     RC_QP_TO_QSCALE_Q_FACTOR,
73*c83a76b0SSuyog Pawar     RC_MULTI_PASS_GOP_STAT,
74*c83a76b0SSuyog Pawar 
75*c83a76b0SSuyog Pawar     /* should always be the last entry */
76*c83a76b0SSuyog Pawar     NUM_RC_MEM_RECS
77*c83a76b0SSuyog Pawar 
78*c83a76b0SSuyog Pawar } IHEVCE_RC_MEM_TABS_T;
79*c83a76b0SSuyog Pawar 
80*c83a76b0SSuyog Pawar /*****************************************************************************/
81*c83a76b0SSuyog Pawar /* Structures                                                                */
82*c83a76b0SSuyog Pawar /*****************************************************************************/
83*c83a76b0SSuyog Pawar 
84*c83a76b0SSuyog Pawar /**
85*c83a76b0SSuyog Pawar ******************************************************************************
86*c83a76b0SSuyog Pawar  *  @brief  pre enc qp queue struct
87*c83a76b0SSuyog Pawar ******************************************************************************
88*c83a76b0SSuyog Pawar  */
89*c83a76b0SSuyog Pawar typedef struct
90*c83a76b0SSuyog Pawar {
91*c83a76b0SSuyog Pawar     WORD32 ai4_quant[NUM_RC_PIC_TYPE];
92*c83a76b0SSuyog Pawar     WORD32 i4_scd_qp;
93*c83a76b0SSuyog Pawar     WORD32 i4_is_qp_valid;
94*c83a76b0SSuyog Pawar } pre_enc_qp_queue;
95*c83a76b0SSuyog Pawar 
96*c83a76b0SSuyog Pawar typedef struct
97*c83a76b0SSuyog Pawar {
98*c83a76b0SSuyog Pawar     LWORD64 ai8_L1_prev_I_intra_raw_satd[MAX_PIC_TYPE];
99*c83a76b0SSuyog Pawar     LWORD64 ai8_L1_prev_pic_coarse_me_cost[MAX_PIC_TYPE];
100*c83a76b0SSuyog Pawar     LWORD64 ai8_L1_prev_pic_coarse_me_sad[MAX_PIC_TYPE];
101*c83a76b0SSuyog Pawar     UWORD32 au4_prev_scene_num[MAX_PIC_TYPE];
102*c83a76b0SSuyog Pawar } rc_L1_state_t;
103*c83a76b0SSuyog Pawar 
104*c83a76b0SSuyog Pawar /**
105*c83a76b0SSuyog Pawar ******************************************************************************
106*c83a76b0SSuyog Pawar  * vbv compliance testing struct
107*c83a76b0SSuyog Pawar ******************************************************************************
108*c83a76b0SSuyog Pawar */
109*c83a76b0SSuyog Pawar typedef struct vbv_compliance_t
110*c83a76b0SSuyog Pawar {
111*c83a76b0SSuyog Pawar     /** frame rate  */
112*c83a76b0SSuyog Pawar     float f_frame_rate;
113*c83a76b0SSuyog Pawar 
114*c83a76b0SSuyog Pawar     /** bit rate    */
115*c83a76b0SSuyog Pawar     float f_bit_rate;
116*c83a76b0SSuyog Pawar 
117*c83a76b0SSuyog Pawar     /** current buffer level */
118*c83a76b0SSuyog Pawar     float f_curr_buffer_level;
119*c83a76b0SSuyog Pawar 
120*c83a76b0SSuyog Pawar     /*current buffer level unclipped for current frame*/
121*c83a76b0SSuyog Pawar     float f_curr_buffer_level_unclip;
122*c83a76b0SSuyog Pawar 
123*c83a76b0SSuyog Pawar     /** total buffer size */
124*c83a76b0SSuyog Pawar     float f_buffer_size;
125*c83a76b0SSuyog Pawar 
126*c83a76b0SSuyog Pawar     /** drain rate */
127*c83a76b0SSuyog Pawar     float f_drain_rate;
128*c83a76b0SSuyog Pawar     /** previous cbp_removal_removal_delay minus 1**/
129*c83a76b0SSuyog Pawar     UWORD32 u4_prev_cpb_removal_delay_minus1;
130*c83a76b0SSuyog Pawar 
131*c83a76b0SSuyog Pawar } vbv_compliance_t;
132*c83a76b0SSuyog Pawar 
133*c83a76b0SSuyog Pawar /* structure defined to maintain the qp's of Non reference b pictures based on reference */
134*c83a76b0SSuyog Pawar /* b pictures of next layer  to handle in steadystate,SCD and Non_I_SCD's. The offset is */
135*c83a76b0SSuyog Pawar /* based on the temporeal complexities of the sub GOP                                    */
136*c83a76b0SSuyog Pawar typedef struct
137*c83a76b0SSuyog Pawar {
138*c83a76b0SSuyog Pawar     WORD32 i4_enc_order_num_rc;
139*c83a76b0SSuyog Pawar 
140*c83a76b0SSuyog Pawar     WORD32 i4_non_ref_B_pic_qp;
141*c83a76b0SSuyog Pawar 
142*c83a76b0SSuyog Pawar     UWORD32 u4_scene_num_rc;
143*c83a76b0SSuyog Pawar 
144*c83a76b0SSuyog Pawar } non_ref_b_qp_store_t;
145*c83a76b0SSuyog Pawar /* structure to get high level stat from rc to adjust clip QP in case
146*c83a76b0SSuyog Pawar if it causes encoder buffer  overflow*/
147*c83a76b0SSuyog Pawar typedef struct
148*c83a76b0SSuyog Pawar {
149*c83a76b0SSuyog Pawar     /*online model valid flag*/
150*c83a76b0SSuyog Pawar     WORD32 i4_is_model_valid;
151*c83a76b0SSuyog Pawar 
152*c83a76b0SSuyog Pawar     /*model given QP if model is valid either offline or online
153*c83a76b0SSuyog Pawar     else set it to INVALID_QP*/
154*c83a76b0SSuyog Pawar     WORD32 i4_modelQP;
155*c83a76b0SSuyog Pawar 
156*c83a76b0SSuyog Pawar     /*final RC QP,must be always valid*/
157*c83a76b0SSuyog Pawar     WORD32 i4_finalQP;
158*c83a76b0SSuyog Pawar 
159*c83a76b0SSuyog Pawar     /* QP to reach maxEbf if model is valid*/
160*c83a76b0SSuyog Pawar     WORD32 i4_maxEbfQP;
161*c83a76b0SSuyog Pawar 
162*c83a76b0SSuyog Pawar     /* bits for final QP if model is valid*/
163*c83a76b0SSuyog Pawar     LWORD64 i8_bits_from_finalQP;
164*c83a76b0SSuyog Pawar 
165*c83a76b0SSuyog Pawar     /*offline model flag for I scd, non i scd, I only scd*/
166*c83a76b0SSuyog Pawar     WORD32 i4_is_offline_model_used;
167*c83a76b0SSuyog Pawar 
168*c83a76b0SSuyog Pawar } rc_high_level_stat_t;
169*c83a76b0SSuyog Pawar 
170*c83a76b0SSuyog Pawar typedef struct
171*c83a76b0SSuyog Pawar {
172*c83a76b0SSuyog Pawar     /* START of static parameters*/
173*c83a76b0SSuyog Pawar     rate_control_handle rc_hdl;
174*c83a76b0SSuyog Pawar     rc_type_e e_rate_control_type;
175*c83a76b0SSuyog Pawar     UWORD8 u1_is_mb_level_rc_on;
176*c83a76b0SSuyog Pawar     /* bit rate to achieved across the entire file size */
177*c83a76b0SSuyog Pawar     UWORD32 u4_avg_bit_rate;
178*c83a76b0SSuyog Pawar     /* max possible drain rate */
179*c83a76b0SSuyog Pawar     UWORD32 au4_peak_bit_rate[MAX_PIC_TYPE];
180*c83a76b0SSuyog Pawar     UWORD32 u4_min_bit_rate;
181*c83a76b0SSuyog Pawar     /* frames per 1000 seconds */
182*c83a76b0SSuyog Pawar     UWORD32 u4_max_frame_rate;
183*c83a76b0SSuyog Pawar     /* Buffer delay for CBR */
184*c83a76b0SSuyog Pawar     UWORD32 u4_max_delay;
185*c83a76b0SSuyog Pawar     /* Intraframe interval equal to GOP size */
186*c83a76b0SSuyog Pawar     UWORD32 u4_intra_frame_interval;
187*c83a76b0SSuyog Pawar     /* IDR period which indicates occurance of open GOP */
188*c83a76b0SSuyog Pawar     UWORD32 u4_idr_period;
189*c83a76b0SSuyog Pawar     /* Initial Qp array for I and P frames */
190*c83a76b0SSuyog Pawar     WORD32 ai4_init_qp[MAX_PIC_TYPE];
191*c83a76b0SSuyog Pawar     //0x3fffffff; /* Max VBV buffer size */
192*c83a76b0SSuyog Pawar     UWORD32 u4_max_vbv_buff_size;
193*c83a76b0SSuyog Pawar     /* MAx interval between I and P frame */
194*c83a76b0SSuyog Pawar     WORD32 i4_max_inter_frm_int;
195*c83a76b0SSuyog Pawar     /* Whether GOP is open or closed */
196*c83a76b0SSuyog Pawar     WORD32 i4_is_gop_closed;
197*c83a76b0SSuyog Pawar     WORD32 ai4_min_max_qp[MAX_PIC_TYPE * 2];
198*c83a76b0SSuyog Pawar     /* Whether to use estimated SAD or Previous I frame SAD */
199*c83a76b0SSuyog Pawar     WORD32 i4_use_est_intra_sad;
200*c83a76b0SSuyog Pawar     UWORD32 u4_src_ticks;
201*c83a76b0SSuyog Pawar     UWORD32 u4_tgt_ticks;
202*c83a76b0SSuyog Pawar 
203*c83a76b0SSuyog Pawar     WORD32 i4_auto_generate_init_qp;
204*c83a76b0SSuyog Pawar 
205*c83a76b0SSuyog Pawar     WORD32 i4_frame_width;
206*c83a76b0SSuyog Pawar     WORD32 i4_frame_height;
207*c83a76b0SSuyog Pawar 
208*c83a76b0SSuyog Pawar     WORD32 i4_min_frame_qp;
209*c83a76b0SSuyog Pawar     WORD32 i4_max_frame_qp;
210*c83a76b0SSuyog Pawar 
211*c83a76b0SSuyog Pawar     WORD32 i4_init_vbv_fullness;
212*c83a76b0SSuyog Pawar     /* Num frames in lap window*/
213*c83a76b0SSuyog Pawar     WORD32 i4_num_frame_in_lap_window;
214*c83a76b0SSuyog Pawar     /** Max temporal layer the configured at init time*/
215*c83a76b0SSuyog Pawar     WORD32 i4_max_temporal_lyr;
216*c83a76b0SSuyog Pawar     /*Number of active picture type. Depends on max temporal reference*/
217*c83a76b0SSuyog Pawar     WORD32 i4_num_active_pic_type;
218*c83a76b0SSuyog Pawar     /* User defined constant qp or init qp to be used during scene cut*/
219*c83a76b0SSuyog Pawar     WORD32 i4_init_frame_qp_user;
220*c83a76b0SSuyog Pawar     /* To remember whether the pic type is field:1 or not:0*/
221*c83a76b0SSuyog Pawar     WORD32 i4_field_pic;
222*c83a76b0SSuyog Pawar     /*To convey whether top field is encoded first:1 or bottom field :0*/
223*c83a76b0SSuyog Pawar     WORD32 i4_top_field_first;
224*c83a76b0SSuyog Pawar     /** Quality preset to choose offline model coeff*/
225*c83a76b0SSuyog Pawar     WORD32 i4_quality_preset;
226*c83a76b0SSuyog Pawar     /*populate init pre enc qp based on bpp for all pictype*/
227*c83a76b0SSuyog Pawar     WORD32 ai4_init_pre_enc_qp[MAX_PIC_TYPE];
228*c83a76b0SSuyog Pawar     WORD32 i4_initial_decoder_delay_frames;
229*c83a76b0SSuyog Pawar 
230*c83a76b0SSuyog Pawar     float f_vbr_max_peak_sustain_dur;
231*c83a76b0SSuyog Pawar     LWORD64 i8_num_frms_to_encode;
232*c83a76b0SSuyog Pawar 
233*c83a76b0SSuyog Pawar     WORD32 i4_min_scd_hevc_qp;
234*c83a76b0SSuyog Pawar 
235*c83a76b0SSuyog Pawar     UWORD8 u1_bit_depth;
236*c83a76b0SSuyog Pawar 
237*c83a76b0SSuyog Pawar     rc_quant_t *ps_rc_quant_ctxt;
238*c83a76b0SSuyog Pawar 
239*c83a76b0SSuyog Pawar     WORD32 i4_rc_pass;
240*c83a76b0SSuyog Pawar     /*Memory allocated for storing GOP level stat*/
241*c83a76b0SSuyog Pawar     void *pv_gop_stat;
242*c83a76b0SSuyog Pawar 
243*c83a76b0SSuyog Pawar     LWORD64 i8_num_gop_mem_alloc;
244*c83a76b0SSuyog Pawar 
245*c83a76b0SSuyog Pawar     WORD32 i4_is_infinite_gop;
246*c83a76b0SSuyog Pawar 
247*c83a76b0SSuyog Pawar     WORD32 ai4_offsets[5];
248*c83a76b0SSuyog Pawar     /*End of static parameters */
249*c83a76b0SSuyog Pawar 
250*c83a76b0SSuyog Pawar     /* Start of parameters updated and accessed during pre-enc*/
251*c83a76b0SSuyog Pawar     rc_L1_state_t s_l1_state_metric;
252*c83a76b0SSuyog Pawar     /*estimate of pre-enc header bits*/
253*c83a76b0SSuyog Pawar     LWORD64 i8_est_I_pic_header_bits;
254*c83a76b0SSuyog Pawar     /** previous frame estimated L0 SATD/act predicted using pre-enc intra SAD*/
255*c83a76b0SSuyog Pawar     LWORD64 ai8_prev_frame_est_L0_satd[MAX_PIC_TYPE];
256*c83a76b0SSuyog Pawar 
257*c83a76b0SSuyog Pawar     LWORD64 ai8_prev_frame_pre_intra_sad[MAX_PIC_TYPE];
258*c83a76b0SSuyog Pawar 
259*c83a76b0SSuyog Pawar     LWORD64 ai8_prev_frame_hme_sad[MAX_PIC_TYPE];
260*c83a76b0SSuyog Pawar 
261*c83a76b0SSuyog Pawar     /** Is previous frame intra sad available. set = 1 when atleast one frame of each picture type has been encoded*/
262*c83a76b0SSuyog Pawar     WORD32 i4_is_est_L0_intra_sad_available;
263*c83a76b0SSuyog Pawar 
264*c83a76b0SSuyog Pawar     FILE *pf_stat_file;
265*c83a76b0SSuyog Pawar 
266*c83a76b0SSuyog Pawar     /* END of parameters updated and accessed during pre-enc */
267*c83a76b0SSuyog Pawar 
268*c83a76b0SSuyog Pawar     /* START of parameters updated during update call and accessed in other threads (pre enc/entropy)*/
269*c83a76b0SSuyog Pawar 
270*c83a76b0SSuyog Pawar     /*variables related to creation of pre enc qp queue*/
271*c83a76b0SSuyog Pawar     pre_enc_qp_queue as_pre_enc_qp_queue[MAX_PRE_ENC_RC_DELAY];
272*c83a76b0SSuyog Pawar     /*Remember RDOPT opt concumption, and corresponding time stamp*/
273*c83a76b0SSuyog Pawar     WORD32 ai4_rdopt_bit_consumption_estimate[NUM_BUF_RDOPT_ENT_CORRECT];
274*c83a76b0SSuyog Pawar 
275*c83a76b0SSuyog Pawar     WORD32 ai4_rdopt_bit_consumption_buf_id[NUM_BUF_RDOPT_ENT_CORRECT];
276*c83a76b0SSuyog Pawar 
277*c83a76b0SSuyog Pawar     WORD32 i4_rdopt_bit_count;
278*c83a76b0SSuyog Pawar 
279*c83a76b0SSuyog Pawar     /*Remember entropy bit consumption and corresponding time stamp*/
280*c83a76b0SSuyog Pawar     WORD32 ai4_entropy_bit_consumption[NUM_BUF_RDOPT_ENT_CORRECT];
281*c83a76b0SSuyog Pawar 
282*c83a76b0SSuyog Pawar     WORD32 ai4_entropy_bit_consumption_buf_id[NUM_BUF_RDOPT_ENT_CORRECT];
283*c83a76b0SSuyog Pawar 
284*c83a76b0SSuyog Pawar     WORD32 i4_entropy_bit_count;
285*c83a76b0SSuyog Pawar 
286*c83a76b0SSuyog Pawar     WORD32 i4_pre_enc_qp_read_index;
287*c83a76b0SSuyog Pawar 
288*c83a76b0SSuyog Pawar     WORD32 i4_pre_enc_qp_write_index;
289*c83a76b0SSuyog Pawar 
290*c83a76b0SSuyog Pawar     WORD32 i4_use_qp_offset_pre_enc;
291*c83a76b0SSuyog Pawar 
292*c83a76b0SSuyog Pawar     WORD32 i4_num_frms_from_reset;
293*c83a76b0SSuyog Pawar     /*CAll back functions for print/write operations*/
294*c83a76b0SSuyog Pawar     ihevce_sys_api_t *ps_sys_rc_api;
295*c83a76b0SSuyog Pawar 
296*c83a76b0SSuyog Pawar     LWORD64 i8_num_frame_read;
297*c83a76b0SSuyog Pawar 
298*c83a76b0SSuyog Pawar     LWORD64 i8_num_bit_alloc_period;
299*c83a76b0SSuyog Pawar 
300*c83a76b0SSuyog Pawar     vbv_compliance_t s_vbv_compliance;
301*c83a76b0SSuyog Pawar 
302*c83a76b0SSuyog Pawar     WORD32 i4_next_sc_i_in_rc_look_ahead;
303*c83a76b0SSuyog Pawar 
304*c83a76b0SSuyog Pawar     LWORD64 i8_new_bitrate;
305*c83a76b0SSuyog Pawar         /*Set to -1 when no request. Positive value indicates pending change in bitrate request*/  //FRAME
306*c83a76b0SSuyog Pawar 
307*c83a76b0SSuyog Pawar     LWORD64 i8_new_peak_bitrate;
308*c83a76b0SSuyog Pawar 
309*c83a76b0SSuyog Pawar     WORD32 i4_num_frames_subgop;
310*c83a76b0SSuyog Pawar 
311*c83a76b0SSuyog Pawar     WORD32 i4_is_last_frame_scan;
312*c83a76b0SSuyog Pawar 
313*c83a76b0SSuyog Pawar     LWORD64 i8_total_acc_coarse_me_sad;
314*c83a76b0SSuyog Pawar 
315*c83a76b0SSuyog Pawar     WORD32 i4_L0_frame_qp;
316*c83a76b0SSuyog Pawar 
317*c83a76b0SSuyog Pawar     /** prev pic scene num of same temporal id*/
318*c83a76b0SSuyog Pawar     UWORD32 au4_scene_num_temp_id[MAX_NUM_TEMPORAL_LAYERS];
319*c83a76b0SSuyog Pawar 
320*c83a76b0SSuyog Pawar     /* END of parameters updated during update call and accessed in other threads (pre enc/entropy)*/
321*c83a76b0SSuyog Pawar 
322*c83a76b0SSuyog Pawar     /* START of parameters to be updated at the query QP level(updation) */
323*c83a76b0SSuyog Pawar 
324*c83a76b0SSuyog Pawar     /** Intra frame cost exported by pre-enc IPE for current frame*/
325*c83a76b0SSuyog Pawar     ULWORD64 ai8_cur_frm_intra_cost[MAX_NUM_ENC_LOOP_PARALLEL];
326*c83a76b0SSuyog Pawar     /** remember prev frame intra cost*/
327*c83a76b0SSuyog Pawar     ULWORD64 i8_prev_i_frm_cost;
328*c83a76b0SSuyog Pawar     /* Current frame inter cost from coarse ME*/
329*c83a76b0SSuyog Pawar     LWORD64 ai8_cur_frame_coarse_ME_cost[MAX_NUM_ENC_LOOP_PARALLEL];
330*c83a76b0SSuyog Pawar     /** Flag for first frame so that same logic as scd can be used(offline data)*/
331*c83a76b0SSuyog Pawar     WORD32 i4_is_first_frame_encoded;
332*c83a76b0SSuyog Pawar     /*Flag to remember to reset I model only based on SCD detecton based on open loop SATD
333*c83a76b0SSuyog Pawar       of two consecutive I pic*/
334*c83a76b0SSuyog Pawar     WORD32 ai4_I_model_only_reset[MAX_NUM_ENC_LOOP_PARALLEL];
335*c83a76b0SSuyog Pawar     /** prev pic intra cost for I pic and coarse ME cost for rest of picture types
336*c83a76b0SSuyog Pawar         For intra L0 cost is availbale and HME cost is on L1 layer*/
337*c83a76b0SSuyog Pawar     LWORD64 ai8_prev_frm_pre_enc_cost[MAX_PIC_TYPE];
338*c83a76b0SSuyog Pawar     /*previous qp used encoded*/
339*c83a76b0SSuyog Pawar     WORD32 ai4_prev_pic_hevc_qp[MAX_SCENE_NUM][MAX_PIC_TYPE];
340*c83a76b0SSuyog Pawar 
341*c83a76b0SSuyog Pawar     WORD32 ai4_scene_numbers[MAX_SCENE_NUM];
342*c83a76b0SSuyog Pawar 
343*c83a76b0SSuyog Pawar     /* END of parameters to be updated at the query QP lecvel */
344*c83a76b0SSuyog Pawar 
345*c83a76b0SSuyog Pawar     /* START of parameters to be maintained array for Enc loop parallelism */
346*c83a76b0SSuyog Pawar 
347*c83a76b0SSuyog Pawar     /** is scene cut frame at base layer*/
348*c83a76b0SSuyog Pawar     WORD32 ai4_is_frame_scd[MAX_NUM_ENC_LOOP_PARALLEL];  //ELP_RC
349*c83a76b0SSuyog Pawar     /*Flag to remember frames that are detected as scene cut but not made I due to another SCD following it immediately*/
350*c83a76b0SSuyog Pawar     WORD32 ai4_is_non_I_scd_pic[MAX_NUM_ENC_LOOP_PARALLEL];  //ELP_RC
351*c83a76b0SSuyog Pawar     /*Flag to remember pause to resume so that only P and B models can be reset*/
352*c83a76b0SSuyog Pawar     WORD32 ai4_is_pause_to_resume[MAX_NUM_ENC_LOOP_PARALLEL];  //ELP_RC
353*c83a76b0SSuyog Pawar     /*Frame similarity over look ahead window*/
354*c83a76b0SSuyog Pawar     WORD32 ai4_lap_f_sim[MAX_NUM_ENC_LOOP_PARALLEL];  //ELP_RC
355*c83a76b0SSuyog Pawar     /*Overall lap complexity including inter and intra in q7 format*/
356*c83a76b0SSuyog Pawar     WORD32 ai4_lap_complexity_q7[MAX_NUM_ENC_LOOP_PARALLEL];  //ELP_RC
357*c83a76b0SSuyog Pawar 
358*c83a76b0SSuyog Pawar     float af_sum_weigh[MAX_NUM_ENC_LOOP_PARALLEL][MAX_PIC_TYPE][3];
359*c83a76b0SSuyog Pawar 
360*c83a76b0SSuyog Pawar     WORD32 ai4_is_cmplx_change_reset_model[MAX_NUM_ENC_LOOP_PARALLEL];
361*c83a76b0SSuyog Pawar 
362*c83a76b0SSuyog Pawar     WORD32 ai4_is_cmplx_change_reset_bits[MAX_NUM_ENC_LOOP_PARALLEL];
363*c83a76b0SSuyog Pawar 
364*c83a76b0SSuyog Pawar     float ai_to_avg_bit_ratio[MAX_NUM_ENC_LOOP_PARALLEL];
365*c83a76b0SSuyog Pawar 
366*c83a76b0SSuyog Pawar     WORD32 ai4_num_scd_in_lap_window[MAX_NUM_ENC_LOOP_PARALLEL];
367*c83a76b0SSuyog Pawar 
368*c83a76b0SSuyog Pawar     WORD32 ai4_num_frames_b4_scd[MAX_NUM_ENC_LOOP_PARALLEL];
369*c83a76b0SSuyog Pawar 
370*c83a76b0SSuyog Pawar     /* END of parameters to be maintained array for Enc loop parallelism */
371*c83a76b0SSuyog Pawar 
372*c83a76b0SSuyog Pawar     UWORD32 u4_prev_scene_num;
373*c83a76b0SSuyog Pawar 
374*c83a76b0SSuyog Pawar     WORD32 ai4_qp_for_previous_scene[MAX_PIC_TYPE];
375*c83a76b0SSuyog Pawar 
376*c83a76b0SSuyog Pawar     UWORD32 au4_prev_scene_num_pre_enc[MAX_PIC_TYPE];
377*c83a76b0SSuyog Pawar 
378*c83a76b0SSuyog Pawar     WORD32 ai4_qp_for_previous_scene_pre_enc[MAX_PIC_TYPE];
379*c83a76b0SSuyog Pawar 
380*c83a76b0SSuyog Pawar     UWORD32 u4_scene_num_est_L0_intra_sad_available;
381*c83a76b0SSuyog Pawar 
382*c83a76b0SSuyog Pawar     non_ref_b_qp_store_t as_non_ref_b_qp[MAX_NON_REF_B_PICS_IN_QUEUE_SGI];
383*c83a76b0SSuyog Pawar 
384*c83a76b0SSuyog Pawar     UWORD32 au4_prev_scene_num_multi_scene[MAX_NON_REF_B_PICS_IN_QUEUE_SGI];
385*c83a76b0SSuyog Pawar 
386*c83a76b0SSuyog Pawar     WORD32 ai4_qp_for_previous_scene_multi_scene[MAX_NON_REF_B_PICS_IN_QUEUE_SGI][MAX_PIC_TYPE];
387*c83a76b0SSuyog Pawar 
388*c83a76b0SSuyog Pawar     WORD32 i4_prev_qp_ctr;
389*c83a76b0SSuyog Pawar 
390*c83a76b0SSuyog Pawar     WORD32 i4_cur_scene_num;
391*c83a76b0SSuyog Pawar 
392*c83a76b0SSuyog Pawar     WORD32 i4_non_ref_B_ctr;
393*c83a76b0SSuyog Pawar 
394*c83a76b0SSuyog Pawar     float af_sum_weigh_2_pass[MAX_PIC_TYPE][3];
395*c83a76b0SSuyog Pawar 
396*c83a76b0SSuyog Pawar     rc_bits_sad_t as_rc_frame_stat_store[MAX_NUM_ENC_LOOP_PARALLEL]
397*c83a76b0SSuyog Pawar                                         [IHEVCE_MAX_NUM_BITRATES];  //ELP_RC
398*c83a76b0SSuyog Pawar 
399*c83a76b0SSuyog Pawar     WORD32 out_buf_id[MAX_NUM_ENC_LOOP_PARALLEL][IHEVCE_MAX_NUM_BITRATES];  //ELP_RC
400*c83a76b0SSuyog Pawar 
401*c83a76b0SSuyog Pawar     WORD32 i4_pic_type[MAX_NUM_ENC_LOOP_PARALLEL];  //ELP_RC
402*c83a76b0SSuyog Pawar 
403*c83a76b0SSuyog Pawar     WORD32 cur_qp[MAX_NUM_ENC_LOOP_PARALLEL][IHEVCE_MAX_NUM_BITRATES];  //ELP_RC
404*c83a76b0SSuyog Pawar 
405*c83a76b0SSuyog Pawar     ihevce_lap_output_params_t as_lap_out[MAX_NUM_ENC_LOOP_PARALLEL];  //ELP_RC
406*c83a76b0SSuyog Pawar 
407*c83a76b0SSuyog Pawar     rc_lap_out_params_t as_rc_lap_out[MAX_NUM_ENC_LOOP_PARALLEL];  //ELP_RC
408*c83a76b0SSuyog Pawar 
409*c83a76b0SSuyog Pawar     WORD32 i4_complexity_bin;
410*c83a76b0SSuyog Pawar 
411*c83a76b0SSuyog Pawar     WORD32 i4_last_p_or_i_frame_gop;
412*c83a76b0SSuyog Pawar 
413*c83a76b0SSuyog Pawar     WORD32 i4_qp_at_I_frame_for_skip_sad;
414*c83a76b0SSuyog Pawar 
415*c83a76b0SSuyog Pawar     WORD32 i4_denominator_i_to_avg;
416*c83a76b0SSuyog Pawar 
417*c83a76b0SSuyog Pawar     WORD32 i4_no_more_set_rbip_for_cur_gop;
418*c83a76b0SSuyog Pawar 
419*c83a76b0SSuyog Pawar     WORD32 i4_num_frm_scnd_fr_alloc;
420*c83a76b0SSuyog Pawar 
421*c83a76b0SSuyog Pawar     WORD32 i4_last_disp_num_scanned;
422*c83a76b0SSuyog Pawar 
423*c83a76b0SSuyog Pawar     LWORD64 i8_l1_analysis_lap_comp;
424*c83a76b0SSuyog Pawar 
425*c83a76b0SSuyog Pawar     WORD32 i4_est_text_bits_ctr_get_qp;  //ELP_RC
426*c83a76b0SSuyog Pawar 
427*c83a76b0SSuyog Pawar     WORD32 i4_est_text_bits_ctr_update_qp;  //ELP_RC
428*c83a76b0SSuyog Pawar 
429*c83a76b0SSuyog Pawar     WORD32 i4_num_frame_parallel;  //ELP_RC
430*c83a76b0SSuyog Pawar 
431*c83a76b0SSuyog Pawar     WORD32 i4_scene_num_latest;
432*c83a76b0SSuyog Pawar 
433*c83a76b0SSuyog Pawar     WORD32 i4_pre_enc_rc_delay;
434*c83a76b0SSuyog Pawar 
435*c83a76b0SSuyog Pawar     /*Enable this falg to do bit allocation within a gop in
436*c83a76b0SSuyog Pawar     in second pass based on first pass data*/
437*c83a76b0SSuyog Pawar     WORD32 i4_fp_bit_alloc_in_sp;
438*c83a76b0SSuyog Pawar 
439*c83a76b0SSuyog Pawar     WORD32 i4_bitrate_changed;
440*c83a76b0SSuyog Pawar 
441*c83a76b0SSuyog Pawar     /* Flag which shows that capped vbr mode is enabled */
442*c83a76b0SSuyog Pawar     WORD32 i4_capped_vbr_flag;
443*c83a76b0SSuyog Pawar 
444*c83a76b0SSuyog Pawar     rc_high_level_stat_t s_rc_high_lvl_stat;
445*c83a76b0SSuyog Pawar 
446*c83a76b0SSuyog Pawar     WORD32 i4_normal_inter_pic;
447*c83a76b0SSuyog Pawar 
448*c83a76b0SSuyog Pawar     WORD32 i4_br_id_for_2pass;
449*c83a76b0SSuyog Pawar 
450*c83a76b0SSuyog Pawar     WORD32 ai4_scene_num_last_pic[MAX_PIC_TYPE];
451*c83a76b0SSuyog Pawar 
452*c83a76b0SSuyog Pawar     WORD32 ai4_last_tw0_lyr0_pic_qp[2];
453*c83a76b0SSuyog Pawar } rc_context_t;
454*c83a76b0SSuyog Pawar 
455*c83a76b0SSuyog Pawar /* NOTE:: Please add any new parameters accordin to the categorization as specified in the comments of */
456*c83a76b0SSuyog Pawar /* the structure definition. strat and end of the category are present in the defifnition*/
457*c83a76b0SSuyog Pawar 
458*c83a76b0SSuyog Pawar #endif
459