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.
334 lines
9.6 KiB
334 lines
9.6 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_process.h |
|
* |
|
* @brief |
|
* Contains functions for codec thread |
|
* |
|
* @author |
|
* ittiam |
|
* |
|
* @remarks |
|
* None |
|
* |
|
******************************************************************************* |
|
*/ |
|
|
|
#ifndef IH264E_PROCESS_H_ |
|
#define IH264E_PROCESS_H_ |
|
|
|
/*****************************************************************************/ |
|
/* Function Declarations */ |
|
/*****************************************************************************/ |
|
|
|
/** |
|
****************************************************************************** |
|
* |
|
* @brief This function generates sps, pps set on request |
|
* |
|
* @par Description |
|
* When the encoder is set in header generation mode, the following function |
|
* is called. This generates sps and pps headers and returns the control back |
|
* to caller. |
|
* |
|
* @param[in] ps_codec |
|
* pointer to codec context |
|
* |
|
* @return success or failure error code |
|
* |
|
****************************************************************************** |
|
*/ |
|
IH264E_ERROR_T ih264e_generate_sps_pps |
|
( |
|
codec_t *ps_codec |
|
); |
|
|
|
/** |
|
******************************************************************************* |
|
* |
|
* @brief initialize entropy context. |
|
* |
|
* @par Description: |
|
* Before invoking the call to perform to entropy coding the entropy context |
|
* associated with the job needs to be initialized. This involves the start |
|
* mb address, end mb address, slice index and the pointer to location at |
|
* which the mb residue info and mb header info are packed. |
|
* |
|
* @param[in] ps_proc |
|
* Pointer to the current process context |
|
* |
|
* @returns error status |
|
* |
|
* @remarks none |
|
* |
|
******************************************************************************* |
|
*/ |
|
IH264E_ERROR_T ih264e_init_entropy_ctxt(process_ctxt_t *ps_proc); |
|
|
|
/** |
|
******************************************************************************* |
|
* |
|
* @brief entry point for entropy coding |
|
* |
|
* @par Description |
|
* This function calls lower level functions to perform entropy coding for a |
|
* group (n rows) of mb's. After encoding 1 row of mb's, the function takes |
|
* back the control, updates the ctxt and calls lower level functions again. |
|
* This process is repeated till all the rows or group of mb's (which ever is |
|
* minimum) are coded |
|
* |
|
* @param[in] ps_proc |
|
* process context |
|
* |
|
* @returns error status |
|
* |
|
* @remarks |
|
* NOTE : It is assumed that this routine is invoked at the start of a slice, |
|
* so the slice header is generated by default. |
|
* |
|
******************************************************************************* |
|
*/ |
|
IH264E_ERROR_T ih264e_entropy(process_ctxt_t *ps_proc); |
|
|
|
/** |
|
******************************************************************************* |
|
* |
|
* @brief Packs header information of a mb in to a buffer |
|
* |
|
* @par Description: |
|
* After the deciding the mode info of a macroblock, the syntax elements |
|
* associated with the mb are packed and stored. The entropy thread unpacks |
|
* this buffer and generates the end bit stream. |
|
* |
|
* @param[in] ps_proc |
|
* Pointer to the current process context |
|
* |
|
* @returns error status |
|
* |
|
* @remarks none |
|
* |
|
******************************************************************************* |
|
*/ |
|
IH264E_ERROR_T ih264e_pack_header_data |
|
( |
|
process_ctxt_t *ps_proc |
|
); |
|
|
|
/** |
|
******************************************************************************* |
|
* |
|
* @brief update process context after encoding an mb. This involves preserving |
|
* the current mb information for later use, initialize the proc ctxt elements to |
|
* encode next mb. |
|
* |
|
* @par Description: |
|
* This function performs house keeping tasks after encoding an mb. |
|
* After encoding an mb, various elements of the process context needs to be |
|
* updated to encode the next mb. For instance, the source, recon and reference |
|
* pointers, mb indices have to be adjusted to the next mb. The slice index of |
|
* the current mb needs to be updated. If mb qp modulation is enabled, then if |
|
* the qp changes the quant param structure needs to be updated. Also to encoding |
|
* the next mb, the current mb info is used as part of mode prediction or mv |
|
* prediction. Hence the current mb info has to preserved at top/top left/left |
|
* locations. |
|
* |
|
* @param[in] ps_proc |
|
* Pointer to the current process context |
|
* |
|
* @returns none |
|
* |
|
* @remarks none |
|
* |
|
******************************************************************************* |
|
*/ |
|
WORD32 ih264e_update_proc_ctxt |
|
( |
|
process_ctxt_t *ps_proc |
|
); |
|
|
|
/** |
|
******************************************************************************* |
|
* |
|
* @brief initialize process context. |
|
* |
|
* @par Description: |
|
* Before dispatching the current job to process thread, the process context |
|
* associated with the job is initialized. Usually every job aims to encode one |
|
* row of mb's. Basing on the row indices provided by the job, the process |
|
* context's buffer ptrs, slice indices and other elements that are necessary |
|
* during core-coding are initialized. |
|
* |
|
* @param[in] ps_proc |
|
* Pointer to the current process context |
|
* |
|
* @returns error status |
|
* |
|
* @remarks none |
|
* |
|
******************************************************************************* |
|
*/ |
|
IH264E_ERROR_T ih264e_init_proc_ctxt(process_ctxt_t *ps_proc); |
|
|
|
/** |
|
******************************************************************************* |
|
* |
|
* @brief This function performs luma & chroma padding |
|
* |
|
* @par Description: |
|
* |
|
* @param[in] ps_proc |
|
* Process context corresponding to the job |
|
* |
|
* @param[in] pu1_curr_pic_luma |
|
* Pointer to luma buffer |
|
* |
|
* @param[in] pu1_curr_pic_chroma |
|
* Pointer to chroma buffer |
|
* |
|
* @param[in] i4_mb_x |
|
* mb index x |
|
* |
|
* @param[in] i4_mb_y |
|
* mb index y |
|
* |
|
* @param[in] i4_pad_ht |
|
* number of rows to be padded |
|
* |
|
* @returns error status |
|
* |
|
* @remarks none |
|
* |
|
******************************************************************************* |
|
*/ |
|
IH264E_ERROR_T ih264e_pad_recon_buffer |
|
( |
|
process_ctxt_t *ps_proc, |
|
UWORD8 *pu1_curr_pic_luma, |
|
UWORD8 *pu1_curr_pic_chroma, |
|
WORD32 i4_mb_x, |
|
WORD32 i4_mb_y, |
|
WORD32 i4_pad_ht |
|
); |
|
|
|
/** |
|
******************************************************************************* |
|
* |
|
* @brief This function performs luma half pel planes generation |
|
* |
|
* @par Description: |
|
* |
|
* @param[in] ps_proc |
|
* Process context corresponding to the job |
|
* |
|
* @returns error status |
|
* |
|
* @remarks none |
|
* |
|
******************************************************************************* |
|
*/ |
|
IH264E_ERROR_T ih264e_halfpel_generation |
|
( |
|
process_ctxt_t *ps_proc, |
|
UWORD8 *pu1_curr_pic_luma, |
|
WORD32 i4_mb_x, |
|
WORD32 i4_mb_y |
|
); |
|
|
|
/** |
|
******************************************************************************* |
|
* |
|
* @brief This function performs luma & chroma core coding for a set of mb's. |
|
* |
|
* @par Description: |
|
* The mb to be coded is taken and is evaluated over a predefined set of modes |
|
* (intra (i16, i4, i8)/inter (mv, skip)) for best cost. The mode with least cost |
|
* is selected and using intra/inter prediction filters, prediction is carried out. |
|
* The deviation between src and pred signal constitutes error signal. This error |
|
* signal is transformed (hierarchical transform if necessary) and quantized. The |
|
* quantized residue is packed in to entropy buffer for entropy coding. This is |
|
* repeated for all the mb's enlisted under the job. |
|
* |
|
* @param[in] ps_proc |
|
* Process context corresponding to the job |
|
* |
|
* @returns error status |
|
* |
|
* @remarks none |
|
* |
|
******************************************************************************* |
|
*/ |
|
WORD32 ih264e_process(process_ctxt_t *ps_proc); |
|
|
|
/** |
|
******************************************************************************* |
|
* |
|
* @brief |
|
* Function to update rc context after encoding |
|
* |
|
* @par Description |
|
* This function updates the rate control context after the frame is encoded. |
|
* Number of bits consumed by the current frame, frame distortion, frame cost, |
|
* number of intra/inter mb's, ... are passed on to rate control context for |
|
* updating the rc model. |
|
* |
|
* @param[in] ps_codec |
|
* Handle to codec context |
|
* |
|
* @param[in] ctxt_sel |
|
* frame context selector |
|
* |
|
* @param[in] pic_cnt |
|
* pic count |
|
* |
|
* @returns i4_stuffing_byte |
|
* number of stuffing bytes (if necessary) |
|
* |
|
* @remarks |
|
* |
|
******************************************************************************* |
|
*/ |
|
WORD32 ih264e_update_rc_post_enc(codec_t *ps_codec, WORD32 ctxt_sel, WORD32 pic_cnt); |
|
|
|
/** |
|
******************************************************************************* |
|
* |
|
* @brief |
|
* entry point of a spawned encoder thread |
|
* |
|
* @par Description: |
|
* The encoder thread dequeues a proc/entropy job from the encoder queue and |
|
* calls necessary routines. |
|
* |
|
* @param[in] pv_proc |
|
* Process context corresponding to the thread |
|
* |
|
* @returns error status |
|
* |
|
* @remarks |
|
* |
|
******************************************************************************* |
|
*/ |
|
WORD32 ih264e_process_thread(void *pv_proc); |
|
|
|
#endif /* IH264E_PROCESS_H_ */
|
|
|