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