xref: /aosp_15_r20/external/libhevc/encoder/rc_look_ahead_params.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 rc_look_ahead_params.h
23*c83a76b0SSuyog Pawar *
24*c83a76b0SSuyog Pawar * \brief
25*c83a76b0SSuyog Pawar *    TODO:
26*c83a76b0SSuyog Pawar *
27*c83a76b0SSuyog Pawar * \date
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 _RC_LOOK_AHEAD_PARAMS_H_
36*c83a76b0SSuyog Pawar #define _RC_LOOK_AHEAD_PARAMS_H_
37*c83a76b0SSuyog Pawar 
38*c83a76b0SSuyog Pawar /*****************************************************************************/
39*c83a76b0SSuyog Pawar /* Structure                                                                 */
40*c83a76b0SSuyog Pawar /*****************************************************************************/
41*c83a76b0SSuyog Pawar /*
42*c83a76b0SSuyog Pawar * Frame metrics
43*c83a76b0SSuyog Pawar */
44*c83a76b0SSuyog Pawar typedef struct
45*c83a76b0SSuyog Pawar {
46*c83a76b0SSuyog Pawar     /* Frame variance. Spatial property */
47*c83a76b0SSuyog Pawar     LWORD64 i8_8x8_var_lum;
48*c83a76b0SSuyog Pawar 
49*c83a76b0SSuyog Pawar     /* frame and histogram similarity */
50*c83a76b0SSuyog Pawar     WORD32 ai4_hsim[3];
51*c83a76b0SSuyog Pawar     WORD32 i4_fsim;
52*c83a76b0SSuyog Pawar 
53*c83a76b0SSuyog Pawar } rc_picture_metrics_t;
54*c83a76b0SSuyog Pawar 
55*c83a76b0SSuyog Pawar typedef struct
56*c83a76b0SSuyog Pawar {
57*c83a76b0SSuyog Pawar     /* common params for both lap_out and rc_lap_out */
58*c83a76b0SSuyog Pawar 
59*c83a76b0SSuyog Pawar     WORD32 i4_rc_pic_type;
60*c83a76b0SSuyog Pawar     WORD32 i4_rc_poc;
61*c83a76b0SSuyog Pawar     WORD32 i4_rc_temporal_lyr_id;
62*c83a76b0SSuyog Pawar     WORD32 i4_rc_is_ref_pic;
63*c83a76b0SSuyog Pawar     WORD32 i4_rc_scene_type;
64*c83a76b0SSuyog Pawar     UWORD32 u4_rc_scene_num;
65*c83a76b0SSuyog Pawar     WORD32 i4_rc_display_num;
66*c83a76b0SSuyog Pawar     WORD32 i4_rc_quality_preset;
67*c83a76b0SSuyog Pawar     WORD32 i4_rc_first_field;
68*c83a76b0SSuyog Pawar 
69*c83a76b0SSuyog Pawar     /* rc_lap_out specific params */
70*c83a76b0SSuyog Pawar 
71*c83a76b0SSuyog Pawar     /**
72*c83a76b0SSuyog Pawar       * array of rc_lap_out_params_t pointer to access
73*c83a76b0SSuyog Pawar       * the picture metrics of future pictures in capture order till
74*c83a76b0SSuyog Pawar       * the look ahead frames
75*c83a76b0SSuyog Pawar     */
76*c83a76b0SSuyog Pawar     void *ps_rc_lap_out_next_encode;
77*c83a76b0SSuyog Pawar 
78*c83a76b0SSuyog Pawar     WORD32 i4_next_pic_type;
79*c83a76b0SSuyog Pawar 
80*c83a76b0SSuyog Pawar     WORD32 i4_is_I_only_scd;
81*c83a76b0SSuyog Pawar     WORD32 i4_is_non_I_scd;
82*c83a76b0SSuyog Pawar 
83*c83a76b0SSuyog Pawar     LWORD64 i8_frame_satd_act_accum;
84*c83a76b0SSuyog Pawar     LWORD64 i8_est_I_pic_header_bits;
85*c83a76b0SSuyog Pawar 
86*c83a76b0SSuyog Pawar     /*  Num pels in frame considered while accumulating the above satd metric */
87*c83a76b0SSuyog Pawar     WORD32 i4_num_pels_in_frame_considered;
88*c83a76b0SSuyog Pawar     /* Field type i.e either bottom or top is convyed */
89*c83a76b0SSuyog Pawar     WORD32 i4_is_bottom_field;
90*c83a76b0SSuyog Pawar     /* Coarse ME accumulated cost for entire frame */
91*c83a76b0SSuyog Pawar     LWORD64 i8_frame_acc_coarse_me_cost;
92*c83a76b0SSuyog Pawar     /* Coarse ME accumulated sad for entire frame */
93*c83a76b0SSuyog Pawar     LWORD64 ai8_frame_acc_coarse_me_sad[52];
94*c83a76b0SSuyog Pawar     /* L1 intra SATD */
95*c83a76b0SSuyog Pawar     LWORD64 i8_pre_intra_satd;
96*c83a76b0SSuyog Pawar     /* L1 intra SATD */
97*c83a76b0SSuyog Pawar     LWORD64 ai8_pre_intra_sad[52];
98*c83a76b0SSuyog Pawar     /* L1 IPE sad */
99*c83a76b0SSuyog Pawar     LWORD64 i8_raw_pre_intra_sad;
100*c83a76b0SSuyog Pawar     /* Frame - level L1 ME sad */
101*c83a76b0SSuyog Pawar     LWORD64 i8_raw_l1_coarse_me_sad;
102*c83a76b0SSuyog Pawar     /** Frame - level L1 satd/act accum*/
103*c83a76b0SSuyog Pawar     LWORD64 i8_frame_satd_by_act_L1_accum;
104*c83a76b0SSuyog Pawar     /** Frame - level L1 satd/act accum*/
105*c83a76b0SSuyog Pawar     LWORD64 i8_satd_by_act_L1_accum_evaluated;
106*c83a76b0SSuyog Pawar     /* Frame satd/act accumulated for L0 predicted based on L1 satd and qp used for L0 processing */
107*c83a76b0SSuyog Pawar     LWORD64 i8_frm_satd_act_accum_L0_frm_L1;
108*c83a76b0SSuyog Pawar 
109*c83a76b0SSuyog Pawar     /* Frames for which online/offline model is not valid */
110*c83a76b0SSuyog Pawar     WORD32 i4_is_model_valid;
111*c83a76b0SSuyog Pawar     /* Steady State Frame */
112*c83a76b0SSuyog Pawar     WORD32 i4_is_steady_state;
113*c83a76b0SSuyog Pawar 
114*c83a76b0SSuyog Pawar     LWORD64 i8_est_text_bits;
115*c83a76b0SSuyog Pawar     LWORD64 i8_frame_num;
116*c83a76b0SSuyog Pawar 
117*c83a76b0SSuyog Pawar     frame_info_t *ps_frame_info;
118*c83a76b0SSuyog Pawar     /* complexity metrics from LAP */
119*c83a76b0SSuyog Pawar     rc_picture_metrics_t s_pic_metrics;
120*c83a76b0SSuyog Pawar 
121*c83a76b0SSuyog Pawar     WORD32 i4_is_cmplx_change_reset_model;
122*c83a76b0SSuyog Pawar     WORD32 i4_is_cmplx_change_reset_bits;
123*c83a76b0SSuyog Pawar     WORD32 i4_is_rc_model_needs_to_be_updated;
124*c83a76b0SSuyog Pawar     WORD32 i4_next_sc_i_in_rc_look_ahead;
125*c83a76b0SSuyog Pawar     WORD32 ai4_num_pic_type[MAX_PIC_TYPE];
126*c83a76b0SSuyog Pawar     WORD32 ai4_offsets[5];
127*c83a76b0SSuyog Pawar     WORD32 i4_offsets_set_flag;
128*c83a76b0SSuyog Pawar     WORD32 i4_complexity_bin;
129*c83a76b0SSuyog Pawar     WORD32 i4_ignore_for_rc_update;
130*c83a76b0SSuyog Pawar     WORD32 i4_L1_qp;
131*c83a76b0SSuyog Pawar     WORD32 i4_L0_qp;
132*c83a76b0SSuyog Pawar     WORD32 i4_enable_lookahead;
133*c83a76b0SSuyog Pawar     WORD32 i4_orig_rc_qp;
134*c83a76b0SSuyog Pawar     WORD32 i4_use_offline_model_2pass;
135*c83a76b0SSuyog Pawar     WORD32 i4_next_scene_type;
136*c83a76b0SSuyog Pawar     WORD32 i4_perc_dc_blks;
137*c83a76b0SSuyog Pawar 
138*c83a76b0SSuyog Pawar     /* Used only in ix,vx versions */
139*c83a76b0SSuyog Pawar     LWORD64 i8_frame_acc_satd_cost;
140*c83a76b0SSuyog Pawar     WORD32 i4_l1_update_done;
141*c83a76b0SSuyog Pawar     WORD32 i4_rc_i_pic_lamda_offset;
142*c83a76b0SSuyog Pawar     float f_rc_pred_factor;
143*c83a76b0SSuyog Pawar 
144*c83a76b0SSuyog Pawar } rc_lap_out_params_t;
145*c83a76b0SSuyog Pawar 
146*c83a76b0SSuyog Pawar #endif
147