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