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