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_intra_pred_filters.c 220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief 240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Contains function Definition for intra prediction interpolation filters 250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @author 280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Srinivas T 290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par List of Functions: 310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* - ihevc_intra_pred_luma_planar() 320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* - ihevc_intra_pred_luma_dc() 330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* - ihevc_intra_pred_luma_horz() 340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* - ihevc_intra_pred_luma_ver() 350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* - ihevc_intra_pred_luma_mode2() 360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* - ihevc_intra_pred_luma_mode_18_34() 370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* - ihevc_intra_pred_luma_mode_3_to_9() 380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* - ihevc_intra_pred_luma_mode_11_to_17() 390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* - ihevc_intra_pred_luma_mode_19_to_25() 400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* - ihevc_intra_pred_luma_mode_27_to_33() 410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* - ihevc_intra_pred_luma_ref_substitution() 420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks 440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* None 450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/*****************************************************************************/ 510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* File Includes */ 520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/*****************************************************************************/ 530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <assert.h> 550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_typedefs.h" 560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_intra_pred.h" 570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_macros.h" 580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_func_selector.h" 590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_platform_macros.h" 600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_common_tables.h" 610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_defs.h" 620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_mem_fns.h" 630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_debug.h" 640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/****************************************************************************/ 660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* Constant Macros */ 670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/****************************************************************************/ 680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define MAX_CU_SIZE 64 690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define BIT_DEPTH 8 700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define T32_4NT 128 710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define T16_4NT 64 720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/****************************************************************************/ 750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* Function Macros */ 760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/****************************************************************************/ 770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define GET_BITS(y,x) ((y) & (1 << x)) && (1 << x) 780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/*****************************************************************************/ 800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* global tables Definition */ 810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/*****************************************************************************/ 820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/*****************************************************************************/ 850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* Function Definition */ 860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/*****************************************************************************/ 870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief 920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Intra prediction interpolation filter for pu1_ref substitution 930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description: 960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Reference substitution process for samples unavailable for prediction 970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Refer to section 8.4.4.2.2 980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pu1_top_left 1000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the top-left 1010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 1020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pu1_top 1030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the top 1040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 1050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pu1_left 1060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the left 1070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 1080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] src_strd 1090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* WORD32 Source stride 1100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 1110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] nbr_flags 1120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* WORD32 neighbor availability flags 1130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 1140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] nt 1150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* WORD32 transform Block size 1160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 1170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] dst_strd 1180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* WORD32 Destination stride 1190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 1200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns 1210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 1220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks 1230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* None 1240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 1250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 1260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 1270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevc_intra_pred_luma_ref_subst_all_avlble(UWORD8 *pu1_top_left, 1280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_top, 1290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_left, 1300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 src_strd, 1310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 nt, 1320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 nbr_flags, 1330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_dst, 1340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 dst_strd) 1350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 1360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 i; 1380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 two_nt = 2 * nt; 1390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UNUSED(nbr_flags); 1400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UNUSED(dst_strd); 1410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Neighbor Flag Structure*/ 1430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* MSB ---> LSB */ 1440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Top-Left | Top-Right | Top | Left | Bottom-Left 1450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1 4 4 4 4 1460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */ 1470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ASSERT((nbr_flags == 0x11188) || (nbr_flags == 0x133CC) || (nbr_flags == 0x1FFFF)); 1480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 1490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(nt == 4) 1510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 1520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* 1 bit extraction for all the neighboring blocks */ 1530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Else fill the corresponding samples */ 1560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[two_nt] = *pu1_top_left; 1570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar //if(left) 1580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 1590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < nt; i++) 1600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[two_nt - 1 - i] = pu1_left[i * src_strd]; 1610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 1620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar// if(bot_left) 1630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 1640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = nt; i < two_nt; i++) 1650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[two_nt - 1 - i] = pu1_left[i * src_strd]; 1660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 1670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar// if(top) 1680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 1690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_memcpy(&pu1_dst[two_nt + 1], pu1_top, nt); 1700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 1710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar// if(tp_right) 1720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 1730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_memcpy(&pu1_dst[two_nt + 1 + nt], pu1_top + nt, nt); 1740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 1750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 1780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 1790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 1810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Else fill the corresponding samples */ 1830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ASSERT((nt == 8) || (nt == 16) || (nt == 32)); 1840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[two_nt] = *pu1_top_left; 1850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < nt; i++) 1870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[two_nt - 1 - i] = pu1_left[i * src_strd]; 1880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = nt; i < two_nt; i++) 1900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[two_nt - 1 - i] = pu1_left[i * src_strd]; 1910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_memcpy_mul_8(&pu1_dst[two_nt + 1], pu1_top, nt); 1930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_memcpy_mul_8(&pu1_dst[two_nt + 1 + nt], pu1_top + nt, nt); 1950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 1960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 1980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 1990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevc_intra_pred_luma_ref_substitution(UWORD8 *pu1_top_left, 2020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_top, 2030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_left, 2040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 src_strd, 2050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 nt, 2060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 nbr_flags, 2070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_dst, 2080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 dst_strd) 2090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 2100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 pu1_ref; 2110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 dc_val, i; 2120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 total_samples = (4 * nt) + 1; 2130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 two_nt = 2 * nt; 2140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 three_nt = 3 * nt; 2160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 get_bits; 2170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 next; 2180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 bot_left, left, top, tp_right, tp_left; 2190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 idx, nbr_id_from_bl, frwd_nbr_flag; 2210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UNUSED(dst_strd); 2220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*dc_val = 1 << (BIT_DEPTH - 1);*/ 2230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar dc_val = 1 << (8 - 1); 2240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Neighbor Flag Structure*/ 2270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* MSB ---> LSB */ 2280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Top-Left | Top-Right | Top | Left | Bottom-Left 2290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1 4 4 4 4 2300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */ 2310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* If no neighbor flags are present, fill the neighbor samples with DC value */ 2320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(nbr_flags == 0) 2330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < total_samples; i++) 2350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[i] = dc_val; 2370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 2400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(nt <= 8) 2420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* 1 bit extraction for all the neighboring blocks */ 2440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tp_left = (nbr_flags & 0x10000) >> 16; 2450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar bot_left = (nbr_flags & 0x8) >> 3; 2460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar left = (nbr_flags & 0x80) >> 7; 2470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar top = (nbr_flags & 0x100) >> 8; 2480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tp_right = (nbr_flags & 0x1000) >> 12; 2490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Else fill the corresponding samples */ 2510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(tp_left) 2520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[two_nt] = *pu1_top_left; 2530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 2540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[two_nt] = 0; 2550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(left) 2580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < nt; i++) 2600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[two_nt - 1 - i] = pu1_left[i * src_strd]; 2610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 2630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_memset(&pu1_dst[two_nt - 1 - (nt - 1)], 0, nt); 2650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(bot_left) 2690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = nt; i < two_nt; i++) 2710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[two_nt - 1 - i] = pu1_left[i * src_strd]; 2720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 2740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_memset(&pu1_dst[two_nt - 1 - (two_nt - 1)], 0, nt); 2760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(top) 2800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_memcpy(&pu1_dst[two_nt + 1], pu1_top, nt); 2820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 2840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_memset(&pu1_dst[two_nt + 1], 0, nt); 2860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(tp_right) 2890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_memcpy(&pu1_dst[two_nt + 1 + nt], pu1_top + nt, nt); 2910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 2930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_memset(&pu1_dst[two_nt + 1 + nt], 0, nt); 2950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar next = 1; 2970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* If bottom -left is not available, reverse substitution process*/ 2990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(bot_left == 0) 3000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 a_nbr_flag[5]; 3020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar a_nbr_flag[0] = bot_left; 3030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar a_nbr_flag[1] = left; 3040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar a_nbr_flag[2] = tp_left; 3050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar a_nbr_flag[3] = top; 3060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar a_nbr_flag[4] = tp_right; 3070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Check for the 1st available sample from bottom-left*/ 3090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar while(!a_nbr_flag[next]) 3100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar next++; 3110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* If Left, top-left are available*/ 3130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(next <= 2) 3140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar idx = nt * next; 3160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_ref = pu1_dst[idx]; 3170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < idx; i++) 3180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[i] = pu1_ref; 3190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else /* If top, top-right are available */ 3210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Idx is changed to copy 1 pixel value for top-left ,if top-left is not available*/ 3230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar idx = (nt * (next - 1)) + 1; 3240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_ref = pu1_dst[idx]; 3250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < idx; i++) 3260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[i] = pu1_ref; 3270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Forward Substitution Process */ 3310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* If left is Unavailable, copy the last bottom-left value */ 3320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(left == 0) 3330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_memset(&pu1_dst[nt], pu1_dst[nt - 1], nt); 3350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* If top-left is Unavailable, copy the last left value */ 3380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(tp_left == 0) 3390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[two_nt] = pu1_dst[two_nt - 1]; 3400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* If top is Unavailable, copy the last top-left value */ 3410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(top == 0) 3420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_memset(&pu1_dst[two_nt + 1], pu1_dst[two_nt], nt); 3440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* If to right is Unavailable, copy the last top value */ 3460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(tp_right == 0) 3470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_memset(&pu1_dst[three_nt + 1], pu1_dst[three_nt], nt); 3490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(nt == 16) 3540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 nbr_flags_temp = 0; 3560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar nbr_flags_temp = ((nbr_flags & 0xC) >> 2) + ((nbr_flags & 0xC0) >> 4) 3570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar + ((nbr_flags & 0x300) >> 4) 3580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar + ((nbr_flags & 0x3000) >> 6) 3590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar + ((nbr_flags & 0x10000) >> 8); 3600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Else fill the corresponding samples */ 3620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(nbr_flags & 0x10000) 3630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[two_nt] = *pu1_top_left; 3640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 3650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[two_nt] = 0; 3660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(nbr_flags & 0xC0) 3680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < nt; i++) 3700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[two_nt - 1 - i] = pu1_left[i * src_strd]; 3710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 3730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_memset_mul_8(&pu1_dst[two_nt - 1 - (nt - 1)], 0, nt); 3750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(nbr_flags & 0xC) 3780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = nt; i < two_nt; i++) 3800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[two_nt - 1 - i] = pu1_left[i * src_strd]; 3810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 3830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_memset_mul_8(&pu1_dst[two_nt - 1 - (two_nt - 1)], 0, nt); 3850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(nbr_flags & 0x300) 3890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_memcpy_mul_8(&pu1_dst[two_nt + 1], pu1_top, nt); 3910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 3930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_memset_mul_8(&pu1_dst[two_nt + 1], 0, nt); 3950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(nbr_flags & 0x3000) 3980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_memcpy_mul_8(&pu1_dst[two_nt + 1 + nt], pu1_top + nt, nt); 4000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 4020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_memset_mul_8(&pu1_dst[two_nt + 1 + nt], 0, nt); 4040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* compute trailing zeors based on nbr_flag for substitution process of below left see section .*/ 4060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* as each bit in nbr flags corresponds to 8 pels for bot_left, left, top and topright but 1 pel for topleft */ 4070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar nbr_id_from_bl = look_up_trailing_zeros(nbr_flags_temp & 0XF) * 8; /* for below left and left */ 4090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(nbr_id_from_bl == 64) 4110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar nbr_id_from_bl = 32; 4120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(nbr_id_from_bl == 32) 4140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* for top left : 1 pel per nbr bit */ 4160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(!((nbr_flags_temp >> 8) & 0x1)) 4170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar nbr_id_from_bl++; 4190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar nbr_id_from_bl += look_up_trailing_zeros((nbr_flags_temp >> 4) & 0xF) * 8; /* top and top right; 8 pels per nbr bit */ 4200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar //nbr_id_from_bl += idx * 8; 4210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Reverse Substitution Process*/ 4240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(nbr_id_from_bl) 4250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Replicate the bottom-left and subsequent unavailable pixels with the 1st available pixel above */ 4270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_ref = pu1_dst[nbr_id_from_bl]; 4280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = (nbr_id_from_bl - 1); i >= 0; i--) 4290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[i] = pu1_ref; 4310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* for the loop of 4*Nt+1 pixels (excluding pixels computed from reverse substitution) */ 4360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar while(nbr_id_from_bl < ((T16_4NT)+1)) 4370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* To Obtain the next unavailable idx flag after reverse neighbor substitution */ 4390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Devide by 8 to obtain the original index */ 4400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar frwd_nbr_flag = (nbr_id_from_bl >> 3); /*+ (nbr_id_from_bl & 0x1);*/ 4410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* The Top-left flag is at the last bit location of nbr_flags*/ 4430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(nbr_id_from_bl == (T16_4NT / 2)) 4440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar get_bits = GET_BITS(nbr_flags_temp, 8); 4460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* only pel substitution for TL */ 4480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(!get_bits) 4490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[nbr_id_from_bl] = pu1_dst[nbr_id_from_bl - 1]; 4500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 4520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar get_bits = GET_BITS(nbr_flags_temp, frwd_nbr_flag); 4540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(!get_bits) 4550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* 8 pel substitution (other than TL) */ 4570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_ref = pu1_dst[nbr_id_from_bl - 1]; 4580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_memset_mul_8(pu1_dst + nbr_id_from_bl, pu1_ref, 8); 4590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar nbr_id_from_bl += (nbr_id_from_bl == (T16_4NT / 2)) ? 1 : 8; 4650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(nt == 32) 4710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Else fill the corresponding samples */ 4730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(nbr_flags & 0x10000) 4740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[two_nt] = *pu1_top_left; 4750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 4760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[two_nt] = 0; 4770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(nbr_flags & 0xF0) 4790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < nt; i++) 4810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[two_nt - 1 - i] = pu1_left[i * src_strd]; 4820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 4840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_memset_mul_8(&pu1_dst[two_nt - 1 - (nt - 1)], 0, nt); 4860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(nbr_flags & 0xF) 4890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = nt; i < two_nt; i++) 4910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[two_nt - 1 - i] = pu1_left[i * src_strd]; 4920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 4940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_memset_mul_8(&pu1_dst[two_nt - 1 - (two_nt - 1)], 0, nt); 4960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(nbr_flags & 0xF00) 5000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 5010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_memcpy_mul_8(&pu1_dst[two_nt + 1], pu1_top, nt); 5020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 5040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 5050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_memset_mul_8(&pu1_dst[two_nt + 1], 0, nt); 5060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(nbr_flags & 0xF000) 5090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 5100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_memcpy_mul_8(&pu1_dst[two_nt + 1 + nt], pu1_top + nt, nt); 5110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 5130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 5140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_memset_mul_8(&pu1_dst[two_nt + 1 + nt], 0, nt); 5150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* compute trailing ones based on mbr_flag for substitution process of below left see section .*/ 5170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* as each bit in nbr flags corresponds to 8 pels for bot_left, left, top and topright but 1 pel for topleft */ 5180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 5190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar nbr_id_from_bl = look_up_trailing_zeros((nbr_flags & 0XFF)) * 8; /* for below left and left */ 5200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(nbr_id_from_bl == 64) 5220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 5230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* for top left : 1 pel per nbr bit */ 5240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(!((nbr_flags >> 16) & 0x1)) 5250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 5260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* top left not available */ 5270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar nbr_id_from_bl++; 5280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* top and top right; 8 pels per nbr bit */ 5290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar nbr_id_from_bl += look_up_trailing_zeros((nbr_flags >> 8) & 0xFF) * 8; 5300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Reverse Substitution Process*/ 5330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(nbr_id_from_bl) 5340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 5350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Replicate the bottom-left and subsequent unavailable pixels with the 1st available pixel above */ 5360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_ref = pu1_dst[nbr_id_from_bl]; 5370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = (nbr_id_from_bl - 1); i >= 0; i--) 5380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[i] = pu1_ref; 5390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* for the loop of 4*Nt+1 pixels (excluding pixels computed from reverse substitution) */ 5430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar while(nbr_id_from_bl < ((T32_4NT)+1)) 5440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 5450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* To Obtain the next unavailable idx flag after reverse neighbor substitution */ 5460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Devide by 8 to obtain the original index */ 5470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar frwd_nbr_flag = (nbr_id_from_bl >> 3); /*+ (nbr_id_from_bl & 0x1);*/ 5480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* The Top-left flag is at the last bit location of nbr_flags*/ 5500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(nbr_id_from_bl == (T32_4NT / 2)) 5510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 5520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar get_bits = GET_BITS(nbr_flags, 16); 5530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* only pel substitution for TL */ 5540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(!get_bits) 5550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[nbr_id_from_bl] = pu1_dst[nbr_id_from_bl - 1]; 5560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 5580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 5590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar get_bits = GET_BITS(nbr_flags, frwd_nbr_flag); 5600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(!get_bits) 5610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 5620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* 8 pel substitution (other than TL) */ 5630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_ref = pu1_dst[nbr_id_from_bl - 1]; 5640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_memset_mul_8(&pu1_dst[nbr_id_from_bl], pu1_ref, 8); 5650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar nbr_id_from_bl += (nbr_id_from_bl == (T32_4NT / 2)) ? 1 : 8; 5700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 5750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 5780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 5790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 5800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief 5810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Intra prediction interpolation filter for ref_filtering 5820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 5830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 5840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description: 5850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Reference DC filtering for neighboring samples dependent on TU size and 5860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* mode Refer to section 8.4.4.2.3 in the standard 5870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 5880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pu1_src 5890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the source 5900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 5910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[out] pu1_dst 5920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the destination 5930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 5940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] nt 5950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer Transform Block size 5960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 5970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] mode 5980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer intraprediction mode 5990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 6000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns 6010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 6020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks 6030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* None 6040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 6050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 6060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 6070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevc_intra_pred_ref_filtering(UWORD8 *pu1_src, 6100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 nt, 6110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_dst, 6120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 mode, 6130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 strong_intra_smoothing_enable_flag) 6140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 6150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 filter_flag; 6160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 i; /* Generic indexing variable */ 6170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 four_nt = 4 * nt; 6180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 au1_flt[(4 * MAX_CU_SIZE) + 1]; 6190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 bi_linear_int_flag = 0; 6200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 abs_cond_left_flag = 0; 6210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 abs_cond_top_flag = 0; 6220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*WORD32 dc_val = 1 << (BIT_DEPTH - 5);*/ 6230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 dc_val = 1 << (8 - 5); 6240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar //WORD32 strong_intra_smoothing_enable_flag = 1; 6250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar filter_flag = gau1_intra_pred_ref_filter[mode] & (1 << (CTZ(nt) - 2)); 6270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == filter_flag) 6280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 6290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(pu1_src == pu1_dst) 6300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 6310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return; 6320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 6330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 6340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 6350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < (four_nt + 1); i++) 6360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[i] = pu1_src[i]; 6370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 6380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 6390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 6410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 6420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* If strong intra smoothin is enabled and transform size is 32 */ 6430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((1 == strong_intra_smoothing_enable_flag) && (32 == nt)) 6440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 6450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Strong Intra Filtering */ 6460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar abs_cond_top_flag = (ABS(pu1_src[2 * nt] + pu1_src[4 * nt] 6470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar - (2 * pu1_src[3 * nt]))) < dc_val; 6480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar abs_cond_left_flag = (ABS(pu1_src[2 * nt] + pu1_src[0] 6490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar - (2 * pu1_src[nt]))) < dc_val; 6500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar bi_linear_int_flag = ((1 == abs_cond_left_flag) 6520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar && (1 == abs_cond_top_flag)); 6530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 6540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Extremities Untouched*/ 6550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_flt[0] = pu1_src[0]; 6560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_flt[4 * nt] = pu1_src[4 * nt]; 6570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Strong filtering of reference samples */ 6590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(1 == bi_linear_int_flag) 6600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 6610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_flt[2 * nt] = pu1_src[2 * nt]; 6620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 1; i < (2 * nt); i++) 6640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_flt[i] = (((2 * nt) - i) * pu1_src[0] + i * pu1_src[2 * nt] + 32) >> 6; 6650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 1; i < (2 * nt); i++) 6670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_flt[i + (2 * nt)] = (((2 * nt) - i) * pu1_src[2 * nt] + i * pu1_src[4 * nt] + 32) >> 6; 6680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 6700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 6710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 6720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Perform bilinear filtering of Reference Samples */ 6730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < (four_nt - 1); i++) 6740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 6750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_flt[i + 1] = (pu1_src[i] + 2 * pu1_src[i + 1] 6760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar + pu1_src[i + 2] + 2) >> 2; 6770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 6780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 6790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < (four_nt + 1); i++) 6820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[i] = au1_flt[i]; 6830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 6840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 6860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 6890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 6900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 6910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief 6920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Intra prediction interpolation filter for luma planar 6930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 6940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description: 6950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Planar Intraprediction with reference neighboring samples location 6960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* pointed by 'pu1_ref' to the TU block location pointed by 'pu1_dst' Refer 6970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* to section 8.4.4.2.4 in the standard 6980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 6990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pu1_src 7000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the source 7010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 7020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[out] pu1_dst 7030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the destination 7040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 7050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] src_strd 7060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer source stride 7070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 7080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] dst_strd 7090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer destination stride 7100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 7110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] nt 7120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer Transform Block size 7130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 7140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] mode 7150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer intraprediction mode 7160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 7170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns 7180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 7190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks 7200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* None 7210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 7220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 7230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 7240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevc_intra_pred_luma_planar(UWORD8 *pu1_ref, 7270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 src_strd, 7280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_dst, 7290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 dst_strd, 7300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 nt, 7310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 mode) 7320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 7330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 row, col; 7360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 log2nt = 5; 7370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 two_nt, three_nt; 7380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UNUSED(src_strd); 7390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UNUSED(mode); 7400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar switch(nt) 7410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 7420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar case 32: 7430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar log2nt = 5; 7440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar break; 7450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar case 16: 7460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar log2nt = 4; 7470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar break; 7480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar case 8: 7490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar log2nt = 3; 7500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar break; 7510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar case 4: 7520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar log2nt = 2; 7530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar break; 7540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar default: 7550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar break; 7560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 7570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar two_nt = 2 * nt; 7580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar three_nt = 3 * nt; 7590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Planar filtering */ 7600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 0; row < nt; row++) 7610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 7620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(col = 0; col < nt; col++) 7630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 7640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[row * dst_strd + col] = ((nt - 1 - col) 7650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * pu1_ref[two_nt - 1 - row] 7660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar + (col + 1) * pu1_ref[three_nt + 1] 7670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar + (nt - 1 - row) * pu1_ref[two_nt + 1 + col] 7680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar + (row + 1) * pu1_ref[nt - 1] + nt) >> (log2nt + 1); 7690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 7700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 7710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 7720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 7750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 7760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 7770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief 7780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Intra prediction interpolation filter for luma dc 7790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 7800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description: 7810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Intraprediction for DC mode with reference neighboring samples location 7820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* pointed by 'pu1_ref' to the TU block location pointed by 'pu1_dst' Refer 7830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* to section 8.4.4.2.5 in the standard 7840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 7850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pu1_src 7860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the source 7870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 7880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[out] pu1_dst 7890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the destination 7900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 7910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] src_strd 7920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer source stride 7930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 7940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] dst_strd 7950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer destination stride 7960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 7970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] nt 7980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer Transform Block size 7990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 8000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] mode 8010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer intraprediction mode 8020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 8030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns 8040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 8050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks 8060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* None 8070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 8080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 8090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 8100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevc_intra_pred_luma_dc(UWORD8 *pu1_ref, 8130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 src_strd, 8140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_dst, 8150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 dst_strd, 8160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 nt, 8170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 mode) 8180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 8190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 acc_dc; 8210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 dc_val, two_dc_val, three_dc_val; 8220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 i; 8230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 row, col; 8240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 log2nt = 5; 8250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 two_nt, three_nt; 8260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UNUSED(mode); 8270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UNUSED(src_strd); 8280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar switch(nt) 8290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 8300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar case 32: 8310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar log2nt = 5; 8320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar break; 8330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar case 16: 8340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar log2nt = 4; 8350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar break; 8360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar case 8: 8370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar log2nt = 3; 8380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar break; 8390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar case 4: 8400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar log2nt = 2; 8410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar break; 8420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar default: 8430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar break; 8440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 8450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar two_nt = 2 * nt; 8460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar three_nt = 3 * nt; 8470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar acc_dc = 0; 8490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Calculate DC value for the transform block */ 8500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = nt; i < two_nt; i++) 8510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar acc_dc += pu1_ref[i]; 8520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = (two_nt + 1); i <= three_nt; i++) 8540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar acc_dc += pu1_ref[i]; 8550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar dc_val = (acc_dc + nt) >> (log2nt + 1); 8570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar two_dc_val = 2 * dc_val; 8590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar three_dc_val = 3 * dc_val; 8600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(nt == 32) 8630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 8640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 0; row < nt; row++) 8650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(col = 0; col < nt; col++) 8660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[(row * dst_strd) + col] = dc_val; 8670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 8680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 8690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 8700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* DC filtering for the first top row and first left column */ 8710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[0] = ((pu1_ref[two_nt - 1] + two_dc_val + pu1_ref[two_nt + 1] + 2) 8720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar >> 2); 8730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(col = 1; col < nt; col++) 8750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[col] = (pu1_ref[two_nt + 1 + col] + three_dc_val + 2) >> 2; 8760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 1; row < nt; row++) 8780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[row * dst_strd] = (pu1_ref[two_nt - 1 - row] + three_dc_val + 2) 8790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar >> 2; 8800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Fill the remaining rows with DC value*/ 8820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 1; row < nt; row++) 8830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(col = 1; col < nt; col++) 8840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[(row * dst_strd) + col] = dc_val; 8850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 8860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 8870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 8910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 8920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 8930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief 8940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Intra prediction interpolation filter for horizontal luma variable. 8950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 8960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description: 8970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Horizontal intraprediction(mode 10) with reference samples location 8980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* pointed by 'pu1_ref' to the TU block location pointed by 'pu1_dst' Refer 8990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* to section 8.4.4.2.6 in the standard (Special case) 9000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pu1_src 9020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the source 9030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[out] pu1_dst 9050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the destination 9060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] src_strd 9080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer source stride 9090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] dst_strd 9110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer destination stride 9120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] nt 9140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer Transform Block size 9150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] mode 9170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer intraprediction mode 9180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns 9200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks 9220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* None 9230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 9250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 9260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevc_intra_pred_luma_horz(UWORD8 *pu1_ref, 9290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 src_strd, 9300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_dst, 9310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 dst_strd, 9320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 nt, 9330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 mode) 9340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 9350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 row, col; 9370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 two_nt; 9380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD16 s2_predpixel; 9390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UNUSED(mode); 9400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UNUSED(src_strd); 9410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar two_nt = 2 * nt; 9420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(nt == 32) 9440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 9450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 0; row < nt; row++) 9460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(col = 0; col < nt; col++) 9470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[(row * dst_strd) + col] = pu1_ref[two_nt - 1 - row]; 9480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 9490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 9500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 9510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Filtering done for the 1st row */ 9520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(col = 0; col < nt; col++) 9530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 9540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar s2_predpixel = pu1_ref[two_nt - 1] 9550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar + ((pu1_ref[two_nt + 1 + col] - pu1_ref[two_nt]) >> 1); 9560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[col] = CLIP_U8(s2_predpixel); 9570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 9580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Replication to next rows*/ 9600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 1; row < nt; row++) 9610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(col = 0; col < nt; col++) 9620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[(row * dst_strd) + col] = pu1_ref[two_nt - 1 - row]; 9630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 9640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 9650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 9710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 9720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief 9740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Intra prediction interpolation filter for vertical luma variable. 9750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description: 9770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Horizontal intraprediction with reference neighboring samples location 9780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* pointed by 'pu1_ref' to the TU block location pointed by 'pu1_dst' Refer 9790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* to section 8.4.4.2.6 in the standard (Special case) 9800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pu1_src 9820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the source 9830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[out] pu1_dst 9850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the destination 9860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] src_strd 9880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer source stride 9890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] dst_strd 9910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer destination stride 9920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] nt 9940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer Transform Block size 9950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] mode 9970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer intraprediction mode 9980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns 10000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 10010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks 10020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* None 10030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 10040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 10050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 10060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevc_intra_pred_luma_ver(UWORD8 *pu1_ref, 10090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 src_strd, 10100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_dst, 10110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 dst_strd, 10120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 nt, 10130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 mode) 10140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 10150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 row, col; 10160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD16 s2_predpixel; 10170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 two_nt = 2 * nt; 10180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UNUSED(mode); 10190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UNUSED(src_strd); 10200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(nt == 32) 10220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 10230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Replication to next columns*/ 10240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 0; row < nt; row++) 10250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(col = 0; col < nt; col++) 10260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[(row * dst_strd) + col] = pu1_ref[two_nt + 1 + col]; 10270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 10280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 10290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 10300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Filtering done for the 1st column */ 10310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 0; row < nt; row++) 10320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 10330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar s2_predpixel = pu1_ref[two_nt + 1] 10340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar + ((pu1_ref[two_nt - 1 - row] - pu1_ref[two_nt]) >> 1); 10350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[row * dst_strd] = CLIP_U8(s2_predpixel); 10360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 10370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Replication to next columns*/ 10390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 0; row < nt; row++) 10400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(col = 1; col < nt; col++) 10410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[(row * dst_strd) + col] = pu1_ref[two_nt + 1 + col]; 10420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 10430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 10440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 10490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 10500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 10510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief 10520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Intra prediction interpolation filter for luma mode2. 10530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 10540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description: 10550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Intraprediction for mode 2 (sw angle) with reference neighboring samples 10560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* location pointed by 'pu1_ref' to the TU block location pointed by 10570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 'pu1_dst' Refer to section 8.4.4.2.6 in the standard 10580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 10590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pu1_src 10600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the source 10610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 10620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[out] pu1_dst 10630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the destination 10640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 10650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] src_strd 10660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer source stride 10670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 10680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] dst_strd 10690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer destination stride 10700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 10710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] nt 10720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer Transform Block size 10730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 10740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] mode 10750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer intraprediction mode 10760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 10770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns 10780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 10790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks 10800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* None 10810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 10820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 10830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 10840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevc_intra_pred_luma_mode2(UWORD8 *pu1_ref, 10870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 src_strd, 10880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_dst, 10890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 dst_strd, 10900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 nt, 10910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 mode) 10920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 10930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 row, col; 10940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 two_nt = 2 * nt; 10950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 intra_pred_ang = 32; 10960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 idx = 0; 10970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UNUSED(mode); 10980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UNUSED(src_strd); 10990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* For the angle 45, replication is done from the corresponding angle */ 11000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* intra_pred_ang = tan(angle) in q5 format */ 11010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(col = 0; col < nt; col++) 11020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 11030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar idx = ((col + 1) * intra_pred_ang) >> 5; /* Use idx++ */ 11040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 0; row < nt; row++) 11060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[col + (row * dst_strd)] = pu1_ref[two_nt - row - idx - 1]; 11070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 11080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 11100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 11130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 11140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 11150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief 11160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Intra prediction interpolation filter for luma mode 18 & mode 34. 11170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 11180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description: 11190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Intraprediction for mode 34 (ne angle) and mode 18 (nw angle) with 11200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* reference neighboring samples location pointed by 'pu1_ref' to the TU 11210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* block location pointed by 'pu1_dst' 11220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 11230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pu1_src 11240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the source 11250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 11260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[out] pu1_dst 11270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the destination 11280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 11290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] src_strd 11300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer source stride 11310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 11320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] dst_strd 11330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer destination stride 11340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 11350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] nt 11360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer Transform Block size 11370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 11380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] mode 11390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer intraprediction mode 11400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 11410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns 11420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 11430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks 11440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* None 11450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 11460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 11470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 11480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevc_intra_pred_luma_mode_18_34(UWORD8 *pu1_ref, 11510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 src_strd, 11520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_dst, 11530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 dst_strd, 11540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 nt, 11550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 mode) 11560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 11570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 row, col; 11580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 intra_pred_ang; 11590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 idx = 0; 11600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 two_nt = 2 * nt; 11610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UNUSED(src_strd); 11620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar intra_pred_ang = 32; /*Default value*/ 11630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* For mode 18, angle is -45degree */ 11650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(mode == 18) 11660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar intra_pred_ang = -32; 11670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* For mode 34, angle is 45degree */ 11680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else if(mode == 34) 11690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar intra_pred_ang = 32; 11700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* For the angle 45 and -45, replication is done from the corresponding angle */ 11710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* No interpolation is done for 45 degree*/ 11720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 0; row < nt; row++) 11730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 11740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar idx = ((row + 1) * intra_pred_ang) >> 5; 11750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#if OPT 11760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(mode == 18) 11770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar idx--; 11780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(mode == 34) 11790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar idx++; 11800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#endif 11810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(col = 0; col < nt; col++) 11820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[col + (row * dst_strd)] = pu1_ref[two_nt + col + idx + 1]; 11830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 11850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 11870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 11900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 11910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 11920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief 11930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Intra prediction interpolation filter for luma mode 3 to mode 9 11940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 11950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description: 11960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Intraprediction for mode 3 to 9 (positive angle, horizontal mode ) with 11970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* reference neighboring samples location pointed by 'pu1_ref' to the TU 11980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* block location pointed by 'pu1_dst' 11990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 12000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pu1_src 12010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the source 12020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 12030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[out] pu1_dst 12040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the destination 12050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 12060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] src_strd 12070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer source stride 12080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 12090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] dst_strd 12100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer destination stride 12110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 12120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] nt 12130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer Transform Block size 12140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 12150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] mode 12160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer intraprediction mode 12170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 12180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns 12190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 12200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks 12210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* None 12220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 12230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 12240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 12250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevc_intra_pred_luma_mode_3_to_9(UWORD8 *pu1_ref, 12280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 src_strd, 12290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_dst, 12300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 dst_strd, 12310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 nt, 12320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 mode) 12330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 12340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 row, col; 12350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 two_nt = 2 * nt; 12360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 intra_pred_ang; 12370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 idx, ref_main_idx; 12380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 pos, fract; 12390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UNUSED(src_strd); 12400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Intra Pred Angle according to the mode */ 12410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar intra_pred_ang = gai4_ihevc_ang_table[mode]; 12420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* For the angles other then 45 degree, interpolation btw 2 neighboring */ 12440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* samples dependent on distance to obtain destination sample */ 12450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(col = 0; col < nt; col++) 12470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 12480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pos = ((col + 1) * intra_pred_ang); 12490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar idx = pos >> 5; 12500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar fract = pos & (31); 12510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar // Do linear filtering 12530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 0; row < nt; row++) 12540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 12550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ref_main_idx = two_nt - row - idx - 1; 12560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[col + (row * dst_strd)] = (((32 - fract) 12570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * pu1_ref[ref_main_idx] 12580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar + fract * pu1_ref[ref_main_idx - 1] + 16) >> 5); 12590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 12600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 12620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 12640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 12670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 12680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 12690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief 12700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Intra prediction interpolation filter for luma mode 11 to mode 17 12710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 12720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description: 12730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Intraprediction for mode 11 to 17 (negative angle, horizontal mode ) 12740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* with reference neighboring samples location pointed by 'pu1_ref' to the 12750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* TU block location pointed by 'pu1_dst' 12760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 12770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pu1_src 12780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the source 12790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 12800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[out] pu1_dst 12810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the destination 12820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 12830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] src_strd 12840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer source stride 12850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 12860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] dst_strd 12870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer destination stride 12880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 12890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] nt 12900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer Transform Block size 12910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 12920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] mode 12930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer intraprediction mode 12940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 12950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns 12960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 12970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks 12980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* None 12990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 13000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 13010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 13020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 13030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 13040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevc_intra_pred_luma_mode_11_to_17(UWORD8 *pu1_ref, 13050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 src_strd, 13060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_dst, 13070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 dst_strd, 13080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 nt, 13090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 mode) 13100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 13110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* This function and ihevc_intra_pred_luma_mode_19_to_25 are same except*/ 13120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* for ref main & side samples assignment,can be combined for */ 13130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* optimzation*/ 13140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 13150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 row, col, k; 13160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 two_nt; 13170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 intra_pred_ang, inv_ang, inv_ang_sum; 13180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 idx, ref_main_idx, ref_idx; 13190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 pos, fract; 13200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 13210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 ref_temp[2 * MAX_CU_SIZE + 1]; 13220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *ref_main; 13230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UNUSED(src_strd); 13240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar inv_ang_sum = 128; 13250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar two_nt = 2 * nt; 13260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 13270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar intra_pred_ang = gai4_ihevc_ang_table[mode]; 13280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 13290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar inv_ang = gai4_ihevc_inv_ang_table[mode - 11]; 13300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Intermediate reference samples for negative angle modes */ 13310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* This have to be removed during optimization*/ 13320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* For horizontal modes, (ref main = ref left) (ref side = ref above) */ 13330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 13340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ref_main = ref_temp + nt - 1; 13350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(k = 0; k < nt + 1; k++) 13360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ref_temp[k + nt - 1] = pu1_ref[two_nt - k]; 13370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 13380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ref_main = ref_temp + nt - 1; 13390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ref_idx = (nt * intra_pred_ang) >> 5; 13400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 13410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* SIMD Optimization can be done using look-up table for the loop */ 13420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* For negative angled derive the main reference samples from side */ 13430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* reference samples refer to section 8.4.4.2.6 */ 13440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(k = -1; k > ref_idx; k--) 13450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 13460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar inv_ang_sum += inv_ang; 13470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ref_main[k] = pu1_ref[two_nt + (inv_ang_sum >> 8)]; 13480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 13490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 13500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* For the angles other then 45 degree, interpolation btw 2 neighboring */ 13510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* samples dependent on distance to obtain destination sample */ 13520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(col = 0; col < nt; col++) 13530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 13540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pos = ((col + 1) * intra_pred_ang); 13550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar idx = pos >> 5; 13560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar fract = pos & (31); 13570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 13580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar // Do linear filtering 13590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 0; row < nt; row++) 13600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 13610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ref_main_idx = row + idx + 1; 13620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[col + (dst_strd * row)] = (UWORD8)(((32 - fract) 13630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * ref_main[ref_main_idx] 13640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar + fract * ref_main[ref_main_idx + 1] + 16) >> 5); 13650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 13660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 13670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 13680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 13690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 13700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 13710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 13720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 13730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 13740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 13750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 13760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 13770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief 13780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Intra prediction interpolation filter for luma mode 19 to mode 25 13790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 13800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description: 13810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Intraprediction for mode 19 to 25 (negative angle, vertical mode ) with 13820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* reference neighboring samples location pointed by 'pu1_ref' to the TU 13830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* block location pointed by 'pu1_dst' 13840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 13850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pu1_src 13860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the source 13870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 13880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[out] pu1_dst 13890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the destination 13900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 13910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] src_strd 13920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer source stride 13930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 13940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] dst_strd 13950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer destination stride 13960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 13970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] nt 13980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer Transform Block size 13990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 14000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] mode 14010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer intraprediction mode 14020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 14030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns 14040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 14050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks 14060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* None 14070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 14080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 14090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 14100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 14110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 14120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevc_intra_pred_luma_mode_19_to_25(UWORD8 *pu1_ref, 14130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 src_strd, 14140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_dst, 14150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 dst_strd, 14160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 nt, 14170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 mode) 14180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 14190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 14200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 row, col, k; 14210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 two_nt, intra_pred_ang, idx; 14220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 inv_ang, inv_ang_sum, pos, fract; 14230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 ref_main_idx, ref_idx; 14240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 ref_temp[(2 * MAX_CU_SIZE) + 1]; 14250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *ref_main; 14260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UNUSED(src_strd); 14270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar two_nt = 2 * nt; 14280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar intra_pred_ang = gai4_ihevc_ang_table[mode]; 14290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar inv_ang = gai4_ihevc_inv_ang_table[mode - 12]; 14300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 14310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Intermediate reference samples for negative angle modes */ 14320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* This have to be removed during optimization*/ 14330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* For horizontal modes, (ref main = ref above) (ref side = ref left) */ 14340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ref_main = ref_temp + nt - 1; 14350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(k = 0; k < (nt + 1); k++) 14360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ref_temp[k + nt - 1] = pu1_ref[two_nt + k]; 14370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 14380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ref_idx = (nt * intra_pred_ang) >> 5; 14390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar inv_ang_sum = 128; 14400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 14410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* SIMD Optimization can be done using look-up table for the loop */ 14420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* For negative angled derive the main reference samples from side */ 14430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* reference samples refer to section 8.4.4.2.6 */ 14440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(k = -1; k > ref_idx; k--) 14450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 14460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar inv_ang_sum += inv_ang; 14470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ref_main[k] = pu1_ref[two_nt - (inv_ang_sum >> 8)]; 14480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 14490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 14500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 0; row < nt; row++) 14510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 14520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pos = ((row + 1) * intra_pred_ang); 14530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar idx = pos >> 5; 14540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar fract = pos & (31); 14550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 14560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar // Do linear filtering 14570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(col = 0; col < nt; col++) 14580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 14590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ref_main_idx = col + idx + 1; 14600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[(row * dst_strd) + col] = (UWORD8)(((32 - fract) 14610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * ref_main[ref_main_idx] 14620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar + fract * ref_main[ref_main_idx + 1] + 16) >> 5); 14630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 14640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 14650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 14660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 14670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 14680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 14690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 14700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 14710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 14720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 14730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 14740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 14750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief 14760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Intra prediction interpolation filter for luma mode 27 to mode 33 14770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 14780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description: 14790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Intraprediction for mode 27 to 33 (positive angle, vertical mode ) with 14800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* reference neighboring samples location pointed by 'pu1_ref' to the TU 14810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* block location pointed by 'pu1_dst' 14820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 14830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pu1_src 14840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the source 14850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 14860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[out] pu1_dst 14870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the destination 14880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 14890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] src_strd 14900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer source stride 14910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 14920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] dst_strd 14930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer destination stride 14940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 14950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] nt 14960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer Transform Block size 14970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 14980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] mode 14990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer intraprediction mode 15000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 15010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns 15020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 15030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks 15040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* None 15050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 15060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 15070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 15080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevc_intra_pred_luma_mode_27_to_33(UWORD8 *pu1_ref, 15110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 src_strd, 15120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_dst, 15130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 dst_strd, 15140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 nt, 15150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 mode) 15160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 15170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 row, col; 15180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 two_nt, pos, fract; 15190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 intra_pred_ang; 15200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 idx, ref_main_idx; 15210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UNUSED(src_strd); 15220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar two_nt = 2 * nt; 15230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar intra_pred_ang = gai4_ihevc_ang_table[mode]; 15240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 0; row < nt; row++) 15260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 15270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pos = ((row + 1) * intra_pred_ang); 15280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar idx = pos >> 5; 15290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar fract = pos & (31); 15300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar // Do linear filtering 15320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(col = 0; col < nt; col++) 15330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 15340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ref_main_idx = two_nt + col + idx + 1; 15350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[col + (row * dst_strd)] = (((32 - fract) 15360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * pu1_ref[ref_main_idx] 15370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar + fract * pu1_ref[ref_main_idx + 1] + 16) >> 5); 15380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 15390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 15410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 15430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1544