18d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/******************************************************************************
28d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
38d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Copyright (C) 2015 The Android Open Source Project
48d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
58d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Licensed under the Apache License, Version 2.0 (the "License");
68d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * you may not use this file except in compliance with the License.
78d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * You may obtain a copy of the License at:
88d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
98d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * http://www.apache.org/licenses/LICENSE-2.0
108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Unless required by applicable law or agreed to in writing, software
128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * distributed under the License is distributed on an "AS IS" BASIS,
138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * See the License for the specific language governing permissions and
158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * limitations under the License.
168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *****************************************************************************
188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*/
208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/**
228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S******************************************************************************
238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @file
248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  ih264e_core_coding.h
258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @brief
278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  This file contains extern declarations of core coding routines
288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @author
308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  ittiam
318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @remarks
338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  none
348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S******************************************************************************
358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*/
368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#ifndef IH264E_CORE_CODING_H_
388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define IH264E_CORE_CODING_H_
398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Constant Macros                                                           */
428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/**
458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S******************************************************************************
468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  @brief      Enable/Disable Hadamard transform of DC Coeff's
478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S******************************************************************************
488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */
498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define DISABLE_DC_TRANSFORM 0
508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define ENABLE_DC_TRANSFORM 1
518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/**
538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*******************************************************************************
548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  @brief bit masks for DC and AC control flags
558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*******************************************************************************
568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */
578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define DC_COEFF_CNT_LUMA_MB        16
598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define NUM_4X4_BLKS_LUMA_MB_ROW    4
608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define NUM_LUMA4x4_BLOCKS_IN_MB    16
618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define NUM_CHROMA4x4_BLOCKS_IN_MB  8
628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define SIZE_4X4_BLK_HRZ            TRANS_SIZE_4
648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define SIZE_4X4_BLK_VERT           TRANS_SIZE_4
658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define CNTRL_FLAG_DC_MASK_LUMA     0x0000FFFF
678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define CNTRL_FLAG_AC_MASK_LUMA     0xFFFF0000
688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define CNTRL_FLAG_AC_MASK_CHROMA_U 0xF0000000
708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define CNTRL_FLAG_DC_MASK_CHROMA_U 0x0000F000
718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define CNTRL_FLAG_AC_MASK_CHROMA_V 0x0F000000
738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define CNTRL_FLAG_DC_MASK_CHROMA_V 0x00000F00
748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define CNTRL_FLAG_AC_MASK_CHROMA   ( CNTRL_FLAG_AC_MASK_CHROMA_U | CNTRL_FLAG_AC_MASK_CHROMA_V )
768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define CNTRL_FLAG_DC_MASK_CHROMA   ( CNTRL_FLAG_DC_MASK_CHROMA_U | CNTRL_FLAG_DC_MASK_CHROMA_V )
778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define CNTRL_FLAG_DCBLK_MASK_CHROMA 0x0000C000
798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/**
818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*******************************************************************************
828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  @brief macros for transforms
838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*******************************************************************************
848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */
858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define DEQUEUE_BLKID_FROM_CONTROL( u4_cntrl,  blk_lin_id)                     \
868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{                                                                              \
878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S  blk_lin_id = CLZ(u4_cntrl);                                                  \
888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S  u4_cntrl &= (0x7FFFFFFF >> blk_lin_id);                                      \
898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S};
908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define IND2SUB_LUMA_MB(u4_blk_id,i4_offset_x,i4_offset_y)                      \
928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{                                                                               \
938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S     i4_offset_x = (u4_blk_id % 4) << 2;                                        \
948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S     i4_offset_y = (u4_blk_id / 4) << 2;                                        \
958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define IND2SUB_CHROMA_MB(u4_blk_id,i4_offset_x,i4_offset_y)                   \
988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{                                                                              \
998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S     i4_offset_x = ((u4_blk_id & 0x1 ) << 3) + (u4_blk_id > 3);                \
1008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S     i4_offset_y = (u4_blk_id & 0x2) << 1;                                     \
1018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
1028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
1058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Declarations                                                     */
1068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
1078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/**
1098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*******************************************************************************
1108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
1118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @brief
1128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  This function performs does the DCT transform then Hadamard transform
1138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  and quantization for a macroblock when the mb mode is intra 16x16 mode
1148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
1158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @par Description:
1168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  First  cf4 is done on all 16 4x4 blocks of the 16x16 input block.
1178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Then hadamard transform is done on the DC coefficients
1188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Quantization is then performed on the 16x16 block, 4x4 wise
1198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
1208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] pu1_src
1218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Pointer to source sub-block
1228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
1238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] pu1_pred
1248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Pointer to prediction sub-block
1258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
1268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] pi2_out
1278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Pointer to residual sub-block
1288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  The output will be in linear format
1298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  The first 16 continuous locations will contain the values of Dc block
1308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  After DC block and a stride 1st AC block will follow
1318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  After one more stride next AC block will follow
1328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  The blocks will be in raster scan order
1338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
1348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] src_strd
1358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Source stride
1368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
1378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] pred_strd
1388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Prediction stride
1398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
1408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] dst_strd
1418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Destination stride
1428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
1438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] pu2_scale_matrix
1448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  The quantization matrix for 4x4 transform
1458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
1468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] pu2_threshold_matrix
1478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Threshold matrix
1488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
1498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] u4_qbits
1508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  15+QP/6
1518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
1528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] u4_round_factor
1538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Round factor for quant
1548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
1558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[out] pu1_nnz
1568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Memory to store the non-zeros after transform
1578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  The first byte will be the nnz of DC block
1588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  From the next byte the AC nnzs will be stored in raster scan order
1598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
1608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param u4_dc_flag
1618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Signals if Dc transform is to be done or not
1628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*   1 -> Dc transform will be done
1638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*   0 -> Dc transform will not be done
1648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
1658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @remarks
1668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
1678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*******************************************************************************
1688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*/
1698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264e_luma_16x16_resi_trans_dctrans_quant(
1708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                codec_t *ps_codec, UWORD8 *pu1_src, UWORD8 *pu1_pred,
1718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                WORD16 *pi2_out, WORD32 src_strd, WORD32 pred_strd,
1728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                WORD32 dst_strd, const UWORD16 *pu2_scale_matrix,
1738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                const UWORD16 *pu2_threshold_matrix, UWORD32 u4_qbits,
1748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                UWORD32 u4_round_factor, UWORD8 *pu1_nnz, UWORD32 u4_dc_flag);
1758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/**
1778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*******************************************************************************
1788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
1798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @brief
1808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  This function performs the intra 16x16 inverse transform process for H264
1818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  it includes inverse Dc transform, inverse quant and then inverse transform
1828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
1838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @par Description:
1848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
1858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] pi2_src
1868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Input data, 16x16 size
1878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  First 16 mem locations will have the Dc coffs in rater scan order in linear fashion
1888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  after a stride 1st AC clock will be present again in raster can order
1898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Then each AC block of the 16x16 block will follow in raster scan order
1908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
1918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] pu1_pred
1928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  The predicted data, 16x16 size
1938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Block by block form
1948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
1958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] pu1_out
1968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Output 16x16
1978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  In block by block form
1988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
1998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] src_strd
2008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Source stride
2018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
2028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] pred_strd
2038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  input stride for prediction buffer
2048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
2058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] out_strd
2068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  input stride for output buffer
2078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
2088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] pu2_iscale_mat
2098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Inverse quantization matrix for 4x4 transform
2108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
2118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] pu2_weigh_mat
2128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  weight matrix of 4x4 transform
2138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
2148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] qp_div
2158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  QP/6
2168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
2178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] pi4_tmp
2188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Input temporary buffer
2198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  needs to be at least 20 in size
2208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
2218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] pu4_cntrl
2228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Controls the transform path
2238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  total Last 17 bits are used
2248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  the 16th th bit will correspond to DC block
2258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  and 32-17 will correspond to the ac blocks in raster scan order
2268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  bit equaling zero indicates that the entire 4x4 block is zero for DC
2278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  For AC blocks a bit equaling zero will mean that all 15 AC coffs of the block is nonzero
2288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
2298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] pi4_tmp
2308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Input temporary buffer
2318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  needs to be at least COFF_CNT_SUB_BLK_4x4+COFF_CNT_SUB_BLK_4x4 size
2328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
2338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @returns
2348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  none
2358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
2368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @remarks
2378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  The all zero case must be taken care outside
2388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
2398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*******************************************************************************
2408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*/
2418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264e_luma_16x16_idctrans_iquant_itrans_recon(
2428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                codec_t *ps_codec, WORD16 *pi2_src, UWORD8 *pu1_pred,
2438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                UWORD8 *pu1_out, WORD32 src_strd, WORD32 pred_strd,
2448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                WORD32 out_strd, const UWORD16 *pu2_iscale_mat,
2458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                const UWORD16 *pu2_weigh_mat, UWORD32 qp_div, UWORD32 u4_cntrl,
2468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                UWORD32 u4_dc_trans_flag, WORD32 *pi4_tmp);
2478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/**
2498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*******************************************************************************
2508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
2518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @brief
2528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  This function performs does the DCT transform then Hadamard transform
2538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  and quantization for a chroma macroblock
2548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
2558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @par Description:
2568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  First  cf4 is done on all 16 4x4 blocks of the 8x8input block
2578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Then hadamard transform is done on the DC coefficients
2588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Quantization is then performed on the 8x8 block, 4x4 wise
2598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
2608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] pu1_src
2618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Pointer to source sub-block
2628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  The input is in interleaved format for two chroma planes
2638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
2648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] pu1_pred
2658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Pointer to prediction sub-block
2668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Prediction is in inter leaved format
2678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
2688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] pi2_out
2698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Pointer to residual sub-block
2708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  The output will be in linear format
2718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  The first 4 continuous locations will contain the values of DC block for U
2728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  and then next 4 will contain for V.
2738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  After DC block and a stride 1st AC block of U plane will follow
2748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  After one more stride next AC block of V plane will follow
2758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  The blocks will be in raster scan order
2768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
2778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  After all the AC blocks of U plane AC blocks of V plane will follow in exact
2788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  same way
2798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
2808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] src_strd
2818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Source stride
2828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
2838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] pred_strd
2848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Prediction stride
2858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
2868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] dst_strd
2878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Destination stride
2888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
2898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] pu2_scale_matrix
2908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  The quantization matrix for 4x4 transform
2918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
2928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] pu2_threshold_matrix
2938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Threshold matrix
2948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
2958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] u4_qbits
2968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  15+QP/6
2978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
2988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] u4_round_factor
2998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Round factor for quant
3008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
3018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[out] pu1_nnz
3028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Memory to store the non-zeros after transform
3038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  The first byte will be the nnz od DC block for U plane
3048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  From the next byte the AC nnzs will be storerd in raster scan order
3058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  The fifth byte will be nnz of Dc block of V plane
3068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Then Ac blocks will follow
3078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
3088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param u4_dc_flag
3098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Signals if Dc transform is to be done or not
3108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*   1 -> Dc transform will be done
3118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*   0 -> Dc transform will not be done
3128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
3138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @remarks
3148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
3158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*******************************************************************************
3168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*/
3178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264e_chroma_8x8_resi_trans_dctrans_quant(
3188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                codec_t *ps_codec, UWORD8 *pu1_src, UWORD8 *pu1_pred,
3198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                WORD16 *pi2_out, WORD32 src_strd, WORD32 pred_strd,
3208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                WORD32 out_strd, const UWORD16 *pu2_scale_matrix,
3218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                const UWORD16 *pu2_threshold_matrix, UWORD32 u4_qbits,
3228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                UWORD32 u4_round_factor, UWORD8 *pu1_nnz_c);
3238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/**
3258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*******************************************************************************
3268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @brief
3278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  This function performs the inverse transform with process for chroma MB of H264
3288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
3298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @par Description:
3308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Does inverse DC transform ,inverse quantization inverse transform
3318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
3328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] pi2_src
3338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Input data, 16x16 size
3348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  The input is in the form of, first 4 locations will contain DC coeffs of
3358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  U plane, next 4 will contain DC coeffs of V plane, then AC blocks of U plane
3368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  in raster scan order will follow, each block as linear array in raster scan order.
3378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  After a stride next AC block will follow. After all AC blocks of U plane
3388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  V plane AC blocks will follow in exact same order.
3398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
3408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] pu1_pred
3418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  The predicted data, 8x16 size, U and V interleaved
3428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
3438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] pu1_out
3448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Output 8x16, U and V interleaved
3458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
3468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] src_strd
3478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Source stride
3488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
3498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] pred_strd
3508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  input stride for prediction buffer
3518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
3528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] out_strd
3538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  input stride for output buffer
3548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
3558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] pu2_iscale_mat
3568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Inverse quantization martix for 4x4 transform
3578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
3588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] pu2_weigh_mat
3598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  weight matrix of 4x4 transform
3608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
3618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] qp_div
3628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  QP/6
3638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
3648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] pi4_tmp
3658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Input temporary buffer
3668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  needs to be at least COFF_CNT_SUB_BLK_4x4 + Number of Dc cofss for chroma * number of planes
3678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  in size
3688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
3698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] pu4_cntrl
3708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Controls the transform path
3718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  the 15 th bit will correspond to DC block of U plane , 14th will indicate the V plane Dc block
3728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  32-28 bits will indicate AC blocks of U plane in raster scan order
3738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  27-23 bits will indicate AC blocks of V plane in rater scan order
3748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  The bit 1 implies that there is at least one non zero coff in a block
3758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
3768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @returns
3778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  none
3788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
3798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @remarks
3808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*******************************************************************************
3818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*/
3828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264e_chroma_8x8_idctrans_iquant_itrans_recon(
3838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                codec_t *ps_codec, WORD16 *pi2_src, UWORD8 *pu1_pred,
3848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                UWORD8 *pu1_out, WORD32 src_strd, WORD32 pred_strd,
3858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                WORD32 out_strd, const UWORD16 *pu2_iscale_mat,
3868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                const UWORD16 *pu2_weigh_mat, UWORD32 qp_div, UWORD32 u4_cntrl,
3878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                WORD32 *pi4_tmp);
3888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/**
3908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S******************************************************************************
3918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
3928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @brief  This function packs residue of an i16x16 luma mb for entropy coding
3938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
3948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @par   Description
3958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  An i16 macro block contains two classes of units, dc 4x4 block and
3968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  4x4 ac blocks. while packing the mb, the dc block is sent first, and
3978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  the 16 ac blocks are sent next in scan order. Each and every block is
3988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  represented by 3 parameters (nnz, significant coefficient map and the
3998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  residue coefficients itself). If a 4x4 unit does not have any coefficients
4008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  then only nnz is sent. Inside a 4x4 block the individual coefficients are
4018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  sent in scan order.
4028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
4038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  The first byte of each block will be nnz of the block, if it is non zero,
4048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  a 2 byte significance map is sent. This is followed by nonzero coefficients.
4058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  This is repeated for 1 dc + 16 ac blocks.
4068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
4078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in]  pi2_res_mb
4088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  pointer to residue mb
4098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
4108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in, out]  pv_mb_coeff_data
4118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  buffer pointing to packed residue coefficients
4128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
4138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in]  u4_res_strd
4148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  residual block stride
4158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
4168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[out]  u1_cbp_l
4178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  coded block pattern luma
4188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
4198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in]   pu1_nnz
4208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  number of non zero coefficients in each 4x4 unit
4218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
4228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[out]
4238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Control signal for inverse transform of 16x16 blocks
4248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
4258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @return none
4268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
4278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @ remarks
4288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
4298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S******************************************************************************
4308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*/
4318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264e_pack_l_mb_i16(WORD16 *pi2_res_mb, void **pv_mb_coeff_data,
4328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                          WORD32 i4_res_strd, UWORD8 *u1_cbp_l, UWORD8 *pu1_nnz,
4338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                          UWORD32 *pu4_cntrl);
4348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/**
4368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S******************************************************************************
4378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
4388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @brief  This function packs residue of an i8x8 chroma mb for entropy coding
4398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
4408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @par   Description
4418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  An i8 chroma macro block contains two classes of units, dc 2x2 block and
4428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  4x4 ac blocks. while packing the mb, the dc block is sent first, and
4438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  the 4 ac blocks are sent next in scan order. Each and every block is
4448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  represented by 3 parameters (nnz, significant coefficient map and the
4458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  residue coefficients itself). If a 4x4 unit does not have any coefficients
4468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  then only nnz is sent. Inside a 4x4 block the individual coefficients are
4478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  sent in scan order.
4488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
4498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  The first byte of each block will be nnz of the block, if it is non zero,
4508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  a 2 byte significance map is sent. This is followed by nonzero coefficients.
4518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  This is repeated for 1 dc + 4 ac blocks.
4528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
4538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in]  pi2_res_mb
4548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  pointer to residue mb
4558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
4568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in, out]  pv_mb_coeff_data
4578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  buffer pointing to packed residue coefficients
4588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
4598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in]  u4_res_strd
4608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  residual block stride
4618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
4628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[out]  u1_cbp_c
4638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  coded block pattern chroma
4648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
4658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in]   pu1_nnz
4668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  number of non zero coefficients in each 4x4 unit
4678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
4688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[out]   pu1_nnz
4698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Control signal for inverse transform
4708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
4718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in]   u4_swap_uv
4728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Swaps the order of U and V planes in entropy bitstream
4738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
4748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @return none
4758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
4768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @ remarks
4778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
4788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S******************************************************************************
4798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*/
4808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264e_pack_c_mb(WORD16 *pi2_res_mb, void **pv_mb_coeff_data,
4818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                      WORD32 i4_res_strd, UWORD8 *u1_cbp_c, UWORD8 *pu1_nnz,
4828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                      UWORD32 u4_kill_coffs_flag, UWORD32 *pu4_cntrl,
4838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                      UWORD32 u4_swap_uv);
4848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/**
4868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*******************************************************************************
4878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
4888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @brief performs luma core coding when intra mode is i16x16
4898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
4908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @par Description:
4918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  If the current mb is to be coded as intra of mb type i16x16, the mb is first
4928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  predicted using one of i16x16 prediction filters, basing on the intra mode
4938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  chosen. Then, error is computed between the input blk and the estimated blk.
4948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  This error is transformed (hierarchical transform i.e., dct followed by hada-
4958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  -mard), quantized. The quantized coefficients are packed in scan order for
4968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  entropy coding.
4978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
4988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] ps_proc_ctxt
4998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  pointer to the current macro block context
5008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
5018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @returns u1_cbp_l
5028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  coded block pattern luma
5038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
5048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @remarks none
5058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
5068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*******************************************************************************
5078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*/
5088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SUWORD8 ih264e_code_luma_intra_macroblock_16x16
5098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        (
5108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            process_ctxt_t *ps_proc
5118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        );
5128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/**
5148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*******************************************************************************
5158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
5168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @brief performs luma core coding when intra mode is i4x4
5178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
5188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @par Description:
5198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  If the current mb is to be coded as intra of mb type i4x4, the mb is first
5208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  predicted using one of i4x4 prediction filters, basing on the intra mode
5218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  chosen. Then, error is computed between the input blk and the estimated blk.
5228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  This error is dct transformed and quantized. The quantized coefficients are
5238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  packed in scan order for entropy coding.
5248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
5258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] ps_proc_ctxt
5268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  pointer to the current macro block context
5278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
5288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @returns u1_cbp_l
5298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  coded block pattern luma
5308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
5318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @remarks
5328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  The traversal of 4x4 subblocks in the 16x16 macroblock is as per the scan order
5338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  mentioned in h.264 specification
5348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
5358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*******************************************************************************
5368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*/
5378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SUWORD8 ih264e_code_luma_intra_macroblock_4x4
5388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        (
5398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            process_ctxt_t *ps_proc
5408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        );
5418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/**
5438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*******************************************************************************
5448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
5458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @brief performs luma core coding when intra mode is i4x4
5468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
5478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @par Description:
5488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  If the current mb is to be coded as intra of mb type i4x4, the mb is first
5498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  predicted using one of i4x4 prediction filters, basing on the intra mode
5508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  chosen. Then, error is computed between the input blk and the estimated blk.
5518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  This error is dct transformed and quantized. The quantized coefficients are
5528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  packed in scan order for entropy coding.
5538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
5548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] ps_proc_ctxt
5558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  pointer to the current macro block context
5568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
5578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @returns u1_cbp_l
5588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  coded block pattern luma
5598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
5608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @remarks
5618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  The traversal of 4x4 subblocks in the 16x16 macroblock is as per the scan order
5628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  mentioned in h.264 specification
5638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
5648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*******************************************************************************
5658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*/
5668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SUWORD8 ih264e_code_luma_intra_macroblock_4x4_rdopt_on
5678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        (
5688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            process_ctxt_t *ps_proc
5698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        );
5708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/**
5728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*******************************************************************************
5738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
5748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @brief performs chroma core coding for intra macro blocks
5758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
5768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @par Description:
5778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  If the current MB is to be intra coded with mb type chroma I8x8, the MB is
5788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  first predicted using intra 8x8 prediction filters. The predicted data is
5798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  compared with the input for error and the error is transformed. The DC
5808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  coefficients of each transformed sub blocks are further transformed using
5818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Hadamard transform. The resulting coefficients are quantized, packed and sent
5828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  for entropy coding.
5838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
5848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] ps_proc_ctxt
5858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  pointer to the current macro block context
5868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
5878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @returns u1_cbp_c
5888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  coded block pattern chroma
5898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
5908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @remarks
5918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  The traversal of 4x4 subblocks in the 8x8 macroblock is as per the scan order
5928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  mentioned in h.264 specification
5938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
5948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*******************************************************************************
5958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*/
5968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SUWORD8 ih264e_code_chroma_intra_macroblock_8x8
5978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        (
5988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            process_ctxt_t *ps_proc
5998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        );
6008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/**
6028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*******************************************************************************
6038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @brief performs luma core coding when  mode is inter
6048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
6058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @par Description:
6068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  If the current mb is to be coded as inter predicted mb,based on the sub mb
6078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  partitions and corresponding motion vectors generated by ME, prediction is done.
6088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Then, error is computed between the input blk and the estimated blk.
6098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  This error is transformed ( dct and with out hadamard), quantized. The
6108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  quantized coefficients are packed in scan order for entropy coding.
6118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
6128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] ps_proc_ctxt
6138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  pointer to the current macro block context
6148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
6158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @returns u1_cbp_l
6168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  coded block pattern luma
6178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
6188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @remarks none
6198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
6208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*******************************************************************************
6218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*/
6228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SUWORD8 ih264e_code_luma_inter_macroblock_16x16
6238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        (
6248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            process_ctxt_t *ps_proc
6258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        );
6268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/**
6288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*******************************************************************************
6298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @brief performs chroma core coding for inter macro blocks
6308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
6318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @par Description:
6328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  If the current mb is to be coded as inter predicted mb, based on the sub mb
6338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  partitions and corresponding motion vectors generated by ME, prediction is done.
6348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Then, error is computed between the input blk and the estimated blk.
6358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  This error is transformed, quantized. The quantized coefficients
6368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  are packed in scan order for entropy coding.
6378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
6388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] ps_proc_ctxt
6398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  pointer to the current macro block context
6408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
6418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @returns u1_cbp_l
6428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  coded block pattern luma
6438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
6448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @remarks none
6458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
6468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*******************************************************************************
6478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*/
6488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SUWORD8 ih264e_code_chroma_inter_macroblock_8x8
6498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        (
6508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            process_ctxt_t *ps_proc
6518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        );
6528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#endif /* IH264E_CORE_CODING_H_ */
654