xref: /aosp_15_r20/external/libavc/encoder/irc_rate_control_api.h (revision 495ae853bb871d1e5a258cb02c2cc13cde8ddb9a)
1*495ae853SAndroid Build Coastguard Worker /******************************************************************************
2*495ae853SAndroid Build Coastguard Worker  *
3*495ae853SAndroid Build Coastguard Worker  * Copyright (C) 2015 The Android Open Source Project
4*495ae853SAndroid Build Coastguard Worker  *
5*495ae853SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
6*495ae853SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
7*495ae853SAndroid Build Coastguard Worker  * You may obtain a copy of the License at:
8*495ae853SAndroid Build Coastguard Worker  *
9*495ae853SAndroid Build Coastguard Worker  * http://www.apache.org/licenses/LICENSE-2.0
10*495ae853SAndroid Build Coastguard Worker  *
11*495ae853SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
12*495ae853SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
13*495ae853SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*495ae853SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
15*495ae853SAndroid Build Coastguard Worker  * limitations under the License.
16*495ae853SAndroid Build Coastguard Worker  *
17*495ae853SAndroid Build Coastguard Worker  *****************************************************************************
18*495ae853SAndroid Build Coastguard Worker  * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19*495ae853SAndroid Build Coastguard Worker */
20*495ae853SAndroid Build Coastguard Worker 
21*495ae853SAndroid Build Coastguard Worker #ifndef _RATE_CONTROL_API_H_
22*495ae853SAndroid Build Coastguard Worker #define _RATE_CONTROL_API_H_
23*495ae853SAndroid Build Coastguard Worker 
24*495ae853SAndroid Build Coastguard Worker #define RC_OK            0
25*495ae853SAndroid Build Coastguard Worker #define RC_FAIL         -1
26*495ae853SAndroid Build Coastguard Worker #define RC_BENIGN_ERR   -2
27*495ae853SAndroid Build Coastguard Worker 
28*495ae853SAndroid Build Coastguard Worker /* This file should only contain RC API function declarations */
29*495ae853SAndroid Build Coastguard Worker 
30*495ae853SAndroid Build Coastguard Worker typedef struct rate_control_api_t *rate_control_handle;
31*495ae853SAndroid Build Coastguard Worker 
32*495ae853SAndroid Build Coastguard Worker WORD32 irc_rate_control_num_fill_use_free_memtab(rate_control_handle *pps_rate_control_api,
33*495ae853SAndroid Build Coastguard Worker                                                  itt_memtab_t *ps_memtab,
34*495ae853SAndroid Build Coastguard Worker                                                  ITT_FUNC_TYPE_E e_func_type);
35*495ae853SAndroid Build Coastguard Worker 
36*495ae853SAndroid Build Coastguard Worker void irc_initialise_rate_control(rate_control_handle ps_rate_control_api,
37*495ae853SAndroid Build Coastguard Worker                                  rc_type_e e_rate_control_type,
38*495ae853SAndroid Build Coastguard Worker                                  UWORD8 u1_is_mb_level_rc_on,
39*495ae853SAndroid Build Coastguard Worker                                  UWORD32 u4_avg_bit_rate,
40*495ae853SAndroid Build Coastguard Worker                                  UWORD32 *pu4_peak_bit_rate,
41*495ae853SAndroid Build Coastguard Worker                                  UWORD32 u4_min_bit_rate,
42*495ae853SAndroid Build Coastguard Worker                                  UWORD32 u4_frame_rate,
43*495ae853SAndroid Build Coastguard Worker                                  UWORD32 u4_max_delay,
44*495ae853SAndroid Build Coastguard Worker                                  UWORD32 u4_intra_frame_interval,
45*495ae853SAndroid Build Coastguard Worker                                  WORD32 i4_inter_frm_int,
46*495ae853SAndroid Build Coastguard Worker                                  UWORD8 *pu1_init_qp,
47*495ae853SAndroid Build Coastguard Worker                                  UWORD32 u4_max_vbv_buff_size,
48*495ae853SAndroid Build Coastguard Worker                                  WORD32 i4_max_inter_frm_int,
49*495ae853SAndroid Build Coastguard Worker                                  WORD32 i4_is_gop_closed,
50*495ae853SAndroid Build Coastguard Worker                                  UWORD8 *pu1_min_max_qp,
51*495ae853SAndroid Build Coastguard Worker                                  WORD32 i4_use_est_intra_sad,
52*495ae853SAndroid Build Coastguard Worker                                  UWORD32 u4_src_ticks,
53*495ae853SAndroid Build Coastguard Worker                                  UWORD32 u4_tgt_ticks);
54*495ae853SAndroid Build Coastguard Worker 
55*495ae853SAndroid Build Coastguard Worker /*****************************************************************************
56*495ae853SAndroid Build Coastguard Worker  Process level API fuctions (FRAME LEVEL)
57*495ae853SAndroid Build Coastguard Worker  *****************************************************************************/
58*495ae853SAndroid Build Coastguard Worker void irc_flush_buf_frames(rate_control_handle ps_rate_control_api);
59*495ae853SAndroid Build Coastguard Worker 
60*495ae853SAndroid Build Coastguard Worker void irc_post_encode_frame_skip(rate_control_handle ps_rate_control_api,
61*495ae853SAndroid Build Coastguard Worker                                 picture_type_e e_pic_type);
62*495ae853SAndroid Build Coastguard Worker 
63*495ae853SAndroid Build Coastguard Worker void irc_add_picture_to_stack(rate_control_handle rate_control_api,
64*495ae853SAndroid Build Coastguard Worker                               WORD32 i4_enc_pic_id);
65*495ae853SAndroid Build Coastguard Worker 
66*495ae853SAndroid Build Coastguard Worker void irc_add_picture_to_stack_re_enc(rate_control_handle rate_control_api,
67*495ae853SAndroid Build Coastguard Worker                                      WORD32 i4_enc_pic_id,
68*495ae853SAndroid Build Coastguard Worker                                      picture_type_e e_pic_type);
69*495ae853SAndroid Build Coastguard Worker 
70*495ae853SAndroid Build Coastguard Worker void irc_get_picture_details(rate_control_handle rate_control_api,
71*495ae853SAndroid Build Coastguard Worker                              WORD32 *pi4_pic_id,
72*495ae853SAndroid Build Coastguard Worker                              WORD32 *pi4_pic_disp_order_no,
73*495ae853SAndroid Build Coastguard Worker                              picture_type_e *pe_pic_type);
74*495ae853SAndroid Build Coastguard Worker 
75*495ae853SAndroid Build Coastguard Worker /* Gets the frame level Qp */
76*495ae853SAndroid Build Coastguard Worker UWORD8 irc_get_frame_level_qp(rate_control_handle rate_control_api,
77*495ae853SAndroid Build Coastguard Worker                               picture_type_e pic_type,
78*495ae853SAndroid Build Coastguard Worker                               WORD32 i4_max_frm_bits);
79*495ae853SAndroid Build Coastguard Worker 
80*495ae853SAndroid Build Coastguard Worker vbv_buf_status_e irc_get_buffer_status(rate_control_handle rate_control_api,
81*495ae853SAndroid Build Coastguard Worker                                        WORD32 i4_total_frame_bits,
82*495ae853SAndroid Build Coastguard Worker                                        picture_type_e e_pic_type,
83*495ae853SAndroid Build Coastguard Worker                                        WORD32 *pi4_num_bits_to_prevent_vbv_underflow);
84*495ae853SAndroid Build Coastguard Worker 
85*495ae853SAndroid Build Coastguard Worker WORD32 irc_get_prev_frm_est_bits(rate_control_handle ps_rate_control_api);
86*495ae853SAndroid Build Coastguard Worker 
87*495ae853SAndroid Build Coastguard Worker void irc_update_pic_handling_state(rate_control_handle ps_rate_control_api,
88*495ae853SAndroid Build Coastguard Worker                                    picture_type_e e_pic_type);
89*495ae853SAndroid Build Coastguard Worker 
90*495ae853SAndroid Build Coastguard Worker void irc_update_frame_level_info(rate_control_handle ps_rate_control_api,
91*495ae853SAndroid Build Coastguard Worker                                  picture_type_e e_pic_type,
92*495ae853SAndroid Build Coastguard Worker                                  WORD32 *pi4_mb_type_sad,
93*495ae853SAndroid Build Coastguard Worker                                  WORD32 i4_total_frame_bits,
94*495ae853SAndroid Build Coastguard Worker                                  WORD32 i4_model_updation_hdr_bits,
95*495ae853SAndroid Build Coastguard Worker                                  WORD32 *pi4_mb_type_tex_bits,
96*495ae853SAndroid Build Coastguard Worker                                  WORD32 *pi4_tot_mb_type_qp,
97*495ae853SAndroid Build Coastguard Worker                                  WORD32 *pi4_tot_mb_in_type,
98*495ae853SAndroid Build Coastguard Worker                                  WORD32 i4_avg_activity,
99*495ae853SAndroid Build Coastguard Worker                                  UWORD8 u1_is_scd,
100*495ae853SAndroid Build Coastguard Worker                                  WORD32 i4_is_it_a_skip,
101*495ae853SAndroid Build Coastguard Worker                                  WORD32 i4_intra_frm_cost,
102*495ae853SAndroid Build Coastguard Worker                                  WORD32 i4_is_pic_handling_done);
103*495ae853SAndroid Build Coastguard Worker 
104*495ae853SAndroid Build Coastguard Worker /*****************************************************************************
105*495ae853SAndroid Build Coastguard Worker  MB LEVEL API (just wrapper fucntions)
106*495ae853SAndroid Build Coastguard Worker  *****************************************************************************/
107*495ae853SAndroid Build Coastguard Worker 
108*495ae853SAndroid Build Coastguard Worker void irc_init_mb_rc_frame_level(rate_control_handle ps_rate_control_api,
109*495ae853SAndroid Build Coastguard Worker                                 UWORD8 u1_frame_qp);/* Current frame qp*/
110*495ae853SAndroid Build Coastguard Worker 
111*495ae853SAndroid Build Coastguard Worker void irc_get_mb_level_qp(rate_control_handle ps_rate_control_api,
112*495ae853SAndroid Build Coastguard Worker                          WORD32 i4_cur_mb_activity,
113*495ae853SAndroid Build Coastguard Worker                          WORD32 *pi4_mb_qp,
114*495ae853SAndroid Build Coastguard Worker                          picture_type_e e_pic_type);
115*495ae853SAndroid Build Coastguard Worker 
116*495ae853SAndroid Build Coastguard Worker WORD32 irc_get_bits_to_stuff(rate_control_handle ps_rate_control_api,
117*495ae853SAndroid Build Coastguard Worker                              WORD32 i4_tot_consumed_bits,
118*495ae853SAndroid Build Coastguard Worker                              picture_type_e e_pic_type);
119*495ae853SAndroid Build Coastguard Worker 
120*495ae853SAndroid Build Coastguard Worker /******************************************************************************
121*495ae853SAndroid Build Coastguard Worker  Control Level API functions
122*495ae853SAndroid Build Coastguard Worker  Logic: The control call sets the state structure of the rate control api
123*495ae853SAndroid Build Coastguard Worker  accordingly such that the next process call would implement the same.
124*495ae853SAndroid Build Coastguard Worker  ******************************************************************************/
125*495ae853SAndroid Build Coastguard Worker 
126*495ae853SAndroid Build Coastguard Worker void irc_change_inter_frm_int_call(rate_control_handle ps_rate_control_api,
127*495ae853SAndroid Build Coastguard Worker                                    WORD32 i4_inter_frm_int);
128*495ae853SAndroid Build Coastguard Worker 
129*495ae853SAndroid Build Coastguard Worker void irc_change_intra_frm_int_call(rate_control_handle ps_rate_control_api,
130*495ae853SAndroid Build Coastguard Worker                                    WORD32 i4_intra_frm_int);
131*495ae853SAndroid Build Coastguard Worker 
132*495ae853SAndroid Build Coastguard Worker void irc_change_avg_bit_rate(rate_control_handle ps_rate_control_api,
133*495ae853SAndroid Build Coastguard Worker                              UWORD32 u4_average_bit_rate);
134*495ae853SAndroid Build Coastguard Worker 
135*495ae853SAndroid Build Coastguard Worker void irc_change_frame_rate(rate_control_handle ps_rate_control_api,
136*495ae853SAndroid Build Coastguard Worker                            UWORD32 u4_frame_rate,
137*495ae853SAndroid Build Coastguard Worker                            UWORD32 u4_src_ticks,
138*495ae853SAndroid Build Coastguard Worker                            UWORD32 u4_target_ticks);
139*495ae853SAndroid Build Coastguard Worker 
140*495ae853SAndroid Build Coastguard Worker void irc_change_frm_rate_for_bit_alloc(rate_control_handle ps_rate_control_api,
141*495ae853SAndroid Build Coastguard Worker                                        UWORD32 u4_frame_rate);
142*495ae853SAndroid Build Coastguard Worker 
143*495ae853SAndroid Build Coastguard Worker void irc_change_init_qp(rate_control_handle ps_rate_control_api,
144*495ae853SAndroid Build Coastguard Worker                         UWORD8 *init_qp);
145*495ae853SAndroid Build Coastguard Worker 
146*495ae853SAndroid Build Coastguard Worker WORD32 irc_change_peak_bit_rate(rate_control_handle ps_rate_control_api,
147*495ae853SAndroid Build Coastguard Worker                                 UWORD32 *u4_peak_bit_rate);
148*495ae853SAndroid Build Coastguard Worker 
149*495ae853SAndroid Build Coastguard Worker void irc_change_buffer_delay(rate_control_handle ps_rate_control_api,
150*495ae853SAndroid Build Coastguard Worker                              UWORD32 u4_buffer_delay);
151*495ae853SAndroid Build Coastguard Worker 
152*495ae853SAndroid Build Coastguard Worker void irc_force_I_frame(rate_control_handle ps_rate_control_api);
153*495ae853SAndroid Build Coastguard Worker 
154*495ae853SAndroid Build Coastguard Worker void irc_change_min_max_qp(rate_control_handle ps_rate_control_api,
155*495ae853SAndroid Build Coastguard Worker                            UWORD8 *u1_min_max_qp);
156*495ae853SAndroid Build Coastguard Worker 
157*495ae853SAndroid Build Coastguard Worker /********************************************************************************
158*495ae853SAndroid Build Coastguard Worker  Getter functions
159*495ae853SAndroid Build Coastguard Worker  For getting the current state of the rate control structures
160*495ae853SAndroid Build Coastguard Worker  ********************************************************************************/
161*495ae853SAndroid Build Coastguard Worker 
162*495ae853SAndroid Build Coastguard Worker UWORD32 irc_get_frame_rate(rate_control_handle ps_rate_control_api);
163*495ae853SAndroid Build Coastguard Worker 
164*495ae853SAndroid Build Coastguard Worker UWORD32 irc_get_bit_rate(rate_control_handle ps_rate_control_api);
165*495ae853SAndroid Build Coastguard Worker 
166*495ae853SAndroid Build Coastguard Worker UWORD32 irc_get_intra_frame_interval(rate_control_handle ps_rate_control_api);
167*495ae853SAndroid Build Coastguard Worker 
168*495ae853SAndroid Build Coastguard Worker UWORD32 irc_get_inter_frame_interval(rate_control_handle ps_rate_control_api);
169*495ae853SAndroid Build Coastguard Worker 
170*495ae853SAndroid Build Coastguard Worker rc_type_e irc_get_rc_type(rate_control_handle ps_rate_control_api);
171*495ae853SAndroid Build Coastguard Worker 
172*495ae853SAndroid Build Coastguard Worker WORD32 irc_get_bits_per_frame(rate_control_handle ps_rate_control_api);
173*495ae853SAndroid Build Coastguard Worker 
174*495ae853SAndroid Build Coastguard Worker UWORD32 irc_get_peak_bit_rate(rate_control_handle ps_rate_control_api,
175*495ae853SAndroid Build Coastguard Worker                               WORD32 i4_index);
176*495ae853SAndroid Build Coastguard Worker 
177*495ae853SAndroid Build Coastguard Worker UWORD32 irc_get_max_delay(rate_control_handle ps_rate_control_api);
178*495ae853SAndroid Build Coastguard Worker 
179*495ae853SAndroid Build Coastguard Worker UWORD32 irc_get_seq_no(rate_control_handle ps_rate_control_api);
180*495ae853SAndroid Build Coastguard Worker 
181*495ae853SAndroid Build Coastguard Worker WORD32 irc_get_rem_bits_in_period(rate_control_handle ps_rate_control_api);
182*495ae853SAndroid Build Coastguard Worker 
183*495ae853SAndroid Build Coastguard Worker WORD32 irc_get_vbv_buf_fullness(rate_control_handle ps_rate_control_api);
184*495ae853SAndroid Build Coastguard Worker 
185*495ae853SAndroid Build Coastguard Worker WORD32 irc_get_vbv_buf_size(rate_control_handle ps_rate_control_api);
186*495ae853SAndroid Build Coastguard Worker 
187*495ae853SAndroid Build Coastguard Worker WORD32 irc_get_vbv_fulness_with_cur_bits(rate_control_handle ps_rate_control_api,
188*495ae853SAndroid Build Coastguard Worker                                          UWORD32 u4_bits);
189*495ae853SAndroid Build Coastguard Worker #endif
190