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 * @file
238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  ih264_iquant_itrans_recon.c
248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @brief
268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  Contains definition of functions for h264 inverse quantization inverse transformation and recon
278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @author
298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  Ittiam
308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  @par List of Functions:
328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  - ih264_iquant_itrans_recon_4x4()
338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  - ih264_iquant_itrans_recon_8x8()
348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  - ih264_iquant_itrans_recon_4x4_dc()
358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  - ih264_iquant_itrans_recon_8x8_dc()
368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  - ih264_iquant_itrans_recon_chroma_4x4()
378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  -ih264_iquant_itrans_recon_chroma_4x4_dc()
388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @remarks
408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *******************************************************************************
428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */
438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* File Includes                                                             */
468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* User include files */
498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_typedefs.h"
508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_defs.h"
518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_trans_macros.h"
528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_macros.h"
538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_platform_macros.h"
548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_trans_data.h"
558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_size_defs.h"
568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_structs.h"
578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_trans_quant_itrans_iquant.h"
588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*
608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ********************************************************************************
618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @brief This function reconstructs a 4x4 sub block from quantized resiude and
638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * prediction buffer
648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @par Description:
668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  The quantized residue is first inverse quantized, then inverse transformed.
678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  This inverse transformed content is added to the prediction buffer to recon-
688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  struct the end output
698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @param[in] pi2_src
718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  quantized 4x4 block
728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @param[in] pu1_pred
748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  prediction 4x4 block
758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @param[out] pu1_out
778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  reconstructed 4x4 block
788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @param[in] src_strd
808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  quantization buffer stride
818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @param[in] pred_strd,
838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  Prediction buffer stride
848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @param[in] out_strd
868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  recon buffer Stride
878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @param[in] pu2_scaling_list
898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  pointer to scaling list
908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @param[in] pu2_norm_adjust
928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  pointer to inverse scale matrix
938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @param[in] u4_qp_div_6
958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  Floor (qp/6)
968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @param[in] pi4_tmp
988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * temporary buffer of size 1*16
998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
1008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @returns none
1018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
1028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @remarks none
1038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
1048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *******************************************************************************
1058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */
1068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264_iquant_itrans_recon_4x4(WORD16 *pi2_src,
1078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                   UWORD8 *pu1_pred,
1088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                   UWORD8 *pu1_out,
1098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                   WORD32 pred_strd,
1108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                   WORD32 out_strd,
1118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                   const UWORD16 *pu2_iscal_mat,
1128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                   const UWORD16 *pu2_weigh_mat,
1138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                   UWORD32 u4_qp_div_6,
1148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                   WORD16 *pi2_tmp,
1158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                   WORD32 iq_start_idx,
1168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                   WORD16 *pi2_dc_ld_addr
1178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S)
1188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
1198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD16 *pi2_src_ptr = pi2_src;
1208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD16 *pi2_tmp_ptr = pi2_tmp;
1218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 *pu1_pred_ptr = pu1_pred;
1228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 *pu1_out_ptr = pu1_out;
1238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD16 x0, x1, x2, x3, i;
1248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 q0, q1, q2, q3;
1258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD16 i_macro;
1268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD16 rnd_fact = (u4_qp_div_6 < 4) ? 1 << (3 - u4_qp_div_6) : 0;
1278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* inverse quant */
1298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*horizontal inverse transform */
1308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    for(i = 0; i < SUB_BLK_WIDTH_4x4; i++)
1318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
1328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        q0 = pi2_src_ptr[0];
1338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        INV_QUANT(q0, pu2_iscal_mat[0], pu2_weigh_mat[0], u4_qp_div_6, rnd_fact,
1348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                  4);
1358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if (i==0 && iq_start_idx == 1)
1368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            q0 = pi2_dc_ld_addr[0];     // Restoring dc value for intra case
1378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        q2 = pi2_src_ptr[2];
1398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        INV_QUANT(q2, pu2_iscal_mat[2], pu2_weigh_mat[2], u4_qp_div_6, rnd_fact,
1408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                  4);
1418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        x0 = q0 + q2;
1438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        x1 = q0 - q2;
1448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        q1 = pi2_src_ptr[1];
1468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        INV_QUANT(q1, pu2_iscal_mat[1], pu2_weigh_mat[1], u4_qp_div_6, rnd_fact,
1478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                  4);
1488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        q3 = pi2_src_ptr[3];
1508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        INV_QUANT(q3, pu2_iscal_mat[3], pu2_weigh_mat[3], u4_qp_div_6, rnd_fact,
1518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                  4);
1528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        x2 = (q1 >> 1) - q3;
1548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        x3 = q1 + (q3 >> 1);
1558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_tmp_ptr[0] = x0 + x3;
1578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_tmp_ptr[1] = x1 + x2;
1588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_tmp_ptr[2] = x1 - x2;
1598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_tmp_ptr[3] = x0 - x3;
1608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_src_ptr += SUB_BLK_WIDTH_4x4;
1628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_tmp_ptr += SUB_BLK_WIDTH_4x4;
1638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu2_iscal_mat += SUB_BLK_WIDTH_4x4;
1648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu2_weigh_mat += SUB_BLK_WIDTH_4x4;
1658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
1668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* vertical inverse transform */
1688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    pi2_tmp_ptr = pi2_tmp;
1698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    for(i = 0; i < SUB_BLK_WIDTH_4x4; i++)
1708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
1718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_pred_ptr = pu1_pred;
1728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_out = pu1_out_ptr;
1738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        x0 = (pi2_tmp_ptr[0] + pi2_tmp_ptr[8]);
1758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        x1 = (pi2_tmp_ptr[0] - pi2_tmp_ptr[8]);
1768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        x2 = (pi2_tmp_ptr[4] >> 1) - pi2_tmp_ptr[12];
1778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        x3 = pi2_tmp_ptr[4] + (pi2_tmp_ptr[12] >> 1);
1788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* inverse prediction */
1808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_macro = x0 + x3;
1818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_macro = ((i_macro + 32) >> 6);
1828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_macro += *pu1_pred_ptr;
1838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        *pu1_out = CLIP_U8(i_macro);
1848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_pred_ptr += pred_strd;
1858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_out += out_strd;
1868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_macro = x1 + x2;
1888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_macro = ((i_macro + 32) >> 6);
1898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_macro += *pu1_pred_ptr;
1908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        *pu1_out = CLIP_U8(i_macro);
1918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_pred_ptr += pred_strd;
1928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_out += out_strd;
1938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_macro = x1 - x2;
1958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_macro = ((i_macro + 32) >> 6);
1968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_macro += *pu1_pred_ptr;
1978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        *pu1_out = CLIP_U8(i_macro);
1988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_pred_ptr += pred_strd;
1998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_out += out_strd;
2008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_macro = x0 - x3;
2028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_macro = ((i_macro + 32) >> 6);
2038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_macro += *pu1_pred_ptr;
2048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        *pu1_out = CLIP_U8(i_macro);
2058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_tmp_ptr++;
2078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_out_ptr++;
2088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_pred++;
2098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
2108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
2128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264_iquant_itrans_recon_4x4_dc(WORD16 *pi2_src,
2148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      UWORD8 *pu1_pred,
2158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      UWORD8 *pu1_out,
2168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      WORD32 pred_strd,
2178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      WORD32 out_strd,
2188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      const UWORD16 *pu2_iscal_mat,
2198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      const UWORD16 *pu2_weigh_mat,
2208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      UWORD32 u4_qp_div_6,
2218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      WORD16 *pi2_tmp,
2228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      WORD32 iq_start_idx,
2238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      WORD16 *pi2_dc_ld_addr)
2248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
2258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 *pu1_pred_ptr = pu1_pred;
2268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 *pu1_out_ptr = pu1_out;
2278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 q0;
2288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD16 x, i_macro, i;
2298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD16 rnd_fact = (u4_qp_div_6 < 4) ? 1 << (3 - u4_qp_div_6) : 0;
2308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UNUSED(pi2_tmp);
2318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if (iq_start_idx == 0)
2338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
2348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      q0 = pi2_src[0];
2358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      INV_QUANT(q0, pu2_iscal_mat[0], pu2_weigh_mat[0], u4_qp_div_6, rnd_fact, 4);
2368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
2378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else
2388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
2398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      q0 = pi2_dc_ld_addr[0];    // Restoring dc value for intra case3
2408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
2418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    i_macro = ((q0 + 32) >> 6);
2428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    for(i = 0; i < SUB_BLK_WIDTH_4x4; i++)
2438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
2448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_pred_ptr = pu1_pred;
2458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_out = pu1_out_ptr;
2468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* inverse prediction */
2488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        x = i_macro + *pu1_pred_ptr;
2508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        *pu1_out = CLIP_U8(x);
2518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_pred_ptr += pred_strd;
2528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_out += out_strd;
2538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        x = i_macro + *pu1_pred_ptr;
2558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        *pu1_out = CLIP_U8(x);
2568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_pred_ptr += pred_strd;
2578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_out += out_strd;
2588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        x = i_macro + *pu1_pred_ptr;
2608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        *pu1_out = CLIP_U8(x);
2618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_pred_ptr += pred_strd;
2628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_out += out_strd;
2638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        x = i_macro + *pu1_pred_ptr;
2658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        *pu1_out = CLIP_U8(x);
2668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_out_ptr++;
2688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_pred++;
2698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
2708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
2718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/**
2738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *******************************************************************************
2748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
2758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @brief
2768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  This function performs inverse quant and Inverse transform type Ci4 for 8x8 block
2778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
2788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @par Description:
2798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  Performs inverse transform Ci8 and adds the residue to get the
2808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  reconstructed block
2818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
2828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @param[in] pi2_src
2838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  Input 8x8coefficients
2848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
2858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @param[in] pu1_pred
2868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  Prediction 8x8 block
2878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
2888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @param[out] pu1_recon
2898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  Output 8x8 block
2908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
2918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @param[in] q_div
2928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  QP/6
2938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
2948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @param[in] q_rem
2958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  QP%6
2968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
2978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @param[in] q_lev
2988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  Quantizer level
2998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
3008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @param[in] src_strd
3018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  Input stride
3028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
3038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @param[in] pred_strd,
3048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  Prediction stride
3058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
3068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @param[in] out_strd
3078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  Output Stride
3088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
3098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @param[in] pi4_tmp
3108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  temporary buffer of size 1*16 we dont need a bigger blcok since we reuse
3118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  the tmp for each block
3128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
3138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @param[in] pu4_iquant_mat
3148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  Pointer to the inverse quantization matrix
3158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
3168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @returns  Void
3178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
3188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @remarks
3198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  None
3208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
3218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *******************************************************************************
3228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */
3238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264_iquant_itrans_recon_8x8(WORD16 *pi2_src,
3248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                   UWORD8 *pu1_pred,
3258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                   UWORD8 *pu1_out,
3268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                   WORD32 pred_strd,
3278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                   WORD32 out_strd,
3288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                   const UWORD16 *pu2_iscale_mat,
3298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                   const UWORD16 *pu2_weigh_mat,
3308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                   UWORD32 qp_div,
3318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                   WORD16 *pi2_tmp,
3328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                   WORD32 iq_start_idx,
3338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                   WORD16 *pi2_dc_ld_addr
3348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S)
3358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
3368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 i;
3378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD16 *pi2_tmp_ptr = pi2_tmp;
3388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 *pu1_pred_ptr = pu1_pred;
3398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 *pu1_out_ptr = pu1_out;
3408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD16 i_z0, i_z1, i_z2, i_z3, i_z4, i_z5, i_z6, i_z7;
3418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD16 i_y0, i_y1, i_y2, i_y3, i_y4, i_y5, i_y6, i_y7;
3428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD16 i_macro;
3438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 q;
3448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 rnd_fact = (qp_div < 6) ? (1 << (5 - qp_div)) : 0;
3458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UNUSED(iq_start_idx);
3468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UNUSED(pi2_dc_ld_addr);
3478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*************************************************************/
3488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* De quantization of coefficients. Will be replaced by SIMD */
3498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* operations on platform. Note : DC coeff is not scaled     */
3508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*************************************************************/
3518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    for(i = 0; i < (SUB_BLK_WIDTH_8x8 * SUB_BLK_WIDTH_8x8); i++)
3528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
3538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        q = pi2_src[i];
3548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        INV_QUANT(q, pu2_iscale_mat[i], pu2_weigh_mat[i], qp_div, rnd_fact, 6);
3558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_tmp_ptr[i] = q;
3568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
3578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Perform Inverse transform */
3588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*--------------------------------------------------------------------*/
3598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* IDCT [ Horizontal transformation ]                                 */
3608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*--------------------------------------------------------------------*/
3618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    for(i = 0; i < SUB_BLK_WIDTH_8x8; i++)
3628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
3638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*------------------------------------------------------------------*/
3648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* y0 = w0 + w4                                                     */
3658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* y1 = -w3 + w5 - w7 - (w7 >> 1)                                   */
3668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* y2 = w0 - w4                                                     */
3678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* y3 = w1 + w7 - w3 - (w3 >> 1)                                    */
3688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* y4 = (w2 >> 1) - w6                                              */
3698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* y5 = -w1 + w7 + w5 + (w5 >> 1)                                   */
3708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* y6 = w2 + (w6 >> 1)                                              */
3718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* y7 = w3 + w5 + w1 + (w1 >> 1)                                    */
3728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*------------------------------------------------------------------*/
3738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_y0 = (pi2_tmp_ptr[0] + pi2_tmp_ptr[4] );
3748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_y1 = ((WORD32)(-pi2_tmp_ptr[3]) + pi2_tmp_ptr[5] - pi2_tmp_ptr[7]
3768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        - (pi2_tmp_ptr[7] >> 1));
3778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_y2 = (pi2_tmp_ptr[0] - pi2_tmp_ptr[4] );
3798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_y3 = ((WORD32)pi2_tmp_ptr[1] + pi2_tmp_ptr[7] - pi2_tmp_ptr[3]
3818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        - (pi2_tmp_ptr[3] >> 1));
3828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_y4 = ((pi2_tmp_ptr[2] >> 1) - pi2_tmp_ptr[6] );
3848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_y5 = ((WORD32)(-pi2_tmp_ptr[1]) + pi2_tmp_ptr[7] + pi2_tmp_ptr[5]
3868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        + (pi2_tmp_ptr[5] >> 1));
3878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_y6 = (pi2_tmp_ptr[2] + (pi2_tmp_ptr[6] >> 1));
3898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_y7 = ((WORD32)pi2_tmp_ptr[3] + pi2_tmp_ptr[5] + pi2_tmp_ptr[1]
3918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        + (pi2_tmp_ptr[1] >> 1));
3928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*------------------------------------------------------------------*/
3948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* z0 = y0 + y6                                                     */
3958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* z1 = y1 + (y7 >> 2)                                              */
3968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* z2 = y2 + y4                                                     */
3978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* z3 = y3 + (y5 >> 2)                                              */
3988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* z4 = y2 - y4                                                     */
3998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* z5 = (y3 >> 2) - y5                                              */
4008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* z6 = y0 - y6                                                     */
4018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* z7 = y7 - (y1 >> 2)                                              */
4028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*------------------------------------------------------------------*/
4038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_z0 = i_y0 + i_y6;
4048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_z1 = i_y1 + (i_y7 >> 2);
4058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_z2 = i_y2 + i_y4;
4068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_z3 = i_y3 + (i_y5 >> 2);
4078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_z4 = i_y2 - i_y4;
4088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_z5 = (i_y3 >> 2) - i_y5;
4098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_z6 = i_y0 - i_y6;
4108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_z7 = i_y7 - (i_y1 >> 2);
4118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*------------------------------------------------------------------*/
4138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* x0 = z0 + z7                                                     */
4148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* x1 = z2 + z5                                                     */
4158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* x2 = z4 + z3                                                     */
4168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* x3 = z6 + z1                                                     */
4178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* x4 = z6 - z1                                                     */
4188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* x5 = z4 - z3                                                     */
4198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* x6 = z2 - z5                                                     */
4208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* x7 = z0 - z7                                                     */
4218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*------------------------------------------------------------------*/
4228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_tmp_ptr[0] = i_z0 + i_z7;
4238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_tmp_ptr[1] = i_z2 + i_z5;
4248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_tmp_ptr[2] = i_z4 + i_z3;
4258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_tmp_ptr[3] = i_z6 + i_z1;
4268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_tmp_ptr[4] = i_z6 - i_z1;
4278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_tmp_ptr[5] = i_z4 - i_z3;
4288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_tmp_ptr[6] = i_z2 - i_z5;
4298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_tmp_ptr[7] = i_z0 - i_z7;
4308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* move to the next row */
4328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        //pi2_src_ptr += SUB_BLK_WIDTH_8x8;
4338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_tmp_ptr += SUB_BLK_WIDTH_8x8;
4348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
4358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*--------------------------------------------------------------------*/
4368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* IDCT [ Vertical transformation] and Xij = (xij + 32)>>6            */
4378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*                                                                    */
4388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Add the prediction and store it back to reconstructed frame buffer */
4398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* [Prediction buffer itself in this case]                            */
4408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*--------------------------------------------------------------------*/
4418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    pi2_tmp_ptr = pi2_tmp;
4438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    for(i = 0; i < SUB_BLK_WIDTH_8x8; i++)
4448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
4458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_pred_ptr = pu1_pred;
4468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_out = pu1_out_ptr;
4478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*------------------------------------------------------------------*/
4488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* y0j = w0j + w4j                                                  */
4498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* y1j = -w3j + w5j -w7j -(w7j >> 1)                                */
4508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* y2j = w0j -w4j                                                   */
4518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* y3j = w1j + w7j -w3j -(w3j >> 1)                                 */
4528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* y4j = ( w2j >> 1 ) -w6j                                          */
4538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* y5j = -w1j + w7j + w5j + (w5j >> 1)                              */
4548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* y6j = w2j + ( w6j >> 1 )                                         */
4558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* y7j = w3j + w5j + w1j + (w1j >> 1)                               */
4568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*------------------------------------------------------------------*/
4578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_y0 = pi2_tmp_ptr[0] + pi2_tmp_ptr[32];
4588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_y1 = (WORD32)(-pi2_tmp_ptr[24]) + pi2_tmp_ptr[40] - pi2_tmp_ptr[56]
4608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        - (pi2_tmp_ptr[56] >> 1);
4618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_y2 = pi2_tmp_ptr[0] - pi2_tmp_ptr[32];
4638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_y3 = (WORD32)pi2_tmp_ptr[8] + pi2_tmp_ptr[56] - pi2_tmp_ptr[24]
4658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        - (pi2_tmp_ptr[24] >> 1);
4668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_y4 = (pi2_tmp_ptr[16] >> 1) - pi2_tmp_ptr[48];
4688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_y5 = (WORD32)(-pi2_tmp_ptr[8]) + pi2_tmp_ptr[56] + pi2_tmp_ptr[40]
4708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        + (pi2_tmp_ptr[40] >> 1);
4718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_y6 = pi2_tmp_ptr[16] + (pi2_tmp_ptr[48] >> 1);
4738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_y7 = (WORD32)pi2_tmp_ptr[24] + pi2_tmp_ptr[40] + pi2_tmp_ptr[8]
4758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        + (pi2_tmp_ptr[8] >> 1);
4768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*------------------------------------------------------------------*/
4788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* z0j = y0j + y6j                                                  */
4798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* z1j = y1j + (y7j >> 2)                                           */
4808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* z2j = y2j + y4j                                                  */
4818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* z3j = y3j + (y5j >> 2)                                           */
4828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* z4j = y2j -y4j                                                   */
4838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* z5j = (y3j >> 2) -y5j                                            */
4848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* z6j = y0j -y6j                                                   */
4858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* z7j = y7j -(y1j >> 2)                                            */
4868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*------------------------------------------------------------------*/
4878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_z0 = i_y0 + i_y6;
4888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_z1 = i_y1 + (i_y7 >> 2);
4898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_z2 = i_y2 + i_y4;
4908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_z3 = i_y3 + (i_y5 >> 2);
4918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_z4 = i_y2 - i_y4;
4928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_z5 = (i_y3 >> 2) - i_y5;
4938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_z6 = i_y0 - i_y6;
4948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_z7 = i_y7 - (i_y1 >> 2);
4958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*------------------------------------------------------------------*/
4978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* x0j = z0j + z7j                                                  */
4988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* x1j = z2j + z5j                                                  */
4998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* x2j = z4j + z3j                                                  */
5008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* x3j = z6j + z1j                                                  */
5018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* x4j = z6j -z1j                                                   */
5028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* x5j = z4j -z3j                                                   */
5038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* x6j = z2j -z5j                                                   */
5048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* x7j = z0j -z7j                                                   */
5058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*------------------------------------------------------------------*/
5068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_macro = ((i_z0 + i_z7 + 32) >> 6) + *pu1_pred_ptr;
5078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        *pu1_out = CLIP_U8(i_macro);
5088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* Change uc_recBuffer to Point to next element in the same column*/
5098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_pred_ptr += pred_strd;
5108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_out += out_strd;
5118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_macro = ((i_z2 + i_z5 + 32) >> 6) + *pu1_pred_ptr;
5138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        *pu1_out = CLIP_U8(i_macro);
5148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_pred_ptr += pred_strd;
5158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_out += out_strd;
5168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_macro = ((i_z4 + i_z3 + 32) >> 6) + *pu1_pred_ptr;
5188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        *pu1_out = CLIP_U8(i_macro);
5198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_pred_ptr += pred_strd;
5208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_out += out_strd;
5218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_macro = ((i_z6 + i_z1 + 32) >> 6) + *pu1_pred_ptr;
5238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        *pu1_out = CLIP_U8(i_macro);
5248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_pred_ptr += pred_strd;
5258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_out += out_strd;
5268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_macro = ((i_z6 - i_z1 + 32) >> 6) + *pu1_pred_ptr;
5288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        *pu1_out = CLIP_U8(i_macro);
5298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_pred_ptr += pred_strd;
5308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_out += out_strd;
5318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_macro = ((i_z4 - i_z3 + 32) >> 6) + *pu1_pred_ptr;
5338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        *pu1_out = CLIP_U8(i_macro);
5348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_pred_ptr += pred_strd;
5358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_out += out_strd;
5368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_macro = ((i_z2 - i_z5 + 32) >> 6) + *pu1_pred_ptr;
5388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        *pu1_out = CLIP_U8(i_macro);
5398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_pred_ptr += pred_strd;
5408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_out += out_strd;
5418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_macro = ((i_z0 - i_z7 + 32) >> 6) + *pu1_pred_ptr;
5438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        *pu1_out = CLIP_U8(i_macro);
5448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_tmp_ptr++;
5468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_out_ptr++;
5478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_pred++;
5488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
5498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
5508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264_iquant_itrans_recon_8x8_dc(WORD16 *pi2_src,
5528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      UWORD8 *pu1_pred,
5538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      UWORD8 *pu1_out,
5548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      WORD32 pred_strd,
5558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      WORD32 out_strd,
5568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      const UWORD16 *pu2_iscale_mat,
5578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      const UWORD16 *pu2_weigh_mat,
5588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      UWORD32 qp_div,
5598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      WORD16 *pi2_tmp,
5608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      WORD32 iq_start_idx,
5618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      WORD16 *pi2_dc_ld_addr)
5628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
5638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 *pu1_pred_ptr = pu1_pred;
5648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 *pu1_out_ptr = pu1_out;
5658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD16 x, i, i_macro;
5668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 q;
5678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 rnd_fact = (qp_div < 6) ? (1 << (5 - qp_div)) : 0;
5688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UNUSED(pi2_tmp);
5698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UNUSED(iq_start_idx);
5708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UNUSED(pi2_dc_ld_addr);
5718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*************************************************************/
5728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Dequantization of coefficients. Will be replaced by SIMD  */
5738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* operations on platform. Note : DC coeff is not scaled     */
5748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*************************************************************/
5758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    q = pi2_src[0];
5768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    INV_QUANT(q, pu2_iscale_mat[0], pu2_weigh_mat[0], qp_div, rnd_fact, 6);
5778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    i_macro = (q + 32) >> 6;
5788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Perform Inverse transform */
5798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*--------------------------------------------------------------------*/
5808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* IDCT [ Horizontal transformation ]                                 */
5818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*--------------------------------------------------------------------*/
5828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*--------------------------------------------------------------------*/
5838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* IDCT [ Vertical transformation] and Xij = (xij + 32)>>6            */
5848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*                                                                    */
5858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Add the prediction and store it back to reconstructed frame buffer */
5868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* [Prediction buffer itself in this case]                            */
5878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*--------------------------------------------------------------------*/
5888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    for(i = 0; i < SUB_BLK_WIDTH_8x8; i++)
5898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
5908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_pred_ptr = pu1_pred;
5918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_out = pu1_out_ptr;
5928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        x = i_macro + *pu1_pred_ptr;
5948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        *pu1_out = CLIP_U8(x);
5958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* Change uc_recBuffer to Point to next element in the same column*/
5968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_pred_ptr += pred_strd;
5978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_out += out_strd;
5988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        x = i_macro + *pu1_pred_ptr;
6008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        *pu1_out = CLIP_U8(x);
6018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_pred_ptr += pred_strd;
6028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_out += out_strd;
6038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        x = i_macro + *pu1_pred_ptr;
6058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        *pu1_out = CLIP_U8(x);
6068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_pred_ptr += pred_strd;
6078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_out += out_strd;
6088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        x = i_macro + *pu1_pred_ptr;
6108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        *pu1_out = CLIP_U8(x);
6118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_pred_ptr += pred_strd;
6128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_out += out_strd;
6138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        x = i_macro + *pu1_pred_ptr;
6158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        *pu1_out = CLIP_U8(x);
6168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_pred_ptr += pred_strd;
6178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_out += out_strd;
6188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        x = i_macro + *pu1_pred_ptr;
6208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        *pu1_out = CLIP_U8(x);
6218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_pred_ptr += pred_strd;
6228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_out += out_strd;
6238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        x = i_macro + *pu1_pred_ptr;
6258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        *pu1_out = CLIP_U8(x);
6268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_pred_ptr += pred_strd;
6278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_out += out_strd;
6288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        x = i_macro + *pu1_pred_ptr;
6308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        *pu1_out = CLIP_U8(x);
6318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_out_ptr++;
6338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_pred++;
6348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
6358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
6368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*
6388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ********************************************************************************
6398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
6408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @brief This function reconstructs a 4x4 sub block from quantized resiude and
6418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * prediction buffer
6428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
6438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @par Description:
6448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  The quantized residue is first inverse quantized, then inverse transformed.
6458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  This inverse transformed content is added to the prediction buffer to recon-
6468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  struct the end output
6478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
6488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @param[in] pi2_src
6498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  quantized 4x4 block
6508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
6518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @param[in] pu1_pred
6528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  prediction 4x4 block
6538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
6548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @param[out] pu1_out
6558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  reconstructed 4x4 block
6568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
6578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @param[in] src_strd
6588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  quantization buffer stride
6598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
6608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @param[in] pred_strd,
6618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  Prediction buffer stride
6628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
6638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @param[in] out_strd
6648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  recon buffer Stride
6658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
6668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @param[in] pu2_scaling_list
6678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  pointer to scaling list
6688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
6698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @param[in] pu2_norm_adjust
6708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  pointer to inverse scale matrix
6718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
6728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @param[in] u4_qp_div_6
6738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  Floor (qp/6)
6748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
6758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @param[in] pi4_tmp
6768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * temporary buffer of size 1*16
6778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
6788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @returns none
6798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
6808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @remarks none
6818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
6828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *******************************************************************************
6838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */
6848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264_iquant_itrans_recon_chroma_4x4(WORD16 *pi2_src,
6858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          UWORD8 *pu1_pred,
6868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          UWORD8 *pu1_out,
6878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          WORD32 pred_strd,
6888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          WORD32 out_strd,
6898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          const UWORD16 *pu2_iscal_mat,
6908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          const UWORD16 *pu2_weigh_mat,
6918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          UWORD32 u4_qp_div_6,
6928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          WORD16 *pi2_tmp,
6938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          WORD16 *pi2_dc_src)
6948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
6958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD16 *pi2_src_ptr = pi2_src;
6968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD16 *pi2_tmp_ptr = pi2_tmp;
6978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 *pu1_pred_ptr = pu1_pred;
6988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 *pu1_out_ptr = pu1_out;
6998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD16 x0, x1, x2, x3, i;
7008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 q0, q1, q2, q3;
7018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD16 i_macro;
7028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD16 rnd_fact = (u4_qp_div_6 < 4) ? 1 << (3 - u4_qp_div_6) : 0;
7038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* inverse quant */
7058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*horizontal inverse transform */
7068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    for(i = 0; i < SUB_BLK_WIDTH_4x4; i++)
7078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
7088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      if(i==0)
7098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      {
7108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        q0 = pi2_dc_src[0];
7118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      }
7128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      else
7138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      {
7148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        q0 = pi2_src_ptr[0];
7158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        INV_QUANT(q0, pu2_iscal_mat[0], pu2_weigh_mat[0], u4_qp_div_6, rnd_fact, 4);
7168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      }
7178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      q2 = pi2_src_ptr[2];
7198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      INV_QUANT(q2, pu2_iscal_mat[2], pu2_weigh_mat[2], u4_qp_div_6, rnd_fact,
7208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                4);
7218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      x0 = q0 + q2;
7238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      x1 = q0 - q2;
7248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      q1 = pi2_src_ptr[1];
7268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      INV_QUANT(q1, pu2_iscal_mat[1], pu2_weigh_mat[1], u4_qp_div_6, rnd_fact,
7278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                4);
7288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      q3 = pi2_src_ptr[3];
7308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      INV_QUANT(q3, pu2_iscal_mat[3], pu2_weigh_mat[3], u4_qp_div_6, rnd_fact,
7318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                4);
7328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      x2 = (q1 >> 1) - q3;
7348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      x3 = q1 + (q3 >> 1);
7358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      pi2_tmp_ptr[0] = x0 + x3;
7378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      pi2_tmp_ptr[1] = x1 + x2;
7388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      pi2_tmp_ptr[2] = x1 - x2;
7398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      pi2_tmp_ptr[3] = x0 - x3;
7408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      pi2_src_ptr += SUB_BLK_WIDTH_4x4;
7428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      pi2_tmp_ptr += SUB_BLK_WIDTH_4x4;
7438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      pu2_iscal_mat += SUB_BLK_WIDTH_4x4;
7448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      pu2_weigh_mat += SUB_BLK_WIDTH_4x4;
7458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
7468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* vertical inverse transform */
7488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    pi2_tmp_ptr = pi2_tmp;
7498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    for(i = 0; i < SUB_BLK_WIDTH_4x4; i++)
7508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
7518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_pred_ptr = pu1_pred;
7528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_out = pu1_out_ptr;
7538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        x0 = (pi2_tmp_ptr[0] + pi2_tmp_ptr[8]);
7558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        x1 = (pi2_tmp_ptr[0] - pi2_tmp_ptr[8]);
7568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        x2 = (pi2_tmp_ptr[4] >> 1) - pi2_tmp_ptr[12];
7578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        x3 =  pi2_tmp_ptr[4] + (pi2_tmp_ptr[12] >> 1);
7588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* inverse prediction */
7608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_macro = x0 + x3;
7618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_macro = ((i_macro + 32) >> 6);
7628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_macro += *pu1_pred_ptr;
7638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        *pu1_out = CLIP_U8(i_macro);
7648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_pred_ptr += pred_strd;
7658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_out += out_strd;
7668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_macro = x1 + x2;
7688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_macro = ((i_macro + 32) >> 6);
7698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_macro += *pu1_pred_ptr;
7708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        *pu1_out = CLIP_U8(i_macro);
7718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_pred_ptr += pred_strd;
7728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_out += out_strd;
7738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_macro = x1 - x2;
7758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_macro = ((i_macro + 32) >> 6);
7768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_macro += *pu1_pred_ptr;
7778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        *pu1_out = CLIP_U8(i_macro);
7788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_pred_ptr += pred_strd;
7798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_out += out_strd;
7808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_macro = x0 - x3;
7828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_macro = ((i_macro + 32) >> 6);
7838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_macro += *pu1_pred_ptr;
7848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        *pu1_out = CLIP_U8(i_macro);
7858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_tmp_ptr++;
7878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_out_ptr+= 2;    //Interleaved store for output
7888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_pred+= 2;       //Interleaved load for pred buffer
7898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
7908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
7918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*
7938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ********************************************************************************
7948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
7958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @brief This function reconstructs a 4x4 sub block from quantized resiude and
7968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * prediction buffer if only dc value is present for residue
7978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
7988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @par Description:
7998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  The quantized residue is first inverse quantized,
8008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  This inverse quantized content is added to the prediction buffer to recon-
8018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  struct the end output
8028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
8038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @param[in] pi2_src
8048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  quantized dc coefficient
8058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
8068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @param[in] pu1_pred
8078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  prediction 4x4 block in interleaved format
8088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
8098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @param[in] pred_strd,
8108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  Prediction buffer stride in interleaved format
8118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
8128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @param[in] out_strd
8138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *  recon buffer Stride
8148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
8158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @returns none
8168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
8178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * @remarks none
8188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
8198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *******************************************************************************
8208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */
8218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
8228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264_iquant_itrans_recon_chroma_4x4_dc(WORD16 *pi2_src,
8238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                             UWORD8 *pu1_pred,
8248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                             UWORD8 *pu1_out,
8258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                             WORD32 pred_strd,
8268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                             WORD32 out_strd,
8278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                             const UWORD16 *pu2_iscal_mat,
8288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                             const UWORD16 *pu2_weigh_mat,
8298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                             UWORD32 u4_qp_div_6,
8308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                             WORD16 *pi2_tmp,
8318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                             WORD16 *pi2_dc_src)
8328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
8338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 *pu1_pred_ptr = pu1_pred;
8348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 *pu1_out_ptr = pu1_out;
8358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 q0;
8368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD16 x, i_macro, i;
8378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UNUSED(pi2_src);
8388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UNUSED(pu2_iscal_mat);
8398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UNUSED(pu2_weigh_mat);
8408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UNUSED(u4_qp_div_6);
8418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UNUSED(pi2_tmp);
8428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
8438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    q0 = pi2_dc_src[0];    // Restoring dc value for intra case3
8448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    i_macro = ((q0 + 32) >> 6);
8458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
8468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    for(i = 0; i < SUB_BLK_WIDTH_4x4; i++)
8478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
8488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_pred_ptr = pu1_pred;
8498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_out = pu1_out_ptr;
8508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
8518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* inverse prediction */
8528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        x = i_macro + *pu1_pred_ptr;
8538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        *pu1_out =  CLIP_U8(x);
8548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_pred_ptr += pred_strd;
8558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_out += out_strd;
8568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
8578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        x = i_macro + *pu1_pred_ptr;
8588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        *pu1_out = CLIP_U8(x);
8598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_pred_ptr += pred_strd;
8608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_out += out_strd;
8618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
8628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        x = i_macro + *pu1_pred_ptr;
8638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        *pu1_out = CLIP_U8(x);
8648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_pred_ptr += pred_strd;
8658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_out += out_strd;
8668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
8678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        x = i_macro + *pu1_pred_ptr;
8688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        *pu1_out = CLIP_U8(x);
8698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
8708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_out_ptr+=2;
8718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_pred+=2;
8728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
8738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
874