18d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/******************************************************************************
28d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
38d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Copyright (C) 2015 The Android Open Source Project
48d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
58d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Licensed under the Apache License, Version 2.0 (the "License");
68d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * you may not use this file except in compliance with the License.
78d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * You may obtain a copy of the License at:
88d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
98d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * http://www.apache.org/licenses/LICENSE-2.0
108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Unless required by applicable law or agreed to in writing, software
128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * distributed under the License is distributed on an "AS IS" BASIS,
138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * See the License for the specific language governing permissions and
158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * limitations under the License.
168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *****************************************************************************
188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*/
208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*!
218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ***************************************************************************
228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \file ih264d_cabac.c
238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \brief
258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    This file contains Binary decoding routines.
268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \date
288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    04/02/2003
298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \author  NS
318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ***************************************************************************
328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */
338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include <string.h>
348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_typedefs.h"
358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_macros.h"
368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_platform_macros.h"
378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_structs.h"
388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_cabac.h"
398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_bitstrm.h"
408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_error_handler.h"
418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_defs.h"
428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_debug.h"
438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_tables.h"
448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_parse_cabac.h"
458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_tables.h"
468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*!
508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S **************************************************************************
518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \if Function name : ih264d_init_cabac_dec_envirnoment \endif
528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \brief
548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    This function initializes CABAC decoding envirnoment. This function
558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    implements 9.3.3.2.3.1 of ISO/IEC14496-10.
568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \return
588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    None
598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S **************************************************************************
618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */
628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SWORD32 ih264d_init_cabac_dec_envirnoment(decoding_envirnoment_t * ps_cab_env,
638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                       dec_bit_stream_t *ps_bitstrm)
648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_code_int_val_ofst;
668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_cab_env->u4_code_int_range = (HALF - 2) << 23;
688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    NEXTBITS(u4_code_int_val_ofst, ps_bitstrm->u4_ofst, ps_bitstrm->pu4_buffer,
698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S             32);
708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    FLUSHBITS(ps_bitstrm->u4_ofst, 9)
718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(ps_bitstrm->u4_ofst > ps_bitstrm->u4_max_ofst)
738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        return ERROR_EOB_FLUSHBITS_T;
748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_cab_env->u4_code_int_val_ofst = u4_code_int_val_ofst;
768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*brief description of the design adopted for CABAC*/
788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*according to the standard the u4_code_int_range needs to be initialized 0x 1FE(10 bits) and
798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S     9 bits from the bit stream need to be read and into the u4_code_int_val_ofst.As and when the
808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S     u4_code_int_range becomes less than 10 bits we need to renormalize and read from the bitstream*
818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S     In the implemented design
838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S     initially
848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S     range_new = range <<23
868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S     valOffset_new = valOffset << 23 + 23 bits(read from the bit stream)
878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S     Thus we have read 23 more bits ahead of time.
898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S     It can be mathematical proved that even with the modified range and u4_ofst the operations
918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S     like comparison and subtraction needed for a bin decode are still valid(both in the regular case and the bypass case)
928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S     As bins are decoded..we consume the bits that we have already read into the valOffset.The clz of Range
948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S     gives us the number of bits we consumed of the 23 bits that we have read ahead of time.
958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S     when the number bits we have consumed exceeds 23 ,we renormalize..and  we read from the bitstream again*/
978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SRESET_BIN_COUNTS(ps_cab_env)
998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return OK;
1018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
1028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
1048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
1058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Function Name : ih264d_init_cabac_contexts                                      */
1068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
1078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Description   : This function initializes the cabac contexts             */
1088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                  depending upon slice type and Init_Idc value.            */
1098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Inputs        : ps_dec, slice type                                       */
1108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Globals       : <Does it use any global variables?>                      */
1118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Outputs       :                                                          */
1128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Returns       : void                                                     */
1138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
1148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Issues        : none                                                     */
1158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
1168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Revision History:                                                        */
1178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
1188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
1198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*         03 05 2005   100153)         Draft                                */
1208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
1218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
1228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_init_cabac_contexts(UWORD8 u1_slice_type, dec_struct_t * ps_dec)
1248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
1258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    bin_ctxt_model_t *p_cabac_ctxt_table_t = ps_dec->p_cabac_ctxt_table_t;
1278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 u1_qp_y = ps_dec->ps_cur_slice->u1_slice_qp;
1288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 u1_cabac_init_Idc = 0;
1298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(I_SLICE != u1_slice_type)
1318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
1328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        u1_cabac_init_Idc = ps_dec->ps_cur_slice->u1_cabac_init_idc;
1338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
1348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
1368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* MAKING ps_dec->p_ctxt_inc_mb_map a scratch buffer */
1378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* 0th entry of CtxtIncMbMap will be always be containing default values
1388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S         for CABAC context representing MB not available */
1398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ctxt_inc_mb_info_t *p_DefCtxt = ps_dec->p_ctxt_inc_mb_map - 1;
1408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD8 *pu1_temp;
1418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        WORD8 i;
1428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        p_DefCtxt->u1_mb_type = CAB_SKIP;
1438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        p_DefCtxt->u1_cbp = 0x0f;
1458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        p_DefCtxt->u1_intra_chroma_pred_mode = 0;
1468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        p_DefCtxt->u1_yuv_dc_csbp = 0x7;
1488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        p_DefCtxt->u1_transform8x8_ctxt = 0;
1508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_temp = (UWORD8*)p_DefCtxt->i1_ref_idx;
1528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        for(i = 0; i < 4; i++, pu1_temp++)
1538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            (*pu1_temp) = 0;
1548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_temp = (UWORD8*)p_DefCtxt->u1_mv;
1558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        for(i = 0; i < 16; i++, pu1_temp++)
1568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            (*pu1_temp) = 0;
1578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->ps_def_ctxt_mb_info = p_DefCtxt;
1588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
1598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(u1_slice_type == I_SLICE)
1618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
1628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        u1_cabac_init_Idc = 3;
1638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->p_mb_type_t = p_cabac_ctxt_table_t + MB_TYPE_I_SLICE;
1648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
1658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else if(u1_slice_type == P_SLICE)
1668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
1678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->p_mb_type_t = p_cabac_ctxt_table_t + MB_TYPE_P_SLICE;
1688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->p_mb_skip_flag_t = p_cabac_ctxt_table_t + MB_SKIP_FLAG_P_SLICE;
1698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->p_sub_mb_type_t = p_cabac_ctxt_table_t + SUB_MB_TYPE_P_SLICE;
1708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
1718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else if(u1_slice_type == B_SLICE)
1728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
1738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->p_mb_type_t = p_cabac_ctxt_table_t + MB_TYPE_B_SLICE;
1748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->p_mb_skip_flag_t = p_cabac_ctxt_table_t + MB_SKIP_FLAG_B_SLICE;
1758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->p_sub_mb_type_t = p_cabac_ctxt_table_t + SUB_MB_TYPE_B_SLICE;
1768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
1778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
1788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        bin_ctxt_model_t *p_cabac_ctxt_table_t_tmp = p_cabac_ctxt_table_t;
1798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(ps_dec->ps_cur_slice->u1_field_pic_flag)
1808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
1818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            p_cabac_ctxt_table_t_tmp += SIGNIFICANT_COEFF_FLAG_FLD;
1828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
1848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        else
1858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
1868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            p_cabac_ctxt_table_t_tmp += SIGNIFICANT_COEFF_FLAG_FRAME;
1878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
1888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
1898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            bin_ctxt_model_t * * p_significant_coeff_flag_t =
1908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            ps_dec->p_significant_coeff_flag_t;
1918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            p_significant_coeff_flag_t[0] = p_cabac_ctxt_table_t_tmp
1928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            + SIG_COEFF_CTXT_CAT_0_OFFSET;
1938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            p_significant_coeff_flag_t[1] = p_cabac_ctxt_table_t_tmp
1948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            + SIG_COEFF_CTXT_CAT_1_OFFSET;
1958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            p_significant_coeff_flag_t[2] = p_cabac_ctxt_table_t_tmp
1968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            + SIG_COEFF_CTXT_CAT_2_OFFSET;
1978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            p_significant_coeff_flag_t[3] = p_cabac_ctxt_table_t_tmp
1988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            + SIG_COEFF_CTXT_CAT_3_OFFSET;
1998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            p_significant_coeff_flag_t[4] = p_cabac_ctxt_table_t_tmp
2008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            + SIG_COEFF_CTXT_CAT_4_OFFSET;
2018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            p_significant_coeff_flag_t[5] = p_cabac_ctxt_table_t_tmp
2038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            + SIG_COEFF_CTXT_CAT_5_OFFSET;
2048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
2068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
2078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    memcpy(p_cabac_ctxt_table_t,
2098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S           gau1_ih264d_cabac_ctxt_init_table[u1_cabac_init_Idc][u1_qp_y],
2108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S           NUM_CABAC_CTXTS * sizeof(bin_ctxt_model_t));
2118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
2128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*!
2138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S **************************************************************************
2148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \if Function name : ih264d_decode_bin \endif
2158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
2168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \brief
2178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    This function implements decoding process of a decision as defined
2188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    in 9.3.3.2.2.
2198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
2208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \return
2218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    Returns symbol decoded.
2228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
2238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \note
2248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    It is specified in 9.3.3.2.3.2 that, one of the input to this function
2258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    is CtxIdx. CtxIdx is used to identify state and MPS of that context
2268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    (Refer Fig 9.11 - Flowchart for encoding a decision). To suffice that
2278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    here we pass a pointer bin_ctxt_model_t which contains these values.
2288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
2298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S **************************************************************************
2308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */
2318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SUWORD32 ih264d_decode_bin(UWORD32 u4_ctx_inc,
2338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                          bin_ctxt_model_t *ps_src_bin_ctxt,
2348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                          dec_bit_stream_t *ps_bitstrm,
2358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                          decoding_envirnoment_t *ps_cab_env)
2368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
2388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_qnt_int_range, u4_code_int_range, u4_code_int_val_ofst,
2408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    u4_int_range_lps;
2418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_symbol, u4_mps_state;
2438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    bin_ctxt_model_t *ps_bin_ctxt;
2458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 table_lookup;
2478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    const UWORD32 *pu4_table = (const UWORD32 *)ps_cab_env->cabac_table;
2488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_clz;
2498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_bin_ctxt = ps_src_bin_ctxt + u4_ctx_inc;
2518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_code_int_range = ps_cab_env->u4_code_int_range;
2538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_code_int_val_ofst = ps_cab_env->u4_code_int_val_ofst;
2548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_mps_state = (ps_bin_ctxt->u1_mps_state);
2568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_clz = CLZ(u4_code_int_range);
2578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_qnt_int_range = u4_code_int_range << u4_clz;
2598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_qnt_int_range = (u4_qnt_int_range >> 29) & 0x3;
2608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    table_lookup = pu4_table[(u4_mps_state << 2) + u4_qnt_int_range];
2628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_int_range_lps = table_lookup & 0xff;
2638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_int_range_lps = u4_int_range_lps << (23 - u4_clz);
2658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_code_int_range = u4_code_int_range - u4_int_range_lps;
2668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_symbol = ((u4_mps_state >> 6) & 0x1);
2688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_mps_state = (table_lookup >> 8) & 0x7F;
2708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    CHECK_IF_LPS(u4_code_int_range, u4_code_int_val_ofst, u4_symbol,
2728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                 u4_int_range_lps, u4_mps_state, table_lookup)
2738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(u4_code_int_range < ONE_RIGHT_SHIFTED_BY_8)
2758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
2768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD32 *pu4_buffer, u4_offset;
2778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu4_buffer = ps_bitstrm->pu4_buffer;
2798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        u4_offset = ps_bitstrm->u4_ofst;
2808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        RENORM_RANGE_OFFSET(u4_code_int_range, u4_code_int_val_ofst, u4_offset,
2828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            pu4_buffer)
2838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_bitstrm->u4_ofst = u4_offset;
2858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
2868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    INC_BIN_COUNT(ps_cab_env)
2888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_cab_env->u4_code_int_val_ofst = u4_code_int_val_ofst;
2908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_cab_env->u4_code_int_range = u4_code_int_range;
2918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_bin_ctxt->u1_mps_state = u4_mps_state;
2928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return (u4_symbol);
2948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
2958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*!
2978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S **************************************************************************
2988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \if Function name : ih264d_decode_terminate \endif
2998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
3008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \brief
3018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    This function implements decoding process of a termination as defined
3028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    9.3.3.2.2.3 of ISO/IEC14496-10.
3038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
3048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \return
3058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    Returns symbol decoded.
3068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
3078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \note
3088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    This routine is called while decoding "end_of_skice_flag" and of the
3098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    bin indicating PCM mode in MBType.
3108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
3118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S **************************************************************************
3128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */
3138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SUWORD8 ih264d_decode_terminate(decoding_envirnoment_t * ps_cab_env,
3148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                               dec_bit_stream_t * ps_stream)
3158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
3168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_symbol;
3178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_code_int_val_ofst, u4_code_int_range;
3188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_clz;
3198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_code_int_range = ps_cab_env->u4_code_int_range;
3218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_code_int_val_ofst = ps_cab_env->u4_code_int_val_ofst;
3228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_clz = CLZ(u4_code_int_range);
3248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_code_int_range -= (2 << (23 - u4_clz));
3258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(u4_code_int_val_ofst >= u4_code_int_range)
3278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
3288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* S=1 */
3298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        u4_symbol = 1;
3308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
3328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /*the u4_ofst needs to be updated before termination*/
3348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_stream->u4_ofst += u4_clz;
3358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
3378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
3398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else
3408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
3418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* S=0 */
3428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        u4_symbol = 0;
3438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(u4_code_int_range < ONE_RIGHT_SHIFTED_BY_8)
3458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
3468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            UWORD32 *pu4_buffer, u4_offset;
3478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pu4_buffer = ps_stream->pu4_buffer;
3498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u4_offset = ps_stream->u4_ofst;
3508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            RENORM_RANGE_OFFSET(u4_code_int_range, u4_code_int_val_ofst, u4_offset,
3528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                pu4_buffer)
3538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_stream->u4_ofst = u4_offset;
3548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
3558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
3568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_cab_env->u4_code_int_range = u4_code_int_range;
3588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_cab_env->u4_code_int_val_ofst = u4_code_int_val_ofst;
3598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    INC_BIN_COUNT(ps_cab_env)
3618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return (u4_symbol);
3638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
3648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
3668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
3678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Function Name : ih264d_decode_bins_tunary                                */
3688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
3698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Description   : This function decodes bins in the case of TUNARY         */
3708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                  binarization technique.valid_length is assumed  equal to 3 */
3718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                  and u1_max_bins <= 4 in this functon.                                              */
3728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Inputs        : <What inputs does the function take?>                    */
3738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Globals       : <Does it use any global variables?>                      */
3748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Processing    : <Describe how the function operates - include algorithm  */
3758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                  description>                                             */
3768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Outputs       : <What does the function produce?>                        */
3778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Returns       : <What does the function return?>                         */
3788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
3798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Issues        :                                                          */
3808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
3818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Revision History:                                                        */
3828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
3838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
3848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*         20 11 2008   SH          Draft                                   */
3858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
3868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
3878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SUWORD32 ih264d_decode_bins_tunary(UWORD8 u1_max_bins,
3898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                  UWORD32 u4_ctx_inc,
3908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                  bin_ctxt_model_t *ps_src_bin_ctxt,
3918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                  dec_bit_stream_t *ps_bitstrm,
3928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                  decoding_envirnoment_t *ps_cab_env)
3938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
3958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_value;
3968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_symbol;
3978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 u4_ctx_Inc;
3988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    bin_ctxt_model_t *ps_bin_ctxt;
3998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_code_int_range, u4_code_int_val_ofst;
4008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    const UWORD32 *pu4_table = (const UWORD32 *)ps_cab_env->cabac_table;
4018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_value = 0;
4038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*u1_max_bins has to be less than or equal to 4, u1_max_bins <= 4 for  this function*/
4058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*here the valid length is assumed to be equal to 3 ,so the calling function is expected
4078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S     to duplicate CtxInc if valid lenth is 2 and cmaxbin is greater than2*/
4088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_code_int_range = ps_cab_env->u4_code_int_range;
4098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_code_int_val_ofst = ps_cab_env->u4_code_int_val_ofst;
4108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    do
4128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
4138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        u4_ctx_Inc = u4_ctx_inc & 0xF;
4148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        u4_ctx_inc = u4_ctx_inc >> 4;
4158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_bin_ctxt = ps_src_bin_ctxt + u4_ctx_Inc;
4178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        DECODE_ONE_BIN_MACRO(ps_bin_ctxt, u4_code_int_range, u4_code_int_val_ofst,
4198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                             pu4_table, ps_bitstrm, u4_symbol)
4208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        INC_BIN_COUNT(ps_cab_env);INC_DECISION_BINS(ps_cab_env);
4228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        u4_value++;
4248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
4258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    while((u4_value < u1_max_bins) & (u4_symbol));
4268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_value = u4_value - 1 + u4_symbol;
4288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_cab_env->u4_code_int_range = u4_code_int_range;
4308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_cab_env->u4_code_int_val_ofst = u4_code_int_val_ofst;
4318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return (u4_value);
4338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
4358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
4378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
4388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Function Name : ih264d_decode_bins                                */
4398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
4408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Description   : This function decodes bins in the case of MSB_FIRST_FLC  */
4418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                  binarization technique.valid_length is always equal max_bins */
4428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                  for MSB_FIRST_FLC. assumes  u1_max_bins <= 4               */
4438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Inputs        : <What inputs does the function take?>                    */
4448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Globals       : <Does it use any global variables?>                      */
4458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Processing    : <Describe how the function operates - include algorithm  */
4468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                  description>                                             */
4478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Outputs       : <What does the function produce?>                        */
4488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Returns       : <What does the function return?>                         */
4498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
4508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Issues        : <List any issues or problems with this function>         */
4518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
4528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Revision History:                                                        */
4538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
4548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
4558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*         20 11 2008   SH          Draft                                   */
4568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
4578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
4588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SUWORD32 ih264d_decode_bins(UWORD8 u1_max_bins,
4608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                           UWORD32 u4_ctx_inc,
4618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                           bin_ctxt_model_t *ps_src_bin_ctxt,
4628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                           dec_bit_stream_t *ps_bitstrm,
4638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                           decoding_envirnoment_t *ps_cab_env)
4648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
4668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_value;
4678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_symbol, i;
4688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_ctxt_inc;
4698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    bin_ctxt_model_t *ps_bin_ctxt;
4708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_code_int_range, u4_code_int_val_ofst;
4718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    const UWORD32 *pu4_table = (const UWORD32 *)ps_cab_env->cabac_table;
4728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    i = 0;
4748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_value = 0;
4768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*u1_max_bins has to be less than or equal to 4, u1_max_bins <= 4 for  this fucntion*/
4788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_code_int_range = ps_cab_env->u4_code_int_range;
4798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_code_int_val_ofst = ps_cab_env->u4_code_int_val_ofst;
4808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    do
4828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
4838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        u4_ctxt_inc = u4_ctx_inc & 0xf;
4848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        u4_ctx_inc = u4_ctx_inc >> 4;
4858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_bin_ctxt = ps_src_bin_ctxt + u4_ctxt_inc;
4878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        DECODE_ONE_BIN_MACRO(ps_bin_ctxt, u4_code_int_range, u4_code_int_val_ofst,
4898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                             pu4_table, ps_bitstrm, u4_symbol)
4908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        INC_BIN_COUNT(ps_cab_env);INC_DECISION_BINS(ps_cab_env);
4928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        u4_value = (u4_value << 1) | (u4_symbol);
4948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i++;
4968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
4978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    while(i < u1_max_bins);
4988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_cab_env->u4_code_int_range = u4_code_int_range;
5008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_cab_env->u4_code_int_val_ofst = u4_code_int_val_ofst;
5018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return (u4_value);
5038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
5058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
5078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
5088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Function Name : ih264d_decode_bins_unary                                */
5098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
5108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Description   : This function decodes bins in the case of UNARY         */
5118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                  binarization technique.here the valid length is taken to 5*/
5128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                  and cmax is always greater than 9                       */
5138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Inputs        : <What inputs does the function take?>                    */
5148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Globals       : <Does it use any global variables?>                      */
5158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Processing    : <Describe how the function operates - include algorithm  */
5168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                  description>                                             */
5178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Outputs       : <What does the function produce?>                        */
5188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Returns       : <What does the function return?>                         */
5198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
5208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Issues        : <List any issues or problems with this function>         */
5218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
5228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Revision History:                                                        */
5238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
5248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
5258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*         20 11 2008   SH          Draft                                   */
5268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
5278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
5288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SUWORD32 ih264d_decode_bins_unary(UWORD8 u1_max_bins,
5298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                 UWORD32 u4_ctx_inc,
5308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                 bin_ctxt_model_t *ps_src_bin_ctxt,
5318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                 dec_bit_stream_t *ps_bitstrm,
5328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                 decoding_envirnoment_t *ps_cab_env)
5338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
5348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_value;
5358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_symbol;
5368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    bin_ctxt_model_t *ps_bin_ctxt;
5378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_ctx_Inc;
5388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_code_int_range, u4_code_int_val_ofst;
5398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    const UWORD32 *pu4_table = (const UWORD32 *)ps_cab_env->cabac_table;
5408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* in this function the valid length for u4_ctx_inc is always taken to be,so if the
5428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S     the valid length is lessthan 5 the caller need to duplicate accordingly*/
5438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*u1_max_bins is always greater or equal to 9 we have the check for u1_max_bins only after the 2 loop*/
5458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_value = 0;
5468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_code_int_range = ps_cab_env->u4_code_int_range;
5478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_code_int_val_ofst = ps_cab_env->u4_code_int_val_ofst;
5488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    do
5508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
5518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        u4_ctx_Inc = u4_ctx_inc & 0xf;
5528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        u4_ctx_inc = u4_ctx_inc >> 4;
5538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_bin_ctxt = ps_src_bin_ctxt + u4_ctx_Inc;
5558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        DECODE_ONE_BIN_MACRO(ps_bin_ctxt, u4_code_int_range, u4_code_int_val_ofst,
5578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                             pu4_table, ps_bitstrm, u4_symbol)
5588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        INC_BIN_COUNT(ps_cab_env);INC_DECISION_BINS(ps_cab_env);
5608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        u4_value++;
5628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
5648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    while(u4_symbol && u4_value < 4);
5658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(u4_symbol && (u4_value < u1_max_bins))
5678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
5688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        u4_ctx_Inc = u4_ctx_inc & 0xf;
5708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_bin_ctxt = ps_src_bin_ctxt + u4_ctx_Inc;
5728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        do
5748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
5758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            DECODE_ONE_BIN_MACRO(ps_bin_ctxt, u4_code_int_range, u4_code_int_val_ofst,
5778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                 pu4_table, ps_bitstrm, u4_symbol)
5788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            INC_BIN_COUNT(ps_cab_env);INC_DECISION_BINS(ps_cab_env);
5808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u4_value++;
5828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
5848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        while(u4_symbol && (u4_value < u1_max_bins));
5858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
5878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_cab_env->u4_code_int_range = u4_code_int_range;
5898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_cab_env->u4_code_int_val_ofst = u4_code_int_val_ofst;
5908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_value = u4_value - 1 + u4_symbol;
5928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return (u4_value);
5948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
5968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
5988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
5998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Function Name : ih264d_decode_bypass_bins_unary                                     */
6008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
6018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Description   : This function is used in the case of UNARY coding       */
6028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
6038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
6048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Inputs        : <What inputs does the function take?>                    */
6058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Globals       : <Does it use any global variables?>                      */
6068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Processing    : <Describe how the function operates - include algorithm  */
6078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                  description>                                             */
6088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Outputs       : <What does the function produce?>                        */
6098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Returns       : <What does the function return?>                         */
6108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
6118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Issues        : <List any issues or problems with this function>         */
6128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
6138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Revision History:                                                        */
6148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
6158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
6168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*         13 10 2005   Ittiam          Draft                                */
6178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
6188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
6198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SUWORD32 ih264d_decode_bypass_bins_unary(decoding_envirnoment_t *ps_cab_env,
6218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        dec_bit_stream_t *ps_bitstrm)
6228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
6238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_value;
6248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_bin;
6258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_code_int_val_ofst, u4_code_int_range;
6268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u1_max_bins;
6288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_code_int_val_ofst = ps_cab_env->u4_code_int_val_ofst;
6308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_code_int_range = ps_cab_env->u4_code_int_range;
6318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(u4_code_int_range < ONE_RIGHT_SHIFTED_BY_9)
6338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
6348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD32 *pu4_buffer, u4_offset;
6358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu4_buffer = ps_bitstrm->pu4_buffer;
6378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        u4_offset = ps_bitstrm->u4_ofst;
6388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        RENORM_RANGE_OFFSET(u4_code_int_range, u4_code_int_val_ofst, u4_offset,
6408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            pu4_buffer)
6418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_bitstrm->u4_ofst = u4_offset;
6428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
6438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*as it is called only form mvd*/
6458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u1_max_bins = 32;
6468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_value = 0;
6478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    do
6498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
6508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        u4_value++;
6518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        u4_code_int_range = u4_code_int_range >> 1;
6538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(u4_code_int_val_ofst >= u4_code_int_range)
6548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
6558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* S=1 */
6568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u4_bin = 1;
6578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u4_code_int_val_ofst -= u4_code_int_range;
6588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
6598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        else
6608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
6618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* S=0 */
6628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u4_bin = 0;
6638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
6648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        INC_BIN_COUNT(ps_cab_env);INC_BYPASS_BINS(ps_cab_env);
6668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(u4_code_int_range < ONE_RIGHT_SHIFTED_BY_9)
6688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
6698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            UWORD32 *pu4_buffer, u4_offset;
6708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pu4_buffer = ps_bitstrm->pu4_buffer;
6728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u4_offset = ps_bitstrm->u4_ofst;
6738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            RENORM_RANGE_OFFSET(u4_code_int_range, u4_code_int_val_ofst, u4_offset,
6758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                pu4_buffer)
6768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_bitstrm->u4_ofst = u4_offset;
6788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
6798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
6818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    while(u4_bin && (u4_value < u1_max_bins));
6828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_cab_env->u4_code_int_val_ofst = u4_code_int_val_ofst;
6848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_cab_env->u4_code_int_range = u4_code_int_range;
6858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_value = (u4_value - 1 + u4_bin);
6868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Sreturn (u4_value);
6888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
6898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
6918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
6928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Function Name : ih264d_decode_bypass_bins                                     */
6938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
6948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Description   : This function is used in the case of FLC coding       */
6958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
6968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
6978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Inputs        : <What inputs does the function take?>                    */
6988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Globals       : <Does it use any global variables?>                      */
6998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Processing    : <Describe how the function operates - include algorithm  */
7008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                  description>                                             */
7018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Outputs       : <What does the function produce?>                        */
7028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Returns       : <What does the function return?>                         */
7038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
7048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Issues        : <List any issues or problems with this function>         */
7058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
7068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Revision History:                                                        */
7078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
7088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
7098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*         13 10 2005   Ittiam          Draft                                */
7108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
7118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
7128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SUWORD32 ih264d_decode_bypass_bins(decoding_envirnoment_t *ps_cab_env,
7148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                  UWORD8 u1_max_bins,
7158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                  dec_bit_stream_t *ps_bitstrm)
7168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
7178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_bins;
7188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_bin;
7198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_code_int_val_ofst, u4_code_int_range;
7208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_bins = 0;
7228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_code_int_val_ofst = ps_cab_env->u4_code_int_val_ofst;
7238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_code_int_range = ps_cab_env->u4_code_int_range;
7248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(u4_code_int_range < ONE_RIGHT_SHIFTED_BY_9)
7268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
7278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD32 *pu4_buffer, u4_offset;
7288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu4_buffer = ps_bitstrm->pu4_buffer;
7308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        u4_offset = ps_bitstrm->u4_ofst;
7318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        RENORM_RANGE_OFFSET(u4_code_int_range, u4_code_int_val_ofst, u4_offset,
7338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            pu4_buffer)
7348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_bitstrm->u4_ofst = u4_offset;
7358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
7368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    do
7388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
7398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        u4_code_int_range = u4_code_int_range >> 1;
7418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(u4_code_int_val_ofst >= u4_code_int_range)
7438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
7448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* S=1 */
7458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u4_bin = 1;
7468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u4_code_int_val_ofst -= u4_code_int_range;
7478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
7488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        else
7498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
7508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* S=0 */
7518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u4_bin = 0;
7528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
7538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        INC_BIN_COUNT(ps_cab_env);INC_BYPASS_BINS(ps_cab_env);
7558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        u4_bins = ((u4_bins << 1) | u4_bin);
7578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        u1_max_bins--;
7588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(u4_code_int_range < ONE_RIGHT_SHIFTED_BY_9)
7608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
7618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            UWORD32 *pu4_buffer, u4_offset;
7628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pu4_buffer = ps_bitstrm->pu4_buffer;
7648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u4_offset = ps_bitstrm->u4_ofst;
7658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            RENORM_RANGE_OFFSET(u4_code_int_range, u4_code_int_val_ofst, u4_offset,
7678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                pu4_buffer)
7688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_bitstrm->u4_ofst = u4_offset;
7698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
7708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
7728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    while(u1_max_bins);
7738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_cab_env->u4_code_int_val_ofst = u4_code_int_val_ofst;
7758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_cab_env->u4_code_int_range = u4_code_int_range;
7768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return (u4_bins);
7788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
7798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
780