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* ihevcd_parse_residual.c 220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief 240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Contains functions for parsing residual data at TU level 250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @author 270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Harish 280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par List of Functions: 300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks 320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* None 330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/*****************************************************************************/ 370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* File Includes */ 380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/*****************************************************************************/ 390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <stdio.h> 400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <stddef.h> 410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <stdlib.h> 420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <string.h> 430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <assert.h> 440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_typedefs.h" 460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "iv.h" 470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ivd.h" 480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_cxa.h" 490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_defs.h" 510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_debug.h" 520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_structs.h" 530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_macros.h" 540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_platform_macros.h" 550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_common_tables.h" 570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_error.h" 580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_cabac_tables.h" 590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_trace.h" 610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_defs.h" 620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_function_selector.h" 630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_structs.h" 640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_error.h" 650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_nal.h" 660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_bitstream.h" 670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_utils.h" 680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_parse_residual.h" 690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_cabac.h" 700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ***************************************************************************** 730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @brief returns context increment for sig coeff based on csbf neigbour 740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * flags (bottom and right) and current coeff postion in 4x4 block 750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * See section 9.3.3.1.4 for details on this context increment 760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * input : neigbour csbf flags(bit0:rightcsbf, bit1:bottom csbf) 780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * coeff idx in raster order (0-15) 790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * output : context increment for sig coeff flag 810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ***************************************************************************** 830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */ 840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarconst UWORD8 gau1_ihevcd_sigcoeff_ctxtinc[3][4][16] = 850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* nbr csbf = 0: sigCtx = (xP+yP == 0) ? 2 : (xP+yP < 3) ? 1: 0 */ 890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* nbr csbf = 1: sigCtx = (yP == 0) ? 2 : (yP == 1) ? 1: 0 */ 910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2, 1, 2, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0 }, 920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* nbr csbf = 2: sigCtx = (xP == 0) ? 2 : (xP == 1) ? 1: 0 */ 930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2, 2, 1, 2, 1, 0, 2, 1, 0, 0, 1, 0, 0, 0, 0, 0 }, 940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* nbr csbf = 3: sigCtx = 2 */ 950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }, 960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar }, 970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* nbr csbf = 0: sigCtx = (xP+yP == 0) ? 2 : (xP+yP < 3) ? 1: 0 */ 990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 }, 1000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* nbr csbf = 1: sigCtx = (yP == 0) ? 2 : (yP == 1) ? 1: 0 */ 1010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, 1020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* nbr csbf = 2: sigCtx = (xP == 0) ? 2 : (xP == 1) ? 1: 0 */ 1030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2, 1, 0, 0, 2, 1, 0, 0, 2, 1, 0, 0, 2, 1, 0, 0 }, 1040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* nbr csbf = 3: sigCtx = 2 */ 1050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }, 1060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar }, 1070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 1080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* nbr csbf = 0: sigCtx = (xP+yP == 0) ? 2 : (xP+yP < 3) ? 1: 0 */ 1090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 }, 1100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* nbr csbf = 1: sigCtx = (yP == 0) ? 2 : (yP == 1) ? 1: 0 */ 1110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2, 1, 0, 0, 2, 1, 0, 0, 2, 1, 0, 0, 2, 1, 0, 0 }, 1120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* nbr csbf = 2: sigCtx = (xP == 0) ? 2 : (xP == 1) ? 1: 0 */ 1130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, 1140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* nbr csbf = 3: sigCtx = 2 */ 1150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }, 1160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar }, 1170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}; 1200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 1240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ***************************************************************************** 1250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @brief returns context increment for sig coeff for 4x4 tranform size as 1260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * per Table 9-39 in section 9.3.3.1.4 1270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 1280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * input : coeff idx in raster order (0-15) 1290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 1300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * output : context increment for sig coeff flag 1310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 1320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ***************************************************************************** 1330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */ 1340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarconst UWORD8 gau1_ihevcd_sigcoeff_ctxtinc_tr4[3][16] = 1350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 1360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Upright diagonal scan */ 1370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 1380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 0, 2, 1, 6, 1390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3, 4, 7, 6, 1400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4, 5, 7, 8, 1410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5, 8, 8, 8, 1420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar }, 1430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Horizontal scan */ 1440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 1450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 0, 1, 4, 5, 1460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2, 3, 4, 5, 1470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6, 6, 8, 8, 1480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7, 7, 8, 8, 1490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar }, 1500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Vertical scan */ 1510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 1520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 0, 2, 6, 7, 1530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1, 3, 6, 7, 1540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4, 4, 8, 8, 1550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5, 5, 8, 8, 1560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar }, 1570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}; 1580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 1610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 1620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 1630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief 1640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Parses Residual coding 1650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 1660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description: 1670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Parses Residual coding as per Section:7.3.13 1680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 1690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ps_codec 1700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Pointer to codec context 1710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 1720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns error code from IHEVCD_ERROR_T 1730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 1740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks 1750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 1760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 1770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 1780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 1790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarWORD32 ihevcd_parse_residual_coding(codec_t *ps_codec, 1810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 x0, WORD32 y0, 1820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 log2_trafo_size, 1830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 c_idx, 1840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 intra_pred_mode) 1850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 1860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS; 1870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 transform_skip_flag; 1880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 value; 1890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pps_t *ps_pps; 1900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 last_scan_pos, last_sub_blk; 1910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar bitstrm_t *ps_bitstrm = &ps_codec->s_parse.s_bitstrm; 1920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 last_significant_coeff_x_prefix, last_significant_coeff_y_prefix; 1930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 last_significant_coeff_x, last_significant_coeff_y; 1943d2ea5037ccc3cd4b08f957dff4d342e84a77284Harish Mahendrakar const UWORD8 *pu1_scan_blk = NULL, *pu1_scan_coeff; 1950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 scan_idx; 1960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 i; 1970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sign_data_hiding_flag; 1980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar cab_ctxt_t *ps_cabac = &ps_codec->s_parse.s_cabac; 1990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 gt1_ctxt = 1; 2000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 c_max; 2010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD16 au2_csbf[9]; 2020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tu_sblk_coeff_data_t *ps_tu_sblk_coeff_data; 2030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD8 *pi1_num_coded_subblks; 2040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 num_subblks; 2050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sig_coeff_base_ctxt, abs_gt1_base_ctxt; 2060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UNUSED(x0); 2070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UNUSED(y0); 2080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps = ps_codec->s_parse.ps_pps; 2090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sign_data_hiding_flag = ps_pps->i1_sign_data_hiding_flag; 2110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar transform_skip_flag = 0; 2120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_pps->i1_transform_skip_enabled_flag && 2130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar !ps_codec->s_parse.s_cu.i4_cu_transquant_bypass && 2140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (log2_trafo_size == 2)) 2150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 ctxt_idx; 2170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(!c_idx) 2190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctxt_idx = IHEVC_CAB_TFM_SKIP0; 2210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 2230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctxt_idx = IHEVC_CAB_TFM_SKIP12; 2250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar TRACE_CABAC_CTXT("transform_skip_flag", ps_cabac->u4_range, ctxt_idx); 2270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar value = ihevcd_cabac_decode_bin(ps_cabac, 2280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_bitstrm, 2290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctxt_idx); 2300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar AEV_TRACE("transform_skip_flag", value, ps_cabac->u4_range); 2310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar transform_skip_flag = value; 2320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* code the last_coeff_x_prefix as tunary binarized code */ 2350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 ctxt_idx_x, ctxt_idx_y, ctx_shift; 2370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 ctx_offset; 2380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar c_max = (log2_trafo_size << 1) - 1; 2390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(!c_idx) 2410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctx_offset = (3 * (log2_trafo_size - 2)) + ((log2_trafo_size - 1) >> 2); 2430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctxt_idx_x = IHEVC_CAB_COEFFX_PREFIX + ctx_offset; 2440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctxt_idx_y = IHEVC_CAB_COEFFY_PREFIX + ctx_offset; 2450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctx_shift = (log2_trafo_size + 1) >> 2; 2460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 2480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctxt_idx_x = IHEVC_CAB_COEFFX_PREFIX + 15; 2500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctxt_idx_y = IHEVC_CAB_COEFFY_PREFIX + 15; 2510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctx_shift = log2_trafo_size - 2; 2520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar TRACE_CABAC_CTXT("last_coeff_x_prefix", ps_cabac->u4_range, ctxt_idx_x); 2550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar last_significant_coeff_x_prefix = ihevcd_cabac_decode_bins_tunary(ps_cabac, 2560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_bitstrm, 2570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar c_max, 2580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctxt_idx_x, 2590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctx_shift, 2600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar c_max); 2610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar AEV_TRACE("last_coeff_x_prefix", last_significant_coeff_x_prefix, ps_cabac->u4_range); 2630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar TRACE_CABAC_CTXT("last_coeff_y_prefix", ps_cabac->u4_range, ctxt_idx_y); 2650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar last_significant_coeff_y_prefix = ihevcd_cabac_decode_bins_tunary(ps_cabac, 2660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_bitstrm, 2670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar c_max, 2680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctxt_idx_y, 2690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctx_shift, 2700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar c_max); 2710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar AEV_TRACE("last_coeff_y_prefix", last_significant_coeff_y_prefix, ps_cabac->u4_range); 2730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar last_significant_coeff_x = last_significant_coeff_x_prefix; 2760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(last_significant_coeff_x_prefix > 3) 2770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 suf_length = ((last_significant_coeff_x_prefix - 2) >> 1); 2790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar value = ihevcd_cabac_decode_bypass_bins(ps_cabac, 2810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_bitstrm, 2820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar suf_length); 2830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar AEV_TRACE("last_coeff_x_suffix", value, ps_cabac->u4_range); 2850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar last_significant_coeff_x = 2880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (1 << ((last_significant_coeff_x_prefix >> 1) - 1)) * 2890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (2 + (last_significant_coeff_x_prefix & 1)) + value; 2900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar last_significant_coeff_y = last_significant_coeff_y_prefix; 2940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(last_significant_coeff_y_prefix > 3) 2950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 suf_length = ((last_significant_coeff_y_prefix - 2) >> 1); 2970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar value = ihevcd_cabac_decode_bypass_bins(ps_cabac, 2980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_bitstrm, 2990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar suf_length); 3000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar AEV_TRACE("last_coeff_y_suffix", value, ps_cabac->u4_range); 3020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar last_significant_coeff_y = 3030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (1 << ((last_significant_coeff_y_prefix >> 1) - 1)) * 3040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (2 + (last_significant_coeff_y_prefix & 1)) + value; 3050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Choose a scan matrix based on intra flag, intra pred mode, transform size 3100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar and luma/chroma */ 3110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar scan_idx = SCAN_DIAG_UPRIGHT; 3120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(PRED_MODE_INTRA == ps_codec->s_parse.s_cu.i4_pred_mode) 3130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((2 == log2_trafo_size) || ((3 == log2_trafo_size) && (0 == c_idx))) 3150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((6 <= intra_pred_mode) && 3170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (14 >= intra_pred_mode)) 3180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar scan_idx = SCAN_VERT; 3200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else if((22 <= intra_pred_mode) && 3220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (30 >= intra_pred_mode)) 3230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar scan_idx = SCAN_HORZ; 3250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* In case the scan is vertical, then swap X and Y positions */ 3300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(SCAN_VERT == scan_idx) 3310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar SWAP(last_significant_coeff_x, last_significant_coeff_y); 3330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD8 *pi1_scan_idx; 3370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD8 *pi1_buf = (WORD8 *)ps_codec->s_parse.pv_tu_coeff_data; 3380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* First WORD8 gives number of coded subblocks */ 3400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pi1_num_coded_subblks = pi1_buf++; 3410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Set number of coded subblocks in the current TU to zero */ 3430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* This will be updated later */ 3440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *pi1_num_coded_subblks = 0; 3450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Second WORD8 gives (scan idx << 1) | trans_skip */ 3470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pi1_scan_idx = pi1_buf++; 3480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *pi1_scan_idx = (scan_idx << 1) | transform_skip_flag; 3490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Store the incremented pointer in pv_tu_coeff_data */ 3510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_parse.pv_tu_coeff_data = pi1_buf; 3520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /** 3550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * Given last_significant_coeff_y and last_significant_coeff_x find last sub block 3560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * This is done by ignoring lower two bits of last_significant_coeff_y and last_significant_coeff_x 3570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * and using scan matrix for lookup 3580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */ 3590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* If transform is 4x4, last_sub_blk is zero */ 3610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar last_sub_blk = 0; 3620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* If transform is larger than 4x4, then based on scan_idx and transform size, choose a scan table */ 3640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(log2_trafo_size > 2) 3660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 scan_pos; 3680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 scan_mat_size; 3690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_scan_blk = (UWORD8 *)gapv_ihevc_scan[scan_idx * 3 + (log2_trafo_size - 2 - 1)]; 3700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Divide the current transform to 4x4 subblocks and count number of 4x4 in the first row */ 3730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* This will be size of scan matrix to be used for subblock scanning */ 3740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar scan_mat_size = 1 << (log2_trafo_size - 2); 3750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar scan_pos = ((last_significant_coeff_y >> 2) * scan_mat_size) + 3760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (last_significant_coeff_x >> 2); 3770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar last_sub_blk = pu1_scan_blk[scan_pos]; 3790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_scan_coeff = &gau1_ihevc_scan4x4[scan_idx][0]; 3810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 scan_pos; 3840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar scan_pos = ((last_significant_coeff_y & 3) << 2) + 3860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (last_significant_coeff_x & 3); 3870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar last_scan_pos = pu1_scan_coeff[scan_pos]; 3890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3903d2ea5037ccc3cd4b08f957dff4d342e84a77284Harish Mahendrakar if(log2_trafo_size > 2) 3913d2ea5037ccc3cd4b08f957dff4d342e84a77284Harish Mahendrakar pu1_scan_blk = (UWORD8 *)gapv_ihevc_invscan[scan_idx * 3 + (log2_trafo_size - 2 - 1)]; 3920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_scan_coeff = &gau1_ihevc_invscan4x4[scan_idx][0]; 3930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Set CSBF array to zero */ 3950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 *pu4_csbf; 3970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu4_csbf = (void *)au2_csbf; 3980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *pu4_csbf++ = 0; 3990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *pu4_csbf++ = 0; 4000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *pu4_csbf++ = 0; 4010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *pu4_csbf = 0; 4020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* To avoid a check for y pos, 9th WORD16 in the array is set to zero */ 4030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au2_csbf[8] = 0; 4040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*************************************************************************/ 4070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* derive base context index for sig coeff as per section 9.3.3.1.4 */ 4080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* TODO; convert to look up based on luma/chroma, scan type and tfr size */ 4090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*************************************************************************/ 4100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(!c_idx) 4110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sig_coeff_base_ctxt = IHEVC_CAB_COEFF_FLAG; 4130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar abs_gt1_base_ctxt = IHEVC_CAB_COEFABS_GRTR1_FLAG; 4140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(3 == log2_trafo_size) 4160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* 8x8 transform size */ 4180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sig_coeff_base_ctxt += (scan_idx == SCAN_DIAG_UPRIGHT) ? 9 : 15; 4190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else if(3 < log2_trafo_size) 4210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* larger transform sizes */ 4230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sig_coeff_base_ctxt += 21; 4240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 4270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* chroma context initializations */ 4290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sig_coeff_base_ctxt = IHEVC_CAB_COEFF_FLAG + 27; 4300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar abs_gt1_base_ctxt = IHEVC_CAB_COEFABS_GRTR1_FLAG + 16; 4310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(3 == log2_trafo_size) 4330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* 8x8 transform size */ 4350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sig_coeff_base_ctxt += 9; 4360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else if(3 < log2_trafo_size) 4380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* larger transform sizes */ 4400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sig_coeff_base_ctxt += 12; 4410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar num_subblks = 0; 4440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Parse each 4x4 subblocks */ 4450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = last_sub_blk; i >= 0; i--) 4460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sub_blk_pos; 4480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 infer_sig_coeff_flag; 4490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 cur_csbf; 4500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 n; 4520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 num_coeff; 4530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Sig coeff map for 16 entries in raster scan order. Upper 16 bits are used. 4540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * MSB gives sig coeff flag for 0th coeff and so on 4550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * UWORD16 would have been enough but kept as UWORD32 for code optimizations 4560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * In arm unnecessary masking operations are saved 4570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */ 4580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 u4_sig_coeff_map_raster; 4590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sign_hidden; 4600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Sig coeff map in scan order */ 4620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 u4_sig_coeff_map; 4630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 coeff_abs_level_greater2_flag; 4640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 u4_coeff_abs_level_greater1_map; 4650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 u4_coeff_abs_level_greater2_map; 4660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 u4_coeff_sign_map; 4670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 first_sig_scan_pos, last_sig_scan_pos, num_greater1_flag, first_greater1_scan_pos; 4680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 num_sig_coeff, sum_abs_level; 4690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 nbr_csbf; 4700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 ctxt_set; 4730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 rice_param; 4740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 xs, ys; 4750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sub_blk_pos = 0; 4780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(i && (log2_trafo_size > 2)) 4790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sub_blk_pos = pu1_scan_blk[i]; 4800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Get xs and ys from scan position */ 4820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* This is needed for context modelling of significant coeff flag */ 4830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar xs = sub_blk_pos & ((1 << (log2_trafo_size - 2)) - 1); 4840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ys = sub_blk_pos >> (log2_trafo_size - 2); 4850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Check if neighbor subblocks are coded */ 4880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar nbr_csbf = 0; 4910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Get Bottom sub blocks CSBF */ 4930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar nbr_csbf |= (au2_csbf[ys + 1] >> xs) & 1; 4940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar nbr_csbf <<= 1; 4950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Get Right sub blocks CSBF */ 4970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Even if xs is equal to (1 << (log2_trafo_size - 2 )) - 1, 4980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar since au2_csbf is set to zero at the beginning, csbf for 4990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar neighbor will be read as 0 */ 5000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar nbr_csbf |= (au2_csbf[ys] >> (xs + 1)) & 1; 5020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar cur_csbf = 0; 5060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* DC coeff is inferred, only if coded_sub_block is explicitly parsed as 1 */ 5080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* i.e. it is not inferred for first and last subblock */ 5090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar infer_sig_coeff_flag = 0; 5100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((i < last_sub_blk) && (i > 0)) 5110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 5120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 ctxt_idx = IHEVC_CAB_CODED_SUBLK_IDX; 5130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* ctxt based on right / bottom avail csbf, section 9.3.3.1.3 */ 5150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctxt_idx += (nbr_csbf) ? 1 : 0; 5160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Ctxt based on luma or chroma */ 5180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctxt_idx += c_idx ? 2 : 0; 5190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar TRACE_CABAC_CTXT("coded_sub_block_flag", ps_cabac->u4_range, ctxt_idx); 5200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar IHEVCD_CABAC_DECODE_BIN(cur_csbf, ps_cabac, ps_bitstrm, ctxt_idx); 5210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar AEV_TRACE("coded_sub_block_flag", cur_csbf, ps_cabac->u4_range); 5220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar infer_sig_coeff_flag = 1; 5240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else /* if((i == last_sub_blk) || (sub_blk_pos == 0)) */ 5260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 5270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* CSBF is set to 1 for first and last subblock */ 5280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Note for these subblocks sig_coeff_map is not inferred but instead parsed */ 5290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar cur_csbf = 1; 5300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Set current sub blocks CSBF */ 5330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 5340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 u4_mask = 1 << xs; 5350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(cur_csbf) 5360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au2_csbf[ys] |= u4_mask; 5370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 5380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au2_csbf[ys] &= ~u4_mask; 5390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* If current subblock is not coded, proceed to the next subblock */ 5430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == cur_csbf) 5440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar continue; 5450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar n = 15; 5470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_sig_coeff_map_raster = 0; 5480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_sig_coeff_map = 0; 5490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar num_coeff = 0; 5500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(i == last_sub_blk) 5510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 5520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 pos = ((last_significant_coeff_y & 3) << 2) + 5530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (last_significant_coeff_x & 3); 5540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar n = (last_scan_pos - 1); 5550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Set Significant coeff map for last significant coeff flag as 1 */ 5560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_sig_coeff_map_raster = 1 << pos; 5570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_sig_coeff_map = 1 << last_scan_pos; 5580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar num_coeff = 1; 5590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(; n >= 0; n--) 5620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 5630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 significant_coeff_flag; 5640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((n > 0 || !infer_sig_coeff_flag)) 5660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 5670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar //WORD32 coeff_pos; 5680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sig_ctxinc; 5690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 ctxt_idx; 5700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Coefficient position is needed for deriving context index for significant_coeff_flag */ 5720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar //coeff_pos = pu1_scan_coeff[n]; 5730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* derive the context inc as per section 9.3.3.1.4 */ 5740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sig_ctxinc = 0; 5750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(2 == log2_trafo_size) 5760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 5770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* 4x4 transform size increment uses lookup */ 5790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sig_ctxinc = gau1_ihevcd_sigcoeff_ctxtinc_tr4[scan_idx][n]; 5800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else if(n || i) 5820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 5830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* ctxt for AC coeff depends on curpos and neigbour csbf */ 5840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sig_ctxinc = gau1_ihevcd_sigcoeff_ctxtinc[scan_idx][nbr_csbf][n]; 5850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* based on luma subblock pos */ 5870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sig_ctxinc += (i && (!c_idx)) ? 3 : 0; 5880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 5910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 5920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* DC coeff has fixed context for luma and chroma */ 5930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sig_coeff_base_ctxt = (0 == c_idx) ? IHEVC_CAB_COEFF_FLAG : 5940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (IHEVC_CAB_COEFF_FLAG + 27); 5950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctxt_idx = sig_ctxinc + sig_coeff_base_ctxt; 5980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar TRACE_CABAC_CTXT("significant_coeff_flag", ps_cabac->u4_range, ctxt_idx); 5990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar IHEVCD_CABAC_DECODE_BIN(significant_coeff_flag, ps_cabac, 6000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_bitstrm, 6010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctxt_idx); 6020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar AEV_TRACE("significant_coeff_flag", significant_coeff_flag, ps_cabac->u4_range); 6030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* If at least one non-zero coeff is signalled then do not infer sig coeff map */ 6060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* for (0,0) coeff in the current sub block */ 6070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(significant_coeff_flag) 6080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar infer_sig_coeff_flag = 0; 6090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar// u4_sig_coeff_map_raster |= significant_coeff_flag 6110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar// << coeff_pos; 6120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_sig_coeff_map |= significant_coeff_flag << n; 6130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar num_coeff += significant_coeff_flag; 6140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 6150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 6180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*********************************************************************/ 6190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* If infer_sig_coeff_flag is 1 then treat the 0th coeff as non zero */ 6200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* If infer_sig_coeff_flag is zero, then last significant_coeff_flag */ 6210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* is parsed in the above loop */ 6220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*********************************************************************/ 6230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(infer_sig_coeff_flag) 6240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 6250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_sig_coeff_map_raster |= 1; 6260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_sig_coeff_map |= 1; 6270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar num_coeff++; 6280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 6290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*********************************************************************/ 6310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* First subblock does not get an explicit csbf. It is assumed to */ 6320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* be 1. For this subblock there is chance of getting all */ 6330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* sig_coeff_flags to be zero. In such a case proceed to the next */ 6340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* subblock(which is end of parsing for the current transform block) */ 6350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*********************************************************************/ 6360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == num_coeff) 6380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar continue; 6390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Increment number of coded subblocks for the current TU */ 6410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar num_subblks++; 6420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Set sig coeff map and subblock position */ 6440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_tu_sblk_coeff_data = (tu_sblk_coeff_data_t *)ps_codec->s_parse.pv_tu_coeff_data; 6450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_tu_sblk_coeff_data->u2_sig_coeff_map = u4_sig_coeff_map; 6460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_tu_sblk_coeff_data->u2_subblk_pos = (ys << 8) | xs; 6470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar first_sig_scan_pos = 16; 6490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar last_sig_scan_pos = -1; 6500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar num_greater1_flag = 0; 6510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar first_greater1_scan_pos = -1; 6520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_coeff_abs_level_greater1_map = 0; 6530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* context set based on luma subblock pos */ 6560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctxt_set = (i && (!c_idx)) ? 2 : 0; 6570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* See section 9.3.3.1.5 */ 6590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctxt_set += (0 == gt1_ctxt) ? 1 : 0; 6600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar gt1_ctxt = 1; 6620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Instead of initializing n to 15, set it to 31-CLZ(sig coeff map) */ 6630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 6640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 u4_sig_coeff_map_shift; 6650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 clz; 6660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar clz = CLZ(u4_sig_coeff_map); 6670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar n = 31 - clz; 6680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_sig_coeff_map_shift = u4_sig_coeff_map << clz; 6690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* For loop for n changed to do while to break early if sig_coeff_map_shift becomes zero */ 6700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar do 6710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 6720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar //WORD32 coeff_pos; 6730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 ctxt_idx; 6740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar //TODO: Scan lookup will be removed later and instead u4_sig_coeff_map will be used 6760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar //coeff_pos = pu1_scan_coeff[n]; 6770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((u4_sig_coeff_map_shift >> 31) & 1) 6790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 6800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* abs_level_greater1_flag is sent for only first 8 non-zero levels in a subblock */ 6820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(num_greater1_flag < 8) 6830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 6840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 coeff_abs_level_greater1_flag; 6850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctxt_idx = (ctxt_set * 4) + abs_gt1_base_ctxt + gt1_ctxt; 6870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar TRACE_CABAC_CTXT("coeff_abs_level_greater1_flag", ps_cabac->u4_range, ctxt_idx); 6890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar IHEVCD_CABAC_DECODE_BIN(coeff_abs_level_greater1_flag, ps_cabac, ps_bitstrm, ctxt_idx); 6900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar AEV_TRACE("coeff_abs_level_greater1_flag", coeff_abs_level_greater1_flag, ps_cabac->u4_range); 6910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_coeff_abs_level_greater1_map |= coeff_abs_level_greater1_flag << n; 6930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar num_greater1_flag++; 6940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* first_greater1_scan_pos is obtained using CLZ on u4_coeff_abs_level_greater1_map*/ 6960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* outside the loop instead of the following check inside the loop */ 6970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* if( coeff_abs_level_greater1_flag && first_greater1_scan_pos == -1) */ 6980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* first_greater1_scan_pos = n; */ 6990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(coeff_abs_level_greater1_flag) 7010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 7020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar gt1_ctxt = 0; 7030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 7040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else if(gt1_ctxt && (gt1_ctxt < 3)) 7050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 7060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar gt1_ctxt++; 7070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 7080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 7100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 7110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar break; 7120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* instead of computing last and first significan scan position using checks below */ 7140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* They are computed outside the loop using CLZ and CTZ on sig_coeff_map */ 7150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* if(last_sig_scan_pos == -1) */ 7160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* last_sig_scan_pos = n; */ 7170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* first_sig_scan_pos = n; */ 7180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 7190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_sig_coeff_map_shift <<= 1; 7200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar n--; 7210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* If there are zero coeffs, then shift by as many zero coeffs and decrement n */ 7220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar clz = CLZ(u4_sig_coeff_map_shift); 7230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_sig_coeff_map_shift <<= clz; 7240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar n -= clz; 7250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar }while(u4_sig_coeff_map_shift); 7260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 7270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* At this level u4_sig_coeff_map is non-zero i.e. has atleast one non-zero coeff */ 7280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar last_sig_scan_pos = (31 - CLZ(u4_sig_coeff_map)); 7290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar first_sig_scan_pos = CTZ(u4_sig_coeff_map); 7300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sign_hidden = (((last_sig_scan_pos - first_sig_scan_pos) > 3) && !ps_codec->s_parse.s_cu.i4_cu_transquant_bypass); 7310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_coeff_abs_level_greater2_map = 0; 7330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(u4_coeff_abs_level_greater1_map) 7350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 7360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Check if the first level > 1 is greater than 2 */ 7370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 ctxt_idx; 7380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar first_greater1_scan_pos = (31 - CLZ(u4_coeff_abs_level_greater1_map)); 7390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctxt_idx = IHEVC_CAB_COEFABS_GRTR2_FLAG; 7420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctxt_idx += (!c_idx) ? ctxt_set : (ctxt_set + 4); 7440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar TRACE_CABAC_CTXT("coeff_abs_level_greater2_flag", ps_cabac->u4_range, ctxt_idx); 7450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar IHEVCD_CABAC_DECODE_BIN(coeff_abs_level_greater2_flag, ps_cabac, ps_bitstrm, ctxt_idx); 7460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar AEV_TRACE("coeff_abs_level_greater2_flag", coeff_abs_level_greater2_flag, ps_cabac->u4_range); 7470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_coeff_abs_level_greater2_map = coeff_abs_level_greater2_flag << first_greater1_scan_pos; 7480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 7490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_coeff_sign_map = 0; 7520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Parse sign flags */ 7540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(!sign_data_hiding_flag || !sign_hidden) 7550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 7560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar IHEVCD_CABAC_DECODE_BYPASS_BINS(value, ps_cabac, ps_bitstrm, num_coeff); 7570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar AEV_TRACE("sign_flags", value, ps_cabac->u4_range); 7580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_coeff_sign_map = value << (32 - num_coeff); 7590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 7600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 7610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 7620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar IHEVCD_CABAC_DECODE_BYPASS_BINS(value, ps_cabac, ps_bitstrm, (num_coeff - 1)); 7630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar AEV_TRACE("sign_flags", value, ps_cabac->u4_range); 7640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_coeff_sign_map = value << (32 - (num_coeff - 1)); 7650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 7660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar num_sig_coeff = 0; 7680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sum_abs_level = 0; 7690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar rice_param = 0; 7700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 7710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 clz; 7720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 u4_sig_coeff_map_shift; 7730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar clz = CLZ(u4_sig_coeff_map); 7740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar n = 31 - clz; 7750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_sig_coeff_map_shift = u4_sig_coeff_map << clz; 7760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* For loop for n changed to do while to break early if sig_coeff_map_shift becomes zero */ 7770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar do 7780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 7790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((u4_sig_coeff_map_shift >> 31) & 1) 7810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 7820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 base_lvl; 7830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 coeff_abs_level_remaining; 7840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 level; 7850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar base_lvl = 1; 7860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Update base_lvl if it is greater than 1 */ 7880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((u4_coeff_abs_level_greater1_map >> n) & 1) 7890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar base_lvl++; 7900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Update base_lvl if it is greater than 2 */ 7920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((u4_coeff_abs_level_greater2_map >> n) & 1) 7930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar base_lvl++; 7940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* If level is greater than 3/2/1 based on the greater1 and greater2 maps, 7960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * decode remaining level (level - base_lvl) will be signalled as bypass bins 7970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */ 7980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar coeff_abs_level_remaining = 0; 7990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(base_lvl == ((num_sig_coeff < 8) ? ((n == first_greater1_scan_pos) ? 3 : 2) : 1)) 8000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 8010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 u4_prefix; 8020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 bin; 8030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_prefix = 0; 8050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar do 8070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 8080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar IHEVCD_CABAC_DECODE_BYPASS_BIN(bin, ps_cabac, ps_bitstrm); 8090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_prefix++; 8100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((WORD32)u4_prefix == 19 - rice_param) 8120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 8130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar bin = 1; 8140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar break; 8150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 8160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar }while(bin); 8180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_prefix = u4_prefix - 1; 8200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(u4_prefix < 3) 8210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 8220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 u4_suffix; 8230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar coeff_abs_level_remaining = (u4_prefix << rice_param); 8250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(rice_param) 8260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 8270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar IHEVCD_CABAC_DECODE_BYPASS_BINS(u4_suffix, ps_cabac, ps_bitstrm, rice_param); 8280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar coeff_abs_level_remaining |= u4_suffix; 8300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 8310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 8320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 8330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 8340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 u4_suffix; 8350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 u4_numbins; 8360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar //u4_prefix = CLIP3(u4_prefix, 0, 19 - rice_param); 8380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_numbins = (u4_prefix - 3 + rice_param); 8400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar coeff_abs_level_remaining = (((1 << (u4_prefix - 3)) + 3 - 1) << rice_param); 8410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(u4_numbins) 8420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 8430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar IHEVCD_CABAC_DECODE_BYPASS_BINS(u4_suffix, ps_cabac, ps_bitstrm, u4_numbins); 8440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar coeff_abs_level_remaining += u4_suffix; 8450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 8460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 8470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar AEV_TRACE("coeff_abs_level_remaining", coeff_abs_level_remaining, ps_cabac->u4_range); 8500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar base_lvl += coeff_abs_level_remaining; 8510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 8530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* update the rice param based on coeff level */ 8550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((base_lvl > (3 << rice_param)) && (rice_param < 4)) 8560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 8570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar rice_param++; 8580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 8590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Compute absolute level */ 8610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar level = base_lvl; 8620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Update level with the sign */ 8640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((u4_coeff_sign_map >> 31) & 1) 8650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar level = -level; 8660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_coeff_sign_map <<= 1; 8680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Update sign in case sign is hidden */ 8690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(sign_data_hiding_flag && sign_hidden) 8700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 8710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sum_abs_level += base_lvl; 8720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(n == first_sig_scan_pos && ((sum_abs_level % 2) == 1)) 8740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar level = -level; 8750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 8760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Store the resulting level in non-zero level array */ 8780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_tu_sblk_coeff_data->ai2_level[num_sig_coeff++] = level; 8790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar //AEV_TRACE("level", level, 0); 8800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 8810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_sig_coeff_map_shift <<= 1; 8820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar n--; 8830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* If there are zero coeffs, then shift by as many zero coeffs and decrement n */ 8840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar clz = CLZ(u4_sig_coeff_map_shift); 8850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_sig_coeff_map_shift <<= clz; 8860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar n -= clz; 8870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar }while(u4_sig_coeff_map_shift); 8900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 8910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Increment the pv_tu_sblk_coeff_data */ 8930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 8940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_buf = (UWORD8 *)ps_codec->s_parse.pv_tu_coeff_data; 8950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_buf += sizeof(tu_sblk_coeff_data_t) - SUBBLK_COEFF_CNT * sizeof(WORD16); 8960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_buf += num_coeff * sizeof(WORD16); 8970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_parse.pv_tu_coeff_data = pu1_buf; 8980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 9000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 9020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Set number of coded sub blocks in the current TU */ 9030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *pi1_num_coded_subblks = num_subblks; 9040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return ret; 9060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 907