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