blob: 4b24ece53e9be40a6c1193d6425d0d4db6c55d7e [file] [log] [blame]
Hamsalekha S8d3d3032015-03-13 21:24:58 +05301/******************************************************************************
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
30typedef struct rate_control_api_t *rate_control_handle;
31
32WORD32 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
36void 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,
Harinarayanan K K134291e2015-06-18 16:03:38 +053045 WORD32 i4_inter_frm_int,
Hamsalekha S8d3d3032015-03-13 21:24:58 +053046 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 *****************************************************************************/
58void irc_flush_buf_frames(rate_control_handle ps_rate_control_api);
59
60void irc_post_encode_frame_skip(rate_control_handle ps_rate_control_api,
61 picture_type_e e_pic_type);
62
63void irc_add_picture_to_stack(rate_control_handle rate_control_api,
64 WORD32 i4_enc_pic_id);
65
66void 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
70void 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 */
76UWORD8 irc_get_frame_level_qp(rate_control_handle rate_control_api,
77 picture_type_e pic_type,
78 WORD32 i4_max_frm_bits);
79
80vbv_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
85WORD32 irc_get_prev_frm_est_bits(rate_control_handle ps_rate_control_api);
86
87void irc_update_pic_handling_state(rate_control_handle ps_rate_control_api,
88 picture_type_e e_pic_type);
89
90void 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
108void irc_init_mb_rc_frame_level(rate_control_handle ps_rate_control_api,
109 UWORD8 u1_frame_qp);/* Current frame qp*/
110
111void 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
116WORD32 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
126void irc_change_inter_frm_int_call(rate_control_handle ps_rate_control_api,
127 WORD32 i4_inter_frm_int);
128
129void irc_change_intra_frm_int_call(rate_control_handle ps_rate_control_api,
130 WORD32 i4_intra_frm_int);
131
132void irc_change_avg_bit_rate(rate_control_handle ps_rate_control_api,
133 UWORD32 u4_average_bit_rate);
134
135void 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
140void irc_change_frm_rate_for_bit_alloc(rate_control_handle ps_rate_control_api,
141 UWORD32 u4_frame_rate);
142
143void irc_change_init_qp(rate_control_handle ps_rate_control_api,
144 UWORD8 *init_qp);
145
146WORD32 irc_change_peak_bit_rate(rate_control_handle ps_rate_control_api,
147 UWORD32 *u4_peak_bit_rate);
148
149void irc_change_buffer_delay(rate_control_handle ps_rate_control_api,
150 UWORD32 u4_buffer_delay);
151
152void irc_force_I_frame(rate_control_handle ps_rate_control_api);
153
154void 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
162UWORD32 irc_get_frame_rate(rate_control_handle ps_rate_control_api);
163
164UWORD32 irc_get_bit_rate(rate_control_handle ps_rate_control_api);
165
166UWORD32 irc_get_intra_frame_interval(rate_control_handle ps_rate_control_api);
167
168UWORD32 irc_get_inter_frame_interval(rate_control_handle ps_rate_control_api);
169
170rc_type_e irc_get_rc_type(rate_control_handle ps_rate_control_api);
171
172WORD32 irc_get_bits_per_frame(rate_control_handle ps_rate_control_api);
173
174UWORD32 irc_get_peak_bit_rate(rate_control_handle ps_rate_control_api,
175 WORD32 i4_index);
176
177UWORD32 irc_get_max_delay(rate_control_handle ps_rate_control_api);
178
179UWORD32 irc_get_seq_no(rate_control_handle ps_rate_control_api);
180
181WORD32 irc_get_rem_bits_in_period(rate_control_handle ps_rate_control_api);
182
183WORD32 irc_get_vbv_buf_fullness(rate_control_handle ps_rate_control_api);
184
185WORD32 irc_get_vbv_buf_size(rate_control_handle ps_rate_control_api);
186
187WORD32 irc_get_vbv_fulness_with_cur_bits(rate_control_handle ps_rate_control_api,
188 UWORD32 u4_bits);
189#endif