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