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_chroma_itrans_recon.c
220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @brief
240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Contains function definitions for inverse transform  and reconstruction
250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * of chroma interleaved data.
260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @author
280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  100470
290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @par List of Functions:
310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  - ihevc_chroma_itrans_recon_4x4()
320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @remarks
340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  None
350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *******************************************************************************
370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */
380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <stdio.h>
400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <string.h>
410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_typedefs.h"
420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_macros.h"
430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_platform_macros.h"
440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_defs.h"
450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_trans_tables.h"
460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_chroma_itrans_recon.h"
470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_func_selector.h"
480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_trans_macros.h"
490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* All the functions work one component(U or V) of interleaved data depending upon pointers passed to it */
510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* Data visualization */
520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* U V U V U V U V */
530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* U V U V U V U V */
540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* U V U V U V U V */
550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* U V U V U V U V */
560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* If the pointer points to first byte of above stream (U) , functions will operate on U component */
570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* If the pointer points to second byte of above stream (V) , functions will operate on V component */
580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *******************************************************************************
610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @brief
630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  This function performs Inverse transform  and reconstruction for 4x4
640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * input block
650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @par Description:
670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Performs inverse transform and adds the prediction  data and clips output
680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * to 8 bit
690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] pi2_src
710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Input 4x4 coefficients
720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] pi2_tmp
740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Temporary 4x4 buffer for storing inverse transform
750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  1st stage output
760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] pu1_pred
780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Prediction 4x4 block
790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[out] pu1_dst
810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Output 4x4 block
820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] src_strd
840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Input stride
850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] pred_strd
870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Prediction stride
880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] dst_strd
900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Output Stride
910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] shift
930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Output shift
940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] zero_cols
960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Zero columns in pi2_src
970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @returns  Void
990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
1000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @remarks
1010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  None
1020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
1030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *******************************************************************************
1040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */
1050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevc_chroma_itrans_recon_4x4(WORD16 *pi2_src,
1080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                   WORD16 *pi2_tmp,
1090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                   UWORD8 *pu1_pred,
1100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                   UWORD8 *pu1_dst,
1110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                   WORD32 src_strd,
1120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                   WORD32 pred_strd,
1130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                   WORD32 dst_strd,
1140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                   WORD32 zero_cols,
1150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                   WORD32 zero_rows)
1160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
1170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 j;
1180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 e[2], o[2];
1190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 add;
1200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 shift;
1210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD16 *pi2_tmp_orig;
1220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 trans_size;
1230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UNUSED(zero_rows);
1240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    trans_size = TRANS_SIZE_4;
1250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    pi2_tmp_orig = pi2_tmp;
1270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Inverse Transform 1st stage */
1290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    shift = IT_SHIFT_STAGE_1;
1300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    add = 1 << (shift - 1);
1310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    for(j = 0; j < trans_size; j++)
1330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
1340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Checking for Zero Cols */
1350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if((zero_cols & 1) == 1)
1360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
1370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            memset(pi2_tmp, 0, trans_size * sizeof(WORD16));
1380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
1390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        else
1400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
1410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
1430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            o[0] = g_ai2_ihevc_trans_4[1][0] * pi2_src[src_strd]
1440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            + g_ai2_ihevc_trans_4[3][0] * pi2_src[3 * src_strd];
1450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            o[1] = g_ai2_ihevc_trans_4[1][1] * pi2_src[src_strd]
1460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            + g_ai2_ihevc_trans_4[3][1] * pi2_src[3 * src_strd];
1470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            e[0] = g_ai2_ihevc_trans_4[0][0] * pi2_src[0]
1480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            + g_ai2_ihevc_trans_4[2][0] * pi2_src[2 * src_strd];
1490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            e[1] = g_ai2_ihevc_trans_4[0][1] * pi2_src[0]
1500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            + g_ai2_ihevc_trans_4[2][1] * pi2_src[2 * src_strd];
1510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pi2_tmp[0] =
1530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            CLIP_S16(((e[0] + o[0] + add) >> shift));
1540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pi2_tmp[1] =
1550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            CLIP_S16(((e[1] + o[1] + add) >> shift));
1560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pi2_tmp[2] =
1570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            CLIP_S16(((e[1] - o[1] + add) >> shift));
1580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pi2_tmp[3] =
1590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            CLIP_S16(((e[0] - o[0] + add) >> shift));
1600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
1620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pi2_src++;
1630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pi2_tmp += trans_size;
1640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        zero_cols = zero_cols >> 1;
1650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
1660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    pi2_tmp = pi2_tmp_orig;
1680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Inverse Transform 2nd stage */
1700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    shift = IT_SHIFT_STAGE_2;
1710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    add = 1 << (shift - 1);
1720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    for(j = 0; j < trans_size; j++)
1740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
1750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 itrans_out;
1760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
1770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        o[0] = g_ai2_ihevc_trans_4[1][0] * pi2_tmp[trans_size]
1780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        + g_ai2_ihevc_trans_4[3][0] * pi2_tmp[3 * trans_size];
1790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        o[1] = g_ai2_ihevc_trans_4[1][1] * pi2_tmp[trans_size]
1800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        + g_ai2_ihevc_trans_4[3][1] * pi2_tmp[3 * trans_size];
1810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        e[0] = g_ai2_ihevc_trans_4[0][0] * pi2_tmp[0]
1820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        + g_ai2_ihevc_trans_4[2][0] * pi2_tmp[2 * trans_size];
1830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        e[1] = g_ai2_ihevc_trans_4[0][1] * pi2_tmp[0]
1840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        + g_ai2_ihevc_trans_4[2][1] * pi2_tmp[2 * trans_size];
1850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        itrans_out =
1870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        CLIP_S16(((e[0] + o[0] + add) >> shift));
1880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_dst[0 * 2] = CLIP_U8((itrans_out + pu1_pred[0 * 2]));
1890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        itrans_out =
1900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        CLIP_S16(((e[1] + o[1] + add) >> shift));
1910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_dst[1 * 2] = CLIP_U8((itrans_out + pu1_pred[1 * 2]));
1920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        itrans_out =
1930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        CLIP_S16(((e[1] - o[1] + add) >> shift));
1940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_dst[2 * 2] = CLIP_U8((itrans_out + pu1_pred[2 * 2]));
1950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        itrans_out =
1960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        CLIP_S16(((e[0] - o[0] + add) >> shift));
1970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_dst[3 * 2] = CLIP_U8((itrans_out + pu1_pred[3 * 2]));
1980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pi2_tmp++;
2000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_pred += pred_strd;
2010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_dst += dst_strd;
2020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
2040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
2050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
206