You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
361 lines
9.7 KiB
361 lines
9.7 KiB
/******************************************************************************
|
|
*
|
|
* Copyright (C) 2015 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at:
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*
|
|
*****************************************************************************
|
|
* Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
|
|
*/
|
|
|
|
/**
|
|
*******************************************************************************
|
|
* @file
|
|
* ih264e_utils.h
|
|
*
|
|
* @brief
|
|
* Contains declarations of miscellaneous utility functions used by the encoder
|
|
*
|
|
* @author
|
|
* Harish
|
|
*
|
|
* @par List of Functions:
|
|
* -ih264e_input_queue_update()
|
|
* -ih264e_get_min_level()
|
|
* -ih264e_get_lvl_idx()
|
|
* -ih264e_get_dpb_size()
|
|
* -ih264e_get_total_pic_buf_size()
|
|
* -ih264e_get_pic_mv_bank_size()
|
|
* -ih264e_pic_buf_mgr_add_bufs()
|
|
* -ih264e_mv_buf_mgr_add_bufs()
|
|
* -ih264e_init_quant_params()
|
|
* -ih264e_init_air_map()
|
|
* -ih264e_codec_init()
|
|
* -ih264e_pic_init()
|
|
*
|
|
* @remarks
|
|
* None
|
|
*
|
|
*******************************************************************************
|
|
*/
|
|
|
|
#ifndef IH264E_UTILS_H_
|
|
#define IH264E_UTILS_H_
|
|
|
|
/**
|
|
*******************************************************************************
|
|
*
|
|
* @brief
|
|
* Queues the current buffer, gets back a another buffer for encoding with corrent
|
|
* picture type
|
|
*
|
|
* @par Description:
|
|
*
|
|
* @param[in] ps_codec
|
|
* Pointer to codec descriptor
|
|
*
|
|
* @param[in] ps_ive_ip
|
|
* Current input buffer to the encoder
|
|
*
|
|
* @param[out] ps_inp
|
|
* Buffer to be encoded in the current pass
|
|
*
|
|
* @returns
|
|
* Flag indicating if we have a pre-enc skip or not
|
|
*
|
|
* @remarks
|
|
*
|
|
*******************************************************************************
|
|
*/
|
|
WORD32 ih264e_input_queue_update(codec_t *ps_codec,
|
|
ive_video_encode_ip_t *ps_ive_ip,
|
|
inp_buf_t *ps_enc_buff);
|
|
|
|
/**
|
|
*******************************************************************************
|
|
*
|
|
* @brief
|
|
* Used to get minimum level index for a given picture size
|
|
*
|
|
* @par Description:
|
|
* Gets the minimum level index and then gets corresponding level.
|
|
* Also used to ignore invalid levels like 2.3, 3.3 etc
|
|
*
|
|
* @param[in] wd
|
|
* Width
|
|
*
|
|
* @param[in] ht
|
|
* Height
|
|
*
|
|
* @returns Level index for a given level
|
|
*
|
|
* @remarks
|
|
*
|
|
*******************************************************************************
|
|
*/
|
|
WORD32 ih264e_get_min_level(WORD32 wd, WORD32 ht);
|
|
|
|
/**
|
|
*******************************************************************************
|
|
*
|
|
* @brief
|
|
* Used to get level index for a given level
|
|
*
|
|
* @par Description:
|
|
* Converts from level_idc (which is multiplied by 30) to an index that can be
|
|
* used as a lookup. Also used to ignore invalid levels like 2.2 , 3.2 etc
|
|
*
|
|
* @param[in] level
|
|
* Level of the stream
|
|
*
|
|
* @returns Level index for a given level
|
|
*
|
|
* @remarks
|
|
*
|
|
*******************************************************************************
|
|
*/
|
|
WORD32 ih264e_get_lvl_idx(WORD32 level);
|
|
|
|
/**
|
|
*******************************************************************************
|
|
*
|
|
* @brief returns maximum number of pictures allowed in dpb for a given level
|
|
*
|
|
* @par Description:
|
|
* For given width, height and level, number of pictures allowed in decoder
|
|
* picture buffer is computed as per Annex A.3.1
|
|
*
|
|
* @param[in] level
|
|
* level of the bit-stream
|
|
*
|
|
* @param[in] pic_size
|
|
* width * height
|
|
*
|
|
* @returns Number of buffers in DPB
|
|
*
|
|
* @remarks
|
|
* From annexure A.3.1 of H264 specification,
|
|
* max_dec_frame_buffering <= MaxDpbSize, where MaxDpbSize is equal to
|
|
* Min( 1024 * MaxDPB / ( PicWidthInMbs * FrameHeightInMbs * 384 ), 16 ) and
|
|
* MaxDPB is given in Table A-1 in units of 1024 bytes. However the MaxDPB size
|
|
* presented in the look up table gas_ih264_lvl_tbl is in units of 512
|
|
* bytes. Hence the expression is modified accordingly.
|
|
*
|
|
*******************************************************************************
|
|
*/
|
|
WORD32 ih264e_get_dpb_size(WORD32 level, WORD32 pic_size);
|
|
|
|
/**
|
|
*******************************************************************************
|
|
*
|
|
* @brief
|
|
* Used to get reference picture buffer size for a given level and
|
|
* and padding used
|
|
*
|
|
* @par Description:
|
|
* Used to get reference picture buffer size for a given level and padding used
|
|
* Each picture is padded on all four sides
|
|
*
|
|
* @param[in] pic_size
|
|
* Number of luma samples (Width * Height)
|
|
*
|
|
* @param[in] level
|
|
* Level
|
|
*
|
|
* @param[in] horz_pad
|
|
* Total padding used in horizontal direction
|
|
*
|
|
* @param[in] vert_pad
|
|
* Total padding used in vertical direction
|
|
*
|
|
* @returns Total picture buffer size
|
|
*
|
|
* @remarks
|
|
*
|
|
*
|
|
*******************************************************************************
|
|
*/
|
|
WORD32 ih264e_get_total_pic_buf_size(WORD32 pic_size, WORD32 level,
|
|
WORD32 horz_pad, WORD32 vert_pad,
|
|
WORD32 num_ref_frames,
|
|
WORD32 num_reorder_frames);
|
|
|
|
/**
|
|
*******************************************************************************
|
|
*
|
|
* @brief Returns MV bank buffer size for a given number of luma samples
|
|
*
|
|
* @par Description:
|
|
* For given number of luma samples one MV bank size is computed.
|
|
* Each MV bank includes pu_map and enc_pu_t for all the min PUs(4x4) in a picture
|
|
*
|
|
* @param[in] num_luma_samples
|
|
* Max number of luma pixels in the frame
|
|
*
|
|
* @returns Total MV Bank size
|
|
*
|
|
* @remarks
|
|
*
|
|
*
|
|
*******************************************************************************
|
|
*/
|
|
WORD32 ih264e_get_pic_mv_bank_size(WORD32 num_luma_samples);
|
|
|
|
/**
|
|
*******************************************************************************
|
|
*
|
|
* @brief
|
|
* Function to initialize ps_pic_buf structs add pic buffers to
|
|
* buffer manager in case of non-shared mode
|
|
*
|
|
* @par Description:
|
|
* Function to initialize ps_pic_buf structs add pic buffers to
|
|
* buffer manager in case of non-shared mode
|
|
* To be called once per stream or for every reset
|
|
*
|
|
* @param[in] ps_codec
|
|
* Pointer to codec context
|
|
*
|
|
* @returns error status
|
|
*
|
|
* @remarks
|
|
*
|
|
*
|
|
*******************************************************************************
|
|
*/
|
|
IH264E_ERROR_T ih264e_pic_buf_mgr_add_bufs(codec_t *ps_codec);
|
|
|
|
/**
|
|
*******************************************************************************
|
|
*
|
|
* @brief Function to add buffers to MV Bank buffer manager
|
|
*
|
|
* @par Description:
|
|
* Function to add buffers to MV Bank buffer manager. To be called once per
|
|
* stream or for every reset
|
|
*
|
|
* @param[in] ps_codec
|
|
* Pointer to codec context
|
|
*
|
|
* @returns error status
|
|
*
|
|
* @remarks
|
|
*
|
|
*******************************************************************************
|
|
*/
|
|
IH264E_ERROR_T ih264e_mv_buf_mgr_add_bufs(codec_t *ps_codec);
|
|
|
|
/**
|
|
*******************************************************************************
|
|
*
|
|
* @brief Function to initialize quant params structure
|
|
*
|
|
* @par Description:
|
|
* The forward quantization modules depends on qp/6, qp mod 6, forward scale
|
|
* matrix, forward threshold matrix, weight list. The inverse quantization
|
|
* modules depends on qp/6, qp mod 6, inverse scale matrix, weight list.
|
|
* These params are initialized in this function.
|
|
*
|
|
* @param[in] ps_proc
|
|
* pointer to process context
|
|
*
|
|
* @param[in] qp
|
|
* quantization parameter
|
|
*
|
|
* @returns none
|
|
*
|
|
* @remarks
|
|
*
|
|
*******************************************************************************
|
|
*/
|
|
void ih264e_init_quant_params(process_ctxt_t *ps_proc, int qp);
|
|
|
|
/**
|
|
*******************************************************************************
|
|
*
|
|
* @brief
|
|
* Initialize AIR mb frame Map
|
|
*
|
|
* @par Description:
|
|
* Initialize AIR mb frame map
|
|
* MB frame map indicates which frame an Mb should be coded as intra according to AIR
|
|
*
|
|
* @param[in] ps_codec
|
|
* Pointer to codec context
|
|
*
|
|
* @returns error_status
|
|
*
|
|
* @remarks
|
|
*
|
|
*
|
|
*******************************************************************************
|
|
*/
|
|
IH264E_ERROR_T ih264e_init_air_map(codec_t *ps_codec);
|
|
|
|
/**
|
|
*******************************************************************************
|
|
*
|
|
* @brief
|
|
* Codec level initializations
|
|
*
|
|
* @par Description:
|
|
* Initializes the codec with parameters that needs to be set before encoding
|
|
* first frame
|
|
*
|
|
* @param[in] ps_codec
|
|
* Pointer to codec context
|
|
*
|
|
* @param[in] ps_inp_buf
|
|
* Pointer to input buffer context
|
|
*
|
|
* @returns error_status
|
|
*
|
|
* @remarks
|
|
*
|
|
*
|
|
*******************************************************************************
|
|
*/
|
|
IH264E_ERROR_T ih264e_codec_init(codec_t *ps_codec);
|
|
|
|
/**
|
|
*******************************************************************************
|
|
*
|
|
* @brief
|
|
* Picture level initializations
|
|
*
|
|
* @par Description:
|
|
* Before beginning to encode the frame, the current function initializes all
|
|
* the ctxts (proc, entropy, me, ...) basing on the input configured params.
|
|
* It locates space for storing recon in the encoder picture buffer set, fetches
|
|
* reference frame from encoder picture buffer set. Calls RC pre-enc to get
|
|
* qp and pic type for the current frame. Queues proc jobs so that
|
|
* the other threads can begin encoding. In brief, this function sets up the
|
|
* tone for the entire encoder.
|
|
*
|
|
* @param[in] ps_codec
|
|
* Pointer to codec context
|
|
*
|
|
* @param[in] ps_inp_buf
|
|
* Pointer to input buffer context
|
|
*
|
|
* @returns error_status
|
|
*
|
|
* @remarks
|
|
*
|
|
*
|
|
*******************************************************************************
|
|
*/
|
|
IH264E_ERROR_T ih264e_pic_init(codec_t *ps_codec, inp_buf_t *ps_inp_buf);
|
|
|
|
#endif /* IH264E_UTILS_H_ */
|