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_parse_cavlc.c 238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \brief 258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * This file contains UVLC related functions. 268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \date 288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 20/11/2002 298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \author NS 318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *************************************************************************** 328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */ 338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include <string.h> 358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include <stdio.h> 368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_bitstrm.h" 388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_parse_cavlc.h" 398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_error_handler.h" 408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_defs.h" 418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_debug.h" 428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_cabac.h" 438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_structs.h" 448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_tables.h" 458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_tables.h" 468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_mb_utils.h" 478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_unpack_coeff4x4_dc_4x4blk(tu_sblk4x4_coeff_data_t *ps_tu_4x4, 498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 *pi2_out_coeff_data, 508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_inv_scan); 518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264d_uev */ 558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : Reads the unsigned Exp Golomb codec syntax from the */ 578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* ps_bitstrm as specified in section 9.1 of H264 standard */ 588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* It also increases bitstream u4_ofst by the number of bits */ 598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* parsed for UEV decode operation */ 608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : bitstream base pointer and bitsream u4_ofst in bits */ 628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Globals : None */ 638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : */ 648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : UEV decoded syntax element and incremented ps_bitstrm u4_ofst */ 658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : UEV decoded syntax element */ 668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues : Does not check if ps_bitstrm u4_ofst exceeds max ps_bitstrm i4_size */ 688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* for performamce. Caller might have to do error resilence */ 698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* check for bitstream overflow */ 708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 19 09 2008 Jay Draft */ 758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SUWORD32 ih264d_uev(UWORD32 *pu4_bitstrm_ofst, UWORD32 *pu4_bitstrm_buf) 788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bitstream_offset = *pu4_bitstrm_ofst; 808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_word, u4_ldz; 818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /***************************************************************/ 838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Find leading zeros in next 32 bits */ 848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /***************************************************************/ 858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S NEXTBITS_32(u4_word, u4_bitstream_offset, pu4_bitstrm_buf); 868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_ldz = CLZ(u4_word); 878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Flush the ps_bitstrm */ 888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bitstream_offset += (u4_ldz + 1); 898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Read the suffix from the ps_bitstrm */ 908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_word = 0; 918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u4_ldz) 928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S GETBITS(u4_word, u4_bitstream_offset, pu4_bitstrm_buf, u4_ldz); 938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *pu4_bitstrm_ofst = u4_bitstream_offset; 948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return ((1 << u4_ldz) + u4_word - 1); 958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264d_sev */ 1008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 1018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : Reads the signed Exp Golomb codec syntax from the ps_bitstrm */ 1028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* as specified in section 9.1 of H264 standard. */ 1038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* It also increases bitstream u4_ofst by the number of bits */ 1048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* parsed for SEV decode operation */ 1058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 1068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : bitstream base pointer and bitsream u4_ofst in bits */ 1078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Globals : None */ 1088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : */ 1098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : SEV decoded syntax element and incremented ps_bitstrm u4_ofst */ 1108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : SEV decoded syntax element */ 1118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 1128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues : Does not check if ps_bitstrm u4_ofst exceeds max ps_bitstrm i4_size */ 1138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* for performamce. Caller might have to do error resilence */ 1148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* check for bitstream overflow */ 1158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 1168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 1178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 1188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 1198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 19 09 2008 Jay Draft */ 1208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 1218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 1228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SWORD32 ih264d_sev(UWORD32 *pu4_bitstrm_ofst, UWORD32 *pu4_bitstrm_buf) 1238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 1248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bitstream_offset = *pu4_bitstrm_ofst; 1258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_word, u4_ldz, u4_abs_val; 1268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /***************************************************************/ 1288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Find leading zeros in next 32 bits */ 1298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /***************************************************************/ 1308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S NEXTBITS_32(u4_word, u4_bitstream_offset, pu4_bitstrm_buf); 1318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_ldz = CLZ(u4_word); 1328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Flush the ps_bitstrm */ 1348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bitstream_offset += (u4_ldz + 1); 1358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Read the suffix from the ps_bitstrm */ 1378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_word = 0; 1388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u4_ldz) 1398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S GETBITS(u4_word, u4_bitstream_offset, pu4_bitstrm_buf, u4_ldz); 1408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *pu4_bitstrm_ofst = u4_bitstream_offset; 1428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_abs_val = ((1 << u4_ldz) + u4_word) >> 1; 1438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u4_word & 0x1) 1458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return (-(WORD32)u4_abs_val); 1468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 1478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return (u4_abs_val); 1488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 1498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 1518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 1528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : get_tev_range_1 */ 1538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 1548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : Reads the TEV Exp Golomb codec syntax from the ps_bitstrm */ 1558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* as specified in section 9.1 of H264 standard. This will */ 1568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* called only when the input range is 1 for TEV decode. */ 1578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* If range is more than 1, then UEV decode is done */ 1588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 1598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : bitstream base pointer and bitsream u4_ofst in bits */ 1608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Globals : None */ 1618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : */ 1628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : TEV decoded syntax element and incremented ps_bitstrm u4_ofst */ 1638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : TEV decoded syntax element */ 1648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 1658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues : Does not check if ps_bitstrm u4_ofst exceeds max ps_bitstrm i4_size */ 1668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* for performamce. Caller might have to do error resilence */ 1678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* check for bitstream overflow */ 1688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 1698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 1708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 1718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 1728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 19 09 2008 Jay Draft */ 1738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 1748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 1758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SUWORD32 ih264d_tev_range1(UWORD32 *pu4_bitstrm_ofst, UWORD32 *pu4_bitstrm_buf) 1768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 1778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_code; 1788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S GETBIT(u4_code, *pu4_bitstrm_ofst, pu4_bitstrm_buf); 1798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return (!u4_code); 1808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 1818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*! 1838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ************************************************************************** 1848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \if Function name : ih264d_uvlc \endif 1858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 1868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \brief 1878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 1888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Reads the unsigned/signed/truncated integer Exp-Golomb-coded syntax element 1898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * with the left bit first. The parsing process for this descriptor is specified 1908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * in subclause 9.1. 1918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 1928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \param ps_bitstrm : Pointer to Bitstream Structure . 1938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \param u4_range : Range value in case of Truncated Exp-Golomb-code 1948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \param pi_bitstrm_ofst : Pointer to the local copy of Bitstream u4_ofst 1958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \param u1_flag : Flag indicating the case of UEV,SEV or TEV 1968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \param u4_bitstrm_ofst : Local copy of Bitstream u4_ofst 1978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \param pu4_bitstrm_buf : Pointer to the Bitstream buffer 1988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 1998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \return 2008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Returns Code Value. 2018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 2028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ************************************************************************** 2038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */ 2048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SWORD32 ih264d_uvlc(dec_bit_stream_t *ps_bitstrm, 2068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_range, 2078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 *pi_bitstrm_ofst, 2088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_flag, 2098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bitstrm_ofst, 2108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 *pu4_bitstrm_buf) 2118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 2128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 word, word2, cur_bit, cur_word, code_val, code_num, clz; 2138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S SWITCHOFFTRACE; 2158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S cur_bit = u4_bitstrm_ofst & 0x1F; 2168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S cur_word = u4_bitstrm_ofst >> 5; 2178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S word = pu4_bitstrm_buf[cur_word]; 2188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S word2 = pu4_bitstrm_buf[cur_word + 1]; 2198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(cur_bit != 0) 2218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 2228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S word <<= cur_bit; 2238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S word2 >>= (32 - cur_bit); 2248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S word |= word2; 2258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 2268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_flag == TEV && u4_range == 1) 2288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 2298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S word >>= 31; 2308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S word = 1 - word; 2318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (*pi_bitstrm_ofst)++; 2328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_bitstrm->u4_ofst = *pi_bitstrm_ofst; 2338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return (WORD32)word; 2348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 2358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S //finding clz 2378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 2388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 ui32_code, ui32_mask; 2398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ui32_code = word; 2418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ui32_mask = 0x80000000; 2428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S clz = 0; 2438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* DSP implements this with LMBD instruction */ 2458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* so there we don't need to break the loop */ 2468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S while(!(ui32_code & ui32_mask)) 2478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 2488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S clz++; 2498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ui32_mask >>= 1; 2508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(0 == ui32_mask) 2518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S break; 2528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 2538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 2548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(clz == 0) 2568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 2578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *pi_bitstrm_ofst = *pi_bitstrm_ofst + (2 * clz) + 1; 2588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_bitstrm->u4_ofst = *pi_bitstrm_ofst; 2598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return 0; 2608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 2618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S word <<= (clz + 1); 2638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S word >>= (32 - clz); 2648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S code_num = (1 << clz) + word - 1; 2658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *pi_bitstrm_ofst = *pi_bitstrm_ofst + (2 * clz) + 1; 2668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_bitstrm->u4_ofst = *pi_bitstrm_ofst; 2678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_flag == TEV || u1_flag == UEV) 2698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return (WORD32)code_num; 2708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S code_val = (code_num + 1) >> 1; 2728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!(code_num & 0x01)) 2738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return -((WORD32)code_val); 2748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return (WORD32)code_val; 2758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 2778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 2798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 2808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264d_cavlc_4x4res_block_totalcoeff_1 */ 2818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 2828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : This function does cavlc decoding of 4x4 block residual */ 2838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* coefficient when total coeff is equal to 1. The parsing */ 2848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* is done as defined in section 9.2.2 and 9.2.3 of the */ 2858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* H264 standard. */ 2868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 2878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : <What inputs does the function take?> */ 2888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Globals : <Does it use any global variables?> */ 2898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : <Describe how the function operates - include algorithm */ 2908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* description> */ 2918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : <What does the function produce?> */ 2928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : <What does the function return?> */ 2938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 2948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues : <List any issues or problems with this function> */ 2958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 2968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 2978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 2988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 2998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 25 09 2008 Jay Draft */ 3008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 3018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 3028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SWORD32 ih264d_cavlc_4x4res_block_totalcoeff_1(UWORD32 u4_isdc, 3038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_total_coeff_trail_one, 3048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S dec_bit_stream_t *ps_bitstrm) 3058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 3068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 *pu4_bitstrm_buf = ps_bitstrm->pu4_buffer; 3088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bitstream_offset = ps_bitstrm->u4_ofst; 3098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_trailing_ones = u4_total_coeff_trail_one & 0xFFFF; 3108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 i2_level; 3118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_tot_zero, u4_ldz, u4_scan_pos; 3128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S tu_sblk4x4_coeff_data_t *ps_tu_4x4; 3148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 *pi2_coeff_data; 3158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S dec_struct_t *ps_dec = (dec_struct_t *)ps_bitstrm->pv_codec_handle; 3168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_tu_4x4 = (tu_sblk4x4_coeff_data_t *)ps_dec->pv_parse_tu_coeff_data; 3188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_tu_4x4->u2_sig_coeff_map = 0; 3198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pi2_coeff_data = &ps_tu_4x4->ai2_level[0]; 3208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u4_trailing_ones) 3238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 3248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_sign; 3258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /****************************************************************/ 3268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Decode Trailing One as in section 9.2.2 */ 3278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /****************************************************************/ 3288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S GETBIT(u4_sign, u4_bitstream_offset, pu4_bitstrm_buf); 3298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_level = u4_sign ? -1 : 1; 3308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 3318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 3328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 3338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /****************************************************************/ 3348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Decoding Level based on prefix and suffix as in 9.2.2 */ 3358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /****************************************************************/ 3368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_lev_suffix, u4_lev_suffix_size; 3378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 u2_lev_code, u2_abs_value; 3388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_lev_prefix; 3398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /***************************************************************/ 3408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Find leading zeros in next 32 bits */ 3418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /***************************************************************/ 3428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S FIND_ONE_IN_STREAM_32(u4_lev_prefix, u4_bitstream_offset, 3438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bitstrm_buf); 3448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_lev_code = (2 + MIN(u4_lev_prefix, 15)); 3458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(14 == u4_lev_prefix) 3478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_lev_suffix_size = 4; 3488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else if(15 <= u4_lev_prefix) 3498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 3508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_lev_code += 15; 3518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_lev_suffix_size = u4_lev_prefix - 3; 3528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 3538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 3548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_lev_suffix_size = 0; 3558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S //HP_LEVEL_PREFIX 3578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(16 <= u4_lev_prefix) 3588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 3598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_lev_code += ((1 << (u4_lev_prefix - 3)) - 4096); 3608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 3618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u4_lev_suffix_size) 3628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 3638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S GETBITS(u4_lev_suffix, u4_bitstream_offset, pu4_bitstrm_buf, 3648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_lev_suffix_size); 3658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_lev_code += u4_lev_suffix; 3668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 3678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_abs_value = (u2_lev_code + 2) >> 1; 3698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 3708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* If Level code is odd, level is negative else positive */ 3718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 3728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_level = (u2_lev_code & 1) ? -u2_abs_value : u2_abs_value; 3738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 3758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /****************************************************************/ 3778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Decoding total zeros as in section 9.2.3, table 9.7 */ 3788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /****************************************************************/ 3798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S FIND_ONE_IN_STREAM_LEN(u4_ldz, u4_bitstream_offset, pu4_bitstrm_buf, 8); 3808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u4_ldz) 3828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 3838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S GETBIT(u4_tot_zero, u4_bitstream_offset, pu4_bitstrm_buf); 3848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_tot_zero = (u4_ldz << 1) - u4_tot_zero; 3858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 3868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 3878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_tot_zero = 0; 3888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /***********************************************************************/ 3908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Inverse scan and store residual coeff. Update the bitstream u4_ofst */ 3918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /***********************************************************************/ 3928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_scan_pos = u4_tot_zero + u4_isdc; 3938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u4_scan_pos > 15) 3948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return -1; 3958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S SET_BIT(ps_tu_4x4->u2_sig_coeff_map, u4_scan_pos); 3978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *pi2_coeff_data++ = i2_level; 3988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 4018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 offset; 4028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S offset = (UWORD8 *)pi2_coeff_data - (UWORD8 *)ps_tu_4x4; 4038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S offset = ALIGN4(offset); 4048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pv_parse_tu_coeff_data = (void *)((UWORD8 *)ps_dec->pv_parse_tu_coeff_data + offset); 4058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 4068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_bitstrm->u4_ofst = u4_bitstream_offset; 4088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return 0; 4098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 4108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 4128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 4138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264d_cavlc_4x4res_block_totalcoeff_2to10 */ 4148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 4158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : This function does cavlc decoding of 4x4 block residual */ 4168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* coefficient when total coeffs are between two and ten */ 4178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* inclusive. Parsing is done as defined in section 9.2.2 */ 4188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* and 9.2.3 the H264 standard. */ 4198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 4208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : <What inputs does the function take?> */ 4218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Globals : <Does it use any global variables?> */ 4228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : <Describe how the function operates - include algorithm */ 4238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* description> */ 4248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : <What does the function produce?> */ 4258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : <What does the function return?> */ 4268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 4278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues : <List any issues or problems with this function> */ 4288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 4298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 4308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 4318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 4328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 25 09 2008 Jay Draft */ 4338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 4348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 4358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SWORD32 ih264d_cavlc_4x4res_block_totalcoeff_2to10(UWORD32 u4_isdc, 4378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_total_coeff_trail_one, /*!<TotalCoefficients<<16+trailingones*/ 4388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S dec_bit_stream_t *ps_bitstrm) 4398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 4408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_total_zeroes; 4418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 i; 4428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 *pu4_bitstrm_buf = ps_bitstrm->pu4_buffer; 4438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bitstream_offset = ps_bitstrm->u4_ofst; 4448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_trailing_ones = u4_total_coeff_trail_one & 0xFFFF; 4458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_total_coeff = u4_total_coeff_trail_one >> 16; 4468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 i2_level_arr[16]; 4478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S tu_sblk4x4_coeff_data_t *ps_tu_4x4; 4498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 *pi2_coeff_data; 4508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S dec_struct_t *ps_dec = (dec_struct_t *)ps_bitstrm->pv_codec_handle; 4518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_tu_4x4 = (tu_sblk4x4_coeff_data_t *)ps_dec->pv_parse_tu_coeff_data; 4538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_tu_4x4->u2_sig_coeff_map = 0; 4548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pi2_coeff_data = &ps_tu_4x4->ai2_level[0]; 4558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i = u4_total_coeff - 1; 4578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u4_trailing_ones) 4598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 4608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************************/ 4618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Decode Trailing Ones */ 4628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* read the sign of T1's and put them in level array */ 4638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************************/ 4648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_signs, u4_cnt = u4_trailing_ones; 4658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 (*ppi2_trlone_lkup)[3] = 4668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (WORD16 (*)[3])gai2_ih264d_trailing_one_level; 4678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 *pi2_trlone_lkup; 4688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S GETBITS(u4_signs, u4_bitstream_offset, pu4_bitstrm_buf, u4_cnt); 4708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pi2_trlone_lkup = ppi2_trlone_lkup[(1 << u4_cnt) - 2 + u4_signs]; 4728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S while(u4_cnt--) 4748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_level_arr[i--] = *pi2_trlone_lkup++; 4758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 4768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /****************************************************************/ 4788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Decoding Levels Begins */ 4798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /****************************************************************/ 4808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(i >= 0) 4818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 4828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /****************************************************************/ 4838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* First level is decoded outside the loop as it has lot of */ 4848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* special cases. */ 4858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /****************************************************************/ 4868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_lev_suffix, u4_suffix_len, u4_lev_suffix_size; 4878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 u2_lev_code, u2_abs_value; 4888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_lev_prefix; 4898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /***************************************************************/ 4918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* u4_suffix_len = 0, Find leading zeros in next 32 bits */ 4928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /***************************************************************/ 4938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S FIND_ONE_IN_STREAM_32(u4_lev_prefix, u4_bitstream_offset, 4948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bitstrm_buf); 4958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 4978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Special decoding case when trailing ones are 3 */ 4988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 4998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_lev_code = MIN(15, u4_lev_prefix); 5008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_lev_code += (3 == u4_trailing_ones) ? 0 : 2; 5028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(14 == u4_lev_prefix) 5048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_lev_suffix_size = 4; 5058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else if(15 <= u4_lev_prefix) 5068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 5078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_lev_code += 15; 5088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_lev_suffix_size = u4_lev_prefix - 3; 5098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 5108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 5118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_lev_suffix_size = 0; 5128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S //HP_LEVEL_PREFIX 5148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(16 <= u4_lev_prefix) 5158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 5168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_lev_code += ((1 << (u4_lev_prefix - 3)) - 4096); 5178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 5188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u4_lev_suffix_size) 5198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 5208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S GETBITS(u4_lev_suffix, u4_bitstream_offset, pu4_bitstrm_buf, 5218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_lev_suffix_size); 5228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_lev_code += u4_lev_suffix; 5238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 5248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_abs_value = (u2_lev_code + 2) >> 1; 5268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 5278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* If Level code is odd, level is negative else positive */ 5288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 5298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_level_arr[i--] = (u2_lev_code & 1) ? -u2_abs_value : u2_abs_value; 5308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_suffix_len = (u2_abs_value > 3) ? 2 : 1; 5328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 5348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Now loop over the remaining levels */ 5358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 5368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S while(i >= 0) 5378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 5388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /***************************************************************/ 5408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Find leading zeros in next 32 bits */ 5418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /***************************************************************/ 5428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S FIND_ONE_IN_STREAM_32(u4_lev_prefix, u4_bitstream_offset, 5438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bitstrm_buf); 5448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_lev_suffix_size = 5468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (15 <= u4_lev_prefix) ? 5478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (u4_lev_prefix - 3) : u4_suffix_len; 5488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 5508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Compute level code using prefix and suffix */ 5518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 5528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S GETBITS(u4_lev_suffix, u4_bitstream_offset, pu4_bitstrm_buf, 5538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_lev_suffix_size); 5548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_lev_code = (MIN(15,u4_lev_prefix) << u4_suffix_len) 5558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + u4_lev_suffix; 5568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S //HP_LEVEL_PREFIX 5588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(16 <= u4_lev_prefix) 5598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 5608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_lev_code += ((1 << (u4_lev_prefix - 3)) - 4096); 5618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 5628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_abs_value = (u2_lev_code + 2) >> 1; 5638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 5658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* If Level code is odd, level is negative else positive */ 5668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 5678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_level_arr[i--] = 5688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (u2_lev_code & 1) ? -u2_abs_value : u2_abs_value; 5698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 5718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Increment suffix length if required */ 5728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 5738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_suffix_len += 5748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (u4_suffix_len < 6) ? 5758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (u2_abs_value 5768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S > (3 5778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S << (u4_suffix_len 5788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S - 1))) : 5798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 0; 5808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 5818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /****************************************************************/ 5838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Decoding Levels Ends */ 5848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /****************************************************************/ 5858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 5868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /****************************************************************/ 5888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Decoding total zeros as in section 9.2.3, table 9.7 */ 5898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /****************************************************************/ 5908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 5918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_index; 5928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD8 (*ppu1_total_zero_lkup)[64] = 5938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (const UWORD8 (*)[64])gau1_ih264d_table_total_zero_2to10; 5948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S NEXTBITS(u4_index, u4_bitstream_offset, pu4_bitstrm_buf, 6); 5968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_total_zeroes = ppu1_total_zero_lkup[u4_total_coeff - 2][u4_index]; 5978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S FLUSHBITS(u4_bitstream_offset, (u4_total_zeroes >> 4)); 5998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_total_zeroes &= 0xf; 6008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 6018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 6028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /**************************************************************/ 6038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Decode the runs and form the coefficient buffer */ 6048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /**************************************************************/ 6058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 6068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD8 *pu1_table_runbefore; 6078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_run; 6088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 k; 6098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_scan_pos = u4_total_coeff + u4_total_zeroes - 1 + u4_isdc; 6108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 u4_zeroes_left = u4_total_zeroes; 6118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S k = u4_total_coeff - 1; 6128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 6138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /**************************************************************/ 6148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Decoding Runs Begin for zeros left > 6 */ 6158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /**************************************************************/ 6168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S while((u4_zeroes_left > 6) && k) 6178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 6188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_code; 6198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 6208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S NEXTBITS(u4_code, u4_bitstream_offset, pu4_bitstrm_buf, 3); 6218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 6228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u4_code != 0) 6238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 6248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S FLUSHBITS(u4_bitstream_offset, 3); 6258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_run = (7 - u4_code); 6268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 6278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 6288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 6298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 6308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S FIND_ONE_IN_STREAM_LEN(u4_code, u4_bitstream_offset, 6318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bitstrm_buf, 11); 6328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_run = (4 + u4_code); 6338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 6348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 6358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S SET_BIT(ps_tu_4x4->u2_sig_coeff_map, u4_scan_pos); 6368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *pi2_coeff_data++ = i2_level_arr[k--]; 6378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_zeroes_left -= u4_run; 6388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_scan_pos -= (u4_run + 1); 6398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 6408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 6418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /**************************************************************/ 6428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Decoding Runs for 0 < zeros left <=6 */ 6438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /**************************************************************/ 6448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_table_runbefore = (UWORD8 *)gau1_ih264d_table_run_before; 6458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S while((u4_zeroes_left > 0) && k) 6468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 6478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_code; 6488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S NEXTBITS(u4_code, u4_bitstream_offset, pu4_bitstrm_buf, 3); 6498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 6508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_code = pu1_table_runbefore[u4_code + (u4_zeroes_left << 3)]; 6518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_run = u4_code >> 2; 6528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 6538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S FLUSHBITS(u4_bitstream_offset, (u4_code & 0x03)); 6548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 6558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S SET_BIT(ps_tu_4x4->u2_sig_coeff_map, u4_scan_pos); 6568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *pi2_coeff_data++ = i2_level_arr[k--]; 6578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_zeroes_left -= u4_run; 6588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_scan_pos -= (u4_run + 1); 6598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 6608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /**************************************************************/ 6618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Decoding Runs End */ 6628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /**************************************************************/ 6638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 6648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /**************************************************************/ 6658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Copy the remaining coefficients */ 6668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /**************************************************************/ 6678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u4_zeroes_left < 0) 6688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return -1; 6698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S while(k >= 0) 6708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 6718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 6728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S SET_BIT(ps_tu_4x4->u2_sig_coeff_map, u4_scan_pos); 6738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *pi2_coeff_data++ = i2_level_arr[k--]; 6748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_scan_pos--; 6758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 6768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 6778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 6788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 6798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 offset; 6808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S offset = (UWORD8 *)pi2_coeff_data - (UWORD8 *)ps_tu_4x4; 6818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S offset = ALIGN4(offset); 6828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pv_parse_tu_coeff_data = (void *)((UWORD8 *)ps_dec->pv_parse_tu_coeff_data + offset); 6838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 6848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 6858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_bitstrm->u4_ofst = u4_bitstream_offset; 6868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return 0; 6878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 6888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 6898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 6908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 6918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264d_cavlc_4x4res_block_totalcoeff_11to16 */ 6928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 6938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : This function does cavlc decoding of 4x4 block residual */ 6948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* coefficient when total coeffs are greater than ten. */ 6958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Parsing is done as defined in section 9.2.2 and 9.2.3 of */ 6968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* the H264 standard. */ 6978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 6988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : <What inputs does the function take?> */ 6998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Globals : <Does it use any global variables?> */ 7008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : <Describe how the function operates - include algorithm */ 7018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* description> */ 7028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : <What does the function produce?> */ 7038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : <What does the function return?> */ 7048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 7058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues : <List any issues or problems with this function> */ 7068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 7078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 7088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 7098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 7108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 25 09 2008 Jay Draft */ 7118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 7128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 7138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 7148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SWORD32 ih264d_cavlc_4x4res_block_totalcoeff_11to16(UWORD32 u4_isdc, 7158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_total_coeff_trail_one, /*!<TotalCoefficients<<16+trailingones*/ 7168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S dec_bit_stream_t *ps_bitstrm ) 7178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 7188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_total_zeroes; 7198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 i; 7208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 *pu4_bitstrm_buf = ps_bitstrm->pu4_buffer; 7218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bitstream_offset = ps_bitstrm->u4_ofst; 7228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_trailing_ones = u4_total_coeff_trail_one & 0xFFFF; 7238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_total_coeff = u4_total_coeff_trail_one >> 16; 7248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 i2_level_arr[16]; 7258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 7268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S tu_sblk4x4_coeff_data_t *ps_tu_4x4; 7278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 *pi2_coeff_data; 7288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S dec_struct_t *ps_dec = (dec_struct_t *)ps_bitstrm->pv_codec_handle; 7298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 7308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_tu_4x4 = (tu_sblk4x4_coeff_data_t *)ps_dec->pv_parse_tu_coeff_data; 7318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_tu_4x4->u2_sig_coeff_map = 0; 7328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pi2_coeff_data = &ps_tu_4x4->ai2_level[0]; 7338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 7348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i = u4_total_coeff - 1; 7358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u4_trailing_ones) 7368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 7378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************************/ 7388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Decode Trailing Ones */ 7398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* read the sign of T1's and put them in level array */ 7408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************************/ 7418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_signs, u4_cnt = u4_trailing_ones; 7428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 (*ppi2_trlone_lkup)[3] = 7438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (WORD16 (*)[3])gai2_ih264d_trailing_one_level; 7448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 *pi2_trlone_lkup; 7458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 7468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S GETBITS(u4_signs, u4_bitstream_offset, pu4_bitstrm_buf, u4_cnt); 7478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 7488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pi2_trlone_lkup = ppi2_trlone_lkup[(1 << u4_cnt) - 2 + u4_signs]; 7498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 7508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S while(u4_cnt--) 7518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_level_arr[i--] = *pi2_trlone_lkup++; 7528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 7538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 7548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /****************************************************************/ 7558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Decoding Levels Begins */ 7568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /****************************************************************/ 7578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(i >= 0) 7588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 7598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /****************************************************************/ 7608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* First level is decoded outside the loop as it has lot of */ 7618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* special cases. */ 7628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /****************************************************************/ 7638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_lev_suffix, u4_suffix_len, u4_lev_suffix_size; 7648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD16 u2_lev_code, u2_abs_value; 7658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_lev_prefix; 7668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 7678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u4_trailing_ones < 3) 7688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 7698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 7708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* u4_suffix_len = 1 */ 7718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 7728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /***************************************************************/ 7738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Find leading zeros in next 32 bits */ 7748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /***************************************************************/ 7758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S FIND_ONE_IN_STREAM_32(u4_lev_prefix, u4_bitstream_offset, 7768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bitstrm_buf); 7778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 7788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_lev_suffix_size = 7798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (15 <= u4_lev_prefix) ? (u4_lev_prefix - 3) : 1; 7808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 7818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S GETBITS(u4_lev_suffix, u4_bitstream_offset, pu4_bitstrm_buf, 7828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_lev_suffix_size); 7838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_lev_code = 2 + (MIN(u4_lev_prefix,15) << 1) + u4_lev_suffix; 7848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 7858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S //HP_LEVEL_PREFIX 7868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(16 <= u4_lev_prefix) 7878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 7888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_lev_code += ((1 << (u4_lev_prefix - 3)) - 4096); 7898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 7908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 7918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 7928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 7938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 7948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*u4_suffix_len = 0 */ 7958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 7968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /***************************************************************/ 7978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Find leading zeros in next 32 bits */ 7988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /***************************************************************/ 7998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S FIND_ONE_IN_STREAM_32(u4_lev_prefix, u4_bitstream_offset, 8008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bitstrm_buf); 8018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 8038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Special decoding case when trailing ones are 3 */ 8048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 8058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_lev_code = MIN(15, u4_lev_prefix); 8068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_lev_code += (3 == u4_trailing_ones) ? 0 : (2); 8088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(14 == u4_lev_prefix) 8108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_lev_suffix_size = 4; 8118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else if(15 <= u4_lev_prefix) 8128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 8138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_lev_code += 15; 8148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_lev_suffix_size = (u4_lev_prefix - 3); 8158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 8168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 8178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_lev_suffix_size = 0; 8188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S //HP_LEVEL_PREFIX 8208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(16 <= u4_lev_prefix) 8218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 8228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_lev_code += ((1 << (u4_lev_prefix - 3)) - 4096); 8238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 8248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u4_lev_suffix_size) 8258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 8268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S GETBITS(u4_lev_suffix, u4_bitstream_offset, pu4_bitstrm_buf, 8278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_lev_suffix_size); 8288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_lev_code += u4_lev_suffix; 8298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 8308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 8318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_abs_value = (u2_lev_code + 2) >> 1; 8338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 8348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* If Level code is odd, level is negative else positive */ 8358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 8368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_level_arr[i--] = (u2_lev_code & 1) ? -u2_abs_value : u2_abs_value; 8378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_suffix_len = (u2_abs_value > 3) ? 2 : 1; 8398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 8418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Now loop over the remaining levels */ 8428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 8438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S while(i >= 0) 8448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 8458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /***************************************************************/ 8478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Find leading zeros in next 32 bits */ 8488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /***************************************************************/ 8498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S FIND_ONE_IN_STREAM_32(u4_lev_prefix, u4_bitstream_offset, 8508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bitstrm_buf); 8518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_lev_suffix_size = 8538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (15 <= u4_lev_prefix) ? 8548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (u4_lev_prefix - 3) : u4_suffix_len; 8558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 8578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Compute level code using prefix and suffix */ 8588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 8598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S GETBITS(u4_lev_suffix, u4_bitstream_offset, pu4_bitstrm_buf, 8608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_lev_suffix_size); 8618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_lev_code = (MIN(15,u4_lev_prefix) << u4_suffix_len) 8628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + u4_lev_suffix; 8638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S //HP_LEVEL_PREFIX 8658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(16 <= u4_lev_prefix) 8668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 8678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_lev_code += ((1 << (u4_lev_prefix - 3)) - 4096); 8688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 8698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_abs_value = (u2_lev_code + 2) >> 1; 8708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 8728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* If Level code is odd, level is negative else positive */ 8738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 8748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_level_arr[i--] = 8758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (u2_lev_code & 1) ? -u2_abs_value : u2_abs_value; 8768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 8788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Increment suffix length if required */ 8798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 8808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_suffix_len += 8818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (u4_suffix_len < 6) ? 8828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (u2_abs_value 8838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S > (3 8848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S << (u4_suffix_len 8858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S - 1))) : 8868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 0; 8878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 8888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /****************************************************************/ 8908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Decoding Levels Ends */ 8918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /****************************************************************/ 8928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 8938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u4_total_coeff < (16 - u4_isdc)) 8958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 8968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_index; 8978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD8 (*ppu1_total_zero_lkup)[16] = 8988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (const UWORD8 (*)[16])gau1_ih264d_table_total_zero_11to15; 8998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 9008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S NEXTBITS(u4_index, u4_bitstream_offset, pu4_bitstrm_buf, 4); 9018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_total_zeroes = ppu1_total_zero_lkup[u4_total_coeff - 11][u4_index]; 9028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 9038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S FLUSHBITS(u4_bitstream_offset, (u4_total_zeroes >> 4)); 9048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_total_zeroes &= 0xf; 9058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 9068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 9078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_total_zeroes = 0; 9088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 9098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /**************************************************************/ 9108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Decode the runs and form the coefficient buffer */ 9118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /**************************************************************/ 9128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 9138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD8 *pu1_table_runbefore; 9148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_run; 9158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 k; 9168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_scan_pos = u4_total_coeff + u4_total_zeroes - 1 + u4_isdc; 9178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 u4_zeroes_left = u4_total_zeroes; 9188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S k = u4_total_coeff - 1; 9198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 9208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /**************************************************************/ 9218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Decoding Runs for 0 < zeros left <=6 */ 9228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /**************************************************************/ 9238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_table_runbefore = (UWORD8 *)gau1_ih264d_table_run_before; 9248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S while((u4_zeroes_left > 0) && k) 9258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 9268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_code; 9278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S NEXTBITS(u4_code, u4_bitstream_offset, pu4_bitstrm_buf, 3); 9288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 9298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_code = pu1_table_runbefore[u4_code + (u4_zeroes_left << 3)]; 9308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_run = u4_code >> 2; 9318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 9328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S FLUSHBITS(u4_bitstream_offset, (u4_code & 0x03)); 9338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S SET_BIT(ps_tu_4x4->u2_sig_coeff_map, u4_scan_pos); 9348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *pi2_coeff_data++ = i2_level_arr[k--]; 9358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_zeroes_left -= u4_run; 9368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_scan_pos -= (u4_run + 1); 9378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 9388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /**************************************************************/ 9398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Decoding Runs End */ 9408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /**************************************************************/ 9418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 9428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /**************************************************************/ 9438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Copy the remaining coefficients */ 9448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /**************************************************************/ 9458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u4_zeroes_left < 0) 9468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return -1; 9478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S while(k >= 0) 9488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 9498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S SET_BIT(ps_tu_4x4->u2_sig_coeff_map, u4_scan_pos); 9508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *pi2_coeff_data++ = i2_level_arr[k--]; 9518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_scan_pos--; 9528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 9538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 9548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 9558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 9568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 offset; 9578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S offset = (UWORD8 *)pi2_coeff_data - (UWORD8 *)ps_tu_4x4; 9588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S offset = ALIGN4(offset); 9598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pv_parse_tu_coeff_data = (void *)((UWORD8 *)ps_dec->pv_parse_tu_coeff_data + offset); 9608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 9618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 9628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_bitstrm->u4_ofst = u4_bitstream_offset; 9638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return 0; 9648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 9658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 9668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 9678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 9688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264d_rest_of_residual_cav_chroma_dc_block */ 9698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 9708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : This function does the Cavlc parsing of the bitstream */ 9718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* for chroma dc coefficients */ 9728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : <What inputs does the function take?> */ 9738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Globals : <Does it use any global variables?> */ 9748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : <Describe how the function operates - include algorithm */ 9758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* description> */ 9768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : <What does the function produce?> */ 9778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : <What does the function return?> */ 9788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 9798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues : <List any issues or problems with this function> */ 9808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 9818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 9828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 9838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 9848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 15 09 2008 Jay Draft */ 9858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 9868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 9878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_rest_of_residual_cav_chroma_dc_block(UWORD32 u4_total_coeff_trail_one, 9888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S dec_bit_stream_t *ps_bitstrm) 9898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 9908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_total_zeroes; 9918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 i; 9928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 *pu4_bitstrm_buf = ps_bitstrm->pu4_buffer; 9938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bitstream_offset = ps_bitstrm->u4_ofst; 9948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_trailing_ones = u4_total_coeff_trail_one & 0xFFFF; 9958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_total_coeff = u4_total_coeff_trail_one >> 16; 9968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 i2_level_arr[4]; 9978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 9988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S tu_sblk4x4_coeff_data_t *ps_tu_4x4; 9998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 *pi2_coeff_data; 10008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S dec_struct_t *ps_dec = (dec_struct_t *)ps_bitstrm->pv_codec_handle; 10018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 10028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_tu_4x4 = (tu_sblk4x4_coeff_data_t *)ps_dec->pv_parse_tu_coeff_data; 10038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_tu_4x4->u2_sig_coeff_map = 0; 10048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pi2_coeff_data = &ps_tu_4x4->ai2_level[0]; 10058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 10068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i = u4_total_coeff - 1; 10078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u4_trailing_ones) 10088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 10098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************************/ 10108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Decode Trailing Ones */ 10118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* read the sign of T1's and put them in level array */ 10128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************************/ 10138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_signs, u4_cnt = u4_trailing_ones; 10148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 (*ppi2_trlone_lkup)[3] = 10158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (WORD16 (*)[3])gai2_ih264d_trailing_one_level; 10168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 *pi2_trlone_lkup; 10178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 10188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S GETBITS(u4_signs, u4_bitstream_offset, pu4_bitstrm_buf, u4_cnt); 10198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 10208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pi2_trlone_lkup = ppi2_trlone_lkup[(1 << u4_cnt) - 2 + u4_signs]; 10218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 10228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S while(u4_cnt--) 10238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_level_arr[i--] = *pi2_trlone_lkup++; 10248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 10258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 10268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /****************************************************************/ 10278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Decoding Levels Begins */ 10288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /****************************************************************/ 10298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(i >= 0) 10308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 10318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /****************************************************************/ 10328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* First level is decoded outside the loop as it has lot of */ 10338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* special cases. */ 10348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /****************************************************************/ 10358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_lev_suffix, u4_suffix_len, u4_lev_suffix_size; 10368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD16 u2_lev_code, u2_abs_value; 10378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_lev_prefix; 10388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 10398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /***************************************************************/ 10408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* u4_suffix_len = 0, Find leading zeros in next 32 bits */ 10418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /***************************************************************/ 10428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S FIND_ONE_IN_STREAM_32(u4_lev_prefix, u4_bitstream_offset, 10438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bitstrm_buf); 10448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 10458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 10468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Special decoding case when trailing ones are 3 */ 10478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 10488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_lev_code = MIN(15, u4_lev_prefix); 10498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 10508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_lev_code += (3 == u4_trailing_ones) ? 0 : (2); 10518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 10528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(14 == u4_lev_prefix) 10538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_lev_suffix_size = 4; 10548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else if(15 <= u4_lev_prefix) 10558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 10568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_lev_code += 15; 10578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_lev_suffix_size = u4_lev_prefix - 3; 10588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 10598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 10608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_lev_suffix_size = 0; 10618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 10628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S //HP_LEVEL_PREFIX 10638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(16 <= u4_lev_prefix) 10648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 10658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_lev_code += ((1 << (u4_lev_prefix - 3)) - 4096); 10668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 10678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u4_lev_suffix_size) 10688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 10698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S GETBITS(u4_lev_suffix, u4_bitstream_offset, pu4_bitstrm_buf, 10708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_lev_suffix_size); 10718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_lev_code += u4_lev_suffix; 10728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 10738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 10748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_abs_value = (u2_lev_code + 2) >> 1; 10758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 10768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* If Level code is odd, level is negative else positive */ 10778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 10788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_level_arr[i--] = (u2_lev_code & 1) ? -u2_abs_value : u2_abs_value; 10798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 10808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_suffix_len = (u2_abs_value > 3) ? 2 : 1; 10818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 10828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 10838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Now loop over the remaining levels */ 10848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 10858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S while(i >= 0) 10868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 10878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 10888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /***************************************************************/ 10898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Find leading zeros in next 32 bits */ 10908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /***************************************************************/ 10918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S FIND_ONE_IN_STREAM_32(u4_lev_prefix, u4_bitstream_offset, 10928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bitstrm_buf); 10938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 10948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_lev_suffix_size = 10958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (15 <= u4_lev_prefix) ? 10968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (u4_lev_prefix - 3) : u4_suffix_len; 10978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 10988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 10998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Compute level code using prefix and suffix */ 11008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 11018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S GETBITS(u4_lev_suffix, u4_bitstream_offset, pu4_bitstrm_buf, 11028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_lev_suffix_size); 11038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_lev_code = (MIN(u4_lev_prefix,15) << u4_suffix_len) 11048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + u4_lev_suffix; 11058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S //HP_LEVEL_PREFIX 11078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(16 <= u4_lev_prefix) 11088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 11098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_lev_code += ((1 << (u4_lev_prefix - 3)) - 4096); 11108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 11118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_abs_value = (u2_lev_code + 2) >> 1; 11128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 11148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* If Level code is odd, level is negative else positive */ 11158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 11168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_level_arr[i--] = 11178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (u2_lev_code & 1) ? -u2_abs_value : u2_abs_value; 11188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 11208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Increment suffix length if required */ 11218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 11228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_suffix_len += (u2_abs_value > (3 << (u4_suffix_len - 1))); 11238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 11248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /****************************************************************/ 11268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Decoding Levels Ends */ 11278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /****************************************************************/ 11288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 11298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u4_total_coeff < 4) 11318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 11328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_max_ldz = (4 - u4_total_coeff); 11338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S FIND_ONE_IN_STREAM_LEN(u4_total_zeroes, u4_bitstream_offset, 11348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bitstrm_buf, u4_max_ldz); 11358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 11368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 11378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_total_zeroes = 0; 11388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /**************************************************************/ 11408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Decode the runs and form the coefficient buffer */ 11418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /**************************************************************/ 11428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 11438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD8 *pu1_table_runbefore; 11448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_run; 11458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_scan_pos = (u4_total_coeff + u4_total_zeroes - 1); 11468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_zeroes_left = u4_total_zeroes; 11478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i = u4_total_coeff - 1; 11488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /**************************************************************/ 11508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Decoding Runs for 0 < zeros left <=6 */ 11518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /**************************************************************/ 11528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_table_runbefore = (UWORD8 *)gau1_ih264d_table_run_before; 11538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S while(u4_zeroes_left && i) 11548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 11558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_code; 11568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S NEXTBITS(u4_code, u4_bitstream_offset, pu4_bitstrm_buf, 3); 11578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_code = pu1_table_runbefore[u4_code + (u4_zeroes_left << 3)]; 11598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_run = u4_code >> 2; 11608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S FLUSHBITS(u4_bitstream_offset, (u4_code & 0x03)); 11628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S SET_BIT(ps_tu_4x4->u2_sig_coeff_map, u4_scan_pos); 11638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *pi2_coeff_data++ = i2_level_arr[i--]; 11648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_zeroes_left -= u4_run; 11658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_scan_pos -= (u4_run + 1); 11668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 11678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /**************************************************************/ 11688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Decoding Runs End */ 11698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /**************************************************************/ 11708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /**************************************************************/ 11728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Copy the remaining coefficients */ 11738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /**************************************************************/ 11748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S while(i >= 0) 11758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 11768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S SET_BIT(ps_tu_4x4->u2_sig_coeff_map, u4_scan_pos); 11778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *pi2_coeff_data++ = i2_level_arr[i--]; 11788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_scan_pos--; 11798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 11808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 11818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 11838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 offset; 11848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S offset = (UWORD8 *)pi2_coeff_data - (UWORD8 *)ps_tu_4x4; 11858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S offset = ALIGN4(offset); 11868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pv_parse_tu_coeff_data = (void *)((UWORD8 *)ps_dec->pv_parse_tu_coeff_data + offset); 11878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 11888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_bitstrm->u4_ofst = u4_bitstream_offset; 11908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 11918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*! 11938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ************************************************************************** 11948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \if Function name : CavlcParsingInvScanInvQuant \endif 11958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 11968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \brief 11978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * This function do cavlc parsing of coefficient tokens for any block 11988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * type except chromDc and depending 11998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * on whenther any coefficients to be parsed calls module 12008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * RestOfResidualBlockCavlc. 12018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 12028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \return 12038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Returns total number of non-zero coefficients. 12048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 12058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ************************************************************************** 12068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */ 12078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SWORD32 ih264d_cavlc_parse4x4coeff_n0to7(WORD16 *pi2_coeff_block, 12098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_isdc, /* is it a DC block */ 12108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 u4_n, 12118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S dec_struct_t *ps_dec, 12128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 *pu4_total_coeff) 12138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 12148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S dec_bit_stream_t *ps_bitstrm = ps_dec->ps_bitstrm; 12158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 *pu4_bitstrm_buf = ps_bitstrm->pu4_buffer; 12168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bitstream_offset = ps_bitstrm->u4_ofst; 12178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_code, u4_index, u4_ldz; 12188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD16 *pu2_code = (const UWORD16*)gau2_ih264d_code_gx; 12198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD16 *pu2_offset_num_vlc = 12208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (const UWORD16 *)gau2_ih264d_offset_num_vlc_tab; 12218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_offset_num_vlc = pu2_offset_num_vlc[u4_n]; 12228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UNUSED(pi2_coeff_block); 12258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *pu4_total_coeff = 0; 12268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S FIND_ONE_IN_STREAM_32(u4_ldz, u4_bitstream_offset, pu4_bitstrm_buf); 12278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S NEXTBITS(u4_index, u4_bitstream_offset, pu4_bitstrm_buf, 3); 12288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_index += (u4_ldz << 3); 12298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_index += u4_offset_num_vlc; 12308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_index = MIN(u4_index, 303); 12328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_code = pu2_code[u4_index]; 12338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S FLUSHBITS(u4_bitstream_offset, (u4_code & 0x03)); 12358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_bitstrm->u4_ofst = u4_bitstream_offset; 12368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *pu4_total_coeff = (u4_code >> 4); 12378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(*pu4_total_coeff) 12398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 12408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_trailing_ones, u4_offset, u4_total_coeff_tone; 12418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD8 *pu1_offset = 12428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (UWORD8 *)gau1_ih264d_total_coeff_fn_ptr_offset; 12438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 ret; 12448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_trailing_ones = ((u4_code >> 2) & 0x03); 12458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_offset = pu1_offset[*pu4_total_coeff - 1]; 12468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_total_coeff_tone = (*pu4_total_coeff << 16) | u4_trailing_ones; 12478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ret = ps_dec->pf_cavlc_4x4res_block[u4_offset](u4_isdc, 12498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_total_coeff_tone, 12508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_bitstrm); 12518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ret != 0) 12528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return ERROR_CAVLC_NUM_COEFF_T; 12538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 12548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return OK; 12568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 12578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SWORD32 ih264d_cavlc_parse4x4coeff_n8(WORD16 *pi2_coeff_block, 12598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_isdc, /* is it a DC block */ 12608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 u4_n, 12618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S dec_struct_t *ps_dec, 12628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 *pu4_total_coeff) 12638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 12648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S dec_bit_stream_t *ps_bitstrm = ps_dec->ps_bitstrm; 12668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 *pu4_bitstrm_buf = ps_bitstrm->pu4_buffer; 12678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bitstream_offset = ps_bitstrm->u4_ofst; 12688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_code; 12698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UNUSED(u4_n); 12708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UNUSED(pi2_coeff_block); 12718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S GETBITS(u4_code, u4_bitstream_offset, pu4_bitstrm_buf, 6); 12728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_bitstrm->u4_ofst = u4_bitstream_offset; 12738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *pu4_total_coeff = 0; 12748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u4_code != 3) 12768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 12778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_offset = (UWORD8 *)gau1_ih264d_total_coeff_fn_ptr_offset; 12788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_trailing_ones, u4_offset, u4_total_coeff_tone; 12798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *pu4_total_coeff = (u4_code >> 2) + 1; 12818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_trailing_ones = u4_code & 0x03; 12828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_offset = pu1_offset[*pu4_total_coeff - 1]; 12838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_total_coeff_tone = (*pu4_total_coeff << 16) | u4_trailing_ones; 12848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pf_cavlc_4x4res_block[u4_offset](u4_isdc, 12868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_total_coeff_tone, 12878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_bitstrm); 12888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 12898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return OK; 12918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 12928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*! 12948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ************************************************************************** 12958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \if Function name : ih264d_cavlc_parse_chroma_dc \endif 12968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 12978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \brief 12988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * This function do cavlc parsing of coefficient tokens chromDc block 12998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * and depending on whenther any coefficients to be parsed calls module 13008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * ih264d_rest_of_residual_cav_chroma_dc_block. 13018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 13028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \return 13038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Returns total number of non-zero coefficients. 13048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 13058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ************************************************************************** 13068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */ 13078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_cavlc_parse_chroma_dc(dec_mb_info_t *ps_cur_mb_info, 13098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 *pi2_coeff_block, 13108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S dec_bit_stream_t *ps_bitstrm, 13118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_scale_u, 13128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_scale_v, 13138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 i4_mb_inter_inc) 13148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 13158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_total_coeff, u4_trailing_ones, u4_total_coeff_tone, u4_code; 13168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 *pu4_bitstrm_buf = ps_bitstrm->pu4_buffer; 13178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bitstream_offset = ps_bitstrm->u4_ofst; 13188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD8 *pu1_cav_chromdc = (const UWORD8*)gau1_ih264d_cav_chromdc_vld; 13198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UNUSED(i4_mb_inter_inc); 13208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /******************************************************************/ 13218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Chroma DC Block for U component */ 13228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /******************************************************************/ 13238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S NEXTBITS(u4_code, u4_bitstream_offset, pu4_bitstrm_buf, 8); 13248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_code = pu1_cav_chromdc[u4_code]; 13268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S FLUSHBITS(u4_bitstream_offset, ((u4_code & 0x7) + 1)); 13288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_bitstrm->u4_ofst = u4_bitstream_offset; 13298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_total_coeff = (u4_code >> 5); 13318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u4_total_coeff) 13338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 13348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 i_z0, i_z1, i_z2, i_z3; 13358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S tu_sblk4x4_coeff_data_t *ps_tu_4x4; 13368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S dec_struct_t *ps_dec = (dec_struct_t *)ps_bitstrm->pv_codec_handle; 13378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 ai2_dc_coef[4]; 13388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 pu1_inv_scan[4] = 13398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 0, 1, 2, 3 }; 13408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 *pi2_coeff_data = 13418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (WORD16 *)ps_dec->pv_parse_tu_coeff_data; 13428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_tu_4x4 = (tu_sblk4x4_coeff_data_t *)ps_dec->pv_parse_tu_coeff_data; 13448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_trailing_ones = ((u4_code >> 3) & 0x3); 13468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_total_coeff_tone = (u4_total_coeff << 16) | u4_trailing_ones; 13478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264d_rest_of_residual_cav_chroma_dc_block(u4_total_coeff_tone, 13488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_bitstrm); 13498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ai2_dc_coef[0] = 0; 13518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ai2_dc_coef[1] = 0; 13528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ai2_dc_coef[2] = 0; 13538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ai2_dc_coef[3] = 0; 13548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264d_unpack_coeff4x4_dc_4x4blk(ps_tu_4x4, 13568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ai2_dc_coef, 13578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_inv_scan); 13588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*-------------------------------------------------------------------*/ 13598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Inverse 2x2 transform and scaling of chroma DC */ 13608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*-------------------------------------------------------------------*/ 13618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i_z0 = (ai2_dc_coef[0] + ai2_dc_coef[2]); 13628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i_z1 = (ai2_dc_coef[0] - ai2_dc_coef[2]); 13638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i_z2 = (ai2_dc_coef[1] - ai2_dc_coef[3]); 13648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i_z3 = (ai2_dc_coef[1] + ai2_dc_coef[3]); 13658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*-----------------------------------------------------------*/ 13678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Scaling and storing the values back */ 13688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*-----------------------------------------------------------*/ 13698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *pi2_coeff_data++ = ((i_z0 + i_z3) * u4_scale_u) >> 5; 13708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *pi2_coeff_data++ = ((i_z0 - i_z3) * u4_scale_u) >> 5; 13718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *pi2_coeff_data++ = ((i_z1 + i_z2) * u4_scale_u) >> 5; 13728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *pi2_coeff_data++ = ((i_z1 - i_z2) * u4_scale_u) >> 5; 13738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pv_parse_tu_coeff_data = (void *)pi2_coeff_data; 13758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S SET_BIT(ps_cur_mb_info->u1_yuv_dc_block_flag,1); 13778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 13788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /******************************************************************/ 13808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Chroma DC Block for V component */ 13818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /******************************************************************/ 13828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pi2_coeff_block += 64; 13838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bitstream_offset = ps_bitstrm->u4_ofst; 13848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S NEXTBITS(u4_code, u4_bitstream_offset, pu4_bitstrm_buf, 8); 13868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_code = pu1_cav_chromdc[u4_code]; 13888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S FLUSHBITS(u4_bitstream_offset, ((u4_code & 0x7) + 1)); 13908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_bitstrm->u4_ofst = u4_bitstream_offset; 13918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_total_coeff = (u4_code >> 5); 13938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u4_total_coeff) 13958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 13968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 i_z0, i_z1, i_z2, i_z3; 13978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S tu_sblk4x4_coeff_data_t *ps_tu_4x4; 13988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S dec_struct_t *ps_dec = (dec_struct_t *)ps_bitstrm->pv_codec_handle; 13998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 ai2_dc_coef[4]; 14008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 pu1_inv_scan[4] = 14018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 0, 1, 2, 3 }; 14028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 *pi2_coeff_data = 14038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (WORD16 *)ps_dec->pv_parse_tu_coeff_data; 14048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_tu_4x4 = (tu_sblk4x4_coeff_data_t *)ps_dec->pv_parse_tu_coeff_data; 14068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_trailing_ones = ((u4_code >> 3) & 0x3); 14088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_total_coeff_tone = (u4_total_coeff << 16) | u4_trailing_ones; 14098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264d_rest_of_residual_cav_chroma_dc_block(u4_total_coeff_tone, 14108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_bitstrm); 14118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ai2_dc_coef[0] = 0; 14138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ai2_dc_coef[1] = 0; 14148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ai2_dc_coef[2] = 0; 14158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ai2_dc_coef[3] = 0; 14168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264d_unpack_coeff4x4_dc_4x4blk(ps_tu_4x4, 14188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ai2_dc_coef, 14198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_inv_scan); 14208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*-------------------------------------------------------------------*/ 14228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Inverse 2x2 transform and scaling of chroma DC */ 14238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*-------------------------------------------------------------------*/ 14248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i_z0 = (ai2_dc_coef[0] + ai2_dc_coef[2]); 14258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i_z1 = (ai2_dc_coef[0] - ai2_dc_coef[2]); 14268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i_z2 = (ai2_dc_coef[1] - ai2_dc_coef[3]); 14278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i_z3 = (ai2_dc_coef[1] + ai2_dc_coef[3]); 14288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*-----------------------------------------------------------*/ 14308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Scaling and storing the values back */ 14318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*-----------------------------------------------------------*/ 14328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *pi2_coeff_data++ = ((i_z0 + i_z3) * u4_scale_v) >> 5; 14338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *pi2_coeff_data++ = ((i_z0 - i_z3) * u4_scale_v) >> 5; 14348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *pi2_coeff_data++ = ((i_z1 + i_z2) * u4_scale_v) >> 5; 14358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *pi2_coeff_data++ = ((i_z1 - i_z2) * u4_scale_v) >> 5; 14368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pv_parse_tu_coeff_data = (void *)pi2_coeff_data; 14388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S SET_BIT(ps_cur_mb_info->u1_yuv_dc_block_flag,2); 14408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 14418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 14428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 14448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 14458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264d_parse_pmb_ref_index_cavlc_range1 */ 14468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 14478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : This function does the Cavlc TEV range =1 parsing of */ 14488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* reference index for a P MB. Range is 1 when */ 14498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* num_ref_idx_active_minus1 is 0 */ 14508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 14518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : <What inputs does the function take?> */ 14528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Globals : <Does it use any global variables?> */ 14538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : <Describe how the function operates - include algorithm */ 14548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* description> */ 14558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : <What does the function produce?> */ 14568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : <What does the function return?> */ 14578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 14588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues : <List any issues or problems with this function> */ 14598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 14608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 14618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 14628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 14638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 19 09 2008 Jay Draft */ 14648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 14658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 14668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_parse_pmb_ref_index_cavlc_range1(UWORD32 u4_num_part, /* Number of partitions in MB */ 14678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S dec_bit_stream_t *ps_bitstrm, /* Pointer to bitstream Structure. */ 14688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 *pi1_ref_idx, /* pointer to reference index array */ 14698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_num_ref_idx_active_minus1 /* Not used for range 1 */ 14708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ) 14718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 14728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_i; 14738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 *pu4_bitstrm_buf = ps_bitstrm->pu4_buffer; 14748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 *pu4_bitstream_off = &ps_bitstrm->u4_ofst; 14758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UNUSED(u4_num_ref_idx_active_minus1); 14768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(u4_i = 0; u4_i < u4_num_part; u4_i++) 14778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 14788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_ref_idx; 14798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_ref_idx = ih264d_tev_range1(pu4_bitstream_off, pu4_bitstrm_buf); 14808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Storing Reference Idx Information */ 14828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pi1_ref_idx[u4_i] = (WORD8)u4_ref_idx; 14838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 14848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 14858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 14878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 14888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264d_parse_pmb_ref_index_cavlc */ 14898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 14908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : This function does the Cavlc TEV range > 1 parsing of */ 14918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* reference index for a P MB. */ 14928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Range > 1 when num_ref_idx_active_minus1 > 0 */ 14938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 14948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : <What inputs does the function take?> */ 14958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Globals : <Does it use any global variables?> */ 14968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : <Describe how the function operates - include algorithm */ 14978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* description> */ 14988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : <What does the function produce?> */ 14998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : <What does the function return?> */ 15008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 15018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues : <List any issues or problems with this function> */ 15028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 15038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 15048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 15058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 15068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 19 09 2008 Jay Draft */ 15078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 15088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 15098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 15108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SWORD32 ih264d_parse_pmb_ref_index_cavlc(UWORD32 u4_num_part, /* Number of partitions in MB */ 15118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S dec_bit_stream_t *ps_bitstrm, /* Pointer to bitstream Structure. */ 15128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 *pi1_ref_idx, /* pointer to reference index array */ 15138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_num_ref_idx_active_minus1 /* Number of active references - 1 */ 15148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ) 15158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 15168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_i; 15178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 *pu4_bitstrm_buf = ps_bitstrm->pu4_buffer; 15188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 *pu4_bitstream_off = &ps_bitstrm->u4_ofst; 15198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 15208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(u4_i = 0; u4_i < u4_num_part; u4_i++) 15218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 15228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_ref_idx; 15238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S//Inlined ih264d_uev 15248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bitstream_offset = *pu4_bitstream_off; 15258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_word, u4_ldz; 15268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 15278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /***************************************************************/ 15288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Find leading zeros in next 32 bits */ 15298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /***************************************************************/ 15308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S NEXTBITS_32(u4_word, u4_bitstream_offset, pu4_bitstrm_buf); 15318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_ldz = CLZ(u4_word); 15328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Flush the ps_bitstrm */ 15338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bitstream_offset += (u4_ldz + 1); 15348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Read the suffix from the ps_bitstrm */ 15358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_word = 0; 15368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u4_ldz) 15378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S GETBITS(u4_word, u4_bitstream_offset, pu4_bitstrm_buf, u4_ldz); 15388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *pu4_bitstream_off = u4_bitstream_offset; 15398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_ref_idx = ((1 << u4_ldz) + u4_word - 1); 15408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S//Inlined ih264d_uev 15418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 15428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u4_ref_idx > u4_num_ref_idx_active_minus1) 15438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return ERROR_REF_IDX; 15448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 15458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Storing Reference Idx Information */ 15468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pi1_ref_idx[u4_i] = (WORD8)u4_ref_idx; 15478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 15488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return OK; 15498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 15508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 15518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 15528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 15538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264d_parse_bmb_ref_index_cavlc_range1 */ 15548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 15558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : This function does the Cavlc TEV range =1 parsing of */ 15568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* reference index for a B MB. Range is 1 when */ 15578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* num_ref_idx_active_minus1 is 0 */ 15588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 15598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : <What inputs does the function take?> */ 15608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Globals : <Does it use any global variables?> */ 15618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : <Describe how the function operates - include algorithm */ 15628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* description> */ 15638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : <What does the function produce?> */ 15648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : <What does the function return?> */ 15658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 15668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues : <List any issues or problems with this function> */ 15678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 15688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 15698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 15708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 15718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 19 09 2008 Jay Draft */ 15728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 15738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 15748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_parse_bmb_ref_index_cavlc_range1(UWORD32 u4_num_part, /* Number of partitions in MB */ 15758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S dec_bit_stream_t *ps_bitstrm, /* Pointer to bitstream Structure. */ 15768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 *pi1_ref_idx, /* pointer to reference index array */ 15778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_num_ref_idx_active_minus1 /* Not used for range 1 */ 15788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ) 15798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 15808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_i; 15818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 *pu4_bitstrm_buf = ps_bitstrm->pu4_buffer; 15828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 *pu4_bitstream_off = &ps_bitstrm->u4_ofst; 15838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UNUSED(u4_num_ref_idx_active_minus1); 15848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(u4_i = 0; u4_i < u4_num_part; u4_i++) 15858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 15868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(pi1_ref_idx[u4_i] > -1) 15878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 15888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_ref_idx; 15898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 15908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_ref_idx = ih264d_tev_range1(pu4_bitstream_off, pu4_bitstrm_buf); 15918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 15928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Storing Reference Idx Information */ 15938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pi1_ref_idx[u4_i] = (WORD8)u4_ref_idx; 15948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 15958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 15968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 15978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 15988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 15998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 16008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264d_parse_bmb_ref_index_cavlc */ 16018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 16028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : This function does the Cavlc TEV range > 1 parsing of */ 16038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* reference index for a B MB. */ 16048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Range > 1 when num_ref_idx_active_minus1 > 0 */ 16058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 16068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : <What inputs does the function take?> */ 16078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Globals : <Does it use any global variables?> */ 16088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : <Describe how the function operates - include algorithm */ 16098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* description> */ 16108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : <What does the function produce?> */ 16118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : <What does the function return?> */ 16128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 16138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues : <List any issues or problems with this function> */ 16148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 16158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 16168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 16178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 16188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 19 09 2008 Jay Draft */ 16198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 16208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 16218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SWORD32 ih264d_parse_bmb_ref_index_cavlc(UWORD32 u4_num_part, /* Number of partitions in MB */ 16228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S dec_bit_stream_t *ps_bitstrm, /* Pointer to bitstream Structure. */ 16238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 *pi1_ref_idx, /* pointer to reference index array */ 16248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_num_ref_idx_active_minus1 /* Number of active references - 1 */ 16258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ) 16268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 16278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_i; 16288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 *pu4_bitstrm_buf = ps_bitstrm->pu4_buffer; 16298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 *pu4_bitstream_off = &ps_bitstrm->u4_ofst; 16308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 16318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(u4_i = 0; u4_i < u4_num_part; u4_i++) 16328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 16338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(pi1_ref_idx[u4_i] > -1) 16348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 16358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_ref_idx; 16368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S//inlining ih264d_uev 16378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bitstream_offset = *pu4_bitstream_off; 16388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_word, u4_ldz; 16398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 16408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /***************************************************************/ 16418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Find leading zeros in next 32 bits */ 16428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /***************************************************************/ 16438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S NEXTBITS_32(u4_word, u4_bitstream_offset, pu4_bitstrm_buf); 16448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_ldz = CLZ(u4_word); 16458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Flush the ps_bitstrm */ 16468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bitstream_offset += (u4_ldz + 1); 16478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Read the suffix from the ps_bitstrm */ 16488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_word = 0; 16498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u4_ldz) 16508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S GETBITS(u4_word, u4_bitstream_offset, pu4_bitstrm_buf, u4_ldz); 16518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *pu4_bitstream_off = u4_bitstream_offset; 16528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_ref_idx = ((1 << u4_ldz) + u4_word - 1); 16538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S//inlining ih264d_uev 16548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u4_ref_idx > u4_num_ref_idx_active_minus1) 16558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return ERROR_REF_IDX; 16568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 16578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Storing Reference Idx Information */ 16588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pi1_ref_idx[u4_i] = (WORD8)u4_ref_idx; 16598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 16608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 16618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return OK; 16628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 16638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 16648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 16658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264d_cavlc_parse_8x8block_both_available */ 16668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 16678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : This function does the residual parsing of 4 subblocks */ 16688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* in a 8x8 block when both top and left are available */ 16698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 16708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : pi2_coeff_block : pointer to residual block where */ 16718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* decoded and inverse scan coefficients are updated */ 16728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 16738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* u4_sub_block_strd : indicates the number of sublocks */ 16748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* in a row. It is 4 for luma and 2 for chroma. */ 16758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 16768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* u4_isdc : required to indicate 4x4 parse modules if the */ 16778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* current Mb is I_16x16/chroma DC coded. */ 16788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 16798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* ps_dec : pointer to Decstruct (decoder context) */ 16808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 16818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* pu1_top_nnz : top nnz pointer */ 16828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 16838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* pu1_left_nnz : left nnz pointer */ 16848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 16858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Globals : No */ 16868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : Parsing for four subblocks in unrolled, top and left nnz */ 16878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* are updated on the fly. csbp is set in accordance to */ 16888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* decoded numcoeff for the subblock index in raster order */ 16898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 16908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : The updated residue buffer, nnzs and csbp current block */ 16918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 16928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : Returns the coded sub block pattern csbp for the block */ 16938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 16948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues : <List any issues or problems with this function> */ 16958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 16968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 16978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 16988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 16998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 09 10 2008 Jay Draft */ 17008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 17018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 17028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SWORD32 ih264d_cavlc_parse_8x8block_both_available(WORD16 *pi2_coeff_block, 17038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_sub_block_strd, 17048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_isdc, 17058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S dec_struct_t * ps_dec, 17068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_top_nnz, 17078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_left_nnz, 17088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_tran_form8x8, 17098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_mb_field_decodingflag, 17108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 *pu4_csbp) 17118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 17128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_num_coeff, u4_n, u4_subblock_coded; 17138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_top0, u4_top1; 17148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 *pu4_dummy; 17158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 (**pf_cavlc_parse4x4coeff)(WORD16 *pi2_coeff_block, 17168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_isdc, 17178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 u4_n, 17188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S struct _DecStruct *ps_dec, 17198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 *pu4_dummy) = 17208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pf_cavlc_parse4x4coeff; 17218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_idx = 0; 17228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *puc_temp; 17238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 ret; 17248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 17258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *pu4_csbp = 0; 17268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* need to change the inverse scan matrices here */ 17278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S puc_temp = ps_dec->pu1_inv_scan; 17288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 17298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*------------------------------------------------------*/ 17308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Residual 4x4 decoding: SubBlock 0 */ 17318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*------------------------------------------------------*/ 17328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_tran_form8x8) 17338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 17348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!u1_mb_field_decodingflag) 17358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 17368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pu1_inv_scan = 17378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (UWORD8*)gau1_ih264d_inv_scan_prog8x8_cavlc[0]; 17388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 17398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 17408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 17418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pu1_inv_scan = 17428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (UWORD8*)gau1_ih264d_inv_scan_int8x8_cavlc[0]; 17438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 17448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 17458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_n = (pu1_top_nnz[0] + pu1_left_nnz[0] + 1) >> 1; 17468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ret = pf_cavlc_parse4x4coeff[(u4_n > 7)](pi2_coeff_block, u4_isdc, 17478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_n, ps_dec, &u4_num_coeff); 17488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ret != OK) 17498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return ret; 17508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 17518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_top0 = u4_num_coeff; 17528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_subblock_coded = (u4_num_coeff != 0); 17538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S INSERT_BIT(*pu4_csbp, u4_idx, u4_subblock_coded); 17548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 17558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*------------------------------------------------------*/ 17568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Residual 4x4 decoding: SubBlock 1 */ 17578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*------------------------------------------------------*/ 17588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_idx++; 17598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_tran_form8x8) 17608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 17618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!u1_mb_field_decodingflag) 17628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 17638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pu1_inv_scan = 17648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (UWORD8*)gau1_ih264d_inv_scan_prog8x8_cavlc[1]; 17658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 17668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 17678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 17688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pu1_inv_scan = 17698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (UWORD8*)gau1_ih264d_inv_scan_int8x8_cavlc[1]; 17708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 17718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 17728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 17738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 17748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pi2_coeff_block += NUM_COEFFS_IN_4x4BLK; 17758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 17768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_n = (pu1_top_nnz[1] + u4_num_coeff + 1) >> 1; 17778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ret = pf_cavlc_parse4x4coeff[(u4_n > 7)](pi2_coeff_block, u4_isdc, 17788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_n, ps_dec, &u4_num_coeff); 17798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ret != OK) 17808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return ret; 17818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 17828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_top1 = pu1_left_nnz[0] = u4_num_coeff; 17838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_subblock_coded = (u4_num_coeff != 0); 17848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S INSERT_BIT(*pu4_csbp, u4_idx, u4_subblock_coded); 17858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 17868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*------------------------------------------------------*/ 17878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Residual 4x4 decoding: SubBlock 2 */ 17888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*------------------------------------------------------*/ 17898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_idx += (u4_sub_block_strd - 1); 17908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_tran_form8x8) 17918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 17928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!u1_mb_field_decodingflag) 17938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 17948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pu1_inv_scan = 17958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (UWORD8*)gau1_ih264d_inv_scan_prog8x8_cavlc[2]; 17968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 17978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 17988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 17998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pu1_inv_scan = 18008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (UWORD8*)gau1_ih264d_inv_scan_int8x8_cavlc[2]; 18018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 18028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 18038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 18048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 18058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pi2_coeff_block += ((u4_sub_block_strd - 1) * NUM_COEFFS_IN_4x4BLK); 18068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 18078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_n = (u4_top0 + pu1_left_nnz[1] + 1) >> 1; 18088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ret = pf_cavlc_parse4x4coeff[(u4_n > 7)](pi2_coeff_block, u4_isdc, 18098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_n, ps_dec, &u4_num_coeff); 18108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ret != OK) 18118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return ret; 18128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 18138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_top_nnz[0] = u4_num_coeff; 18148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_subblock_coded = (u4_num_coeff != 0); 18158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S INSERT_BIT(*pu4_csbp, u4_idx, u4_subblock_coded); 18168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 18178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*------------------------------------------------------*/ 18188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Residual 4x4 decoding: SubBlock 3 */ 18198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*------------------------------------------------------*/ 18208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_idx++; 18218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_tran_form8x8) 18228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 18238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!u1_mb_field_decodingflag) 18248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 18258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pu1_inv_scan = 18268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (UWORD8*)gau1_ih264d_inv_scan_prog8x8_cavlc[3]; 18278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 18288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 18298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 18308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pu1_inv_scan = 18318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (UWORD8*)gau1_ih264d_inv_scan_int8x8_cavlc[3]; 18328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 18338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 18348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 18358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 18368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pi2_coeff_block += NUM_COEFFS_IN_4x4BLK; 18378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 18388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_n = (u4_top1 + u4_num_coeff + 1) >> 1; 18398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ret = pf_cavlc_parse4x4coeff[(u4_n > 7)](pi2_coeff_block, u4_isdc, 18408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_n, ps_dec, &u4_num_coeff); 18418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ret != OK) 18428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return ret; 18438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 18448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_top_nnz[1] = pu1_left_nnz[1] = u4_num_coeff; 18458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_subblock_coded = (u4_num_coeff != 0); 18468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S INSERT_BIT(*pu4_csbp, u4_idx, u4_subblock_coded); 18478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 18488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pu1_inv_scan = puc_temp; 18498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 18508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return OK; 18518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 18528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 18538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 18548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 18558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264d_cavlc_parse_8x8block_left_available */ 18568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 18578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : This function does the residual parsing of 4 subblocks */ 18588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* in a 8x8 block when only left is available for block */ 18598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 18608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : pi2_coeff_block : pointer to residual block where */ 18618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* decoded and inverse scan coefficients are updated */ 18628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 18638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* u4_sub_block_strd : indicates the number of sublocks */ 18648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* in a row. It is 4 for luma and 2 for chroma. */ 18658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 18668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* u4_isdc : required to indicate 4x4 parse modules if the */ 18678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* current Mb is I_16x16/chroma DC coded. */ 18688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 18698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* ps_dec : pointer to Decstruct (decoder context) */ 18708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 18718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* pu1_top_nnz : top nnz pointer */ 18728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 18738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* pu1_left_nnz : left nnz pointer */ 18748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 18758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Globals : No */ 18768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : Parsing for four subblocks in unrolled, top and left nnz */ 18778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* are updated on the fly. csbp is set in accordance to */ 18788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* decoded numcoeff for the subblock index in raster order */ 18798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 18808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : The updated residue buffer, nnzs and csbp current block */ 18818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 18828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : Returns the coded sub block pattern csbp for the block */ 18838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 18848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues : <List any issues or problems with this function> */ 18858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 18868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 18878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 18888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 18898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 09 10 2008 Jay Draft */ 18908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 18918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 18928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SWORD32 ih264d_cavlc_parse_8x8block_left_available(WORD16 *pi2_coeff_block, 18938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_sub_block_strd, 18948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_isdc, 18958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S dec_struct_t * ps_dec, 18968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_top_nnz, 18978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_left_nnz, 18988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_tran_form8x8, 18998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_mb_field_decodingflag, 19008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 *pu4_csbp) 19018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 19028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_num_coeff, u4_n, u4_subblock_coded; 19038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_top0, u4_top1; 19048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 *pu4_dummy; 19058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 (**pf_cavlc_parse4x4coeff)(WORD16 *pi2_coeff_block, 19068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_isdc, 19078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 u4_n, 19088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S struct _DecStruct *ps_dec, 19098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 *pu4_dummy) = 19108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pf_cavlc_parse4x4coeff; 19118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_idx = 0; 19128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *puc_temp; 19138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 ret; 19148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 19158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *pu4_csbp = 0; 19168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S puc_temp = ps_dec->pu1_inv_scan; 19178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 19188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*------------------------------------------------------*/ 19198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Residual 4x4 decoding: SubBlock 0 */ 19208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*------------------------------------------------------*/ 19218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_tran_form8x8) 19228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 19238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!u1_mb_field_decodingflag) 19248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 19258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pu1_inv_scan = 19268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (UWORD8*)gau1_ih264d_inv_scan_prog8x8_cavlc[0]; 19278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 19288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 19298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 19308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pu1_inv_scan = 19318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (UWORD8*)gau1_ih264d_inv_scan_int8x8_cavlc[0]; 19328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 19338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 19348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_n = pu1_left_nnz[0]; 19358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ret = pf_cavlc_parse4x4coeff[(u4_n > 7)](pi2_coeff_block, u4_isdc, 19368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_n, ps_dec, &u4_num_coeff); 19378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ret != OK) 19388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return ret; 19398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 19408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_top0 = u4_num_coeff; 19418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_subblock_coded = (u4_num_coeff != 0); 19428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S INSERT_BIT(*pu4_csbp, u4_idx, u4_subblock_coded); 19438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 19448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*------------------------------------------------------*/ 19458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Residual 4x4 decoding: SubBlock 1 */ 19468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*------------------------------------------------------*/ 19478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_idx++; 19488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_tran_form8x8) 19498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 19508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!u1_mb_field_decodingflag) 19518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 19528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pu1_inv_scan = 19538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (UWORD8*)gau1_ih264d_inv_scan_prog8x8_cavlc[1]; 19548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 19558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 19568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 19578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pu1_inv_scan = 19588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (UWORD8*)gau1_ih264d_inv_scan_int8x8_cavlc[1]; 19598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 19608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 19618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 19628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 19638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pi2_coeff_block += NUM_COEFFS_IN_4x4BLK; 19648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 19658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_n = u4_num_coeff; 19668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ret = pf_cavlc_parse4x4coeff[(u4_n > 7)](pi2_coeff_block, u4_isdc, 19678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_n, ps_dec, &u4_num_coeff); 19688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ret != OK) 19698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return ret; 19708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 19718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_top1 = pu1_left_nnz[0] = u4_num_coeff; 19728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_subblock_coded = (u4_num_coeff != 0); 19738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S INSERT_BIT(*pu4_csbp, u4_idx, u4_subblock_coded); 19748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 19758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*------------------------------------------------------*/ 19768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Residual 4x4 decoding: SubBlock 2 */ 19778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*------------------------------------------------------*/ 19788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_idx += (u4_sub_block_strd - 1); 19798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_tran_form8x8) 19808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 19818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!u1_mb_field_decodingflag) 19828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 19838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pu1_inv_scan = 19848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (UWORD8*)gau1_ih264d_inv_scan_prog8x8_cavlc[2]; 19858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 19868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 19878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 19888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pu1_inv_scan = 19898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (UWORD8*)gau1_ih264d_inv_scan_int8x8_cavlc[2]; 19908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 19918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 19928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 19938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 19948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pi2_coeff_block += ((u4_sub_block_strd - 1) * NUM_COEFFS_IN_4x4BLK); 19958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 19968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_n = (u4_top0 + pu1_left_nnz[1] + 1) >> 1; 19978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ret = pf_cavlc_parse4x4coeff[(u4_n > 7)](pi2_coeff_block, u4_isdc, 19988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_n, ps_dec, &u4_num_coeff); 19998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ret != OK) 20008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return ret; 20018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 20028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_top_nnz[0] = u4_num_coeff; 20038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_subblock_coded = (u4_num_coeff != 0); 20048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S INSERT_BIT(*pu4_csbp, u4_idx, u4_subblock_coded); 20058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 20068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*------------------------------------------------------*/ 20078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Residual 4x4 decoding: SubBlock 3 */ 20088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*------------------------------------------------------*/ 20098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_idx++; 20108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_tran_form8x8) 20118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 20128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!u1_mb_field_decodingflag) 20138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 20148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pu1_inv_scan = 20158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (UWORD8*)gau1_ih264d_inv_scan_prog8x8_cavlc[3]; 20168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 20178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 20188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 20198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pu1_inv_scan = 20208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (UWORD8*)gau1_ih264d_inv_scan_int8x8_cavlc[3]; 20218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 20228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 20238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 20248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 20258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pi2_coeff_block += NUM_COEFFS_IN_4x4BLK; 20268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 20278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_n = (u4_top1 + u4_num_coeff + 1) >> 1; 20288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ret = pf_cavlc_parse4x4coeff[(u4_n > 7)](pi2_coeff_block, u4_isdc, 20298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_n, ps_dec, &u4_num_coeff); 20308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ret != OK) 20318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return ret; 20328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 20338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_top_nnz[1] = pu1_left_nnz[1] = u4_num_coeff; 20348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_subblock_coded = (u4_num_coeff != 0); 20358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S INSERT_BIT(*pu4_csbp, u4_idx, u4_subblock_coded); 20368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 20378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pu1_inv_scan = puc_temp; 20388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 20398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return OK; 20408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 20418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 20428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 20438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 20448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264d_cavlc_parse_8x8block_top_available */ 20458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 20468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : This function does the residual parsing of 4 subblocks */ 20478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* in a 8x8 block when only top is available for block */ 20488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 20498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : pi2_coeff_block : pointer to residual block where */ 20508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* decoded and inverse scan coefficients are updated */ 20518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 20528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* u4_sub_block_strd : indicates the number of sublocks */ 20538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* in a row. It is 4 for luma and 2 for chroma. */ 20548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 20558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* u4_isdc : required to indicate 4x4 parse modules if the */ 20568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* current Mb is I_16x16/chroma DC coded. */ 20578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 20588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* ps_dec : pointer to Decstruct (decoder context) */ 20598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 20608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* pu1_top_nnz : top nnz pointer */ 20618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 20628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* pu1_left_nnz : left nnz pointer */ 20638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 20648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Globals : No */ 20658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : Parsing for four subblocks in unrolled, top and left nnz */ 20668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* are updated on the fly. csbp is set in accordance to */ 20678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* decoded numcoeff for the subblock index in raster order */ 20688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 20698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : The updated residue buffer, nnzs and csbp current block */ 20708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 20718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : Returns the coded sub block pattern csbp for the block */ 20728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 20738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues : <List any issues or problems with this function> */ 20748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 20758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 20768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 20778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 20788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 09 10 2008 Jay Draft */ 20798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 20808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 20818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SWORD32 ih264d_cavlc_parse_8x8block_top_available(WORD16 *pi2_coeff_block, 20828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_sub_block_strd, 20838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_isdc, 20848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S dec_struct_t * ps_dec, 20858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_top_nnz, 20868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_left_nnz, 20878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_tran_form8x8, 20888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_mb_field_decodingflag, 20898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 *pu4_csbp) 20908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 20918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_num_coeff, u4_n, u4_subblock_coded; 20928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_top0, u4_top1; 20938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 *pu4_dummy; 20948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 (**pf_cavlc_parse4x4coeff)(WORD16 *pi2_coeff_block, 20958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_isdc, 20968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 u4_n, 20978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S struct _DecStruct *ps_dec, 20988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 *pu4_dummy) = 20998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pf_cavlc_parse4x4coeff; 21008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_idx = 0; 21018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *puc_temp; 21028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 ret; 21038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 21048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *pu4_csbp = 0; 21058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S puc_temp = ps_dec->pu1_inv_scan; 21068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 21078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*------------------------------------------------------*/ 21088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Residual 4x4 decoding: SubBlock 0 */ 21098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*------------------------------------------------------*/ 21108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_tran_form8x8) 21118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 21128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!u1_mb_field_decodingflag) 21138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 21148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pu1_inv_scan = 21158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (UWORD8*)gau1_ih264d_inv_scan_prog8x8_cavlc[0]; 21168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 21178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 21188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 21198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pu1_inv_scan = 21208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (UWORD8*)gau1_ih264d_inv_scan_int8x8_cavlc[0]; 21218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 21228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 21238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_n = pu1_top_nnz[0]; 21248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ret = pf_cavlc_parse4x4coeff[(u4_n > 7)](pi2_coeff_block, u4_isdc, 21258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_n, ps_dec, &u4_num_coeff); 21268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ret != OK) 21278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return ret; 21288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 21298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_top0 = u4_num_coeff; 21308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_subblock_coded = (u4_num_coeff != 0); 21318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S INSERT_BIT(*pu4_csbp, u4_idx, u4_subblock_coded); 21328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 21338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*------------------------------------------------------*/ 21348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Residual 4x4 decoding: SubBlock 1 */ 21358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*------------------------------------------------------*/ 21368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_idx++; 21378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_tran_form8x8) 21388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 21398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!u1_mb_field_decodingflag) 21408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 21418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pu1_inv_scan = 21428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (UWORD8*)gau1_ih264d_inv_scan_prog8x8_cavlc[1]; 21438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 21448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 21458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 21468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pu1_inv_scan = 21478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (UWORD8*)gau1_ih264d_inv_scan_int8x8_cavlc[1]; 21488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 21498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 21508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 21518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 21528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pi2_coeff_block += NUM_COEFFS_IN_4x4BLK; 21538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 21548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_n = (pu1_top_nnz[1] + u4_num_coeff + 1) >> 1; 21558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ret = pf_cavlc_parse4x4coeff[(u4_n > 7)](pi2_coeff_block, u4_isdc, 21568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_n, ps_dec, &u4_num_coeff); 21578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ret != OK) 21588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return ret; 21598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 21608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_top1 = pu1_left_nnz[0] = u4_num_coeff; 21618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_subblock_coded = (u4_num_coeff != 0); 21628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S INSERT_BIT(*pu4_csbp, u4_idx, u4_subblock_coded); 21638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 21648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*------------------------------------------------------*/ 21658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Residual 4x4 decoding: SubBlock 2 */ 21668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*------------------------------------------------------*/ 21678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_idx += (u4_sub_block_strd - 1); 21688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_tran_form8x8) 21698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 21708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!u1_mb_field_decodingflag) 21718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 21728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pu1_inv_scan = 21738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (UWORD8*)gau1_ih264d_inv_scan_prog8x8_cavlc[2]; 21748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 21758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 21768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 21778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pu1_inv_scan = 21788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (UWORD8*)gau1_ih264d_inv_scan_int8x8_cavlc[2]; 21798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 21808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 21818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 21828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 21838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pi2_coeff_block += ((u4_sub_block_strd - 1) * NUM_COEFFS_IN_4x4BLK); 21848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 21858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_n = u4_top0; 21868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ret = pf_cavlc_parse4x4coeff[(u4_n > 7)](pi2_coeff_block, u4_isdc, 21878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_n, ps_dec, &u4_num_coeff); 21888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ret != OK) 21898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return ret; 21908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 21918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_top_nnz[0] = u4_num_coeff; 21928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_subblock_coded = (u4_num_coeff != 0); 21938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S INSERT_BIT(*pu4_csbp, u4_idx, u4_subblock_coded); 21948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 21958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*------------------------------------------------------*/ 21968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Residual 4x4 decoding: SubBlock 3 */ 21978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*------------------------------------------------------*/ 21988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_idx++; 21998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_tran_form8x8) 22008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 22018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!u1_mb_field_decodingflag) 22028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 22038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pu1_inv_scan = 22048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (UWORD8*)gau1_ih264d_inv_scan_prog8x8_cavlc[3]; 22058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 22068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 22078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 22088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pu1_inv_scan = 22098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (UWORD8*)gau1_ih264d_inv_scan_int8x8_cavlc[3]; 22108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 22118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 22128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 22138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 22148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pi2_coeff_block += NUM_COEFFS_IN_4x4BLK; 22158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 22168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_n = (u4_top1 + u4_num_coeff + 1) >> 1; 22178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ret = pf_cavlc_parse4x4coeff[(u4_n > 7)](pi2_coeff_block, u4_isdc, 22188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_n, ps_dec, &u4_num_coeff); 22198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ret != OK) 22208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return ret; 22218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 22228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_top_nnz[1] = pu1_left_nnz[1] = u4_num_coeff; 22238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_subblock_coded = (u4_num_coeff != 0); 22248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S INSERT_BIT(*pu4_csbp, u4_idx, u4_subblock_coded); 22258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 22268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pu1_inv_scan = puc_temp; 22278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 22288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return OK; 22298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 22308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 22318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 22328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 22338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264d_cavlc_parse_8x8block_none_available */ 22348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 22358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : This function does the residual parsing of 4 subblocks */ 22368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* in a 8x8 block when none of the neigbours are available */ 22378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 22388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : pi2_coeff_block : pointer to residual block where */ 22398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* decoded and inverse scan coefficients are updated */ 22408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 22418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* u4_sub_block_strd : indicates the number of sublocks */ 22428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* in a row. It is 4 for luma and 2 for chroma. */ 22438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 22448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* u4_isdc : required to indicate 4x4 parse modules if the */ 22458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* current Mb is I_16x16/chroma DC coded. */ 22468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 22478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* ps_dec : pointer to Decstruct (decoder context) */ 22488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 22498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* pu1_top_nnz : top nnz pointer */ 22508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 22518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* pu1_left_nnz : left nnz pointer */ 22528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 22538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Globals : No */ 22548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : Parsing for four subblocks in unrolled, top and left nnz */ 22558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* are updated on the fly. csbp is set in accordance to */ 22568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* decoded numcoeff for the subblock index in raster order */ 22578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 22588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : The updated residue buffer, nnzs and csbp current block */ 22598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 22608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : Returns the coded sub block pattern csbp for the block */ 22618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 22628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues : <List any issues or problems with this function> */ 22638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 22648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 22658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 22668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 22678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 09 10 2008 Jay Draft */ 22688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 22698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 22708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SWORD32 ih264d_cavlc_parse_8x8block_none_available(WORD16 *pi2_coeff_block, 22718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_sub_block_strd, 22728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_isdc, 22738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S dec_struct_t * ps_dec, 22748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_top_nnz, 22758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_left_nnz, 22768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_tran_form8x8, 22778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_mb_field_decodingflag, 22788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 *pu4_csbp) 22798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 22808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_num_coeff, u4_n, u4_subblock_coded; 22818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_top0, u4_top1; 22828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 *pu4_dummy; 22838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 (**pf_cavlc_parse4x4coeff)(WORD16 *pi2_coeff_block, 22848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_isdc, 22858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 u4_n, 22868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S struct _DecStruct *ps_dec, 22878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 *pu4_dummy) = 22888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pf_cavlc_parse4x4coeff; 22898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_idx = 0; 22908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *puc_temp; 22918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 ret; 22928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 22938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *pu4_csbp = 0; 22948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S puc_temp = ps_dec->pu1_inv_scan; 22958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 22968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*------------------------------------------------------*/ 22978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Residual 4x4 decoding: SubBlock 0 */ 22988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*------------------------------------------------------*/ 22998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_tran_form8x8) 23008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 23018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!u1_mb_field_decodingflag) 23028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 23038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pu1_inv_scan = 23048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (UWORD8*)gau1_ih264d_inv_scan_prog8x8_cavlc[0]; 23058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 23068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 23078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 23088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pu1_inv_scan = 23098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (UWORD8*)gau1_ih264d_inv_scan_int8x8_cavlc[0]; 23108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 23118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 23128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ret = pf_cavlc_parse4x4coeff[0](pi2_coeff_block, u4_isdc, 0, 23138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec, &u4_num_coeff); 23148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ret != OK) 23158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return ret; 23168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 23178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_top0 = u4_num_coeff; 23188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_subblock_coded = (u4_num_coeff != 0); 23198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S INSERT_BIT(*pu4_csbp, u4_idx, u4_subblock_coded); 23208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 23218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*------------------------------------------------------*/ 23228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Residual 4x4 decoding: SubBlock 1 */ 23238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*------------------------------------------------------*/ 23248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_idx++; 23258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_tran_form8x8) 23268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 23278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!u1_mb_field_decodingflag) 23288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 23298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pu1_inv_scan = 23308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (UWORD8*)gau1_ih264d_inv_scan_prog8x8_cavlc[1]; 23318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 23328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 23338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 23348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pu1_inv_scan = 23358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (UWORD8*)gau1_ih264d_inv_scan_int8x8_cavlc[1]; 23368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 23378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 23388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 23398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 23408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pi2_coeff_block += NUM_COEFFS_IN_4x4BLK; 23418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 23428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_n = u4_num_coeff; 23438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ret = pf_cavlc_parse4x4coeff[(u4_n > 7)](pi2_coeff_block, u4_isdc, 23448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_n, ps_dec, &u4_num_coeff); 23458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ret != OK) 23468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return ret; 23478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 23488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_top1 = pu1_left_nnz[0] = u4_num_coeff; 23498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_subblock_coded = (u4_num_coeff != 0); 23508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S INSERT_BIT(*pu4_csbp, u4_idx, u4_subblock_coded); 23518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 23528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*------------------------------------------------------*/ 23538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Residual 4x4 decoding: SubBlock 2 */ 23548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*------------------------------------------------------*/ 23558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_idx += (u4_sub_block_strd - 1); 23568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_tran_form8x8) 23578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 23588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!u1_mb_field_decodingflag) 23598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 23608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pu1_inv_scan = 23618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (UWORD8*)gau1_ih264d_inv_scan_prog8x8_cavlc[2]; 23628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 23638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 23648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 23658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pu1_inv_scan = 23668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (UWORD8*)gau1_ih264d_inv_scan_int8x8_cavlc[2]; 23678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 23688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 23698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 23708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 23718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pi2_coeff_block += ((u4_sub_block_strd - 1) * NUM_COEFFS_IN_4x4BLK); 23728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 23738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_n = u4_top0; 23748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ret = pf_cavlc_parse4x4coeff[(u4_n > 7)](pi2_coeff_block, u4_isdc, 23758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_n, ps_dec, &u4_num_coeff); 23768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ret != OK) 23778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return ret; 23788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 23798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_top_nnz[0] = u4_num_coeff; 23808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_subblock_coded = (u4_num_coeff != 0); 23818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S INSERT_BIT(*pu4_csbp, u4_idx, u4_subblock_coded); 23828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 23838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*------------------------------------------------------*/ 23848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Residual 4x4 decoding: SubBlock 3 */ 23858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*------------------------------------------------------*/ 23868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_idx++; 23878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_tran_form8x8) 23888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 23898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!u1_mb_field_decodingflag) 23908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 23918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pu1_inv_scan = 23928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (UWORD8*)gau1_ih264d_inv_scan_prog8x8_cavlc[3]; 23938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 23948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 23958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 23968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pu1_inv_scan = 23978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (UWORD8*)gau1_ih264d_inv_scan_int8x8_cavlc[3]; 23988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 23998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 24008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 24018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 24028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pi2_coeff_block += NUM_COEFFS_IN_4x4BLK; 24038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 24048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_n = (u4_top1 + u4_num_coeff + 1) >> 1; 24058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ret = pf_cavlc_parse4x4coeff[(u4_n > 7)](pi2_coeff_block, u4_isdc, 24068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_n, ps_dec, &u4_num_coeff); 24078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ret != OK) 24088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return ret; 24098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 24108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_top_nnz[1] = pu1_left_nnz[1] = u4_num_coeff; 24118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_subblock_coded = (u4_num_coeff != 0); 24128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S INSERT_BIT(*pu4_csbp, u4_idx, u4_subblock_coded); 24138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 24148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pu1_inv_scan = puc_temp; 24158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 24168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return OK; 24178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 24188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 24198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*! 24208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ************************************************************************** 24218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \if Function name : ih264d_parse_residual4x4_cavlc \endif 24228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 24238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \brief 24248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * This function parses CAVLC syntax of a Luma and Chroma AC Residuals. 24258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 24268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \return 24278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 0 on Success and Error code otherwise 24288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ************************************************************************** 24298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */ 24308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 24318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SWORD32 ih264d_parse_residual4x4_cavlc(dec_struct_t * ps_dec, 24328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S dec_mb_info_t *ps_cur_mb_info, 24338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_offset) 24348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 24358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_cbp = ps_cur_mb_info->u1_cbp; 24368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD16 ui16_csbp = 0; 24378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_nbr_avl; 24388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 *pi2_residual_buf; 24398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 24408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_is_top_mb_avail; 24418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_is_left_mb_avail; 24428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 24438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_top_nnz = ps_cur_mb_info->ps_curmb->pu1_nnz_y; 24448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_left_nnz = ps_dec->pu1_left_nnz_y; 24458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 *pi2_coeff_block = NULL; 24468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 *pu4_dummy; 24478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 ret; 24488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 24498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 (**pf_cavlc_parse_8x8block)(WORD16 *pi2_coeff_block, 24508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_sub_block_strd, 24518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_isdc, 24528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S struct _DecStruct *ps_dec, 24538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_top_nnz, 24548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_left_nnz, 24558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_tran_form8x8, 24568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_mb_field_decodingflag, 24578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 *pu4_dummy) = ps_dec->pf_cavlc_parse_8x8block; 24588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 24598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 24608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 24618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 uc_temp = ps_dec->u1_mb_ngbr_availablity; 24628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_is_top_mb_avail = BOOLEAN(uc_temp & TOP_MB_AVAILABLE_MASK); 24638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_is_left_mb_avail = BOOLEAN(uc_temp & LEFT_MB_AVAILABLE_MASK); 24648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_nbr_avl = (u1_is_top_mb_avail << 1) | u1_is_left_mb_avail; 24658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 24668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 24678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_info->u1_qp_div6 = ps_dec->u1_qp_y_div6; 24688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_info->u1_qp_rem6 = ps_dec->u1_qp_y_rem6; 24698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_info->u1_qpc_div6 = ps_dec->u1_qp_u_div6; 24708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_info->u1_qpc_rem6 = ps_dec->u1_qp_u_rem6; 24718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_info->u1_qpcr_div6 = ps_dec->u1_qp_v_div6; 24728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_info->u1_qpcr_rem6 = ps_dec->u1_qp_v_rem6; 24738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 24748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_cbp & 0xf) 24758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 24768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_top_nnz[0] = ps_cur_mb_info->ps_top_mb->pu1_nnz_y[0]; 24778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_top_nnz[1] = ps_cur_mb_info->ps_top_mb->pu1_nnz_y[1]; 24788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_top_nnz[2] = ps_cur_mb_info->ps_top_mb->pu1_nnz_y[2]; 24798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_top_nnz[3] = ps_cur_mb_info->ps_top_mb->pu1_nnz_y[3]; 24808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 24818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*******************************************************************/ 24828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Block 0 residual decoding, check cbp and proceed (subblock = 0) */ 24838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*******************************************************************/ 24848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!(u1_cbp & 0x1)) 24858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 24868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *(UWORD16 *)(pu1_top_nnz) = 0; 24878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *(UWORD16 *)(pu1_left_nnz) = 0; 24888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 24898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 24908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 24918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 24928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_temp; 24938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ret = pf_cavlc_parse_8x8block[u4_nbr_avl]( 24948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pi2_coeff_block, 4, u1_offset, ps_dec, pu1_top_nnz, 24958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_left_nnz, ps_cur_mb_info->u1_tran_form8x8, 24968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_info->u1_mb_field_decodingflag, &u4_temp); 24978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ret != OK) 24988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return ret; 24998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ui16_csbp = u4_temp; 25008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 25018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 25028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*******************************************************************/ 25038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Block 1 residual decoding, check cbp and proceed (subblock = 2) */ 25048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*******************************************************************/ 25058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_cur_mb_info->u1_tran_form8x8) 25068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 25078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pi2_coeff_block += 64; 25088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 25098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 25108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 25118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pi2_coeff_block += (2 * NUM_COEFFS_IN_4x4BLK); 25128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 25138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 25148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!(u1_cbp & 0x2)) 25158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 25168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *(UWORD16 *)(pu1_top_nnz + 2) = 0; 25178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *(UWORD16 *)(pu1_left_nnz) = 0; 25188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 25198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 25208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 25218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_temp = (u4_nbr_avl | 0x1); 25228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ret = pf_cavlc_parse_8x8block[u4_temp]( 25238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pi2_coeff_block, 4, u1_offset, ps_dec, 25248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (pu1_top_nnz + 2), pu1_left_nnz, 25258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_info->u1_tran_form8x8, 25268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_info->u1_mb_field_decodingflag, &u4_temp); 25278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ret != OK) 25288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return ret; 25298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ui16_csbp |= (u4_temp << 2); 25308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 25318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 25328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*******************************************************************/ 25338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Block 2 residual decoding, check cbp and proceed (subblock = 8) */ 25348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*******************************************************************/ 25358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_cur_mb_info->u1_tran_form8x8) 25368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 25378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pi2_coeff_block += 64; 25388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 25398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 25408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 25418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pi2_coeff_block += (6 * NUM_COEFFS_IN_4x4BLK); 25428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 25438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 25448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!(u1_cbp & 0x4)) 25458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 25468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *(UWORD16 *)(pu1_top_nnz) = 0; 25478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *(UWORD16 *)(pu1_left_nnz + 2) = 0; 25488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 25498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 25508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 25518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_temp = (u4_nbr_avl | 0x2); 25528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ret = pf_cavlc_parse_8x8block[u4_temp]( 25538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pi2_coeff_block, 4, u1_offset, ps_dec, pu1_top_nnz, 25548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (pu1_left_nnz + 2), ps_cur_mb_info->u1_tran_form8x8, 25558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_info->u1_mb_field_decodingflag, &u4_temp); 25568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ret != OK) 25578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return ret; 25588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ui16_csbp |= (u4_temp << 8); 25598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 25608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 25618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*******************************************************************/ 25628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Block 3 residual decoding, check cbp and proceed (subblock = 10)*/ 25638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*******************************************************************/ 25648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_cur_mb_info->u1_tran_form8x8) 25658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 25668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pi2_coeff_block += 64; 25678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 25688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 25698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 25708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pi2_coeff_block += (2 * NUM_COEFFS_IN_4x4BLK); 25718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 25728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 25738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!(u1_cbp & 0x8)) 25748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 25758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *(UWORD16 *)(pu1_top_nnz + 2) = 0; 25768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *(UWORD16 *)(pu1_left_nnz + 2) = 0; 25778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 25788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 25798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 25808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_temp; 25818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ret = pf_cavlc_parse_8x8block[0x3]( 25828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pi2_coeff_block, 4, u1_offset, ps_dec, 25838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (pu1_top_nnz + 2), (pu1_left_nnz + 2), 25848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_info->u1_tran_form8x8, 25858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_info->u1_mb_field_decodingflag, &u4_temp); 25868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ret != OK) 25878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return ret; 25888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ui16_csbp |= (u4_temp << 10); 25898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 25908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 25918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 25928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 25938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *(UWORD32 *)(pu1_top_nnz) = 0; 25948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *(UWORD32 *)(pu1_left_nnz) = 0; 25958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 25968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 25978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_info->u2_luma_csbp = ui16_csbp; 25988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_info->ps_curmb->u2_luma_csbp = ui16_csbp; 25998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 26008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 26018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD16 u2_chroma_csbp = 0; 26028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_info->u2_chroma_csbp = 0; 26038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_top_nnz = ps_cur_mb_info->ps_curmb->pu1_nnz_uv; 26048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_left_nnz = ps_dec->pu1_left_nnz_uv; 26058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 26068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_cbp >>= 4; 26078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*--------------------------------------------------------------------*/ 26088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* if Chroma Component not present OR no ac values present */ 26098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Set the values of N to zero */ 26108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*--------------------------------------------------------------------*/ 26118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_cbp == CBPC_ALLZERO || u1_cbp == CBPC_ACZERO) 26128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 26138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *(UWORD32 *)(pu1_top_nnz) = 0; 26148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *(UWORD32 *)(pu1_left_nnz) = 0; 26158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 26168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 26178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_cbp == CBPC_ALLZERO) 26188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 26198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return (0); 26208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 26218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*--------------------------------------------------------------------*/ 26228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Decode Chroma DC values */ 26238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*--------------------------------------------------------------------*/ 26248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 26258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 u4_scale_u; 26268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 u4_scale_v; 26278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 i4_mb_inter_inc; 26288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_scale_u = ps_dec->pu2_quant_scale_u[0] << ps_dec->u1_qp_u_div6; 26298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_scale_v = ps_dec->pu2_quant_scale_v[0] << ps_dec->u1_qp_v_div6; 26308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i4_mb_inter_inc = (!((ps_cur_mb_info->ps_curmb->u1_mb_type == I_4x4_MB) 26318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S || (ps_cur_mb_info->ps_curmb->u1_mb_type == I_16x16_MB))) 26328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 3; 26338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 26348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_dec->s_high_profile.u1_scaling_present) 26358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 26368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_scale_u *= 26378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->s_high_profile.i2_scalinglist4x4[i4_mb_inter_inc 26388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + 1][0]; 26398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_scale_v *= 26408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->s_high_profile.i2_scalinglist4x4[i4_mb_inter_inc 26418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + 2][0]; 26428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 26438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 26448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 26458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 26468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_scale_u <<= 4; 26478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_scale_v <<= 4; 26488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 26498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 26508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264d_cavlc_parse_chroma_dc(ps_cur_mb_info,pi2_coeff_block, ps_dec->ps_bitstrm, 26518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_scale_u, u4_scale_v, 26528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i4_mb_inter_inc); 26538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 26548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 26558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_cbp == CBPC_ACZERO) 26568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return (0); 26578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 26588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_top_nnz[0] = ps_cur_mb_info->ps_top_mb->pu1_nnz_uv[0]; 26598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_top_nnz[1] = ps_cur_mb_info->ps_top_mb->pu1_nnz_uv[1]; 26608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_top_nnz[2] = ps_cur_mb_info->ps_top_mb->pu1_nnz_uv[2]; 26618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_top_nnz[3] = ps_cur_mb_info->ps_top_mb->pu1_nnz_uv[3]; 26628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*--------------------------------------------------------------------*/ 26638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Decode Chroma AC values */ 26648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*--------------------------------------------------------------------*/ 26658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 26668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_temp; 26678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*****************************************************************/ 26688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* U Block residual decoding, check cbp and proceed (subblock=0)*/ 26698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*****************************************************************/ 26708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ret = pf_cavlc_parse_8x8block[u4_nbr_avl]( 26718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pi2_coeff_block, 2, 1, ps_dec, pu1_top_nnz, 26728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_left_nnz, 0, 0, &u4_temp); 26738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ret != OK) 26748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return ret; 26758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_chroma_csbp = u4_temp; 26768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 26778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pi2_coeff_block += MB_CHROM_SIZE; 26788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*****************************************************************/ 26798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* V Block residual decoding, check cbp and proceed (subblock=1)*/ 26808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*****************************************************************/ 26818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ret = pf_cavlc_parse_8x8block[u4_nbr_avl](pi2_coeff_block, 2, 1, 26828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec, 26838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (pu1_top_nnz + 2), 26848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (pu1_left_nnz + 2), 0, 26858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 0, &u4_temp); 26868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ret != OK) 26878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return ret; 26888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_chroma_csbp |= (u4_temp << 4); 26898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 26908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 26918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_info->u2_chroma_csbp = u2_chroma_csbp; 26928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 26938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return OK; 26948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 2695