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