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_weighted_pred.c
220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Contains function definitions for weighted prediction used in inter
250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* prediction
260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @author
280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Srinivas T
290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par List of Functions:
310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*   - ihevc_weighted_pred_uni()
320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*   - ihevc_weighted_pred_bi()
330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*   - ihevc_weighted_pred_bi_default()
340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*   - ihevc_weighted_pred_chroma_uni()
350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*   - ihevc_weighted_pred_chroma_bi()
360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*   - ihevc_weighted_pred_chroma_bi_default()
370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks
390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  None
400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/
430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/*****************************************************************************/
440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* File Includes                                                             */
450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/*****************************************************************************/
460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_typedefs.h"
470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_defs.h"
480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_macros.h"
490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_platform_macros.h"
500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_func_selector.h"
510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_inter_pred.h"
530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Does uni-weighted prediction on the array pointed by  pi2_src and stores
590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* it at the location pointed by pi2_dst
600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description:
620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  dst = ( (src + lvl_shift) * wgt0 + (1 << (shift - 1)) )  >> shift +
630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* offset
640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pi2_src
660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to the source
670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[out] pu1_dst
690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to the destination
700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] src_strd
720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Source stride
730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] dst_strd
750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Destination stride
760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] wgt0
780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  weight to be multiplied to the source
790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] off0
810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  offset to be added after rounding and
820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] shifting
840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] shift
870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  (14 Bit depth) + log2_weight_denominator
880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] lvl_shift
900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  added before shift and offset
910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ht
930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  height of the source
940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] wd
960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  width of the source
970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns
990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
1000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks
1010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  None
1020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
1030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
1040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/
1050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevc_weighted_pred_uni(WORD16 *pi2_src,
1070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                             UWORD8 *pu1_dst,
1080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                             WORD32 src_strd,
1090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                             WORD32 dst_strd,
1100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                             WORD32 wgt0,
1110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                             WORD32 off0,
1120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                             WORD32 shift,
1130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                             WORD32 lvl_shift,
1140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                             WORD32 ht,
1150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                             WORD32 wd)
1160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
1170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 row, col;
1180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 i4_tmp;
1190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    for(row = 0; row < ht; row++)
1210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
1220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(col = 0; col < wd; col++)
1230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
1240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            i4_tmp = (pi2_src[col] + lvl_shift) * wgt0;
1250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            i4_tmp += 1 << (shift - 1);
1260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            i4_tmp = (i4_tmp >> shift) + off0;
1270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu1_dst[col] = CLIP_U8(i4_tmp);
1290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
1300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pi2_src += src_strd;
1320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_dst += dst_strd;
1330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
1340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
1350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//WEIGHTED_PRED_UNI
1360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
1380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
1390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
1400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
1410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Does chroma uni-weighted prediction on array pointed by pi2_src and stores
1420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* it at the location pointed by pi2_dst
1430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
1440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description:
1450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  dst = ( (src + lvl_shift) * wgt0 + (1 << (shift - 1)) )  >> shift +
1460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* offset
1470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
1480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pi2_src
1490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to the source
1500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
1510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[out] pu1_dst
1520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to the destination
1530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
1540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] src_strd
1550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Source stride
1560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
1570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] dst_strd
1580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Destination stride
1590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
1600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] wgt0
1610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  weight to be multiplied to the source
1620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
1630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] off0
1640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  offset to be added after rounding and
1650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
1660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] shifting
1670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
1680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
1690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] shift
1700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  (14 Bit depth) + log2_weight_denominator
1710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
1720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] lvl_shift
1730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  added before shift and offset
1740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
1750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ht
1760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  height of the source
1770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
1780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] wd
1790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  width of the source (each colour component)
1800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
1810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns
1820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
1830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks
1840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  None
1850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
1860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
1870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/
1880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevc_weighted_pred_chroma_uni(WORD16 *pi2_src,
1900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    UWORD8 *pu1_dst,
1910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    WORD32 src_strd,
1920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    WORD32 dst_strd,
1930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    WORD32 wgt0_cb,
1940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    WORD32 wgt0_cr,
1950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    WORD32 off0_cb,
1960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    WORD32 off0_cr,
1970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    WORD32 shift,
1980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    WORD32 lvl_shift,
1990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    WORD32 ht,
2000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    WORD32 wd)
2010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
2020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 row, col;
2030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 i4_tmp;
2040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    for(row = 0; row < ht; row++)
2060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
2070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(col = 0; col < 2 * wd; col += 2)
2080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
2090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            i4_tmp = (pi2_src[col] + lvl_shift) * wgt0_cb;
2100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            i4_tmp += 1 << (shift - 1);
2110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            i4_tmp = (i4_tmp >> shift) + off0_cb;
2120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu1_dst[col] = CLIP_U8(i4_tmp);
2140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            i4_tmp = (pi2_src[col + 1] + lvl_shift) * wgt0_cr;
2160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            i4_tmp += 1 << (shift - 1);
2170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            i4_tmp = (i4_tmp >> shift) + off0_cr;
2180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu1_dst[col + 1] = CLIP_U8(i4_tmp);
2200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
2210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pi2_src += src_strd;
2230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_dst += dst_strd;
2240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
2250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
2260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//WEIGHTED_PRED_CHROMA_UNI
2270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
2290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
2300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
2310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
2320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Does bi-weighted prediction on the arrays pointed by  pi2_src1 and
2330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* pi2_src2 and stores it at location pointed  by pi2_dst
2340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
2350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description:
2360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  dst = ( (src1 + lvl_shift1)*wgt0 +  (src2 + lvl_shift2)*wgt1 +  (off0 +
2370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* off1 + 1) << (shift - 1) ) >> shift
2380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
2390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pi2_src1
2400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to source 1
2410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
2420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pi2_src2
2430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to source 2
2440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
2450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[out] pu1_dst
2460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to destination
2470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
2480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] src_strd1
2490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Source stride 1
2500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
2510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] src_strd2
2520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Source stride 2
2530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
2540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] dst_strd
2550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Destination stride
2560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
2570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] wgt0
2580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  weight to be multiplied to source 1
2590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
2600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] off0
2610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  offset 0
2620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
2630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] wgt1
2640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  weight to be multiplied to source 2
2650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
2660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] off1
2670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  offset 1
2680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
2690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] shift
2700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  (14 Bit depth) + log2_weight_denominator
2710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
2720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] lvl_shift1
2730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  added before shift and offset
2740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
2750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] lvl_shift2
2760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  added before shift and offset
2770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
2780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ht
2790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  height of the source
2800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
2810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] wd
2820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  width of the source
2830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
2840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns
2850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
2860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks
2870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  None
2880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
2890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
2900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/
2910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevc_weighted_pred_bi(WORD16 *pi2_src1,
2930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            WORD16 *pi2_src2,
2940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            UWORD8 *pu1_dst,
2950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            WORD32 src_strd1,
2960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            WORD32 src_strd2,
2970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            WORD32 dst_strd,
2980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            WORD32 wgt0,
2990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            WORD32 off0,
3000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            WORD32 wgt1,
3010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            WORD32 off1,
3020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            WORD32 shift,
3030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            WORD32 lvl_shift1,
3040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            WORD32 lvl_shift2,
3050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            WORD32 ht,
3060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            WORD32 wd)
3070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
3080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 row, col;
3090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 i4_tmp;
3100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    for(row = 0; row < ht; row++)
3120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
3130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(col = 0; col < wd; col++)
3140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
3150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            i4_tmp = (pi2_src1[col] + lvl_shift1) * wgt0;
3160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            i4_tmp += (pi2_src2[col] + lvl_shift2) * wgt1;
3170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            i4_tmp += (off0 + off1 + 1) << (shift - 1);
3180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu1_dst[col] = CLIP_U8(i4_tmp >> shift);
3200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
3210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pi2_src1 += src_strd1;
3230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pi2_src2 += src_strd2;
3240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_dst += dst_strd;
3250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
3260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
3270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//WEIGHTED_PRED_BI
3280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
3300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
3310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
3320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
3330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Does chroma bi-weighted prediction on the arrays pointed by  pi2_src1 and
3340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* pi2_src2 and stores it at location pointed  by pi2_dst
3350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
3360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description:
3370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  dst = ( (src1 + lvl_shift1)*wgt0 +  (src2 + lvl_shift2)*wgt1 +  (off0 +
3380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* off1 + 1) << (shift - 1) ) >> shift
3390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
3400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pi2_src1
3410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to source 1
3420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
3430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pi2_src2
3440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to source 2
3450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
3460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[out] pu1_dst
3470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to destination
3480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
3490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] src_strd1
3500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Source stride 1
3510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
3520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] src_strd2
3530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Source stride 2
3540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
3550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] dst_strd
3560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Destination stride
3570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
3580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] wgt0
3590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  weight to be multiplied to source 1
3600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
3610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] off0
3620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  offset 0
3630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
3640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] wgt1
3650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  weight to be multiplied to source 2
3660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
3670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] off1
3680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  offset 1
3690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
3700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] shift
3710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  (14 Bit depth) + log2_weight_denominator
3720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
3730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] lvl_shift1
3740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  added before shift and offset
3750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
3760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] lvl_shift2
3770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  added before shift and offset
3780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
3790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ht
3800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  height of the source
3810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
3820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] wd
3830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  width of the source (each colour component)
3840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
3850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns
3860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
3870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks
3880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  None
3890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
3900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
3910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/
3920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevc_weighted_pred_chroma_bi(WORD16 *pi2_src1,
3940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                   WORD16 *pi2_src2,
3950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                   UWORD8 *pu1_dst,
3960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                   WORD32 src_strd1,
3970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                   WORD32 src_strd2,
3980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                   WORD32 dst_strd,
3990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                   WORD32 wgt0_cb,
4000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                   WORD32 wgt0_cr,
4010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                   WORD32 off0_cb,
4020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                   WORD32 off0_cr,
4030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                   WORD32 wgt1_cb,
4040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                   WORD32 wgt1_cr,
4050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                   WORD32 off1_cb,
4060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                   WORD32 off1_cr,
4070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                   WORD32 shift,
4080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                   WORD32 lvl_shift1,
4090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                   WORD32 lvl_shift2,
4100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                   WORD32 ht,
4110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                   WORD32 wd)
4120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
4130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 row, col;
4140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 i4_tmp;
4150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    for(row = 0; row < ht; row++)
4170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
4180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(col = 0; col < 2 * wd; col += 2)
4190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
4200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            i4_tmp = (pi2_src1[col] + lvl_shift1) * wgt0_cb;
4210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            i4_tmp += (pi2_src2[col] + lvl_shift2) * wgt1_cb;
4220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            i4_tmp += (off0_cb + off1_cb + 1) << (shift - 1);
4230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu1_dst[col] = CLIP_U8(i4_tmp >> shift);
4250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            i4_tmp = (pi2_src1[col + 1] + lvl_shift1) * wgt0_cr;
4270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            i4_tmp += (pi2_src2[col + 1] + lvl_shift2) * wgt1_cr;
4280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            i4_tmp += (off0_cr + off1_cr + 1) << (shift - 1);
4290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu1_dst[col + 1] = CLIP_U8(i4_tmp >> shift);
4310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
4320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pi2_src1 += src_strd1;
4340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pi2_src2 += src_strd2;
4350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_dst += dst_strd;
4360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
4370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
4380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//WEIGHTED_PRED_CHROMA_BI
4390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
4410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
4420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
4430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
4440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Does default bi-weighted prediction on the arrays pointed by pi2_src1 and
4450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* pi2_src2 and stores it at location  pointed by pi2_dst
4460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
4470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description:
4480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  dst = ( (src1 + lvl_shift1) +  (src2 + lvl_shift2) +  1 << (shift - 1) )
4490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* >> shift  where shift = 15 - BitDepth
4500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
4510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pi2_src1
4520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to source 1
4530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
4540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pi2_src2
4550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to source 2
4560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
4570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[out] pu1_dst
4580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to destination
4590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
4600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] src_strd1
4610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Source stride 1
4620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
4630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] src_strd2
4640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Source stride 2
4650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
4660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] dst_strd
4670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Destination stride
4680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
4690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] lvl_shift1
4700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  added before shift and offset
4710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
4720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] lvl_shift2
4730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  added before shift and offset
4740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
4750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ht
4760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  height of the source
4770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
4780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] wd
4790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  width of the source
4800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
4810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns
4820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
4830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks
4840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  None
4850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
4860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
4870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/
4880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevc_weighted_pred_bi_default(WORD16 *pi2_src1,
4900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    WORD16 *pi2_src2,
4910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    UWORD8 *pu1_dst,
4920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    WORD32 src_strd1,
4930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    WORD32 src_strd2,
4940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    WORD32 dst_strd,
4950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    WORD32 lvl_shift1,
4960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    WORD32 lvl_shift2,
4970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    WORD32 ht,
4980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    WORD32 wd)
4990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
5000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 row, col;
5010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 i4_tmp;
5020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 shift;
5030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    shift = SHIFT_14_MINUS_BIT_DEPTH + 1;
5050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    for(row = 0; row < ht; row++)
5060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
5070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(col = 0; col < wd; col++)
5080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
5090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            i4_tmp = pi2_src1[col] + lvl_shift1;
5100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            i4_tmp += pi2_src2[col] + lvl_shift2;
5110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            i4_tmp += 1 << (shift - 1);
5120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu1_dst[col] = CLIP_U8(i4_tmp >> shift);
5140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
5150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pi2_src1 += src_strd1;
5170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pi2_src2 += src_strd2;
5180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_dst += dst_strd;
5190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
5200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
5210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//WEIGHTED_PRED_BI_DEFAULT
5220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
5240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
5250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
5260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
5270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Does chroma default bi-weighted prediction on arrays pointed by pi2_src1 and
5280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* pi2_src2 and stores it at location  pointed by pi2_dst
5290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
5300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description:
5310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  dst = ( (src1 + lvl_shift1) +  (src2 + lvl_shift2) +  1 << (shift - 1) )
5320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* >> shift  where shift = 15 - BitDepth
5330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
5340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pi2_src1
5350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to source 1
5360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
5370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pi2_src2
5380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to source 2
5390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
5400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[out] pu1_dst
5410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to destination
5420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
5430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] src_strd1
5440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Source stride 1
5450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
5460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] src_strd2
5470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Source stride 2
5480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
5490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] dst_strd
5500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Destination stride
5510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
5520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] lvl_shift1
5530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  added before shift and offset
5540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
5550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] lvl_shift2
5560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  added before shift and offset
5570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
5580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ht
5590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  height of the source
5600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
5610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] wd
5620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  width of the source (each colour component)
5630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
5640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns
5650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
5660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks
5670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  None
5680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
5690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
5700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/
5710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevc_weighted_pred_chroma_bi_default(WORD16 *pi2_src1,
5730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                           WORD16 *pi2_src2,
5740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                           UWORD8 *pu1_dst,
5750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                           WORD32 src_strd1,
5760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                           WORD32 src_strd2,
5770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                           WORD32 dst_strd,
5780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                           WORD32 lvl_shift1,
5790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                           WORD32 lvl_shift2,
5800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                           WORD32 ht,
5810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                           WORD32 wd)
5820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
5830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 row, col;
5840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 i4_tmp;
5850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 shift;
5860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    shift = SHIFT_14_MINUS_BIT_DEPTH + 1;
5880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    for(row = 0; row < ht; row++)
5890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
5900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(col = 0; col < 2 * wd; col++)
5910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
5920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            i4_tmp = pi2_src1[col] + lvl_shift1;
5930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            i4_tmp += pi2_src2[col] + lvl_shift2;
5940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            i4_tmp += 1 << (shift - 1);
5950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu1_dst[col] = CLIP_U8(i4_tmp >> shift);
5970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
5980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pi2_src1 += src_strd1;
6000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pi2_src2 += src_strd2;
6010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_dst += dst_strd;
6020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
6030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
6040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//WEIGHTED_PRED_CHROMA_BI_DEFAULT
605