blob: c53c66dd407a32afd0784f893edf03dba4cfd4b2 [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 _VBR_STORAGE_VBV_H_
22#define _VBR_STORAGE_VBV_H_
23/******************************************************************************
24VBR STORAGE (VBV):
25Max. buffer filling rate: Rmax
26Max. buffer size: Bmax (as specified by level and profile)
27Current Buffer Level: Bcur
28Frame Rate: F
29
30For a storage scenario, the initial buffer size is assumed to be max. For every
31frame the Maximum bits filled in to the buffer is given by Rmaxfrm = Rmax/F. If
32the buffer overflows then the buffer is thresholded to the max buffer size.
33
34 (overflow)
35 B(0) /|
36---|--------------/-|------------------------------ Bmax
37 | / |
38 | /|/ |
39 | /| / |
40 | / | /|/ |
41 |/ | / | /|
42 |/ |/ |
43 |
44 |
45-----------------------|---------------------------
46 |<->| |
47(1/F)=>1/frame_rate (underflow)
48
49
50 B"(i) - Bits in buffer just before decoding a frame.
51 B'(i) - Bits in buffer just after decoding a frame.
52
53
54 B(0) (initBuffer size) = Bmax.
55 B'(i) = B"(i) - bits_decoded
56 B"(i) = Min( Bmax, B'(i-1) + Rmaxfrm)
57
58Overflow Scenario: In VBR case, since we have only a max filling rate (or input bit rate)
59buffer overflow is not a issue (since the buffer filling rate can be reduced to any value
60below this rate)
61
62Underflow Scenario: B'(i) should always be > 0. If not then, the buffer underflows. To
63prevent this condition the number bits that needs to be decoded must be equal to B"(i)
64which is equal to Min( Bmax, B'(i-1) + Rmaxfrm)
65****************************************************************************************/
66
67typedef struct vbr_storage_vbv_t* vbr_storage_vbv_handle;
68
69WORD32 irc_vbr_vbv_num_fill_use_free_memtab(vbr_storage_vbv_handle *pps_vbr_storage_vbv,
70 itt_memtab_t *ps_memtab,
71 ITT_FUNC_TYPE_E e_func_type);
72
73/* Initalises the vbv buffer status */
74void irc_init_vbr_vbv(vbr_storage_vbv_handle ps_vbr_storage_vbv,
75 WORD32 max_bit_rate, /* In bits/sec*/
76 WORD32 max_frm_rate, /* In frames/1000 sec*/
77 WORD32 i4_max_vbv_buff_size); /* in bits*/
78
79/* Updates the buffer after decoding a frame */
80void irc_update_vbr_vbv(vbr_storage_vbv_handle ps_vbr_storage_vbv,
81 WORD32 i4_total_bits_decoded);
82
83/* gets the max_number of bits that can be decoded out of the VBV without underflow */
84WORD32 irc_get_max_target_bits(vbr_storage_vbv_handle ps_vbr_storage_vbv);
85
86WORD32 irc_get_max_bits_inflow_per_frm_periode(vbr_storage_vbv_handle ps_vbr_storage_vbv);
87
88WORD32 irc_get_max_bits_per_tgt_frm(vbr_storage_vbv_handle ps_vbr_storage_vbv);
89
90WORD32 irc_get_cur_vbv_buf_size(vbr_storage_vbv_handle ps_vbr_storage_vbv);
91
92/* Queries the VBV buffer for the buffer status */
93vbv_buf_status_e irc_get_vbv_buffer_status(vbr_storage_vbv_handle ps_vbr_storage_vbv,
94 WORD32 i4_total_frame_bits,
95 WORD32 *pi4_num_bits_to_prevent_vbv_underflow);
96
97UWORD8 irc_restrict_swing_dvd_comp(vbr_storage_vbv_handle ps_vbr_storage_vbv);
98
99WORD32 irc_get_max_vbv_buf_size(vbr_storage_vbv_handle ps_vbr_storage_vbv);
100
101WORD32 irc_vbv_get_vbv_buf_fullness(vbr_storage_vbv_handle ps_vbr_storage_vbv,
102 UWORD32 u4_bits);
103
104WORD32 irc_get_max_tgt_bits_dvd_comp(vbr_storage_vbv_handle ps_vbr_storage_vbv,
105 WORD32 i4_rem_bits_in_gop,
106 WORD32 i4_rem_frms_in_gop,
107 picture_type_e e_pic_type);
108
109/* Changing input values at run time */
110void irc_change_vbr_vbv_bit_rate(vbr_storage_vbv_handle ps_vbr_storage_vbv,
111 WORD32 i4_max_bit_rate);
112
113void irc_change_vbr_vbv_frame_rate(vbr_storage_vbv_handle ps_vbr_storage_vbv,
114 WORD32 i4_frm_rate);
115
116void irc_change_vbr_max_bits_per_tgt_frm(vbr_storage_vbv_handle ps_vbr_storage_vbv,
117 WORD32 i4_tgt_frm_rate);
118#endif
119