10d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/******************************************************************************
20d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
30d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Copyright (C) 2012 Ittiam Systems Pvt Ltd, Bangalore
40d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
50d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Licensed under the Apache License, Version 2.0 (the "License");
60d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* you may not use this file except in compliance with the License.
70d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* You may obtain a copy of the License at:
80d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
90d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* http://www.apache.org/licenses/LICENSE-2.0
100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Unless required by applicable law or agreed to in writing, software
120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* distributed under the License is distributed on an "AS IS" BASIS,
130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* See the License for the specific language governing permissions and
150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* limitations under the License.
160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************/
180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *******************************************************************************
200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @file
210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  ihevc_itrans_recon_8x8.c
220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @brief
240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Contains function definitions for inverse transform  and reconstruction 8x8
250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @author
280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  100470
290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @par List of Functions:
310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  - ihevc_itrans_recon_8x8()
320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @remarks
340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  None
350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *******************************************************************************
370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */
380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <stdio.h>
390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <string.h>
400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_typedefs.h"
410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_macros.h"
420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_platform_macros.h"
430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_defs.h"
440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_trans_tables.h"
450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_itrans_recon.h"
460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_func_selector.h"
470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_trans_macros.h"
480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *******************************************************************************
510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @brief
530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  This function performs Inverse transform  and reconstruction for 8x8
540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * input block
550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @par Description:
570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Performs inverse transform and adds the prediction  data and clips output
580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * to 8 bit
590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] pi2_src
610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Input 8x8 coefficients
620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] pi2_tmp
640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Temporary 8x8 buffer for storing inverse
650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  transform
670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  1st stage output
680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] pu1_pred
700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Prediction 8x8 block
710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[out] pu1_dst
730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Output 8x8 block
740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] src_strd
760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Input stride
770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] pred_strd
790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Prediction stride
800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] dst_strd
820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Output Stride
830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] shift
850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Output shift
860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] zero_cols
880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Zero columns in pi2_src
890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @returns  Void
910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @remarks
930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  None
940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *******************************************************************************
960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */
970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevc_itrans_recon_8x8(WORD16 *pi2_src,
990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            WORD16 *pi2_tmp,
1000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            UWORD8 *pu1_pred,
1010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            UWORD8 *pu1_dst,
1020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            WORD32 src_strd,
1030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            WORD32 pred_strd,
1040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            WORD32 dst_strd,
1050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            WORD32 zero_cols,
1060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            WORD32 zero_rows)
1070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
1080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 j, k;
1090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 e[4], o[4];
1100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 ee[2], eo[2];
1110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 add;
1120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 shift;
1130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD16 *pi2_tmp_orig;
1140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 trans_size;
1150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 zero_rows_2nd_stage = zero_cols;
1160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 row_limit_2nd_stage;
1170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    trans_size = TRANS_SIZE_8;
1190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    pi2_tmp_orig = pi2_tmp;
1210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if((zero_cols & 0xF0) == 0xF0)
1230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        row_limit_2nd_stage = 4;
1240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else
1250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        row_limit_2nd_stage = TRANS_SIZE_8;
1260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if((zero_rows & 0xF0) == 0xF0) /* First 4 rows of input are non-zero */
1290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
1300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /************************************************************************************************/
1310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /**********************************START - IT_RECON_8x8******************************************/
1320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /************************************************************************************************/
1330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Inverse Transform 1st stage */
1350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        shift = IT_SHIFT_STAGE_1;
1360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        add = 1 << (shift - 1);
1370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(j = 0; j < row_limit_2nd_stage; j++)
1390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
1400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* Checking for Zero Cols */
1410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((zero_cols & 1) == 1)
1420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
1430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                memset(pi2_tmp, 0, trans_size * sizeof(WORD16));
1440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
1450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            else
1460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
1470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
1480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 4; k++)
1490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
1500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    o[k] = g_ai2_ihevc_trans_8[1][k] * pi2_src[src_strd]
1510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_8[3][k]
1520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_src[3 * src_strd];
1530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
1540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eo[0] = g_ai2_ihevc_trans_8[2][0] * pi2_src[2 * src_strd];
1550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eo[1] = g_ai2_ihevc_trans_8[2][1] * pi2_src[2 * src_strd];
1560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ee[0] = g_ai2_ihevc_trans_8[0][0] * pi2_src[0];
1570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ee[1] = g_ai2_ihevc_trans_8[0][1] * pi2_src[0];
1580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
1600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                e[0] = ee[0] + eo[0];
1610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                e[3] = ee[0] - eo[0];
1620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                e[1] = ee[1] + eo[1];
1630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                e[2] = ee[1] - eo[1];
1640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 4; k++)
1650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
1660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    pi2_tmp[k] =
1670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
1680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    pi2_tmp[k + 4] =
1690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    CLIP_S16(((e[3 - k] - o[3 - k] + add) >> shift));
1700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
1710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
1720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pi2_src++;
1730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pi2_tmp += trans_size;
1740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            zero_cols = zero_cols >> 1;
1750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
1760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pi2_tmp = pi2_tmp_orig;
1780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Inverse Transform 2nd stage */
1800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        shift = IT_SHIFT_STAGE_2;
1810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        add = 1 << (shift - 1);
1820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if((zero_rows_2nd_stage & 0xF0) == 0xF0) /* First 4 rows of output of 1st stage are non-zero */
1830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
1840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            for(j = 0; j < trans_size; j++)
1850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
1860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
1870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 4; k++)
1880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
1890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    o[k] = g_ai2_ihevc_trans_8[1][k] * pi2_tmp[trans_size]
1900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_8[3][k] * pi2_tmp[3 * trans_size];
1910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
1920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eo[0] = g_ai2_ihevc_trans_8[2][0] * pi2_tmp[2 * trans_size];
1930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eo[1] = g_ai2_ihevc_trans_8[2][1] * pi2_tmp[2 * trans_size];
1940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ee[0] = g_ai2_ihevc_trans_8[0][0] * pi2_tmp[0];
1950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ee[1] = g_ai2_ihevc_trans_8[0][1] * pi2_tmp[0];
1960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
1980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                e[0] = ee[0] + eo[0];
1990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                e[3] = ee[0] - eo[0];
2000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                e[1] = ee[1] + eo[1];
2010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                e[2] = ee[1] - eo[1];
2020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 4; k++)
2030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
2040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    WORD32 itrans_out;
2050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    itrans_out =
2060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
2070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    pu1_dst[k] = CLIP_U8((itrans_out + pu1_pred[k]));
2080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    itrans_out =
2090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    CLIP_S16(((e[3 - k] - o[3 - k] + add) >> shift));
2100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    pu1_dst[k + 4] = CLIP_U8((itrans_out + pu1_pred[k + 4]));
2110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
2120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pi2_tmp++;
2130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu1_pred += pred_strd;
2140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu1_dst += dst_strd;
2150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
2160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
2170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        else /* All rows of output of 1st stage are non-zero */
2180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
2190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            for(j = 0; j < trans_size; j++)
2200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
2210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
2220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 4; k++)
2230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
2240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    o[k] = g_ai2_ihevc_trans_8[1][k] * pi2_tmp[trans_size]
2250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_8[3][k]
2260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[3 * trans_size]
2270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_8[5][k]
2280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[5 * trans_size]
2290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_8[7][k]
2300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[7 * trans_size];
2310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
2320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eo[0] = g_ai2_ihevc_trans_8[2][0] * pi2_tmp[2 * trans_size]
2340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                + g_ai2_ihevc_trans_8[6][0] * pi2_tmp[6 * trans_size];
2350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eo[1] = g_ai2_ihevc_trans_8[2][1] * pi2_tmp[2 * trans_size]
2360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                + g_ai2_ihevc_trans_8[6][1] * pi2_tmp[6 * trans_size];
2370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ee[0] = g_ai2_ihevc_trans_8[0][0] * pi2_tmp[0]
2380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                + g_ai2_ihevc_trans_8[4][0] * pi2_tmp[4 * trans_size];
2390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ee[1] = g_ai2_ihevc_trans_8[0][1] * pi2_tmp[0]
2400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                + g_ai2_ihevc_trans_8[4][1] * pi2_tmp[4 * trans_size];
2410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
2430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                e[0] = ee[0] + eo[0];
2440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                e[3] = ee[0] - eo[0];
2450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                e[1] = ee[1] + eo[1];
2460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                e[2] = ee[1] - eo[1];
2470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 4; k++)
2480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
2490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    WORD32 itrans_out;
2500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    itrans_out =
2510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
2520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    pu1_dst[k] = CLIP_U8((itrans_out + pu1_pred[k]));
2530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    itrans_out =
2540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    CLIP_S16(((e[3 - k] - o[3 - k] + add) >> shift));
2550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    pu1_dst[k + 4] = CLIP_U8((itrans_out + pu1_pred[k + 4]));
2560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
2570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pi2_tmp++;
2580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu1_pred += pred_strd;
2590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu1_dst += dst_strd;
2600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
2610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
2620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /************************************************************************************************/
2630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /************************************END - IT_RECON_8x8******************************************/
2640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /************************************************************************************************/
2650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
2660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else /* All rows of input are non-zero */
2670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
2680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /************************************************************************************************/
2690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /**********************************START - IT_RECON_8x8******************************************/
2700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /************************************************************************************************/
2710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Inverse Transform 1st stage */
2730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        shift = IT_SHIFT_STAGE_1;
2740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        add = 1 << (shift - 1);
2750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(j = 0; j < row_limit_2nd_stage; j++)
2770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
2780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* Checking for Zero Cols */
2790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((zero_cols & 1) == 1)
2800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
2810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                memset(pi2_tmp, 0, trans_size * sizeof(WORD16));
2820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
2830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            else
2840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
2850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
2860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 4; k++)
2870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
2880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    o[k] = g_ai2_ihevc_trans_8[1][k] * pi2_src[src_strd]
2890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_8[3][k]
2900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_src[3 * src_strd]
2910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_8[5][k]
2920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_src[5 * src_strd]
2930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_8[7][k]
2940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_src[7 * src_strd];
2950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
2960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eo[0] = g_ai2_ihevc_trans_8[2][0] * pi2_src[2 * src_strd]
2980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                + g_ai2_ihevc_trans_8[6][0] * pi2_src[6 * src_strd];
2990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eo[1] = g_ai2_ihevc_trans_8[2][1] * pi2_src[2 * src_strd]
3000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                + g_ai2_ihevc_trans_8[6][1] * pi2_src[6 * src_strd];
3010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ee[0] = g_ai2_ihevc_trans_8[0][0] * pi2_src[0]
3020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                + g_ai2_ihevc_trans_8[4][0] * pi2_src[4 * src_strd];
3030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ee[1] = g_ai2_ihevc_trans_8[0][1] * pi2_src[0]
3040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                + g_ai2_ihevc_trans_8[4][1] * pi2_src[4 * src_strd];
3050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
3070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                e[0] = ee[0] + eo[0];
3080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                e[3] = ee[0] - eo[0];
3090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                e[1] = ee[1] + eo[1];
3100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                e[2] = ee[1] - eo[1];
3110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 4; k++)
3120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
3130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    pi2_tmp[k] =
3140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
3150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    pi2_tmp[k + 4] =
3160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    CLIP_S16(((e[3 - k] - o[3 - k] + add) >> shift));
3170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
3180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
3190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pi2_src++;
3200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pi2_tmp += trans_size;
3210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            zero_cols = zero_cols >> 1;
3220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
3230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pi2_tmp = pi2_tmp_orig;
3250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Inverse Transform 2nd stage */
3270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        shift = IT_SHIFT_STAGE_2;
3280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        add = 1 << (shift - 1);
3290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if((zero_rows_2nd_stage & 0xF0) == 0xF0) /* First 4 rows of output of 1st stage are non-zero */
3300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
3310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            for(j = 0; j < trans_size; j++)
3320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
3330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
3340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 4; k++)
3350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
3360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    o[k] = g_ai2_ihevc_trans_8[1][k] * pi2_tmp[trans_size]
3370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_8[3][k] * pi2_tmp[3 * trans_size];
3380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
3390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eo[0] = g_ai2_ihevc_trans_8[2][0] * pi2_tmp[2 * trans_size];
3400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eo[1] = g_ai2_ihevc_trans_8[2][1] * pi2_tmp[2 * trans_size];
3410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ee[0] = g_ai2_ihevc_trans_8[0][0] * pi2_tmp[0];
3420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ee[1] = g_ai2_ihevc_trans_8[0][1] * pi2_tmp[0];
3430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
3450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                e[0] = ee[0] + eo[0];
3460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                e[3] = ee[0] - eo[0];
3470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                e[1] = ee[1] + eo[1];
3480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                e[2] = ee[1] - eo[1];
3490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 4; k++)
3500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
3510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    WORD32 itrans_out;
3520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    itrans_out =
3530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
3540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    pu1_dst[k] = CLIP_U8((itrans_out + pu1_pred[k]));
3550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    itrans_out =
3560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    CLIP_S16(((e[3 - k] - o[3 - k] + add) >> shift));
3570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    pu1_dst[k + 4] = CLIP_U8((itrans_out + pu1_pred[k + 4]));
3580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
3590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pi2_tmp++;
3600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu1_pred += pred_strd;
3610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu1_dst += dst_strd;
3620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
3630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
3640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        else /* All rows of output of 1st stage are non-zero */
3650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
3660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            for(j = 0; j < trans_size; j++)
3670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
3680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
3690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 4; k++)
3700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
3710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    o[k] = g_ai2_ihevc_trans_8[1][k] * pi2_tmp[trans_size]
3720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_8[3][k]
3730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[3 * trans_size]
3740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_8[5][k]
3750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[5 * trans_size]
3760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_8[7][k]
3770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[7 * trans_size];
3780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
3790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eo[0] = g_ai2_ihevc_trans_8[2][0] * pi2_tmp[2 * trans_size]
3810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                + g_ai2_ihevc_trans_8[6][0] * pi2_tmp[6 * trans_size];
3820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eo[1] = g_ai2_ihevc_trans_8[2][1] * pi2_tmp[2 * trans_size]
3830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                + g_ai2_ihevc_trans_8[6][1] * pi2_tmp[6 * trans_size];
3840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ee[0] = g_ai2_ihevc_trans_8[0][0] * pi2_tmp[0]
3850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                + g_ai2_ihevc_trans_8[4][0] * pi2_tmp[4 * trans_size];
3860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ee[1] = g_ai2_ihevc_trans_8[0][1] * pi2_tmp[0]
3870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                + g_ai2_ihevc_trans_8[4][1] * pi2_tmp[4 * trans_size];
3880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
3900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                e[0] = ee[0] + eo[0];
3910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                e[3] = ee[0] - eo[0];
3920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                e[1] = ee[1] + eo[1];
3930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                e[2] = ee[1] - eo[1];
3940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 4; k++)
3950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
3960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    WORD32 itrans_out;
3970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    itrans_out =
3980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
3990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    pu1_dst[k] = CLIP_U8((itrans_out + pu1_pred[k]));
4000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    itrans_out =
4010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    CLIP_S16(((e[3 - k] - o[3 - k] + add) >> shift));
4020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    pu1_dst[k + 4] = CLIP_U8((itrans_out + pu1_pred[k + 4]));
4030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
4040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pi2_tmp++;
4050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu1_pred += pred_strd;
4060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu1_dst += dst_strd;
4070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
4080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
4090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /************************************************************************************************/
4100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /************************************END - IT_RECON_8x8******************************************/
4110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /************************************************************************************************/
4120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
4130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
4140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
415