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