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