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_32x32.c
220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @brief
240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Contains function definitions for inverse transform  and reconstruction 32x32
250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @author
280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  100470
290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @par List of Functions:
310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  - ihevc_itrans_recon_32x32()
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 *
530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @brief
540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  This function performs Inverse transform  and reconstruction for 32x32
550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * input block
560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @par Description:
580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Performs inverse transform and adds the prediction  data and clips output
590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * to 8 bit
600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] pi2_src
620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Input 32x32 coefficients
630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] pi2_tmp
650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Temporary 32x32 buffer for storing inverse
660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  transform
680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  1st stage output
690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] pu1_pred
710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Prediction 32x32 block
720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[out] pu1_dst
740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Output 32x32 block
750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] src_strd
770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Input stride
780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] pred_strd
800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Prediction stride
810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] dst_strd
830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Output Stride
840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] shift
860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Output shift
870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] zero_cols
890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Zero columns in pi2_src
900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @returns  Void
920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @remarks
940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  None
950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *******************************************************************************
970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */
980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevc_itrans_recon_32x32(WORD16 *pi2_src,
1000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                              WORD16 *pi2_tmp,
1010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                              UWORD8 *pu1_pred,
1020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                              UWORD8 *pu1_dst,
1030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                              WORD32 src_strd,
1040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                              WORD32 pred_strd,
1050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                              WORD32 dst_strd,
1060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                              WORD32 zero_cols,
1070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                              WORD32 zero_rows)
1080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
1090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 j, k;
1100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 e[16], o[16];
1110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 ee[8], eo[8];
1120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 eee[4], eeo[4];
1130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 eeee[2], eeeo[2];
1140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 add;
1150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 shift;
1160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD16 *pi2_tmp_orig;
1170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 trans_size;
1180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 zero_rows_2nd_stage = zero_cols;
1190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 row_limit_2nd_stage;
1200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    trans_size = TRANS_SIZE_32;
1220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    pi2_tmp_orig = pi2_tmp;
1230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if((zero_cols & 0xFFFFFFF0) == 0xFFFFFFF0)
1250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        row_limit_2nd_stage = 4;
1260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else if((zero_cols & 0xFFFFFF00) == 0xFFFFFF00)
1270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        row_limit_2nd_stage = 8;
1280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else
1290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        row_limit_2nd_stage = TRANS_SIZE_32;
1300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if((zero_rows & 0xFFFFFFF0) == 0xFFFFFFF0)  /* First 4 rows of input are non-zero */
1320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
1330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /************************************************************************************************/
1340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /**********************************START - IT_RECON_32x32****************************************/
1350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /************************************************************************************************/
1360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Inverse Transform 1st stage */
1370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        shift = IT_SHIFT_STAGE_1;
1380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        add = 1 << (shift - 1);
1390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(j = 0; j < row_limit_2nd_stage; j++)
1410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
1420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* Checking for Zero Cols */
1430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((zero_cols & 1) == 1)
1440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
1450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                memset(pi2_tmp, 0, trans_size * sizeof(WORD16));
1460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
1470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            else
1480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
1490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
1500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 16; k++)
1510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
1520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    o[k] = g_ai2_ihevc_trans_32[1][k] * pi2_src[src_strd]
1530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[3][k]
1540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_src[3 * src_strd];
1550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
1560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 8; k++)
1570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
1580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    eo[k] = g_ai2_ihevc_trans_32[2][k] * pi2_src[2 * src_strd];
1590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
1600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//                for(k = 0; k < 4; k++)
1610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
1620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    eeo[0] = 0;
1630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    eeo[1] = 0;
1640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    eeo[2] = 0;
1650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    eeo[3] = 0;
1660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
1670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeeo[0] = 0;
1680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeeo[1] = 0;
1690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeee[0] = g_ai2_ihevc_trans_32[0][0] * pi2_src[0];
1700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeee[1] = g_ai2_ihevc_trans_32[0][1] * pi2_src[0];
1710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
1730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[0] = eeee[0] + eeeo[0];
1740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[3] = eeee[0] - eeeo[0];
1750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[1] = eeee[1] + eeeo[1];
1760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[2] = eeee[1] - eeeo[1];
1770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 4; k++)
1780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
1790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ee[k] = eee[k] + eeo[k];
1800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ee[k + 4] = eee[3 - k] - eeo[3 - k];
1810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
1820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 8; k++)
1830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
1840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    e[k] = ee[k] + eo[k];
1850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    e[k + 8] = ee[7 - k] - eo[7 - k];
1860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
1870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 16; k++)
1880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
1890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    pi2_tmp[k] =
1900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
1910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    pi2_tmp[k + 16] =
1920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    CLIP_S16(((e[15 - k] - o[15 - k] + add) >> shift));
1930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
1940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
1950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pi2_src++;
1960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pi2_tmp += trans_size;
1970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            zero_cols = zero_cols >> 1;
1980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
1990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pi2_tmp = pi2_tmp_orig;
2010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Inverse Transform 2nd stage */
2030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        shift = IT_SHIFT_STAGE_2;
2040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        add = 1 << (shift - 1);
2050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if((zero_rows_2nd_stage & 0xFFFFFFF0) == 0xFFFFFFF0) /* First 4 rows of output of 1st stage are non-zero */
2060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
2070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            for(j = 0; j < trans_size; j++)
2080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
2090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
2100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 16; k++)
2110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
2120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    o[k] = g_ai2_ihevc_trans_32[1][k] * pi2_tmp[trans_size]
2130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[3][k]
2140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[3 * trans_size];
2150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
2160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 8; k++)
2170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
2180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    eo[k] = g_ai2_ihevc_trans_32[2][k] * pi2_tmp[2 * trans_size];
2190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
2200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//                for(k = 0; k < 4; k++)
2210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
2220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    eeo[0] = 0;
2230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    eeo[1] = 0;
2240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    eeo[2] = 0;
2250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    eeo[3] = 0;
2260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
2270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeeo[0] = 0;
2280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeeo[1] = 0;
2290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeee[0] = g_ai2_ihevc_trans_32[0][0] * pi2_tmp[0];
2300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeee[1] = g_ai2_ihevc_trans_32[0][1] * pi2_tmp[0];
2310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
2330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[0] = eeee[0] + eeeo[0];
2340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[3] = eeee[0] - eeeo[0];
2350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[1] = eeee[1] + eeeo[1];
2360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[2] = eeee[1] - eeeo[1];
2370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 4; k++)
2380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
2390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ee[k] = eee[k] + eeo[k];
2400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ee[k + 4] = eee[3 - k] - eeo[3 - k];
2410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
2420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 8; k++)
2430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
2440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    e[k] = ee[k] + eo[k];
2450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    e[k + 8] = ee[7 - k] - eo[7 - k];
2460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
2470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 16; 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[15 - k] - o[15 - k] + add) >> shift));
2550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    pu1_dst[k + 16] = CLIP_U8((itrans_out + pu1_pred[k + 16]));
2560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
2570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pi2_tmp++;
2580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu1_pred += pred_strd;
2590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu1_dst += dst_strd;
2600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
2610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
2620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        else if((zero_rows_2nd_stage & 0xFFFFFF00) == 0xFFFFFF00) /* First 8 rows of output of 1st stage are non-zero */
2630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
2640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            for(j = 0; j < trans_size; j++)
2650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
2660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
2670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 16; k++)
2680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
2690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    o[k] = g_ai2_ihevc_trans_32[1][k] * pi2_tmp[trans_size]
2700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[3][k]
2710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[3 * trans_size]
2720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[5][k]
2730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[5 * trans_size]
2740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[7][k]
2750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[7 * trans_size];
2760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
2770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 8; k++)
2780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
2790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    eo[k] = g_ai2_ihevc_trans_32[2][k] * pi2_tmp[2 * trans_size]
2800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[6][k]
2810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[6 * trans_size];
2820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
2830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 4; k++)
2840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
2850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    eeo[k] = g_ai2_ihevc_trans_32[4][k] * pi2_tmp[4 * trans_size];
2860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
2870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeeo[0] = 0;
2880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeeo[1] = 0;
2890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeee[0] = g_ai2_ihevc_trans_32[0][0] * pi2_tmp[0];
2900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeee[1] = g_ai2_ihevc_trans_32[0][1] * pi2_tmp[0];
2910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
2930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[0] = eeee[0] + eeeo[0];
2940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[3] = eeee[0] - eeeo[0];
2950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[1] = eeee[1] + eeeo[1];
2960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[2] = eeee[1] - eeeo[1];
2970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 4; k++)
2980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
2990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ee[k] = eee[k] + eeo[k];
3000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ee[k + 4] = eee[3 - k] - eeo[3 - k];
3010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
3020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 8; k++)
3030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
3040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    e[k] = ee[k] + eo[k];
3050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    e[k + 8] = ee[7 - k] - eo[7 - k];
3060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
3070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 16; k++)
3080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
3090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    WORD32 itrans_out;
3100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    itrans_out =
3110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
3120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    pu1_dst[k] = CLIP_U8((itrans_out + pu1_pred[k]));
3130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    itrans_out =
3140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    CLIP_S16(((e[15 - k] - o[15 - k] + add) >> shift));
3150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    pu1_dst[k + 16] = CLIP_U8((itrans_out + pu1_pred[k + 16]));
3160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
3170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pi2_tmp++;
3180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu1_pred += pred_strd;
3190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu1_dst += dst_strd;
3200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
3210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
3220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        else /* All rows of output of 1st stage are non-zero */
3230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
3240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            for(j = 0; j < trans_size; j++)
3250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
3260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
3270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 16; k++)
3280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
3290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    o[k] = g_ai2_ihevc_trans_32[1][k] * pi2_tmp[trans_size]
3300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[3][k]
3310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[3 * trans_size]
3320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[5][k]
3330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[5 * trans_size]
3340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[7][k]
3350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[7 * trans_size]
3360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[9][k]
3370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[9 * trans_size]
3380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[11][k]
3390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[11 * trans_size]
3400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[13][k]
3410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[13 * trans_size]
3420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[15][k]
3430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[15 * trans_size]
3440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[17][k]
3450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[17 * trans_size]
3460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[19][k]
3470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[19 * trans_size]
3480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[21][k]
3490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[21 * trans_size]
3500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[23][k]
3510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[23 * trans_size]
3520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[25][k]
3530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[25 * trans_size]
3540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[27][k]
3550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[27 * trans_size]
3560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[29][k]
3570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[29 * trans_size]
3580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[31][k]
3590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[31 * trans_size];
3600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
3610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 8; k++)
3620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
3630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    eo[k] = g_ai2_ihevc_trans_32[2][k] * pi2_tmp[2 * trans_size]
3640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[6][k]
3650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[6 * trans_size]
3660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[10][k]
3670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[10 * trans_size]
3680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[14][k]
3690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[14 * trans_size]
3700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[18][k]
3710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[18 * trans_size]
3720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[22][k]
3730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[22 * trans_size]
3740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[26][k]
3750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[26 * trans_size]
3760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[30][k]
3770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[30 * trans_size];
3780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
3790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 4; k++)
3800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
3810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    eeo[k] = g_ai2_ihevc_trans_32[4][k] * pi2_tmp[4 * trans_size]
3820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[12][k]
3830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[12 * trans_size]
3840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[20][k]
3850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[20 * trans_size]
3860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[28][k]
3870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[28 * trans_size];
3880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
3890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeeo[0] =
3900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                g_ai2_ihevc_trans_32[8][0] * pi2_tmp[8 * trans_size]
3910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                + g_ai2_ihevc_trans_32[24][0]
3920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                * pi2_tmp[24
3930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                                * trans_size];
3940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeeo[1] =
3950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                g_ai2_ihevc_trans_32[8][1] * pi2_tmp[8 * trans_size]
3960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                + g_ai2_ihevc_trans_32[24][1]
3970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                * pi2_tmp[24
3980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                                * trans_size];
3990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeee[0] =
4000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                g_ai2_ihevc_trans_32[0][0] * pi2_tmp[0]
4010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                + g_ai2_ihevc_trans_32[16][0]
4020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                * pi2_tmp[16
4030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                                * trans_size];
4040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeee[1] =
4050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                g_ai2_ihevc_trans_32[0][1] * pi2_tmp[0]
4060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                + g_ai2_ihevc_trans_32[16][1]
4070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                * pi2_tmp[16
4080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                                * trans_size];
4090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
4110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[0] = eeee[0] + eeeo[0];
4120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[3] = eeee[0] - eeeo[0];
4130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[1] = eeee[1] + eeeo[1];
4140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[2] = eeee[1] - eeeo[1];
4150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 4; k++)
4160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
4170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ee[k] = eee[k] + eeo[k];
4180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ee[k + 4] = eee[3 - k] - eeo[3 - k];
4190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
4200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 8; k++)
4210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
4220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    e[k] = ee[k] + eo[k];
4230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    e[k + 8] = ee[7 - k] - eo[7 - k];
4240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
4250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 16; k++)
4260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
4270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    WORD32 itrans_out;
4280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    itrans_out =
4290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
4300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    pu1_dst[k] = CLIP_U8((itrans_out + pu1_pred[k]));
4310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    itrans_out =
4320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    CLIP_S16(((e[15 - k] - o[15 - k] + add) >> shift));
4330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    pu1_dst[k + 16] = CLIP_U8((itrans_out + pu1_pred[k + 16]));
4340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
4350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pi2_tmp++;
4360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu1_pred += pred_strd;
4370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu1_dst += dst_strd;
4380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
4390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
4400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /************************************************************************************************/
4410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /************************************END - IT_RECON_32x32****************************************/
4420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /************************************************************************************************/
4430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
4440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else if((zero_rows & 0xFFFFFF00) == 0xFFFFFF00) /* First 8 rows of input are non-zero */
4450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
4460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /************************************************************************************************/
4470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /**********************************START - IT_RECON_32x32****************************************/
4480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /************************************************************************************************/
4490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Inverse Transform 1st stage */
4500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        shift = IT_SHIFT_STAGE_1;
4510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        add = 1 << (shift - 1);
4520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(j = 0; j < row_limit_2nd_stage; j++)
4540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
4550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* Checking for Zero Cols */
4560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((zero_cols & 1) == 1)
4570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
4580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                memset(pi2_tmp, 0, trans_size * sizeof(WORD16));
4590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
4600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            else
4610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
4620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
4630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 16; k++)
4640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
4650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    o[k] = g_ai2_ihevc_trans_32[1][k] * pi2_src[src_strd]
4660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[3][k]
4670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_src[3 * src_strd]
4680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[5][k]
4690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_src[5 * src_strd]
4700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[7][k]
4710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_src[7 * src_strd];
4720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
4730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 8; k++)
4740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
4750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    eo[k] = g_ai2_ihevc_trans_32[2][k] * pi2_src[2 * src_strd]
4760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[6][k]
4770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_src[6 * src_strd];
4780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
4790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 4; k++)
4800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
4810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    eeo[k] = g_ai2_ihevc_trans_32[4][k] * pi2_src[4 * src_strd];
4820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
4830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeeo[0] = 0;
4840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeeo[1] = 0;
4850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeee[0] = g_ai2_ihevc_trans_32[0][0] * pi2_src[0];
4860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeee[1] = g_ai2_ihevc_trans_32[0][1] * pi2_src[0];
4870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
4890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[0] = eeee[0] + eeeo[0];
4900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[3] = eeee[0] - eeeo[0];
4910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[1] = eeee[1] + eeeo[1];
4920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[2] = eeee[1] - eeeo[1];
4930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 4; k++)
4940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
4950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ee[k] = eee[k] + eeo[k];
4960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ee[k + 4] = eee[3 - k] - eeo[3 - k];
4970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
4980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 8; k++)
4990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
5000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    e[k] = ee[k] + eo[k];
5010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    e[k + 8] = ee[7 - k] - eo[7 - k];
5020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
5030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 16; k++)
5040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
5050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    pi2_tmp[k] =
5060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
5070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    pi2_tmp[k + 16] =
5080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    CLIP_S16(((e[15 - k] - o[15 - k] + add) >> shift));
5090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
5100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
5110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pi2_src++;
5120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pi2_tmp += trans_size;
5130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            zero_cols = zero_cols >> 1;
5140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
5150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pi2_tmp = pi2_tmp_orig;
5170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Inverse Transform 2nd stage */
5190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        shift = IT_SHIFT_STAGE_2;
5200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        add = 1 << (shift - 1);
5210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if((zero_rows_2nd_stage & 0xFFFFFFF0) == 0xFFFFFFF0) /* First 4 rows of output of 1st stage are non-zero */
5220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
5230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            for(j = 0; j < trans_size; j++)
5240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
5250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
5260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 16; k++)
5270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
5280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    o[k] = g_ai2_ihevc_trans_32[1][k] * pi2_tmp[trans_size]
5290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[3][k]
5300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[3 * trans_size];
5310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
5320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 8; k++)
5330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
5340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    eo[k] = g_ai2_ihevc_trans_32[2][k] * pi2_tmp[2 * trans_size];
5350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
5360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//                for(k = 0; k < 4; k++)
5370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
5380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    eeo[0] = 0;
5390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    eeo[1] = 0;
5400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    eeo[2] = 0;
5410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    eeo[3] = 0;
5420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
5430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeeo[0] = 0;
5440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeeo[1] = 0;
5450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeee[0] = g_ai2_ihevc_trans_32[0][0] * pi2_tmp[0];
5460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeee[1] = g_ai2_ihevc_trans_32[0][1] * pi2_tmp[0];
5470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
5490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[0] = eeee[0] + eeeo[0];
5500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[3] = eeee[0] - eeeo[0];
5510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[1] = eeee[1] + eeeo[1];
5520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[2] = eeee[1] - eeeo[1];
5530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 4; k++)
5540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
5550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ee[k] = eee[k] + eeo[k];
5560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ee[k + 4] = eee[3 - k] - eeo[3 - k];
5570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
5580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 8; k++)
5590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
5600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    e[k] = ee[k] + eo[k];
5610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    e[k + 8] = ee[7 - k] - eo[7 - k];
5620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
5630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 16; k++)
5640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
5650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    WORD32 itrans_out;
5660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    itrans_out =
5670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
5680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    pu1_dst[k] = CLIP_U8((itrans_out + pu1_pred[k]));
5690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    itrans_out =
5700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    CLIP_S16(((e[15 - k] - o[15 - k] + add) >> shift));
5710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    pu1_dst[k + 16] = CLIP_U8((itrans_out + pu1_pred[k + 16]));
5720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
5730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pi2_tmp++;
5740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu1_pred += pred_strd;
5750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu1_dst += dst_strd;
5760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
5770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
5780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        else if((zero_rows_2nd_stage & 0xFFFFFF00) == 0xFFFFFF00) /* First 8 rows of output of 1st stage are non-zero */
5790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
5800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            for(j = 0; j < trans_size; j++)
5810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
5820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
5830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 16; k++)
5840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
5850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    o[k] = g_ai2_ihevc_trans_32[1][k] * pi2_tmp[trans_size]
5860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[3][k]
5870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[3 * trans_size]
5880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[5][k]
5890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[5 * trans_size]
5900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[7][k]
5910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[7 * trans_size];
5920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
5930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 8; k++)
5940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
5950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    eo[k] = g_ai2_ihevc_trans_32[2][k] * pi2_tmp[2 * trans_size]
5960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[6][k]
5970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[6 * trans_size];
5980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
5990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 4; k++)
6000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
6010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    eeo[k] = g_ai2_ihevc_trans_32[4][k] * pi2_tmp[4 * trans_size];
6020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
6030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeeo[0] = 0;
6040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeeo[1] = 0;
6050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeee[0] = g_ai2_ihevc_trans_32[0][0] * pi2_tmp[0];
6060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeee[1] = g_ai2_ihevc_trans_32[0][1] * pi2_tmp[0];
6070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
6090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[0] = eeee[0] + eeeo[0];
6100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[3] = eeee[0] - eeeo[0];
6110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[1] = eeee[1] + eeeo[1];
6120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[2] = eeee[1] - eeeo[1];
6130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 4; k++)
6140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
6150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ee[k] = eee[k] + eeo[k];
6160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ee[k + 4] = eee[3 - k] - eeo[3 - k];
6170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
6180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 8; k++)
6190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
6200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    e[k] = ee[k] + eo[k];
6210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    e[k + 8] = ee[7 - k] - eo[7 - k];
6220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
6230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 16; k++)
6240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
6250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    WORD32 itrans_out;
6260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    itrans_out =
6270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
6280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    pu1_dst[k] = CLIP_U8((itrans_out + pu1_pred[k]));
6290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    itrans_out =
6300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    CLIP_S16(((e[15 - k] - o[15 - k] + add) >> shift));
6310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    pu1_dst[k + 16] = CLIP_U8((itrans_out + pu1_pred[k + 16]));
6320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
6330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pi2_tmp++;
6340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu1_pred += pred_strd;
6350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu1_dst += dst_strd;
6360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
6370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
6380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        else /* All rows of output of 1st stage are non-zero */
6390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
6400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            for(j = 0; j < trans_size; j++)
6410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
6420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
6430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 16; k++)
6440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
6450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    o[k] = g_ai2_ihevc_trans_32[1][k] * pi2_tmp[trans_size]
6460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[3][k]
6470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[3 * trans_size]
6480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[5][k]
6490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[5 * trans_size]
6500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[7][k]
6510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[7 * trans_size]
6520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[9][k]
6530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[9 * trans_size]
6540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[11][k]
6550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[11 * trans_size]
6560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[13][k]
6570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[13 * trans_size]
6580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[15][k]
6590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[15 * trans_size]
6600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[17][k]
6610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[17 * trans_size]
6620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[19][k]
6630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[19 * trans_size]
6640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[21][k]
6650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[21 * trans_size]
6660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[23][k]
6670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[23 * trans_size]
6680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[25][k]
6690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[25 * trans_size]
6700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[27][k]
6710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[27 * trans_size]
6720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[29][k]
6730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[29 * trans_size]
6740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[31][k]
6750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[31 * trans_size];
6760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
6770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 8; k++)
6780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
6790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    eo[k] = g_ai2_ihevc_trans_32[2][k] * pi2_tmp[2 * trans_size]
6800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[6][k]
6810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[6 * trans_size]
6820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[10][k]
6830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[10 * trans_size]
6840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[14][k]
6850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[14 * trans_size]
6860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[18][k]
6870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[18 * trans_size]
6880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[22][k]
6890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[22 * trans_size]
6900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[26][k]
6910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[26 * trans_size]
6920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[30][k]
6930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[30 * trans_size];
6940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
6950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 4; k++)
6960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
6970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    eeo[k] = g_ai2_ihevc_trans_32[4][k] * pi2_tmp[4 * trans_size]
6980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[12][k]
6990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[12 * trans_size]
7000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[20][k]
7010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[20 * trans_size]
7020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[28][k]
7030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[28 * trans_size];
7040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
7050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeeo[0] =
7060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                g_ai2_ihevc_trans_32[8][0] * pi2_tmp[8 * trans_size]
7070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                + g_ai2_ihevc_trans_32[24][0]
7080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                * pi2_tmp[24
7090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                                * trans_size];
7100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeeo[1] =
7110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                g_ai2_ihevc_trans_32[8][1] * pi2_tmp[8 * trans_size]
7120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                + g_ai2_ihevc_trans_32[24][1]
7130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                * pi2_tmp[24
7140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                                * trans_size];
7150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeee[0] =
7160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                g_ai2_ihevc_trans_32[0][0] * pi2_tmp[0]
7170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                + g_ai2_ihevc_trans_32[16][0]
7180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                * pi2_tmp[16
7190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                                * trans_size];
7200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeee[1] =
7210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                g_ai2_ihevc_trans_32[0][1] * pi2_tmp[0]
7220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                + g_ai2_ihevc_trans_32[16][1]
7230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                * pi2_tmp[16
7240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                                * trans_size];
7250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
7270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[0] = eeee[0] + eeeo[0];
7280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[3] = eeee[0] - eeeo[0];
7290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[1] = eeee[1] + eeeo[1];
7300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[2] = eeee[1] - eeeo[1];
7310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 4; k++)
7320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
7330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ee[k] = eee[k] + eeo[k];
7340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ee[k + 4] = eee[3 - k] - eeo[3 - k];
7350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
7360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 8; k++)
7370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
7380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    e[k] = ee[k] + eo[k];
7390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    e[k + 8] = ee[7 - k] - eo[7 - k];
7400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
7410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 16; k++)
7420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
7430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    WORD32 itrans_out;
7440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    itrans_out =
7450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
7460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    pu1_dst[k] = CLIP_U8((itrans_out + pu1_pred[k]));
7470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    itrans_out =
7480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    CLIP_S16(((e[15 - k] - o[15 - k] + add) >> shift));
7490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    pu1_dst[k + 16] = CLIP_U8((itrans_out + pu1_pred[k + 16]));
7500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
7510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pi2_tmp++;
7520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu1_pred += pred_strd;
7530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu1_dst += dst_strd;
7540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
7550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
7560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /************************************************************************************************/
7570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /************************************END - IT_RECON_32x32****************************************/
7580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /************************************************************************************************/
7590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
7600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else  /* All rows of input are non-zero */
7610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
7620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /************************************************************************************************/
7630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /**********************************START - IT_RECON_32x32****************************************/
7640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /************************************************************************************************/
7650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Inverse Transform 1st stage */
7660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        shift = IT_SHIFT_STAGE_1;
7670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        add = 1 << (shift - 1);
7680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(j = 0; j < row_limit_2nd_stage; j++)
7700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
7710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* Checking for Zero Cols */
7720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((zero_cols & 1) == 1)
7730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
7740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                memset(pi2_tmp, 0, trans_size * sizeof(WORD16));
7750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
7760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            else
7770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
7780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
7790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 16; k++)
7800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
7810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    o[k] = g_ai2_ihevc_trans_32[1][k] * pi2_src[src_strd]
7820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[3][k]
7830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_src[3 * src_strd]
7840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[5][k]
7850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_src[5 * src_strd]
7860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[7][k]
7870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_src[7 * src_strd]
7880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[9][k]
7890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_src[9 * src_strd]
7900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[11][k]
7910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_src[11 * src_strd]
7920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[13][k]
7930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_src[13 * src_strd]
7940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[15][k]
7950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_src[15 * src_strd]
7960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[17][k]
7970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_src[17 * src_strd]
7980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[19][k]
7990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_src[19 * src_strd]
8000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[21][k]
8010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_src[21 * src_strd]
8020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[23][k]
8030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_src[23 * src_strd]
8040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[25][k]
8050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_src[25 * src_strd]
8060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[27][k]
8070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_src[27 * src_strd]
8080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[29][k]
8090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_src[29 * src_strd]
8100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[31][k]
8110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_src[31 * src_strd];
8120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
8130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 8; k++)
8140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
8150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    eo[k] = g_ai2_ihevc_trans_32[2][k] * pi2_src[2 * src_strd]
8160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[6][k]
8170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_src[6 * src_strd]
8180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[10][k]
8190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_src[10 * src_strd]
8200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[14][k]
8210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_src[14 * src_strd]
8220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[18][k]
8230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_src[18 * src_strd]
8240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[22][k]
8250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_src[22 * src_strd]
8260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[26][k]
8270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_src[26 * src_strd]
8280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[30][k]
8290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_src[30 * src_strd];
8300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
8310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 4; k++)
8320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
8330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    eeo[k] = g_ai2_ihevc_trans_32[4][k] * pi2_src[4 * src_strd]
8340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[12][k]
8350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_src[12 * src_strd]
8360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[20][k]
8370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_src[20 * src_strd]
8380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[28][k]
8390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_src[28 * src_strd];
8400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
8410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeeo[0] = g_ai2_ihevc_trans_32[8][0] * pi2_src[8 * src_strd]
8420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                + g_ai2_ihevc_trans_32[24][0]
8430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                * pi2_src[24 * src_strd];
8440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeeo[1] = g_ai2_ihevc_trans_32[8][1] * pi2_src[8 * src_strd]
8450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                + g_ai2_ihevc_trans_32[24][1]
8460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                * pi2_src[24 * src_strd];
8470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeee[0] = g_ai2_ihevc_trans_32[0][0] * pi2_src[0]
8480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                + g_ai2_ihevc_trans_32[16][0]
8490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                * pi2_src[16 * src_strd];
8500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeee[1] = g_ai2_ihevc_trans_32[0][1] * pi2_src[0]
8510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                + g_ai2_ihevc_trans_32[16][1]
8520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                * pi2_src[16 * src_strd];
8530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
8550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[0] = eeee[0] + eeeo[0];
8560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[3] = eeee[0] - eeeo[0];
8570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[1] = eeee[1] + eeeo[1];
8580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[2] = eeee[1] - eeeo[1];
8590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 4; k++)
8600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
8610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ee[k] = eee[k] + eeo[k];
8620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ee[k + 4] = eee[3 - k] - eeo[3 - k];
8630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
8640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 8; k++)
8650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
8660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    e[k] = ee[k] + eo[k];
8670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    e[k + 8] = ee[7 - k] - eo[7 - k];
8680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
8690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 16; k++)
8700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
8710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    pi2_tmp[k] =
8720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
8730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    pi2_tmp[k + 16] =
8740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    CLIP_S16(((e[15 - k] - o[15 - k] + add) >> shift));
8750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
8760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
8770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pi2_src++;
8780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pi2_tmp += trans_size;
8790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            zero_cols = zero_cols >> 1;
8800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
8810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pi2_tmp = pi2_tmp_orig;
8830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Inverse Transform 2nd stage */
8850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        shift = IT_SHIFT_STAGE_2;
8860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        add = 1 << (shift - 1);
8870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if((zero_rows_2nd_stage & 0xFFFFFFF0) == 0xFFFFFFF0) /* First 4 rows of output of 1st stage are non-zero */
8880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
8890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            for(j = 0; j < trans_size; j++)
8900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
8910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
8920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 16; k++)
8930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
8940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    o[k] = g_ai2_ihevc_trans_32[1][k] * pi2_tmp[trans_size]
8950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[3][k]
8960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[3 * trans_size];
8970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
8980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 8; k++)
8990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
9000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    eo[k] = g_ai2_ihevc_trans_32[2][k] * pi2_tmp[2 * trans_size];
9010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
9020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//                for(k = 0; k < 4; k++)
9030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
9040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    eeo[0] = 0;
9050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    eeo[1] = 0;
9060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    eeo[2] = 0;
9070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    eeo[3] = 0;
9080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
9090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeeo[0] = 0;
9100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeeo[1] = 0;
9110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeee[0] = g_ai2_ihevc_trans_32[0][0] * pi2_tmp[0];
9120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeee[1] = g_ai2_ihevc_trans_32[0][1] * pi2_tmp[0];
9130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
9150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[0] = eeee[0] + eeeo[0];
9160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[3] = eeee[0] - eeeo[0];
9170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[1] = eeee[1] + eeeo[1];
9180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[2] = eeee[1] - eeeo[1];
9190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 4; k++)
9200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
9210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ee[k] = eee[k] + eeo[k];
9220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ee[k + 4] = eee[3 - k] - eeo[3 - k];
9230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
9240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 8; k++)
9250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
9260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    e[k] = ee[k] + eo[k];
9270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    e[k + 8] = ee[7 - k] - eo[7 - k];
9280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
9290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 16; k++)
9300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
9310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    WORD32 itrans_out;
9320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    itrans_out =
9330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
9340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    pu1_dst[k] = CLIP_U8((itrans_out + pu1_pred[k]));
9350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    itrans_out =
9360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    CLIP_S16(((e[15 - k] - o[15 - k] + add) >> shift));
9370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    pu1_dst[k + 16] = CLIP_U8((itrans_out + pu1_pred[k + 16]));
9380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
9390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pi2_tmp++;
9400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu1_pred += pred_strd;
9410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu1_dst += dst_strd;
9420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
9430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
9440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        else if((zero_rows_2nd_stage & 0xFFFFFF00) == 0xFFFFFF00) /* First 8 rows of output of 1st stage are non-zero */
9450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
9460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            for(j = 0; j < trans_size; j++)
9470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
9480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
9490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 16; k++)
9500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
9510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    o[k] = g_ai2_ihevc_trans_32[1][k] * pi2_tmp[trans_size]
9520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[3][k]
9530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[3 * trans_size]
9540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[5][k]
9550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[5 * trans_size]
9560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[7][k]
9570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[7 * trans_size];
9580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
9590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 8; k++)
9600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
9610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    eo[k] = g_ai2_ihevc_trans_32[2][k] * pi2_tmp[2 * trans_size]
9620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[6][k]
9630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[6 * trans_size];
9640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
9650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 4; k++)
9660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
9670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    eeo[k] = g_ai2_ihevc_trans_32[4][k] * pi2_tmp[4 * trans_size];
9680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
9690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeeo[0] = 0;
9700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeeo[1] = 0;
9710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeee[0] = g_ai2_ihevc_trans_32[0][0] * pi2_tmp[0];
9720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeee[1] = g_ai2_ihevc_trans_32[0][1] * pi2_tmp[0];
9730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
9750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[0] = eeee[0] + eeeo[0];
9760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[3] = eeee[0] - eeeo[0];
9770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[1] = eeee[1] + eeeo[1];
9780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[2] = eeee[1] - eeeo[1];
9790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 4; k++)
9800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
9810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ee[k] = eee[k] + eeo[k];
9820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ee[k + 4] = eee[3 - k] - eeo[3 - k];
9830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
9840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 8; k++)
9850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
9860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    e[k] = ee[k] + eo[k];
9870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    e[k + 8] = ee[7 - k] - eo[7 - k];
9880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
9890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 16; k++)
9900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
9910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    WORD32 itrans_out;
9920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    itrans_out =
9930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
9940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    pu1_dst[k] = CLIP_U8((itrans_out + pu1_pred[k]));
9950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    itrans_out =
9960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    CLIP_S16(((e[15 - k] - o[15 - k] + add) >> shift));
9970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    pu1_dst[k + 16] = CLIP_U8((itrans_out + pu1_pred[k + 16]));
9980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
9990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pi2_tmp++;
10000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu1_pred += pred_strd;
10010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu1_dst += dst_strd;
10020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
10030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
10040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        else /* All rows of output of 1st stage are non-zero */
10050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
10060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            for(j = 0; j < trans_size; j++)
10070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
10080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
10090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 16; k++)
10100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
10110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    o[k] = g_ai2_ihevc_trans_32[1][k] * pi2_tmp[trans_size]
10120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[3][k]
10130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[3 * trans_size]
10140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[5][k]
10150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[5 * trans_size]
10160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[7][k]
10170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[7 * trans_size]
10180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[9][k]
10190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[9 * trans_size]
10200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[11][k]
10210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[11 * trans_size]
10220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[13][k]
10230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[13 * trans_size]
10240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[15][k]
10250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[15 * trans_size]
10260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[17][k]
10270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[17 * trans_size]
10280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[19][k]
10290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[19 * trans_size]
10300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[21][k]
10310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[21 * trans_size]
10320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[23][k]
10330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[23 * trans_size]
10340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[25][k]
10350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[25 * trans_size]
10360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[27][k]
10370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[27 * trans_size]
10380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[29][k]
10390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[29 * trans_size]
10400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[31][k]
10410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[31 * trans_size];
10420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
10430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 8; k++)
10440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
10450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    eo[k] = g_ai2_ihevc_trans_32[2][k] * pi2_tmp[2 * trans_size]
10460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[6][k]
10470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[6 * trans_size]
10480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[10][k]
10490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[10 * trans_size]
10500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[14][k]
10510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[14 * trans_size]
10520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[18][k]
10530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[18 * trans_size]
10540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[22][k]
10550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[22 * trans_size]
10560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[26][k]
10570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[26 * trans_size]
10580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[30][k]
10590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[30 * trans_size];
10600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
10610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 4; k++)
10620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
10630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    eeo[k] = g_ai2_ihevc_trans_32[4][k] * pi2_tmp[4 * trans_size]
10640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[12][k]
10650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[12 * trans_size]
10660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[20][k]
10670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[20 * trans_size]
10680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + g_ai2_ihevc_trans_32[28][k]
10690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    * pi2_tmp[28 * trans_size];
10700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
10710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeeo[0] =
10720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                g_ai2_ihevc_trans_32[8][0] * pi2_tmp[8 * trans_size]
10730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                + g_ai2_ihevc_trans_32[24][0]
10740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                * pi2_tmp[24
10750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                                * trans_size];
10760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeeo[1] =
10770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                g_ai2_ihevc_trans_32[8][1] * pi2_tmp[8 * trans_size]
10780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                + g_ai2_ihevc_trans_32[24][1]
10790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                * pi2_tmp[24
10800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                                * trans_size];
10810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeee[0] =
10820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                g_ai2_ihevc_trans_32[0][0] * pi2_tmp[0]
10830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                + g_ai2_ihevc_trans_32[16][0]
10840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                * pi2_tmp[16
10850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                                * trans_size];
10860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eeee[1] =
10870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                g_ai2_ihevc_trans_32[0][1] * pi2_tmp[0]
10880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                + g_ai2_ihevc_trans_32[16][1]
10890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                * pi2_tmp[16
10900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                                * trans_size];
10910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
10920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
10930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[0] = eeee[0] + eeeo[0];
10940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[3] = eeee[0] - eeeo[0];
10950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[1] = eeee[1] + eeeo[1];
10960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                eee[2] = eeee[1] - eeeo[1];
10970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 4; k++)
10980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
10990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ee[k] = eee[k] + eeo[k];
11000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ee[k + 4] = eee[3 - k] - eeo[3 - k];
11010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
11020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 8; k++)
11030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
11040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    e[k] = ee[k] + eo[k];
11050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    e[k + 8] = ee[7 - k] - eo[7 - k];
11060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
11070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(k = 0; k < 16; k++)
11080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
11090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    WORD32 itrans_out;
11100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    itrans_out =
11110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
11120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    pu1_dst[k] = CLIP_U8((itrans_out + pu1_pred[k]));
11130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    itrans_out =
11140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    CLIP_S16(((e[15 - k] - o[15 - k] + add) >> shift));
11150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    pu1_dst[k + 16] = CLIP_U8((itrans_out + pu1_pred[k + 16]));
11160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
11170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pi2_tmp++;
11180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu1_pred += pred_strd;
11190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu1_dst += dst_strd;
11200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
11210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
11220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /************************************************************************************************/
11230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /************************************END - IT_RECON_32x32****************************************/
11240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /************************************************************************************************/
11250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
11260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
11270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1128