aboutsummaryrefslogtreecommitdiff
path: root/encoder/ih264e_core_coding.h
diff options
context:
space:
mode:
Diffstat (limited to 'encoder/ih264e_core_coding.h')
-rw-r--r--encoder/ih264e_core_coding.h531
1 files changed, 18 insertions, 513 deletions
diff --git a/encoder/ih264e_core_coding.h b/encoder/ih264e_core_coding.h
index 1237d25..7087ec6 100644
--- a/encoder/ih264e_core_coding.h
+++ b/encoder/ih264e_core_coding.h
@@ -24,7 +24,8 @@
* ih264e_core_coding.h
*
* @brief
-* This file contains extern declarations of core coding routines
+* This file contains declarations necessary for core coding of luma and chroma
+* blocks
*
* @author
* ittiam
@@ -34,11 +35,11 @@
******************************************************************************
*/
-#ifndef IH264E_CORE_CODING_H_
-#define IH264E_CORE_CODING_H_
+#ifndef _IH264E_CORE_CODING_H_
+#define _IH264E_CORE_CODING_H_
/*****************************************************************************/
-/* Constant Macros */
+/* Macros */
/*****************************************************************************/
/**
@@ -84,14 +85,14 @@
*/
#define DEQUEUE_BLKID_FROM_CONTROL( u4_cntrl, blk_lin_id) \
{ \
- blk_lin_id = CLZ(u4_cntrl); \
- u4_cntrl &= (0x7FFFFFFF >> blk_lin_id); \
+ blk_lin_id = CLZ(u4_cntrl); \
+ u4_cntrl &= (0x7FFFFFFF >> blk_lin_id); \
};
-#define IND2SUB_LUMA_MB(u4_blk_id,i4_offset_x,i4_offset_y) \
-{ \
- i4_offset_x = (u4_blk_id % 4) << 2; \
- i4_offset_y = (u4_blk_id / 4) << 2; \
+#define IND2SUB_LUMA_MB(u4_blk_id,i4_offset_x,i4_offset_y) \
+{ \
+ i4_offset_x = (u4_blk_id % 4) << 2; \
+ i4_offset_y = (u4_blk_id / 4) << 2; \
}
#define IND2SUB_CHROMA_MB(u4_blk_id,i4_offset_x,i4_offset_y) \
@@ -105,67 +106,6 @@
/* Function Declarations */
/*****************************************************************************/
-/**
-*******************************************************************************
-*
-* @brief
-* This function performs does the DCT transform then Hadamard transform
-* and quantization for a macroblock when the mb mode is intra 16x16 mode
-*
-* @par Description:
-* First cf4 is done on all 16 4x4 blocks of the 16x16 input block.
-* Then hadamard transform is done on the DC coefficients
-* Quantization is then performed on the 16x16 block, 4x4 wise
-*
-* @param[in] pu1_src
-* Pointer to source sub-block
-*
-* @param[in] pu1_pred
-* Pointer to prediction sub-block
-*
-* @param[in] pi2_out
-* Pointer to residual sub-block
-* The output will be in linear format
-* The first 16 continuous locations will contain the values of Dc block
-* After DC block and a stride 1st AC block will follow
-* After one more stride next AC block will follow
-* The blocks will be in raster scan order
-*
-* @param[in] src_strd
-* Source stride
-*
-* @param[in] pred_strd
-* Prediction stride
-*
-* @param[in] dst_strd
-* Destination stride
-*
-* @param[in] pu2_scale_matrix
-* The quantization matrix for 4x4 transform
-*
-* @param[in] pu2_threshold_matrix
-* Threshold matrix
-*
-* @param[in] u4_qbits
-* 15+QP/6
-*
-* @param[in] u4_round_factor
-* Round factor for quant
-*
-* @param[out] pu1_nnz
-* Memory to store the non-zeros after transform
-* The first byte will be the nnz of DC block
-* From the next byte the AC nnzs will be stored in raster scan order
-*
-* @param u4_dc_flag
-* Signals if Dc transform is to be done or not
-* 1 -> Dc transform will be done
-* 0 -> Dc transform will not be done
-*
-* @remarks
-*
-*******************************************************************************
-*/
void ih264e_luma_16x16_resi_trans_dctrans_quant(
codec_t *ps_codec, UWORD8 *pu1_src, UWORD8 *pu1_pred,
WORD16 *pi2_out, WORD32 src_strd, WORD32 pred_strd,
@@ -173,71 +113,6 @@ void ih264e_luma_16x16_resi_trans_dctrans_quant(
const UWORD16 *pu2_threshold_matrix, UWORD32 u4_qbits,
UWORD32 u4_round_factor, UWORD8 *pu1_nnz, UWORD32 u4_dc_flag);
-/**
-*******************************************************************************
-*
-* @brief
-* This function performs the intra 16x16 inverse transform process for H264
-* it includes inverse Dc transform, inverse quant and then inverse transform
-*
-* @par Description:
-*
-* @param[in] pi2_src
-* Input data, 16x16 size
-* First 16 mem locations will have the Dc coffs in rater scan order in linear fashion
-* after a stride 1st AC clock will be present again in raster can order
-* Then each AC block of the 16x16 block will follow in raster scan order
-*
-* @param[in] pu1_pred
-* The predicted data, 16x16 size
-* Block by block form
-*
-* @param[in] pu1_out
-* Output 16x16
-* In block by block form
-*
-* @param[in] src_strd
-* Source stride
-*
-* @param[in] pred_strd
-* input stride for prediction buffer
-*
-* @param[in] out_strd
-* input stride for output buffer
-*
-* @param[in] pu2_iscale_mat
-* Inverse quantization matrix for 4x4 transform
-*
-* @param[in] pu2_weigh_mat
-* weight matrix of 4x4 transform
-*
-* @param[in] qp_div
-* QP/6
-*
-* @param[in] pi4_tmp
-* Input temporary buffer
-* needs to be at least 20 in size
-*
-* @param[in] pu4_cntrl
-* Controls the transform path
-* total Last 17 bits are used
-* the 16th th bit will correspond to DC block
-* and 32-17 will correspond to the ac blocks in raster scan order
-* bit equaling zero indicates that the entire 4x4 block is zero for DC
-* For AC blocks a bit equaling zero will mean that all 15 AC coffs of the block is nonzero
-*
-* @param[in] pi4_tmp
-* Input temporary buffer
-* needs to be at least COFF_CNT_SUB_BLK_4x4+COFF_CNT_SUB_BLK_4x4 size
-*
-* @returns
-* none
-*
-* @remarks
-* The all zero case must be taken care outside
-*
-*******************************************************************************
-*/
void ih264e_luma_16x16_idctrans_iquant_itrans_recon(
codec_t *ps_codec, WORD16 *pi2_src, UWORD8 *pu1_pred,
UWORD8 *pu1_out, WORD32 src_strd, WORD32 pred_strd,
@@ -245,75 +120,6 @@ void ih264e_luma_16x16_idctrans_iquant_itrans_recon(
const UWORD16 *pu2_weigh_mat, UWORD32 qp_div, UWORD32 u4_cntrl,
UWORD32 u4_dc_trans_flag, WORD32 *pi4_tmp);
-/**
-*******************************************************************************
-*
-* @brief
-* This function performs does the DCT transform then Hadamard transform
-* and quantization for a chroma macroblock
-*
-* @par Description:
-* First cf4 is done on all 16 4x4 blocks of the 8x8input block
-* Then hadamard transform is done on the DC coefficients
-* Quantization is then performed on the 8x8 block, 4x4 wise
-*
-* @param[in] pu1_src
-* Pointer to source sub-block
-* The input is in interleaved format for two chroma planes
-*
-* @param[in] pu1_pred
-* Pointer to prediction sub-block
-* Prediction is in inter leaved format
-*
-* @param[in] pi2_out
-* Pointer to residual sub-block
-* The output will be in linear format
-* The first 4 continuous locations will contain the values of DC block for U
-* and then next 4 will contain for V.
-* After DC block and a stride 1st AC block of U plane will follow
-* After one more stride next AC block of V plane will follow
-* The blocks will be in raster scan order
-*
-* After all the AC blocks of U plane AC blocks of V plane will follow in exact
-* same way
-*
-* @param[in] src_strd
-* Source stride
-*
-* @param[in] pred_strd
-* Prediction stride
-*
-* @param[in] dst_strd
-* Destination stride
-*
-* @param[in] pu2_scale_matrix
-* The quantization matrix for 4x4 transform
-*
-* @param[in] pu2_threshold_matrix
-* Threshold matrix
-*
-* @param[in] u4_qbits
-* 15+QP/6
-*
-* @param[in] u4_round_factor
-* Round factor for quant
-*
-* @param[out] pu1_nnz
-* Memory to store the non-zeros after transform
-* The first byte will be the nnz od DC block for U plane
-* From the next byte the AC nnzs will be storerd in raster scan order
-* The fifth byte will be nnz of Dc block of V plane
-* Then Ac blocks will follow
-*
-* @param u4_dc_flag
-* Signals if Dc transform is to be done or not
-* 1 -> Dc transform will be done
-* 0 -> Dc transform will not be done
-*
-* @remarks
-*
-*******************************************************************************
-*/
void ih264e_chroma_8x8_resi_trans_dctrans_quant(
codec_t *ps_codec, UWORD8 *pu1_src, UWORD8 *pu1_pred,
WORD16 *pi2_out, WORD32 src_strd, WORD32 pred_strd,
@@ -321,64 +127,6 @@ void ih264e_chroma_8x8_resi_trans_dctrans_quant(
const UWORD16 *pu2_threshold_matrix, UWORD32 u4_qbits,
UWORD32 u4_round_factor, UWORD8 *pu1_nnz_c);
-/**
-*******************************************************************************
-* @brief
-* This function performs the inverse transform with process for chroma MB of H264
-*
-* @par Description:
-* Does inverse DC transform ,inverse quantization inverse transform
-*
-* @param[in] pi2_src
-* Input data, 16x16 size
-* The input is in the form of, first 4 locations will contain DC coeffs of
-* U plane, next 4 will contain DC coeffs of V plane, then AC blocks of U plane
-* in raster scan order will follow, each block as linear array in raster scan order.
-* After a stride next AC block will follow. After all AC blocks of U plane
-* V plane AC blocks will follow in exact same order.
-*
-* @param[in] pu1_pred
-* The predicted data, 8x16 size, U and V interleaved
-*
-* @param[in] pu1_out
-* Output 8x16, U and V interleaved
-*
-* @param[in] src_strd
-* Source stride
-*
-* @param[in] pred_strd
-* input stride for prediction buffer
-*
-* @param[in] out_strd
-* input stride for output buffer
-*
-* @param[in] pu2_iscale_mat
-* Inverse quantization martix for 4x4 transform
-*
-* @param[in] pu2_weigh_mat
-* weight matrix of 4x4 transform
-*
-* @param[in] qp_div
-* QP/6
-*
-* @param[in] pi4_tmp
-* Input temporary buffer
-* needs to be at least COFF_CNT_SUB_BLK_4x4 + Number of Dc cofss for chroma * number of planes
-* in size
-*
-* @param[in] pu4_cntrl
-* Controls the transform path
-* the 15 th bit will correspond to DC block of U plane , 14th will indicate the V plane Dc block
-* 32-28 bits will indicate AC blocks of U plane in raster scan order
-* 27-23 bits will indicate AC blocks of V plane in rater scan order
-* The bit 1 implies that there is at least one non zero coff in a block
-*
-* @returns
-* none
-*
-* @remarks
-*******************************************************************************
-*/
void ih264e_chroma_8x8_idctrans_iquant_itrans_recon(
codec_t *ps_codec, WORD16 *pi2_src, UWORD8 *pu1_pred,
UWORD8 *pu1_out, WORD32 src_strd, WORD32 pred_strd,
@@ -386,268 +134,25 @@ void ih264e_chroma_8x8_idctrans_iquant_itrans_recon(
const UWORD16 *pu2_weigh_mat, UWORD32 qp_div, UWORD32 u4_cntrl,
WORD32 *pi4_tmp);
-/**
-******************************************************************************
-*
-* @brief This function packs residue of an i16x16 luma mb for entropy coding
-*
-* @par Description
-* An i16 macro block contains two classes of units, dc 4x4 block and
-* 4x4 ac blocks. while packing the mb, the dc block is sent first, and
-* the 16 ac blocks are sent next in scan order. Each and every block is
-* represented by 3 parameters (nnz, significant coefficient map and the
-* residue coefficients itself). If a 4x4 unit does not have any coefficients
-* then only nnz is sent. Inside a 4x4 block the individual coefficients are
-* sent in scan order.
-*
-* The first byte of each block will be nnz of the block, if it is non zero,
-* a 2 byte significance map is sent. This is followed by nonzero coefficients.
-* This is repeated for 1 dc + 16 ac blocks.
-*
-* @param[in] pi2_res_mb
-* pointer to residue mb
-*
-* @param[in, out] pv_mb_coeff_data
-* buffer pointing to packed residue coefficients
-*
-* @param[in] u4_res_strd
-* residual block stride
-*
-* @param[out] u1_cbp_l
-* coded block pattern luma
-*
-* @param[in] pu1_nnz
-* number of non zero coefficients in each 4x4 unit
-*
-* @param[out]
-* Control signal for inverse transform of 16x16 blocks
-*
-* @return none
-*
-* @ remarks
-*
-******************************************************************************
-*/
void ih264e_pack_l_mb_i16(WORD16 *pi2_res_mb, void **pv_mb_coeff_data,
WORD32 i4_res_strd, UWORD8 *u1_cbp_l, UWORD8 *pu1_nnz,
UWORD32 *pu4_cntrl);
-/**
-******************************************************************************
-*
-* @brief This function packs residue of an i8x8 chroma mb for entropy coding
-*
-* @par Description
-* An i8 chroma macro block contains two classes of units, dc 2x2 block and
-* 4x4 ac blocks. while packing the mb, the dc block is sent first, and
-* the 4 ac blocks are sent next in scan order. Each and every block is
-* represented by 3 parameters (nnz, significant coefficient map and the
-* residue coefficients itself). If a 4x4 unit does not have any coefficients
-* then only nnz is sent. Inside a 4x4 block the individual coefficients are
-* sent in scan order.
-*
-* The first byte of each block will be nnz of the block, if it is non zero,
-* a 2 byte significance map is sent. This is followed by nonzero coefficients.
-* This is repeated for 1 dc + 4 ac blocks.
-*
-* @param[in] pi2_res_mb
-* pointer to residue mb
-*
-* @param[in, out] pv_mb_coeff_data
-* buffer pointing to packed residue coefficients
-*
-* @param[in] u4_res_strd
-* residual block stride
-*
-* @param[out] u1_cbp_c
-* coded block pattern chroma
-*
-* @param[in] pu1_nnz
-* number of non zero coefficients in each 4x4 unit
-*
-* @param[out] pu1_nnz
-* Control signal for inverse transform
-*
-* @param[in] u4_swap_uv
-* Swaps the order of U and V planes in entropy bitstream
-*
-* @return none
-*
-* @ remarks
-*
-******************************************************************************
-*/
void ih264e_pack_c_mb(WORD16 *pi2_res_mb, void **pv_mb_coeff_data,
WORD32 i4_res_strd, UWORD8 *u1_cbp_c, UWORD8 *pu1_nnz,
UWORD32 u4_kill_coffs_flag, UWORD32 *pu4_cntrl,
UWORD32 u4_swap_uv);
-/**
-*******************************************************************************
-*
-* @brief performs luma core coding when intra mode is i16x16
-*
-* @par Description:
-* If the current mb is to be coded as intra of mb type i16x16, the mb is first
-* predicted using one of i16x16 prediction filters, basing on the intra mode
-* chosen. Then, error is computed between the input blk and the estimated blk.
-* This error is transformed (hierarchical transform i.e., dct followed by hada-
-* -mard), quantized. The quantized coefficients are packed in scan order for
-* entropy coding.
-*
-* @param[in] ps_proc_ctxt
-* pointer to the current macro block context
-*
-* @returns u1_cbp_l
-* coded block pattern luma
-*
-* @remarks none
-*
-*******************************************************************************
-*/
-UWORD8 ih264e_code_luma_intra_macroblock_16x16
- (
- process_ctxt_t *ps_proc
- );
+UWORD8 ih264e_code_luma_intra_macroblock_16x16(process_ctxt_t *ps_proc);
-/**
-*******************************************************************************
-*
-* @brief performs luma core coding when intra mode is i4x4
-*
-* @par Description:
-* If the current mb is to be coded as intra of mb type i4x4, the mb is first
-* predicted using one of i4x4 prediction filters, basing on the intra mode
-* chosen. Then, error is computed between the input blk and the estimated blk.
-* This error is dct transformed and quantized. The quantized coefficients are
-* packed in scan order for entropy coding.
-*
-* @param[in] ps_proc_ctxt
-* pointer to the current macro block context
-*
-* @returns u1_cbp_l
-* coded block pattern luma
-*
-* @remarks
-* The traversal of 4x4 subblocks in the 16x16 macroblock is as per the scan order
-* mentioned in h.264 specification
-*
-*******************************************************************************
-*/
-UWORD8 ih264e_code_luma_intra_macroblock_4x4
- (
- process_ctxt_t *ps_proc
- );
+UWORD8 ih264e_code_luma_intra_macroblock_4x4(process_ctxt_t *ps_proc);
-/**
-*******************************************************************************
-*
-* @brief performs luma core coding when intra mode is i4x4
-*
-* @par Description:
-* If the current mb is to be coded as intra of mb type i4x4, the mb is first
-* predicted using one of i4x4 prediction filters, basing on the intra mode
-* chosen. Then, error is computed between the input blk and the estimated blk.
-* This error is dct transformed and quantized. The quantized coefficients are
-* packed in scan order for entropy coding.
-*
-* @param[in] ps_proc_ctxt
-* pointer to the current macro block context
-*
-* @returns u1_cbp_l
-* coded block pattern luma
-*
-* @remarks
-* The traversal of 4x4 subblocks in the 16x16 macroblock is as per the scan order
-* mentioned in h.264 specification
-*
-*******************************************************************************
-*/
-UWORD8 ih264e_code_luma_intra_macroblock_4x4_rdopt_on
- (
- process_ctxt_t *ps_proc
- );
+UWORD8 ih264e_code_luma_intra_macroblock_4x4_rdopt_on(process_ctxt_t *ps_proc);
-/**
-*******************************************************************************
-*
-* @brief performs chroma core coding for intra macro blocks
-*
-* @par Description:
-* If the current MB is to be intra coded with mb type chroma I8x8, the MB is
-* first predicted using intra 8x8 prediction filters. The predicted data is
-* compared with the input for error and the error is transformed. The DC
-* coefficients of each transformed sub blocks are further transformed using
-* Hadamard transform. The resulting coefficients are quantized, packed and sent
-* for entropy coding.
-*
-* @param[in] ps_proc_ctxt
-* pointer to the current macro block context
-*
-* @returns u1_cbp_c
-* coded block pattern chroma
-*
-* @remarks
-* The traversal of 4x4 subblocks in the 8x8 macroblock is as per the scan order
-* mentioned in h.264 specification
-*
-*******************************************************************************
-*/
-UWORD8 ih264e_code_chroma_intra_macroblock_8x8
- (
- process_ctxt_t *ps_proc
- );
+UWORD8 ih264e_code_chroma_intra_macroblock_8x8(process_ctxt_t *ps_proc);
-/**
-*******************************************************************************
-* @brief performs luma core coding when mode is inter
-*
-* @par Description:
-* If the current mb is to be coded as inter predicted mb,based on the sub mb
-* partitions and corresponding motion vectors generated by ME, prediction is done.
-* Then, error is computed between the input blk and the estimated blk.
-* This error is transformed ( dct and with out hadamard), quantized. The
-* quantized coefficients are packed in scan order for entropy coding.
-*
-* @param[in] ps_proc_ctxt
-* pointer to the current macro block context
-*
-* @returns u1_cbp_l
-* coded block pattern luma
-*
-* @remarks none
-*
-*******************************************************************************
-*/
-UWORD8 ih264e_code_luma_inter_macroblock_16x16
- (
- process_ctxt_t *ps_proc
- );
+UWORD8 ih264e_code_luma_inter_macroblock_16x16(process_ctxt_t *ps_proc);
-/**
-*******************************************************************************
-* @brief performs chroma core coding for inter macro blocks
-*
-* @par Description:
-* If the current mb is to be coded as inter predicted mb, based on the sub mb
-* partitions and corresponding motion vectors generated by ME, prediction is done.
-* Then, error is computed between the input blk and the estimated blk.
-* This error is transformed, quantized. The quantized coefficients
-* are packed in scan order for entropy coding.
-*
-* @param[in] ps_proc_ctxt
-* pointer to the current macro block context
-*
-* @returns u1_cbp_l
-* coded block pattern luma
-*
-* @remarks none
-*
-*******************************************************************************
-*/
-UWORD8 ih264e_code_chroma_inter_macroblock_8x8
- (
- process_ctxt_t *ps_proc
- );
+UWORD8 ih264e_code_chroma_inter_macroblock_8x8(process_ctxt_t *ps_proc);
-#endif /* IH264E_CORE_CODING_H_ */
+#endif /* _IH264E_CORE_CODING_H_ */