10d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/****************************************************************************** 20d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 30d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Copyright (C) 2012 Ittiam Systems Pvt Ltd, Bangalore 40d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 50d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Licensed under the Apache License, Version 2.0 (the "License"); 60d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* you may not use this file except in compliance with the License. 70d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* You may obtain a copy of the License at: 80d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 90d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* http://www.apache.org/licenses/LICENSE-2.0 100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Unless required by applicable law or agreed to in writing, software 120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* distributed under the License is distributed on an "AS IS" BASIS, 130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* See the License for the specific language governing permissions and 150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* limitations under the License. 160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************/ 180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @file 210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* ihevc_chroma_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* Ittiam 290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par List of Functions: 310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* ihevc_intra_pred_chroma_planar() 320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* ihevc_intra_pred_chroma_dc() 340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* ihevc_intra_pred_chroma_horz() 360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* ihevc_intra_pred_chroma_ver() 380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* ihevc_intra_pred_chroma_mode2() 400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* ihevc_intra_pred_chroma_mode_18_34() 420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* ihevc_intra_pred_chroma_mode_3_to_9() 440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* ihevc_intra_pred_chroma_mode_11_to_17() 460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* ihevc_intra_pred_chroma_mode_19_to_25() 480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* ihevc_intra_pred_chroma_mode_27_to_33() 500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* ihevc_intra_pred_chroma_ref_substitution() 520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks 550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* None 560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/*****************************************************************************/ 620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* File Includes */ 630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/*****************************************************************************/ 640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_typedefs.h" 660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_macros.h" 670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_func_selector.h" 680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_platform_macros.h" 690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_intra_pred.h" 700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_mem_fns.h" 710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_chroma_intra_pred.h" 720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_common_tables.h" 730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/****************************************************************************/ 760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* Constant Macros */ 770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/****************************************************************************/ 780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define MAX_CU_SIZE 64 790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define BIT_DEPTH 8 800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define T32_4NT 128 810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define T16_4NT 64 820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define T16C_4NT 64 830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define T8C_4NT 32 840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/****************************************************************************/ 850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* Function Macros */ 860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/****************************************************************************/ 870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define GET_BIT(y,x) ((y) & (1 << x)) && (1 << x) 890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/*****************************************************************************/ 920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* Function Definition */ 930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/*****************************************************************************/ 940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief 990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Reference substitution process for samples unavailable for prediction 1000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Refer to section 8.4.4.2.2 1010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 1020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description: 1030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 1040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 1050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pu1_top_left 1060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the top-left 1070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 1080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pu1_top 1090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the top 1100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 1110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pu1_left 1120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the left 1130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 1140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] src_strd 1150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* WORD32 Source stride 1160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 1170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] nbr_flags 1180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* WORD32 neighbor availability flags 1190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 1200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] nt 1210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* WORD32 transform Block size 1220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 1230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] dst_strd 1240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* WORD32 Destination stride 1250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 1260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns 1270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 1280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks 1290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* None 1300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 1310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 1320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 1330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevc_intra_pred_chroma_ref_substitution(UWORD8 *pu1_top_left, 1360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_top, 1370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_left, 1380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 src_strd, 1390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 nt, 1400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 nbr_flags, 1410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_dst, 1420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 dst_strd) 1430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 1440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 pu1_ref_u, pu1_ref_v; 1450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 dc_val, i, j; 1460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 total_samples = (4 * nt) + 1; 1470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 get_bits; 1480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 next; 1490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 bot_left, left, top, tp_right, tp_left; 1500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 idx, nbr_id_from_bl, frwd_nbr_flag; 1510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 a_nbr_flag[5]; 1520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UNUSED(dst_strd); 1530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Neighbor Flag Structure*/ 1540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* WORD32 nbr_flags MSB-->LSB TOP LEFT | TOP-RIGHT | TOP | LEFT | BOTTOM LEFT*/ 1550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* (1 bit) (4 bits) (4 bits) (4 bits) (4 bits) */ 1560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(nbr_flags == 0) 1580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 1590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* If no neighbor flags are present, fill the neighbor samples with DC value */ 1600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*dc_val = 1 << (BIT_DEPTH - 1);*/ 1610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar dc_val = 1 << (8 - 1); 1620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < (2 * total_samples); i++) 1630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 1640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[i] = dc_val; 1650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 1660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 1670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 1680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 1690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Else fill the corresponding samples */ 1700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Check for the neighbors availibility */ 1720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tp_left = (nbr_flags & 0x10000); 1730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tp_right = (nbr_flags & 0x0f000); 1740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar top = (nbr_flags & 0x00f00); 1750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar left = (nbr_flags & 0x000f0); 1760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar bot_left = (nbr_flags & 0x0000f); 1770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Fill nbrs depending on avalibility */ 1790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Top -Left nbrs */ 1800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 != tp_left) 1810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 1820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[(4 * nt)] = *pu1_top_left; // U top-left sample 1830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[(4 * nt) + 1] = *(pu1_top_left + 1); // V top-left sample 1840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 1850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Left nbrs */ 1860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 != left) 1870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 1880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0, j = 0; i < (2 * nt); i += 2) 1890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 1900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[(4 * nt) - 2 - i] = pu1_left[j * src_strd]; // U left samples 1910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[(4 * nt) - 1 - i] = pu1_left[(j * src_strd) + 1]; // V left samples 1920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar j++; 1930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 1940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 1950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Bottom - Left nbrs */ 1960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 != bot_left) 1970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 1980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = (2 * nt), j = nt; i < (4 * nt); i += 2) 1990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[(4 * nt) - 2 - i] = pu1_left[j * src_strd]; // U left samples 2010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[(4 * nt) - 1 - i] = pu1_left[(j * src_strd) + 1]; // V left samples 2020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar j++; 2030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Top nbrs */ 2060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 != top) 2070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_memcpy_mul_8(&pu1_dst[(4 * nt) + 2], pu1_top, 2 * nt); 2090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar // U-V interleaved Top-top right samples 2100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Top - Right nbrs */ 2130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 != tp_right) 2140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_memcpy_mul_8(&pu1_dst[(4 * nt) + 2 + 2 * nt], pu1_top + 2 * nt, 2 * nt); 2160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar // U-V interleaved Top-top right samples 2170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(nt == 4) 2200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* 1 bit extraction for all the neighboring blocks */ 2220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tp_left = (nbr_flags & 0x10000) >> 16; 2230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar bot_left = (nbr_flags & 0x8) >> 3; 2240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar left = (nbr_flags & 0x80) >> 7; 2250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar top = (nbr_flags & 0x100) >> 8; 2260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tp_right = (nbr_flags & 0x1000) >> 12; 2270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar next = 1; 2290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar a_nbr_flag[0] = bot_left; 2300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar a_nbr_flag[1] = left; 2310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar a_nbr_flag[2] = tp_left; 2320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar a_nbr_flag[3] = top; 2330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar a_nbr_flag[4] = tp_right; 2340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* If bottom -left is not available, reverse substitution process*/ 2360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(bot_left == 0) 2370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Check for the 1st available sample from bottom-left*/ 2390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar while(!a_nbr_flag[next]) 2400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar next++; 2410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* If Left, top-left are available*/ 2430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(next <= 2) 2440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD16 *pu2_dst; 2460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar idx = (nt * next); 2470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu2_dst = (UWORD16 *)&pu1_dst[2 * idx]; 2480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_memset_16bit((UWORD16 *)pu1_dst, pu2_dst[0], idx); 2490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else /* If top, top-right are available */ 2510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD16 *pu2_dst; 2530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Idx is changed to copy 1 pixel value for top-left ,if top-left is not available*/ 2540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar idx = (nt * (next - 1)) + 1; 2550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu2_dst = (UWORD16 *)&pu1_dst[2 * idx]; 2560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_memset_16bit((UWORD16 *)pu1_dst, pu2_dst[0], idx); 2570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(left == 0) 2610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD16 *pu2_dst = (UWORD16 *)&pu1_dst[(2 * nt) - 2]; 2630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_memset_16bit((UWORD16 *)&pu1_dst[(2 * nt)], pu2_dst[0], nt); 2640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(tp_left == 0) 2680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[4 * nt] = pu1_dst[(4 * nt) - 2]; 2700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[(4 * nt) + 1] = pu1_dst[(4 * nt) - 1]; 2710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(top == 0) 2730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD16 *pu2_dst = (UWORD16 *)&pu1_dst[(4 * nt)]; 2750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_memset_16bit((UWORD16 *)&pu1_dst[(4 * nt) + 2], pu2_dst[0], nt); 2760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(tp_right == 0) 2800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD16 *pu2_dst = (UWORD16 *)&pu1_dst[(6 * nt)]; 2820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_memset_16bit((UWORD16 *)&pu1_dst[(6 * nt) + 2], pu2_dst[0], nt); 2830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else if(nt == 8) 2880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 nbr_flags_temp = 0; 2900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar nbr_flags_temp = ((nbr_flags & 0xC) >> 2) + ((nbr_flags & 0xC0) >> 4) 2910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar + ((nbr_flags & 0x300) >> 4) 2920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar + ((nbr_flags & 0x3000) >> 6) 2930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar + ((nbr_flags & 0x10000) >> 8); 2940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* compute trailing zeors based on nbr_flag for substitution process of below left see section .*/ 2960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* as each bit in nbr flags corresponds to 8 pels for bot_left, left, top and topright but 1 pel for topleft */ 2970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar nbr_id_from_bl = look_up_trailing_zeros(nbr_flags_temp & 0XF) * 4; /* for bottom left and left */ 2990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(nbr_id_from_bl == 32) 3000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar nbr_id_from_bl = 16; 3010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(nbr_id_from_bl == 16) 3020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* for top left : 1 pel per nbr bit */ 3040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(!((nbr_flags_temp >> 8) & 0x1)) 3050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar nbr_id_from_bl++; 3070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar nbr_id_from_bl += look_up_trailing_zeros((nbr_flags_temp >> 4) & 0xF) * 4; /* top and top right; 8 pels per nbr bit */ 3080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Reverse Substitution Process*/ 3120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(nbr_id_from_bl) 3130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Replicate the bottom-left and subsequent unavailable pixels with the 1st available pixel above */ 3150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_ref_u = pu1_dst[2 * nbr_id_from_bl]; 3160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_ref_v = pu1_dst[(2 * nbr_id_from_bl) + 1]; 3170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 2 * (nbr_id_from_bl - 1); i >= 0; i -= 2) 3180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[i] = pu1_ref_u; 3200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[i + 1] = pu1_ref_v; 3210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* for the loop of 4*Nt+1 pixels (excluding pixels computed from reverse substitution) */ 3260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar while(nbr_id_from_bl < ((T8C_4NT)+1)) 3270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* To Obtain the next unavailable idx flag after reverse neighbor substitution */ 3290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Divide by 8 to obtain the original index */ 3300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar frwd_nbr_flag = (nbr_id_from_bl >> 2); /*+ (nbr_id_from_bl & 0x1);*/ 3310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* The Top-left flag is at the last bit location of nbr_flags*/ 3330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(nbr_id_from_bl == (T8C_4NT / 2)) 3340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar get_bits = GET_BIT(nbr_flags_temp, 8); 3360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* only pel substitution for TL */ 3380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(!get_bits) 3390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[2 * nbr_id_from_bl] = pu1_dst[(2 * nbr_id_from_bl) - 2]; 3410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[(2 * nbr_id_from_bl) + 1] = pu1_dst[(2 * nbr_id_from_bl) - 1]; 3420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 3450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar get_bits = GET_BIT(nbr_flags_temp, frwd_nbr_flag); 3470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(!get_bits) 3480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD16 *pu2_dst; 3500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* 8 pel substitution (other than TL) */ 3510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu2_dst = (UWORD16 *)&pu1_dst[(2 * nbr_id_from_bl) - 2]; 3520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_memset_16bit((UWORD16 *)(pu1_dst + (2 * nbr_id_from_bl)), pu2_dst[0], 4); 3530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar nbr_id_from_bl += (nbr_id_from_bl == (T8C_4NT / 2)) ? 1 : 4; 3570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else if(nt == 16) 3610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* compute trailing ones based on mbr_flag for substitution process of below left see section .*/ 3630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* as each bit in nbr flags corresponds to 4 pels for bot_left, left, top and topright but 1 pel for topleft */ 3640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar nbr_id_from_bl = look_up_trailing_zeros((nbr_flags & 0XFF)) * 4; /* for bottom left and left */ 3660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(nbr_id_from_bl == 32) 3680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* for top left : 1 pel per nbr bit */ 3700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(!((nbr_flags >> 16) & 0x1)) 3710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* top left not available */ 3730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar nbr_id_from_bl++; 3740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* top and top right; 4 pels per nbr bit */ 3750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar nbr_id_from_bl += look_up_trailing_zeros((nbr_flags >> 8) & 0xFF) * 4; 3760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Reverse Substitution Process*/ 3790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(nbr_id_from_bl) 3800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Replicate the bottom-left and subsequent unavailable pixels with the 1st available pixel above */ 3820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_ref_u = pu1_dst[2 * nbr_id_from_bl]; 3830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_ref_v = pu1_dst[2 * nbr_id_from_bl + 1]; 3840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = (2 * (nbr_id_from_bl - 1)); i >= 0; i -= 2) 3850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[i] = pu1_ref_u; 3870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[i + 1] = pu1_ref_v; 3880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* for the loop of 4*Nt+1 pixels (excluding pixels computed from reverse substitution) */ 3930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar while(nbr_id_from_bl < ((T16C_4NT)+1)) 3940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* To Obtain the next unavailable idx flag after reverse neighbor substitution */ 3960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Devide by 4 to obtain the original index */ 3970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar frwd_nbr_flag = (nbr_id_from_bl >> 2); /*+ (nbr_id_from_bl & 0x1);*/ 3980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* The Top-left flag is at the last bit location of nbr_flags*/ 4000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(nbr_id_from_bl == (T16C_4NT / 2)) 4010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar get_bits = GET_BIT(nbr_flags, 16); 4030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* only pel substitution for TL */ 4040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(!get_bits) 4050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[2 * nbr_id_from_bl] = pu1_dst[(2 * nbr_id_from_bl) - 2]; 4070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[(2 * nbr_id_from_bl) + 1] = pu1_dst[(2 * nbr_id_from_bl) - 1]; 4080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 4110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar get_bits = GET_BIT(nbr_flags, frwd_nbr_flag); 4130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(!get_bits) 4140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD16 *pu2_dst; 4160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* 4 pel substitution (other than TL) */ 4170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu2_dst = (UWORD16 *)&pu1_dst[(2 * nbr_id_from_bl) - 2]; 4180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_memset_16bit((UWORD16 *)(pu1_dst + (2 * nbr_id_from_bl)), pu2_dst[0], 4); 4190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar nbr_id_from_bl += (nbr_id_from_bl == (T16C_4NT / 2)) ? 1 : 4; 4230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 4270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 4300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 4310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 4320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief 4330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Planar Intraprediction with reference neighboring samples location 4340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* pointed by 'pu1_ref' to the TU block location pointed by 'pu1_dst' Refer 4350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* to section 8.4.4.2.4 in the standard 4360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 4370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description: 4380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 4390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 4400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pu1_src 4410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the source 4420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 4430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pu1_dst 4440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the destination 4450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 4460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] src_strd 4470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer source stride 4480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 4490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] dst_strd 4500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer destination stride 4510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 4520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] nt 4530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer Transform Block size 4540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 4550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] mode 4560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer intraprediction mode 4570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 4580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns 4590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 4600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks 4610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* None 4620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 4630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 4640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 4650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevc_intra_pred_chroma_planar(UWORD8 *pu1_ref, 4680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 src_strd, 4690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_dst, 4700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 dst_strd, 4710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 nt, 4720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 mode) 4730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 4740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 row, col; 4760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 log2nt = 5; 4770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 two_nt, three_nt; 4780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UNUSED(src_strd); 4790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UNUSED(mode); 4800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar switch(nt) 4810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar case 16: 4830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar log2nt = 4; 4840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar break; 4850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar case 8: 4860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar log2nt = 3; 4870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar break; 4880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar case 4: 4890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar log2nt = 2; 4900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar break; 4910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar default: 4920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar break; 4930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar two_nt = 2 * nt; 4950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar three_nt = 3 * nt; 4960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Planar filtering */ 4970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 0; row < nt; row++) 4980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(col = 0; col < (2 * nt); col += 2) 5000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 5010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[row * dst_strd + col] = ((nt - 1 - col / 2) 5020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * pu1_ref[2 * (two_nt - 1 - row)] 5030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar + (col / 2 + 1) * pu1_ref[2 * (three_nt + 1)] 5040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar + (nt - 1 - row) * pu1_ref[2 * (two_nt + 1) + col] 5050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar + (row + 1) * pu1_ref[2 * (nt - 1)] + nt) >> (log2nt + 1); 5060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[row * dst_strd + col + 1] = ((nt - 1 - col / 2) 5080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * pu1_ref[2 * (two_nt - 1 - row) + 1] 5090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar + (col / 2 + 1) * pu1_ref[2 * (three_nt + 1) + 1] 5100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar + (nt - 1 - row) * pu1_ref[2 * (two_nt + 1) + col + 1] 5110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar + (row + 1) * pu1_ref[2 * (nt - 1) + 1] + nt) >> (log2nt + 1); 5120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 5150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 5180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 5190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 5200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief 5210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Intraprediction for DC mode with reference neighboring samples location 5220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* pointed by 'pu1_ref' to the TU block location pointed by 'pu1_dst' Refer 5230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* to section 8.4.4.2.5 in the standard 5240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 5250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description: 5260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 5270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 5280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pu1_src 5290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the source 5300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 5310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pu1_dst 5320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the destination 5330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 5340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] src_strd 5350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer source stride 5360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 5370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] dst_strd 5380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer destination stride 5390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 5400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] nt 5410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer Transform Block size (Chroma) 5420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 5430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] mode 5440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer intraprediction mode 5450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 5460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns 5470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 5480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks 5490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* None 5500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 5510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 5520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 5530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevc_intra_pred_chroma_dc(UWORD8 *pu1_ref, 5560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 src_strd, 5570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_dst, 5580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 dst_strd, 5590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 nt, 5600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 mode) 5610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 5620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 acc_dc_u, acc_dc_v; 5640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 dc_val_u, dc_val_v; 5650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 i; 5660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 row, col; 5670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 log2nt = 5; 5680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UNUSED(mode); 5690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UNUSED(src_strd); 5700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar switch(nt) 5710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 5720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar case 32: 5730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar log2nt = 5; 5740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar break; 5750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar case 16: 5760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar log2nt = 4; 5770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar break; 5780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar case 8: 5790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar log2nt = 3; 5800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar break; 5810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar case 4: 5820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar log2nt = 2; 5830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar break; 5840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar default: 5850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar break; 5860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar acc_dc_u = 0; 5900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar acc_dc_v = 0; 5910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Calculate DC value for the transform block */ 5920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = (2 * nt); i < (4 * nt); i += 2) 5930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 5940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar acc_dc_u += pu1_ref[i]; 5950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar acc_dc_v += pu1_ref[i + 1]; 5960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = ((4 * nt) + 2); i < ((6 * nt) + 2); i += 2) 5980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 5990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar acc_dc_u += pu1_ref[i]; 6000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar acc_dc_v += pu1_ref[i + 1]; 6010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 6020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar dc_val_u = (acc_dc_u + nt) >> (log2nt + 1); 6050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar dc_val_v = (acc_dc_v + nt) >> (log2nt + 1); 6060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Fill the remaining rows with DC value*/ 6090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 0; row < nt; row++) 6100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 6110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(col = 0; col < (2 * nt); col += 2) 6120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 6130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[(row * dst_strd) + col] = dc_val_u; 6140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[(row * dst_strd) + col + 1] = dc_val_v; 6150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 6160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 6170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 6190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 6220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 6230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 6240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief 6250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Horizontal intraprediction(mode 10) with reference samples location 6260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* pointed by 'pu1_ref' to the TU block location pointed by 'pu1_dst' Refer 6270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* to section 8.4.4.2.6 in the standard (Special case) 6280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 6290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description: 6300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 6310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 6320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pu1_src 6330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the source 6340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 6350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pu1_dst 6360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the destination 6370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 6380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] src_strd 6390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer source stride 6400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 6410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] dst_strd 6420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer destination stride 6430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 6440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] nt 6450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer Transform Block size 6460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 6470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] mode 6480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer intraprediction mode 6490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 6500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns 6510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 6520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks 6530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* None 6540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 6550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 6560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 6570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevc_intra_pred_chroma_horz(UWORD8 *pu1_ref, 6600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 src_strd, 6610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_dst, 6620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 dst_strd, 6630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 nt, 6640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 mode) 6650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 6660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 row, col; 6680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UNUSED(mode); 6690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UNUSED(src_strd); 6700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Replication to next rows*/ 6710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 0; row < nt; row++) 6720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 6730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(col = 0; col < (2 * nt); col += 2) 6740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 6750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[(row * dst_strd) + col] = pu1_ref[(4 * nt) - 2 - 2 * row]; 6760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[(row * dst_strd) + col + 1] = pu1_ref[(4 * nt) - 1 - 2 * row]; 6770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 6780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 6790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 6800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 6840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 6850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 6860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief 6870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Horizontal intraprediction with reference neighboring samples location 6880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* pointed by 'pu1_ref' to the TU block location pointed by 'pu1_dst' Refer 6890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* to section 8.4.4.2.6 in the standard (Special case) 6900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 6910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description: 6920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 6930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 6940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pu1_src 6950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the source 6960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 6970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pu1_dst 6980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the destination 6990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 7000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] src_strd 7010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer source stride 7020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 7030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] dst_strd 7040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer destination stride 7050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 7060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] nt 7070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer Transform Block size 7080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 7090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] mode 7100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer intraprediction mode 7110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 7120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns 7130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 7140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks 7150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* None 7160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 7170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 7180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 7190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevc_intra_pred_chroma_ver(UWORD8 *pu1_ref, 7220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 src_strd, 7230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_dst, 7240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 dst_strd, 7250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 nt, 7260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 mode) 7270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 7280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 row, col; 7290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UNUSED(mode); 7300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UNUSED(src_strd); 7310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Replication to next columns*/ 7320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 0; row < nt; row++) 7330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 7340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(col = 0; col < (2 * nt); col += 2) 7350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 7360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[(row * dst_strd) + col] = pu1_ref[(4 * nt) + 2 + col]; 7370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[(row * dst_strd) + col + 1] = pu1_ref[(4 * nt) + 3 + col]; 7380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 7390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 7400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 7410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 7440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 7450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 7460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief 7470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Intraprediction for mode 2 (sw angle) with reference neighboring samples 7480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* location pointed by 'pu1_ref' to the TU block location pointed by 7490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 'pu1_dst' Refer to section 8.4.4.2.6 in the standard 7500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 7510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description: 7520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 7530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 7540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pu1_src 7550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the source 7560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 7570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pu1_dst 7580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the destination 7590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 7600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] src_strd 7610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer source stride 7620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 7630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] dst_strd 7640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer destination stride 7650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 7660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] nt 7670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer Transform Block size 7680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 7690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] mode 7700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer intraprediction mode 7710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 7720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns 7730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 7740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks 7750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* None 7760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 7770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 7780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 7790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevc_intra_pred_chroma_mode2(UWORD8 *pu1_ref, 7820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 src_strd, 7830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_dst, 7840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 dst_strd, 7850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 nt, 7860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 mode) 7870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 7880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 row, col; 7890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 intra_pred_ang = 32; 7910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 idx_u, idx_v; 7920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UNUSED(src_strd); 7930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UNUSED(mode); 7940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* For the angle 45, replication is done from the corresponding angle */ 7950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* intra_pred_ang = tan(angle) in q5 format */ 7960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(col = 0; col < (2 * nt); col += 2) 7970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 7980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar idx_u = ((col + 1) * intra_pred_ang) >> 5; /* Use idx++ */ 7990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar idx_v = (((col + 1) + 1) * intra_pred_ang) >> 5; /* Use idx++ */ 8000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 0; row < nt; row++) 8010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 8020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[col + (row * dst_strd)] = pu1_ref[(4 * nt) - 2 * row - idx_u - 3]; 8030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[(col + 1) + (row * dst_strd)] = pu1_ref[(4 * nt) - 2 * row - idx_v - 1]; 8040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 8050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 8060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 8080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 8110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 8120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 8130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief 8140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Intraprediction for mode 34 (ne angle) and mode 18 (nw angle) with 8150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* reference neighboring samples location pointed by 'pu1_ref' to the TU 8160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* block location pointed by 'pu1_dst' 8170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 8180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description: 8190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 8200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 8210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pu1_src 8220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the source 8230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 8240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pu1_dst 8250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the destination 8260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 8270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] src_strd 8280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer source stride 8290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 8300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] dst_strd 8310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer destination stride 8320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 8330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] nt 8340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer Transform Block size 8350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 8360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] mode 8370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer intraprediction mode 8380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 8390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns 8400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 8410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks 8420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* None 8430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 8440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 8450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 8460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevc_intra_pred_chroma_mode_18_34(UWORD8 *pu1_ref, 8490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 src_strd, 8500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_dst, 8510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 dst_strd, 8520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 nt, 8530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 mode) 8540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 8550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 row, col; 8560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 intra_pred_ang; 8570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 idx = 0; 8580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UNUSED(src_strd); 8590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar intra_pred_ang = 32; /*Default value*/ 8600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* For mode 18, angle is -45degree */ 8610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(mode == 18) 8620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar intra_pred_ang = -32; 8630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* For mode 34, angle is 45degree */ 8640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else if(mode == 34) 8650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar intra_pred_ang = 32; 8660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* For the angle 45 and -45, replication is done from the corresponding angle */ 8670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* No interpolation is done for 45 degree*/ 8680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 0; row < nt; row++) 8690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 8700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar idx = ((row + 1) * intra_pred_ang) >> 5; 8710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(col = 0; col < (2 * nt); col += 2) 8730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 8740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[col + (row * dst_strd)] = pu1_ref[(4 * nt) + col + 2 * idx + 2]; 8750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[(col + 1) + (row * dst_strd)] = pu1_ref[(4 * nt) + (col + 1) + 2 * idx + 2]; 8760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 8770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 8790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 8810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 8840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 8850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 8860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief 8870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Intraprediction for mode 3 to 9 (positive angle, horizontal mode ) with 8880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* reference neighboring samples location pointed by 'pu1_ref' to the TU 8890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* block location pointed by 'pu1_dst' 8900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 8910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description: 8920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 8930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 8940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pu1_src 8950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the source 8960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 8970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pu1_dst 8980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the destination 8990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] src_strd 9010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer source stride 9020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] dst_strd 9040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer destination stride 9050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] nt 9070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer Transform Block size 9080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] mode 9100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer intraprediction mode 9110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns 9130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks 9150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* None 9160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 9180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 9190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevc_intra_pred_chroma_mode_3_to_9(UWORD8 *pu1_ref, 9220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 src_strd, 9230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_dst, 9240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 dst_strd, 9250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 nt, 9260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 mode) 9270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 9280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 row, col; 9290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 intra_pred_ang; 9310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 idx_u, ref_main_idx_u; 9320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 idx_v, ref_main_idx_v; 9330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 pos_u, fract_u; 9340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 pos_v, fract_v; 9350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UNUSED(src_strd); 9360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Intra Pred Angle according to the mode */ 9370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar intra_pred_ang = gai4_ihevc_ang_table[mode]; 9380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* For the angles other then 45 degree, interpolation btw 2 neighboring */ 9400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* samples dependent on distance to obtain destination sample */ 9410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(col = 0; col < (2 * nt); col += 2) 9430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 9440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pos_u = ((col / 2 + 1) * intra_pred_ang); 9450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pos_v = ((col / 2 + 1) * intra_pred_ang); 9460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar idx_u = pos_u >> 5; 9480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar fract_u = pos_u & (31); 9490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar idx_v = pos_v >> 5; 9510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar fract_v = pos_v & (31); 9520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar // Do linear filtering 9530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 0; row < nt; row++) 9540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 9550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ref_main_idx_u = (4 * nt) - 2 * row - 2 * idx_u - 2; 9560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ref_main_idx_v = (4 * nt) - 2 * row - 2 * idx_v - 1; 9570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[col + (row * dst_strd)] = (((32 - fract_u) 9590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * pu1_ref[ref_main_idx_u] 9600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar + fract_u * pu1_ref[ref_main_idx_u - 2] + 16) >> 5); 9610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[(col + 1) + (row * dst_strd)] = (((32 - fract_v) 9630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * pu1_ref[ref_main_idx_v] 9640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar + fract_v * pu1_ref[ref_main_idx_v - 2] + 16) >> 5); 9650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 9660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 9680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 9700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 9730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 9740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief 9760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Intraprediction for mode 11 to 17 (negative angle, horizontal mode ) 9770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* with reference neighboring samples location pointed by 'pu1_ref' to the 9780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* TU block location pointed by 'pu1_dst' 9790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description: 9810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pu1_src 9840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the source 9850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pu1_dst 9870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the destination 9880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] src_strd 9900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer source stride 9910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] dst_strd 9930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer destination stride 9940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] nt 9960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer Transform Block size 9970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] mode 9990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer intraprediction mode 10000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 10010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns 10020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 10030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks 10040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* None 10050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 10060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 10070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 10080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevc_intra_pred_chroma_mode_11_to_17(UWORD8 *pu1_ref, 10110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 src_strd, 10120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_dst, 10130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 dst_strd, 10140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 nt, 10150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 mode) 10160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 10170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* This function and ihevc_intra_pred_CHROMA_mode_19_to_25 are same except*/ 10180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* for ref main & side samples assignment,can be combined for */ 10190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* optimzation*/ 10200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 row, col, k; 10220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 intra_pred_ang, inv_ang, inv_ang_sum; 10230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 idx_u, idx_v, ref_main_idx_u, ref_main_idx_v, ref_idx; 10240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 pos_u, pos_v, fract_u, fract_v; 10250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 ref_temp[2 * MAX_CU_SIZE + 2]; 10270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *ref_main; 10280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UNUSED(src_strd); 10290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar inv_ang_sum = 128; 10300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar intra_pred_ang = gai4_ihevc_ang_table[mode]; 10320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar inv_ang = gai4_ihevc_inv_ang_table[mode - 11]; 10340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Intermediate reference samples for negative angle modes */ 10350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* This have to be removed during optimization*/ 10360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* For horizontal modes, (ref main = ref left) (ref side = ref above) */ 10380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ref_main = ref_temp + 2 * nt; 10410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(k = 0; k < (2 * (nt + 1)); k += 2) 10420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 10430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ref_temp[k + (2 * (nt - 1))] = pu1_ref[(4 * nt) - k]; 10440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ref_temp[k + 1 + (2 * (nt - 1))] = pu1_ref[(4 * nt) - k + 1]; 10450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 10460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ref_main = ref_temp + (2 * (nt - 1)); 10480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ref_idx = (nt * intra_pred_ang) >> 5; 10490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* SIMD Optimization can be done using look-up table for the loop */ 10510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* For negative angled derive the main reference samples from side */ 10520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* reference samples refer to section 8.4.4.2.6 */ 10530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(k = -2; k > (2 * ref_idx); k -= 2) 10540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 10550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar inv_ang_sum += inv_ang; 10560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ref_main[k] = pu1_ref[(4 * nt) + ((inv_ang_sum >> 8) << 1)]; 10570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ref_main[k + 1] = pu1_ref[((4 * nt) + 1) + ((inv_ang_sum >> 8) << 1)]; 10580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 10590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* For the angles other then 45 degree, interpolation btw 2 neighboring */ 10610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* samples dependent on distance to obtain destination sample */ 10620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(col = 0; col < (2 * nt); col += 2) 10630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 10640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pos_u = ((col / 2 + 1) * intra_pred_ang); 10650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pos_v = ((col / 2 + 1) * intra_pred_ang); 10660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar idx_u = pos_u >> 5; 10670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar idx_v = pos_v >> 5; 10680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar fract_u = pos_u & (31); 10690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar fract_v = pos_v & (31); 10700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar // Do linear filtering 10720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 0; row < nt; row++) 10730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 10740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ref_main_idx_u = 2 * (row + idx_u + 1); 10750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ref_main_idx_v = 2 * (row + idx_v + 1) + 1; 10760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[col + (dst_strd * row)] = (UWORD8)(((32 - fract_u) 10780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * ref_main[ref_main_idx_u] 10790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar + fract_u * ref_main[ref_main_idx_u + 2] + 16) >> 5); 10800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[(col + 1) + (dst_strd * row)] = (UWORD8)(((32 - fract_v) 10810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * ref_main[ref_main_idx_v] 10820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar + fract_v * ref_main[ref_main_idx_v + 2] + 16) >> 5); 10830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 10850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 10870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 10890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 10930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 10940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 10950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief 10960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Intraprediction for mode 19 to 25 (negative angle, vertical mode ) with 10970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* reference neighboring samples location pointed by 'pu1_ref' to the TU 10980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* block location pointed by 'pu1_dst' 10990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 11000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description: 11010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 11020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 11030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pu1_src 11040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the source 11050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 11060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pu1_dst 11070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the destination 11080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 11090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] src_strd 11100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer source stride 11110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 11120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] dst_strd 11130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer destination stride 11140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 11150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] nt 11160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer Transform Block size 11170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 11180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] mode 11190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer intraprediction mode 11200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 11210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns 11220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 11230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks 11240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* None 11250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 11260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 11270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 11280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevc_intra_pred_chroma_mode_19_to_25(UWORD8 *pu1_ref, 11310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 src_strd, 11320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_dst, 11330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 dst_strd, 11340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 nt, 11350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 mode) 11360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 11370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 row, col, k; 11390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 intra_pred_ang, idx; 11400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 inv_ang, inv_ang_sum, pos, fract; 11410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 ref_main_idx_u, ref_main_idx_v, ref_idx; 11420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 ref_temp[(2 * MAX_CU_SIZE) + 2]; 11430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *ref_main; 11440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UNUSED(src_strd); 11450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar intra_pred_ang = gai4_ihevc_ang_table_chroma[mode]; 11480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar inv_ang = gai4_ihevc_inv_ang_table_chroma[mode - 12]; 11490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Intermediate reference samples for negative angle modes */ 11510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* This have to be removed during optimization*/ 11520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* For horizontal modes, (ref main = ref above) (ref side = ref left) */ 11530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ref_main = ref_temp + 2 * nt; 11540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(k = 0; k < (2 * (nt + 1)); k += 2) 11550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 11560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ref_temp[k + (2 * (nt - 1))] = pu1_ref[(4 * nt) + k]; 11570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ref_temp[k + 1 + (2 * (nt - 1))] = pu1_ref[(4 * nt) + k + 1]; 11580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 11590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ref_idx = (nt * intra_pred_ang) >> 5; 11620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar inv_ang_sum = 128; 11630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ref_main = ref_temp + (2 * (nt - 1)); 11640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* SIMD Optimization can be done using look-up table for the loop */ 11650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* For negative angled derive the main reference samples from side */ 11660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* reference samples refer to section 8.4.4.2.6 */ 11670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(k = -2; k > (2 * ref_idx); k -= 2) 11680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 11690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar inv_ang_sum += inv_ang; 11700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ref_main[k] = pu1_ref[(4 * nt) - (inv_ang_sum >> 8) * 2]; 11710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ref_main[k + 1] = pu1_ref[((4 * nt) + 1) - (inv_ang_sum >> 8) * 2]; 11720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 11730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 0; row < nt; row++) 11750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 11760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pos = ((row + 1) * intra_pred_ang); 11770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar idx = pos >> 5; 11780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar fract = pos & (31); 11790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar // Do linear filtering 11810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(col = 0; col < (2 * nt); col += 2) 11820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 11830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ref_main_idx_u = col + 2 * idx + 2; 11840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ref_main_idx_v = (col + 1) + 2 * idx + 2; 11850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[(row * dst_strd) + col] = (UWORD8)(((32 - fract) 11860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * ref_main[ref_main_idx_u] 11870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar + fract * ref_main[ref_main_idx_u + 2] + 16) >> 5); 11880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[(row * dst_strd) + (col + 1)] = (UWORD8)(((32 - fract) 11890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * ref_main[ref_main_idx_v] 11900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar + fract * ref_main[ref_main_idx_v + 2] + 16) >> 5); 11910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 11930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 11950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 11970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 12010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 12020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 12030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief 12040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Intraprediction for mode 27 to 33 (positive angle, vertical mode ) with 12050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* reference neighboring samples location pointed by 'pu1_ref' to the TU 12060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* block location pointed by 'pu1_dst' 12070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 12080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description: 12090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 12100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 12110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pu1_src 12120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the source 12130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 12140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pu1_dst 12150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* UWORD8 pointer to the destination 12160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 12170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] src_strd 12180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer source stride 12190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 12200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] dst_strd 12210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer destination stride 12220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 12230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] nt 12240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer Transform Block size 12250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 12260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] mode 12270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* integer intraprediction mode 12280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 12290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns 12300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 12310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks 12320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* None 12330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 12340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 12350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 12360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevc_intra_pred_chroma_mode_27_to_33(UWORD8 *pu1_ref, 12390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 src_strd, 12400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_dst, 12410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 dst_strd, 12420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 nt, 12430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 mode) 12440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 12450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 row, col; 12460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 pos, fract; 12470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 intra_pred_ang; 12480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 idx, ref_main_idx_u, ref_main_idx_v; 12490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UNUSED(src_strd); 12500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar intra_pred_ang = gai4_ihevc_ang_table_chroma[mode]; 12530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 0; row < nt; row++) 12550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 12560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pos = ((row + 1) * intra_pred_ang); 12570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar idx = pos >> 5; 12580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar fract = pos & (31); 12590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar // Do linear filtering 12620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(col = 0; col < (2 * nt); col += 2) 12630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 12640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ref_main_idx_u = (4 * nt) + col + 2 * idx + 2; 12650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ref_main_idx_v = (4 * nt) + (col + 1) + 2 * idx + 2; 12660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[col + (row * dst_strd)] = (((32 - fract) 12670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * pu1_ref[ref_main_idx_u] 12680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar + fract * pu1_ref[ref_main_idx_u + 2] + 16) >> 5); 12690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_dst[(col + 1) + (row * dst_strd)] = (((32 - fract) 12700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * pu1_ref[ref_main_idx_v] 12710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar + fract * pu1_ref[ref_main_idx_v + 2] + 16) >> 5); 12720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 12740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 12750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 12770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1278