blob: 253496130c0452ca074080a256f10ebd652e12cd [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/*****************************************************************************/
22/* */
23/* File Name : irc_cbr_buffer_control.h */
24/* */
25/* Description : This file contains all the necessary declarations */
26/* for cbr_buffer_control functions */
27/* */
28/* */
29/* List of Functions : <List the functions defined in this file> */
30/* */
31/* Issues / Problems : None */
32/* */
33/* Revision History : */
34/* */
35/* DD MM YYYY Author(s) Changes (Describe the changes made) */
36/* 06 05 2008 Ittiam Draft */
37/* */
38/*****************************************************************************/
39
40#ifndef CBR_BUFFER_CONTROL_H
41#define CBR_BUFFER_CONTROL_H
42
43/* Macro for clipping a number between to extremes */
44#define CLIP(Number,Max,Min) if((Number) > (Max)) (Number) = (Max); \
45 else if((Number) < (Min)) (Number) = (Min);
46/*****************************************************************************/
47/* Structure */
48/*****************************************************************************/
49typedef struct cbr_buffer_t *cbr_buffer_handle;
50
51WORD32 irc_cbr_buffer_num_fill_use_free_memtab(cbr_buffer_handle *pps_cbr_buffer,
52 itt_memtab_t *ps_memtab,
53 ITT_FUNC_TYPE_E e_func_type);
54
55/* Initialize the cbr Buffer*/
56void irc_init_cbr_buffer(cbr_buffer_handle ps_cbr_buffer,
57 WORD32 i4_buffer_delay,
58 WORD32 i4_tgt_frm_rate,
59 WORD32 *i4_bit_rate,
60 UWORD32 *u4_num_pics_in_delay_prd,
61 UWORD32 u4_vbv_buf_size);
62
63/* Check for tgt bits with in CBR buffer*/
64WORD32 irc_cbr_buffer_constraint_check(cbr_buffer_handle ps_cbr_buffer,
65 WORD32 i4_tgt_bits,
66 picture_type_e e_pic_type);
67
68/* Get the buffer status with the current consumed bits*/
69vbv_buf_status_e irc_get_cbr_buffer_status(cbr_buffer_handle ps_cbr_buffer,
70 WORD32 i4_tot_consumed_bits,
71 WORD32 *pi4_num_bits_to_prevent_overflow,
72 picture_type_e e_pic_type);
73
74/* Update the CBR buffer at the end of the VOP*/
75void irc_update_cbr_buffer(cbr_buffer_handle ps_cbr_buffer,
76 WORD32 i4_tot_consumed_bits,
77 picture_type_e e_pic_type);
78
79/*Get the bits needed to stuff in case of Underflow*/
80WORD32 irc_get_cbr_bits_to_stuff(cbr_buffer_handle ps_cbr_buffer,
81 WORD32 i4_tot_consumed_bits,
82 picture_type_e e_pic_type);
83
84WORD32 irc_get_cbr_buffer_delay(cbr_buffer_handle ps_cbr_buffer);
85
86WORD32 irc_get_cbr_buffer_size(cbr_buffer_handle ps_cbr_buffer);
87
88WORD32 irc_vbr_stream_buffer_constraint_check(cbr_buffer_handle ps_cbr_buffer,
89 WORD32 i4_tgt_bits,
90 picture_type_e e_pic_type);
91
92void irc_change_cbr_vbv_bit_rate(cbr_buffer_handle ps_cbr_buffer,
93 WORD32 *i4_bit_rate);
94
95void irc_change_cbr_vbv_tgt_frame_rate(cbr_buffer_handle ps_cbr_buffer,
96 WORD32 i4_tgt_frm_rate);
97
98void irc_change_cbr_vbv_num_pics_in_delay_period(cbr_buffer_handle ps_cbr_buffer,
99 UWORD32 *u4_num_pics_in_delay_prd);
100
101void irc_change_cbr_buffer_delay(cbr_buffer_handle ps_cbr_buffer,
102 WORD32 i4_buffer_delay);
103#endif /* CBR_BUFFER_CONTROL_H */
104