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****************************************************************************** 210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @file ihevcd_cabac.h 220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief 240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* This file contains decoder cabac engine related structures and 250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* interface prototypes 260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @author 280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Ittiam 290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar****************************************************************************** 300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#ifndef _IHEVCD_CABAC_H_ 330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define _IHEVCD_CABAC_H_ 340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_typedefs.h" 360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/*****************************************************************************/ 370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* Constant Macros */ 380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/*****************************************************************************/ 390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar@brief 420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */ 440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define CABAC_BITS 9 450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * Following definitions control whether cabac functions are inlined as macros or 480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * are called as functions. Set these to 0 to debug cabac leaf level functions 490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * Note these macros assume FULLRANGE is 1. 500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */ 510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define CABAC_DECODE_BIN 1 520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define CABAC_DECODE_BYPASS_BIN 1 530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define CABAC_DECODE_BYPASS_BINS 1 540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/*****************************************************************************/ 560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* Function Macros */ 570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/*****************************************************************************/ 580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#if CABAC_DECODE_BIN 590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define IHEVCD_CABAC_DECODE_BIN(u4_bin, ps_cabac, ps_bitstrm, ctxt_index) \ 600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ \ 610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 u4_range = ps_cabac->u4_range; \ 620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 u4_ofst = ps_cabac->u4_ofst; \ 630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 u4_rlps; \ 640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_ctxt_model = &ps_cabac->au1_ctxt_models[ctxt_index]; \ 650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 state_mps = *pu1_ctxt_model; \ 660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 clz; \ 670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 u4_qnt_range; \ 680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Sanity checks */ \ 700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ASSERT(FULLRANGE == 1); \ 710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ASSERT(u4_range >= 256); \ 720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ASSERT((ctxt_index >= 0) && (ctxt_index < IHEVC_CAB_CTXT_END)); \ 730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ASSERT(state_mps < 128); \ 740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar clz = CLZ(u4_range); \ 750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar clz -= (32 - RANGE_NUMBITS); \ 760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_qnt_range = u4_range << clz; \ 770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_qnt_range = (u4_qnt_range >> (RANGE_SHIFT + 6)) & 0x3; \ 780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Get the lps range from LUT based on quantized range and state */ \ 790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_rlps = gau1_ihevc_cabac_rlps[state_mps >> 1][u4_qnt_range]; \ 800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_rlps = u4_rlps << (RANGE_SHIFT - clz); \ 810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_range -= u4_rlps; \ 820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_bin = state_mps & 1; \ 840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(u4_ofst >= u4_range) \ 860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { \ 870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_bin = 1 - u4_bin; \ 880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_ofst -= u4_range; \ 890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_range = u4_rlps; \ 900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } \ 910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *pu1_ctxt_model = gau1_ihevc_next_state[(state_mps << 1) | u4_bin]; \ 930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*****************************************************************/ \ 950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Re-normalization; calculate bits generated based on range(R) */ \ 960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*****************************************************************/ \ 970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(u4_range < (1 << 8)) \ 980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { \ 990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 u4_bits; \ 1000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 numbits; \ 1010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar numbits = CLZ(u4_range); \ 1020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar numbits -= (32 - RANGE_NUMBITS); \ 1030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_GET(u4_bits, ps_bitstrm->pu4_buf, ps_bitstrm->u4_bit_ofst, \ 1040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_bitstrm->u4_cur_word, ps_bitstrm->u4_nxt_word, numbits); \ 1050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 1060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_ofst <<= numbits; \ 1070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_ofst |= u4_bits; \ 1080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_range <<= numbits; \ 1090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 1100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } \ 1110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Update the cabac context */ \ 1120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_cabac->u4_range = u4_range; \ 1130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_cabac->u4_ofst = u4_ofst; \ 1140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 1150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 1160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#else 1170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define IHEVCD_CABAC_DECODE_BIN(u4_bin, ps_cabac, ps_bitstrm, ctxt_index) \ 1180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_bin = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_index); 1190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#endif 1200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#if CABAC_DECODE_BYPASS_BIN 1220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define IHEVCD_CABAC_DECODE_BYPASS_BIN(u4_bin, ps_cabac, ps_bitstrm) \ 1230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ \ 1240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 1250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 u4_range = ps_cabac->u4_range; \ 1260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 u4_ofst = ps_cabac->u4_ofst; \ 1270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 u4_bits; \ 1280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 1290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Sanity checks */ \ 1300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ASSERT(FULLRANGE == 1); \ 1310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ASSERT(u4_range >= 256); \ 1320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 1330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BIT_GET(u4_bits, ps_bitstrm->pu4_buf, ps_bitstrm->u4_bit_ofst, \ 1340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_bitstrm->u4_cur_word, ps_bitstrm->u4_nxt_word); \ 1350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 1360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_ofst <<= 1; \ 1370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_ofst |= u4_bits; \ 1380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 1390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_bin = 0; \ 1400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(u4_ofst >= u4_range) \ 1410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { \ 1420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_bin = 1; \ 1430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_ofst -= u4_range; \ 1440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } \ 1450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 1460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Update the cabac context */ \ 1470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_cabac->u4_ofst = u4_ofst; \ 1480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 1490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#else 1500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define IHEVCD_CABAC_DECODE_BYPASS_BIN(u4_bin, ps_cabac, ps_bitstrm) \ 1520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_bin = ihevcd_cabac_decode_bypass_bin(ps_cabac, ps_bitstrm); 1530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#endif 1540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#if CABAC_DECODE_BYPASS_BINS 1560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define IHEVCD_CABAC_DECODE_BYPASS_BINS(u4_bins, ps_cabac, ps_bitstrm, numbins) \ 1570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ \ 1580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 u4_range = ps_cabac->u4_range; \ 1590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 u4_ofst = ps_cabac->u4_ofst; \ 1600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 u4_bits; \ 1610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ASSERT(FULLRANGE == 1); \ 1620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ASSERT(u4_range >= 256); \ 1630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ASSERT(numbins > 0); \ 1640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { \ 1650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 numbins_tmp = numbins; \ 1660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Sanity checks */ \ 1670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ASSERT(numbins < 17); \ 1680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 1690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_bins = 0; \ 1700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 1710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_GET(u4_bits, ps_bitstrm->pu4_buf, ps_bitstrm->u4_bit_ofst, \ 1720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_bitstrm->u4_cur_word, ps_bitstrm->u4_nxt_word, numbins); \ 1730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar do \ 1740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { \ 1750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 u4_bit; \ 1760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar numbins_tmp--; \ 1770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_bit = (u4_bits >> numbins_tmp) & 1; \ 1780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_ofst <<= 1; \ 1790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_ofst |= u4_bit; \ 1800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 1810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_bins <<= 1; \ 1820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(u4_ofst >= u4_range) \ 1830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { \ 1840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_bins += 1; \ 1850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_ofst -= u4_range; \ 1860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } \ 1870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar }while(numbins_tmp); \ 1880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 1890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Update the cabac context */ \ 1900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_cabac->u4_ofst = u4_ofst; \ 1910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } \ 1920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 1930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#else 1960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define IHEVCD_CABAC_DECODE_BYPASS_BINS(u4_bins, ps_cabac, ps_bitstrm, numbins) \ 1980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_bins = ihevcd_cabac_decode_bypass_bins(ps_cabac, ps_bitstrm, numbins); 1990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#endif 2010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/*****************************************************************************/ 2020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* Structures */ 2030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/*****************************************************************************/ 2040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/*****************************************************************************/ 2080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* Extern Function Declarations */ 2090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/*****************************************************************************/ 2100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarIHEVCD_ERROR_T ihevcd_cabac_init 2110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar( 2120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar cab_ctxt_t *ps_cabac, 2130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar bitstrm_t *ps_bitstrm, 2140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 slice_qp, 2150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 cabac_init_idc, 2160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar const UWORD8 *pu1_init_ctxt 2170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar); 2180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarUWORD32 ihevcd_cabac_decode_bin 2220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar( 2230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar cab_ctxt_t *ps_cabac, 2240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar bitstrm_t *ps_bitstrm, 2250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 ctxt_index 2260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar); 2270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarUWORD32 ihevcd_cabac_decode_bypass_bin 2290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar( 2300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar cab_ctxt_t *ps_cabac, 2310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar bitstrm_t *ps_bitstrm 2320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar); 2330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarUWORD32 ihevcd_cabac_decode_terminate 2350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar( 2360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar cab_ctxt_t *ps_cabac, 2370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar bitstrm_t *ps_bitstrm 2380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar); 2390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarUWORD32 ihevcd_cabac_decode_bypass_bins 2410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar( 2420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar cab_ctxt_t *ps_cabac, 2430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar bitstrm_t *ps_bitstrm, 2440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 num_bins 2450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar); 2460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarUWORD32 ihevcd_cabac_decode_bins_tunary 2480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar( 2490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar cab_ctxt_t *ps_cabac, 2500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar bitstrm_t *ps_bitstrm, 2510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 c_max, 2520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 ctxt_index, 2530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 ctxt_shift, 2540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 ctxt_inc_max 2550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar); 2570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarUWORD32 ihevcd_cabac_decode_bypass_bins_tunary 2590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar( 2600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar cab_ctxt_t *ps_cabac, 2610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar bitstrm_t *ps_bitstrm, 2620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 c_max 2630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar); 2650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarUWORD32 ihevcd_cabac_decode_bypass_bins_egk 2670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar( 2680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar cab_ctxt_t *ps_cabac, 2690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar bitstrm_t *ps_bitstrm, 2700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 k 2710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar); 2720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarUWORD32 ihevcd_cabac_decode_bypass_bins_trunc_rice 2740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar( 2750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar cab_ctxt_t *ps_cabac, 2760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar bitstrm_t *ps_bitstrm, 2770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 c_rice_param, 2780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 c_rice_max 2790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar); 2800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarIHEVCD_ERROR_T ihevcd_cabac_flush(cab_ctxt_t *ps_cabac); 2820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarIHEVCD_ERROR_T ihevcd_cabac_reset(cab_ctxt_t *ps_cabac, 2840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar bitstrm_t *ps_bitstrm); 2850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#endif /* _IHEVCD_CABAC_H_ */ 287