blob: 27e37e8cd9610516e43418c31d092f7557f8e4b6 [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
24* ih264e_utils.h
25*
26* @brief
27* Contains declarations of miscellaneous utility functions used by the encoder
28*
29* @author
30* Harish
31*
32* @par List of Functions:
Harinarayanan K K134291e2015-06-18 16:03:38 +053033* -ih264e_input_queue_update()
Hamsalekha S8d3d3032015-03-13 21:24:58 +053034* -ih264e_get_min_level()
35* -ih264e_get_lvl_idx()
36* -ih264e_get_dpb_size()
37* -ih264e_get_total_pic_buf_size()
38* -ih264e_get_pic_mv_bank_size()
39* -ih264e_pic_buf_mgr_add_bufs()
40* -ih264e_mv_buf_mgr_add_bufs()
41* -ih264e_init_quant_params()
42* -ih264e_init_air_map()
43* -ih264e_codec_init()
44* -ih264e_pic_init()
45*
46* @remarks
47* None
48*
49*******************************************************************************
50*/
51
52#ifndef IH264E_UTILS_H_
53#define IH264E_UTILS_H_
54
55/**
Harinarayanan K K134291e2015-06-18 16:03:38 +053056 *******************************************************************************
57 *
58 * @brief
59 * Queues the current buffer, gets back a another buffer for encoding with corrent
60 * picture type
61 *
62 * @par Description:
63 *
64 * @param[in] ps_codec
65 * Pointer to codec descriptor
66 *
67 * @param[in] ps_ive_ip
68 * Current input buffer to the encoder
69 *
70 * @param[out] ps_inp
71 * Buffer to be encoded in the current pass
72 *
73 * @returns
74 * Flag indicating if we have a pre-enc skip or not
75 *
76 * @remarks
77 *
78 *******************************************************************************
79 */
80WORD32 ih264e_input_queue_update(codec_t *ps_codec,
81 ive_video_encode_ip_t *ps_ive_ip,
82 inp_buf_t *ps_enc_buff);
83
84/**
Hamsalekha S8d3d3032015-03-13 21:24:58 +053085*******************************************************************************
86*
87* @brief
88* Used to get minimum level index for a given picture size
89*
90* @par Description:
91* Gets the minimum level index and then gets corresponding level.
92* Also used to ignore invalid levels like 2.3, 3.3 etc
93*
Harinarayanan K K6cb67722015-06-19 14:44:42 +053094* @param[in] wd
95* Width
96*
97* @param[in] ht
98* Height
Hamsalekha S8d3d3032015-03-13 21:24:58 +053099*
100* @returns Level index for a given level
101*
102* @remarks
103*
104*******************************************************************************
105*/
Harinarayanan K K6cb67722015-06-19 14:44:42 +0530106WORD32 ih264e_get_min_level(WORD32 wd, WORD32 ht);
Hamsalekha S8d3d3032015-03-13 21:24:58 +0530107
108/**
109*******************************************************************************
110*
111* @brief
112* Used to get level index for a given level
113*
114* @par Description:
115* Converts from level_idc (which is multiplied by 30) to an index that can be
116* used as a lookup. Also used to ignore invalid levels like 2.2 , 3.2 etc
117*
118* @param[in] level
119* Level of the stream
120*
121* @returns Level index for a given level
122*
123* @remarks
124*
125*******************************************************************************
126*/
127WORD32 ih264e_get_lvl_idx(WORD32 level);
128
129/**
130*******************************************************************************
131*
132* @brief returns maximum number of pictures allowed in dpb for a given level
133*
134* @par Description:
135* For given width, height and level, number of pictures allowed in decoder
136* picture buffer is computed as per Annex A.3.1
137*
138* @param[in] level
139* level of the bit-stream
140*
141* @param[in] pic_size
142* width * height
143*
144* @returns Number of buffers in DPB
145*
146* @remarks
147* From annexure A.3.1 of H264 specification,
148* max_dec_frame_buffering <= MaxDpbSize, where MaxDpbSize is equal to
149* Min( 1024 * MaxDPB / ( PicWidthInMbs * FrameHeightInMbs * 384 ), 16 ) and
150* MaxDPB is given in Table A-1 in units of 1024 bytes. However the MaxDPB size
151* presented in the look up table gas_ih264_lvl_tbl is in units of 512
152* bytes. Hence the expression is modified accordingly.
153*
154*******************************************************************************
155*/
156WORD32 ih264e_get_dpb_size(WORD32 level, WORD32 pic_size);
157
158/**
159*******************************************************************************
160*
161* @brief
162* Used to get reference picture buffer size for a given level and
163* and padding used
164*
165* @par Description:
166* Used to get reference picture buffer size for a given level and padding used
167* Each picture is padded on all four sides
168*
169* @param[in] pic_size
170* Number of luma samples (Width * Height)
171*
172* @param[in] level
173* Level
174*
175* @param[in] horz_pad
176* Total padding used in horizontal direction
177*
178* @param[in] vert_pad
179* Total padding used in vertical direction
180*
181* @returns Total picture buffer size
182*
183* @remarks
184*
185*
186*******************************************************************************
187*/
188WORD32 ih264e_get_total_pic_buf_size(WORD32 pic_size, WORD32 level,
189 WORD32 horz_pad, WORD32 vert_pad,
190 WORD32 num_ref_frames,
191 WORD32 num_reorder_frames);
192
193/**
194*******************************************************************************
195*
196* @brief Returns MV bank buffer size for a given number of luma samples
197*
198* @par Description:
199* For given number of luma samples one MV bank size is computed.
200* Each MV bank includes pu_map and enc_pu_t for all the min PUs(4x4) in a picture
201*
202* @param[in] num_luma_samples
203* Max number of luma pixels in the frame
204*
205* @returns Total MV Bank size
206*
207* @remarks
208*
209*
210*******************************************************************************
211*/
212WORD32 ih264e_get_pic_mv_bank_size(WORD32 num_luma_samples);
213
214/**
215*******************************************************************************
216*
217* @brief
218* Function to initialize ps_pic_buf structs add pic buffers to
219* buffer manager in case of non-shared mode
220*
221* @par Description:
222* Function to initialize ps_pic_buf structs add pic buffers to
223* buffer manager in case of non-shared mode
224* To be called once per stream or for every reset
225*
226* @param[in] ps_codec
227* Pointer to codec context
228*
229* @returns error status
230*
231* @remarks
232*
233*
234*******************************************************************************
235*/
236IH264E_ERROR_T ih264e_pic_buf_mgr_add_bufs(codec_t *ps_codec);
237
238/**
239*******************************************************************************
240*
241* @brief Function to add buffers to MV Bank buffer manager
242*
243* @par Description:
244* Function to add buffers to MV Bank buffer manager. To be called once per
245* stream or for every reset
246*
247* @param[in] ps_codec
248* Pointer to codec context
249*
250* @returns error status
251*
252* @remarks
253*
254*******************************************************************************
255*/
256IH264E_ERROR_T ih264e_mv_buf_mgr_add_bufs(codec_t *ps_codec);
257
258/**
259*******************************************************************************
260*
261* @brief Function to initialize quant params structure
262*
263* @par Description:
264* The forward quantization modules depends on qp/6, qp mod 6, forward scale
265* matrix, forward threshold matrix, weight list. The inverse quantization
266* modules depends on qp/6, qp mod 6, inverse scale matrix, weight list.
267* These params are initialized in this function.
268*
269* @param[in] ps_proc
270* pointer to process context
271*
272* @param[in] qp
273* quantization parameter
274*
275* @returns none
276*
277* @remarks
278*
279*******************************************************************************
280*/
281void ih264e_init_quant_params(process_ctxt_t *ps_proc, int qp);
282
283/**
284*******************************************************************************
285*
286* @brief
287* Initialize AIR mb frame Map
288*
289* @par Description:
290* Initialize AIR mb frame map
291* MB frame map indicates which frame an Mb should be coded as intra according to AIR
292*
293* @param[in] ps_codec
294* Pointer to codec context
295*
296* @returns error_status
297*
298* @remarks
299*
300*
301*******************************************************************************
302*/
303IH264E_ERROR_T ih264e_init_air_map(codec_t *ps_codec);
304
305/**
306*******************************************************************************
307*
308* @brief
309* Codec level initializations
310*
311* @par Description:
312* Initializes the codec with parameters that needs to be set before encoding
313* first frame
314*
315* @param[in] ps_codec
316* Pointer to codec context
317*
318* @param[in] ps_inp_buf
319* Pointer to input buffer context
320*
321* @returns error_status
322*
323* @remarks
324*
325*
326*******************************************************************************
327*/
328IH264E_ERROR_T ih264e_codec_init(codec_t *ps_codec);
329
330/**
331*******************************************************************************
332*
333* @brief
334* Picture level initializations
335*
336* @par Description:
337* Before beginning to encode the frame, the current function initializes all
338* the ctxts (proc, entropy, me, ...) basing on the input configured params.
339* It locates space for storing recon in the encoder picture buffer set, fetches
340* reference frame from encoder picture buffer set. Calls RC pre-enc to get
341* qp and pic type for the current frame. Queues proc jobs so that
342* the other threads can begin encoding. In brief, this function sets up the
343* tone for the entire encoder.
344*
345* @param[in] ps_codec
346* Pointer to codec context
347*
348* @param[in] ps_inp_buf
349* Pointer to input buffer context
350*
351* @returns error_status
352*
353* @remarks
354*
355*
356*******************************************************************************
357*/
358IH264E_ERROR_T ih264e_pic_init(codec_t *ps_codec, inp_buf_t *ps_inp_buf);
359
360#endif /* IH264E_UTILS_H_ */