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