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_process_intra_mb.c
238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \brief
258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    Contains routines that decode a I slice type
268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Detailed_description
288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \date
308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    07/07/2003
318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \author  NS
338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S **************************************************************************
348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */
358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include <string.h>
378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_bitstrm.h"
388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_defs.h"
398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_debug.h"
408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_tables.h"
418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_structs.h"
428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_defs.h"
438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_parse_cavlc.h"
448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_mb_utils.h"
458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_parse_slice.h"
468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_process_intra_mb.h"
478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_error_handler.h"
488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_quant_scaling.h"
498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_tables.h"
508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*!
528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S **************************************************************************
538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \if Function name : ih264d_itrans_recon_luma_dc \endif
548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \brief
568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    This function does InvTransform, scaling and reconstruction of Luma DC.
578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \return
598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    0 on Success and Error code otherwise
608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S **************************************************************************
618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */
628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_itrans_recon_luma_dc(dec_struct_t *ps_dec,
638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                 WORD16* pi2_src,
648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                 WORD16* pi2_coeff_block,
658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                 const UWORD16 *pu2_weigh_mat)
668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 i;
688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD16 pi2_out[16];
698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 pi4_tmp[16];
708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD16 *pi2_out_ptr = &pi2_out[0];
718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    PROFILE_DISABLE_IQ_IT_RECON_RETURN()
728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->pf_ihadamard_scaling_4x4(pi2_src, pi2_out,
738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                     ps_dec->pu2_quant_scale_y, pu2_weigh_mat,
748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                     ps_dec->u1_qp_y_div6, pi4_tmp);
758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    for(i = 0; i < 4; i++)
768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_coeff_block[0] = pi2_out_ptr[0];
788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_coeff_block[4 * 16] = pi2_out_ptr[4];
798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_coeff_block[8 * 16] = pi2_out_ptr[8];
808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_coeff_block[12 * 16] = pi2_out_ptr[12];
818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_out_ptr++; /* Point to next column */
838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_coeff_block += 16;
848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*!
878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S **************************************************************************
888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \if Function name : ih264d_read_intra_pred_modes \endif
898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \brief
918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    Reads the intra pred mode related values of I4x4 MB from bitstream.
928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    This function will read the prev intra pred mode flags and
948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    stores it in pu1_prev_intra4x4_pred_mode_flag. If the u4_flag
958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    indicates that most probable mode is not intra pred mode, then
968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    the rem_intra4x4_pred_mode is read and stored in
978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    pu1_rem_intra4x4_pred_mode array.
988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
1008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \return
1018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    0 on success and Error code otherwise
1028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
1038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S **************************************************************************
1048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */
1058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SWORD32 ih264d_read_intra_pred_modes(dec_struct_t * ps_dec,
1068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                    UWORD8 * pu1_prev_intra4x4_pred_mode_flag,
1078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                    UWORD8 * pu1_rem_intra4x4_pred_mode,
1088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                    UWORD32 u4_trans_form8x8)
1098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
1108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 i4x4_luma_blk_idx = 0, i8x8_luma_blk_idx = 0;
1118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    dec_bit_stream_t * ps_bitstrm = ps_dec->ps_bitstrm;
1138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(!u4_trans_form8x8)
1158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
1168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        for(i4x4_luma_blk_idx = 0; i4x4_luma_blk_idx < 16; ++i4x4_luma_blk_idx)
1178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
1188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            UWORD32 u4_temp;
1198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            SWITCHOFFTRACE;
1208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            GETBIT(u4_temp, ps_bitstrm->u4_ofst, ps_bitstrm->pu4_buffer);
1228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            *pu1_prev_intra4x4_pred_mode_flag = (UWORD8)u4_temp;
1238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(!(*pu1_prev_intra4x4_pred_mode_flag))
1248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
1258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                GETBITS(u4_temp, ps_bitstrm->u4_ofst, ps_bitstrm->pu4_buffer, 3);
1268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                *(pu1_rem_intra4x4_pred_mode) = (UWORD8)u4_temp;
1288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
1298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pu1_prev_intra4x4_pred_mode_flag++;
1318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pu1_rem_intra4x4_pred_mode++;
1328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
1338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
1348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else
1358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
1368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /**********************************************************************/
1378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* prev_intra4x4_pred_modes to be interpreted as                      */
1388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* prev_intra8x8_pred_modes in case of transform 8x8                  */
1398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /**********************************************************************/
1408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        for(i8x8_luma_blk_idx = 0; i8x8_luma_blk_idx < 4; i8x8_luma_blk_idx++)
1418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
1428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            UWORD32 u4_temp;
1438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            GETBIT(u4_temp, ps_bitstrm->u4_ofst, ps_bitstrm->pu4_buffer);
1448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            *pu1_prev_intra4x4_pred_mode_flag = (UWORD8)u4_temp;
1458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(!(*pu1_prev_intra4x4_pred_mode_flag))
1468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
1478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                GETBITS(u4_temp, ps_bitstrm->u4_ofst, ps_bitstrm->pu4_buffer, 3);
1488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                (*pu1_rem_intra4x4_pred_mode) = (UWORD8)u4_temp;
1508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
1518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pu1_prev_intra4x4_pred_mode_flag++;
1528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pu1_rem_intra4x4_pred_mode++;
1538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
1548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
1558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return (0);
1568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
1578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SWORD32 ih264d_unpack_coeff4x4_4x4blk(dec_struct_t * ps_dec,
1588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                   WORD16 *pi2_out_coeff_data,
1598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                   UWORD8 *pu1_inv_scan)
1608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
1618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    tu_sblk4x4_coeff_data_t *ps_tu_4x4 = (tu_sblk4x4_coeff_data_t *)ps_dec->pv_proc_tu_coeff_data;
1628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD16 u2_sig_coeff_map = ps_tu_4x4->u2_sig_coeff_map;
1638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 idx = 0;
1648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD16 *pi2_coeff_data = &ps_tu_4x4->ai2_level[0];
1658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 dc_only_flag = 0;
1668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 num_coeff = 0;
1678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    PROFILE_DISABLE_UNPACK_LUMA()
1698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    while(u2_sig_coeff_map)
1708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
1718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        idx = CLZ(u2_sig_coeff_map);
1728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        idx = 31 - idx;
1748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        RESET_BIT(u2_sig_coeff_map,idx);
1758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        idx = pu1_inv_scan[idx];
1778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_out_coeff_data[idx] = *pi2_coeff_data++;
1788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        num_coeff++;
1798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
1808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if((num_coeff == 1) && (idx == 0))
1828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
1838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        dc_only_flag = 1;
1848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
1858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
1878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        WORD32 offset;
1888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        offset = (UWORD8 *)pi2_coeff_data - (UWORD8 *)ps_tu_4x4;
1898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        offset = ALIGN4(offset);
1908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->pv_proc_tu_coeff_data = (void *)((UWORD8 *)ps_dec->pv_proc_tu_coeff_data + offset);
1918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
1928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return dc_only_flag;
1948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
1958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SUWORD32 ih264d_unpack_coeff4x4_8x8blk(dec_struct_t * ps_dec,
1978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                   dec_mb_info_t * ps_cur_mb_info,
1988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                   UWORD16 ui2_luma_csbp,
1998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                   WORD16 *pi2_out_coeff_data)
2008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
2018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 *pu1_inv_scan;
2028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 u1_mb_field_decoding_flag = ps_cur_mb_info->u1_mb_field_decodingflag;
2038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 u1_field_coding_flag = ps_cur_mb_info->ps_curmb->u1_mb_fld;
2048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_luma_dc_only_csbp = 0;
2058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 dc_only_flag = 0;
2068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    PROFILE_DISABLE_UNPACK_LUMA()
2088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(u1_field_coding_flag || u1_mb_field_decoding_flag)
2098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
2108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_inv_scan = (UWORD8 *)gau1_ih264d_inv_scan_fld;
2118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
2128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else
2138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
2148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_inv_scan = (UWORD8 *)gau1_ih264d_inv_scan;
2158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
2168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    // sub 0
2188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(ui2_luma_csbp & 0x1)
2198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
2208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        memset(pi2_out_coeff_data,0,16*sizeof(WORD16));
2218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        dc_only_flag = ih264d_unpack_coeff4x4_4x4blk(ps_dec,
2228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      pi2_out_coeff_data,
2238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      pu1_inv_scan);
2248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        INSERT_BIT(u4_luma_dc_only_csbp, 0, dc_only_flag);
2268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
2278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    pi2_out_coeff_data += 16;
2298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    // sub 1
2308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(ui2_luma_csbp & 0x2)
2318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
2328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        memset(pi2_out_coeff_data,0,16*sizeof(WORD16));
2338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        dc_only_flag = ih264d_unpack_coeff4x4_4x4blk(ps_dec,
2348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      pi2_out_coeff_data,
2358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      pu1_inv_scan);
2368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        INSERT_BIT(u4_luma_dc_only_csbp, 1, dc_only_flag);
2378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
2388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    pi2_out_coeff_data += 16 + 32;
2408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    // sub 2
2418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(ui2_luma_csbp & 0x10)
2428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
2438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        memset(pi2_out_coeff_data,0,16*sizeof(WORD16));
2448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        dc_only_flag = ih264d_unpack_coeff4x4_4x4blk(ps_dec,
2458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      pi2_out_coeff_data,
2468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      pu1_inv_scan);
2478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        INSERT_BIT(u4_luma_dc_only_csbp, 4, dc_only_flag);
2488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
2498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    pi2_out_coeff_data += 16;
2518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    // sub 3
2528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(ui2_luma_csbp & 0x20)
2538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
2548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        memset(pi2_out_coeff_data,0,16*sizeof(WORD16));
2558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        dc_only_flag = ih264d_unpack_coeff4x4_4x4blk(ps_dec,
2568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      pi2_out_coeff_data,
2578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      pu1_inv_scan);
2588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        INSERT_BIT(u4_luma_dc_only_csbp, 5, dc_only_flag);
2598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
2608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return u4_luma_dc_only_csbp;
2618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
2628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SWORD32 ih264d_unpack_coeff8x8_8x8blk_cavlc(dec_struct_t * ps_dec,
2638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            dec_mb_info_t * ps_cur_mb_info,
2648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            UWORD16 ui2_luma_csbp,
2658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            WORD16 *pi2_out_coeff_data)
2668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
2678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 *pu1_inv_scan;
2688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 u1_mb_field_decoding_flag = ps_cur_mb_info->u1_mb_field_decodingflag;
2698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 u1_field_coding_flag = ps_cur_mb_info->ps_curmb->u1_mb_fld;
2708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 dc_only_flag = 0;
2718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    PROFILE_DISABLE_UNPACK_LUMA()
2738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(ui2_luma_csbp & 0x33)
2748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
2758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        memset(pi2_out_coeff_data,0,64*sizeof(WORD16));
2768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
2778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(!u1_mb_field_decoding_flag)
2798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
2808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_inv_scan =
2818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        (UWORD8*)gau1_ih264d_inv_scan_prog8x8_cavlc[0];
2828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
2838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else
2848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
2858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_inv_scan =
2868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        (UWORD8*)gau1_ih264d_inv_scan_int8x8_cavlc[0];
2878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
2888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    // sub 0
2898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(ui2_luma_csbp & 0x1)
2908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
2918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        dc_only_flag = ih264d_unpack_coeff4x4_4x4blk(ps_dec,
2928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      pi2_out_coeff_data,
2938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      pu1_inv_scan);
2948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
2958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(!u1_mb_field_decoding_flag)
2978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
2988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_inv_scan =
2998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        (UWORD8*)gau1_ih264d_inv_scan_prog8x8_cavlc[1];
3008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
3018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else
3028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
3038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_inv_scan =
3048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        (UWORD8*)gau1_ih264d_inv_scan_int8x8_cavlc[1];
3058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
3068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    // sub 1
3078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(ui2_luma_csbp & 0x2)
3088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
3098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        dc_only_flag = 0;
3108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ih264d_unpack_coeff4x4_4x4blk(ps_dec,
3118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      pi2_out_coeff_data,
3128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      pu1_inv_scan);
3138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
3148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(!u1_mb_field_decoding_flag)
3168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
3178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_inv_scan =
3188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        (UWORD8*)gau1_ih264d_inv_scan_prog8x8_cavlc[2];
3198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
3208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else
3218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
3228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_inv_scan =
3238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        (UWORD8*)gau1_ih264d_inv_scan_int8x8_cavlc[2];
3248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
3258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    // sub 2
3268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(ui2_luma_csbp & 0x10)
3278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
3288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        dc_only_flag = 0;
3298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ih264d_unpack_coeff4x4_4x4blk(ps_dec,
3308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      pi2_out_coeff_data,
3318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      pu1_inv_scan);
3328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
3338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(!u1_mb_field_decoding_flag)
3358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
3368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_inv_scan =
3378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        (UWORD8*)gau1_ih264d_inv_scan_prog8x8_cavlc[3];
3388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
3398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else
3408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
3418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_inv_scan =
3428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        (UWORD8*)gau1_ih264d_inv_scan_int8x8_cavlc[3];
3438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
3448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    // sub 3
3458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(ui2_luma_csbp & 0x20)
3468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
3478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        dc_only_flag = 0;
3488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ih264d_unpack_coeff4x4_4x4blk(ps_dec,
3498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      pi2_out_coeff_data,
3508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      pu1_inv_scan);
3518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
3528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return dc_only_flag;
3538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
3548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_unpack_coeff4x4_8x8blk_chroma(dec_struct_t * ps_dec,
3558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          dec_mb_info_t * ps_cur_mb_info,
3568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          UWORD16 ui2_chroma_csbp,
3578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          WORD16 *pi2_out_coeff_data)
3588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
3598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 *pu1_inv_scan;
3608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 u1_mb_field_decoding_flag = ps_cur_mb_info->u1_mb_field_decodingflag;
3618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 u1_field_coding_flag = ps_cur_mb_info->ps_curmb->u1_mb_fld;
3628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    PROFILE_DISABLE_UNPACK_CHROMA()
3648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(u1_field_coding_flag || u1_mb_field_decoding_flag)
3658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
3668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_inv_scan = (UWORD8 *)gau1_ih264d_inv_scan_fld;
3678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
3688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else
3698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
3708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_inv_scan = (UWORD8 *)gau1_ih264d_inv_scan;
3718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
3728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(ui2_chroma_csbp & 0x1)
3748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
3758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        memset(pi2_out_coeff_data,0,16*sizeof(WORD16));
3768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ih264d_unpack_coeff4x4_4x4blk(ps_dec,
3778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      pi2_out_coeff_data,
3788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      pu1_inv_scan);
3798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
3808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    pi2_out_coeff_data += 16;
3818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(ui2_chroma_csbp & 0x2)
3828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
3838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        memset(pi2_out_coeff_data,0,16*sizeof(WORD16));
3848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ih264d_unpack_coeff4x4_4x4blk(ps_dec,
3858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      pi2_out_coeff_data,
3868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      pu1_inv_scan);
3878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
3888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    pi2_out_coeff_data += 16;
3908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(ui2_chroma_csbp & 0x4)
3918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
3928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        memset(pi2_out_coeff_data,0,16*sizeof(WORD16));
3938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ih264d_unpack_coeff4x4_4x4blk(ps_dec,
3948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      pi2_out_coeff_data,
3958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      pu1_inv_scan);
3968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
3978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    pi2_out_coeff_data += 16;
3998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(ui2_chroma_csbp & 0x8)
4008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
4018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        memset(pi2_out_coeff_data,0,16*sizeof(WORD16));
4028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ih264d_unpack_coeff4x4_4x4blk(ps_dec,
4038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      pi2_out_coeff_data,
4048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      pu1_inv_scan);
4058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
4068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
4078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SUWORD32 ih264d_unpack_luma_coeff4x4_mb(dec_struct_t * ps_dec,
4088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                    dec_mb_info_t * ps_cur_mb_info,
4098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                    UWORD8 intra_flag)
4108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
4118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 u1_mb_type = ps_cur_mb_info->u1_mb_type;
4128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD16 ui2_luma_csbp = ps_cur_mb_info->u2_luma_csbp;
4138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 *pu1_inv_scan = ps_dec->pu1_inv_scan;
4148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD16 *pi2_coeff_data = ps_dec->pi2_coeff_data;
4158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    PROFILE_DISABLE_UNPACK_LUMA()
4178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(!ps_cur_mb_info->u1_tran_form8x8)
4188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
4198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD32 u4_luma_dc_only_csbp = 0;
4208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD32 u4_temp = 0;
4218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        WORD16* pi2_dc_val = NULL;
4228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*
4238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S         * Reserve the pointer to dc vals. The dc vals will be copied
4248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S         * after unpacking of ac vals since memset to 0 inside.
4258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S         */
4268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(intra_flag && (u1_mb_type != I_4x4_MB))
4278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
4288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(CHECKBIT(ps_cur_mb_info->u1_yuv_dc_block_flag,0))
4298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
4308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                pi2_dc_val = (WORD16 *)ps_dec->pv_proc_tu_coeff_data;
4318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ps_dec->pv_proc_tu_coeff_data = (void *)(pi2_dc_val + 16);
4338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
4348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
4358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(ui2_luma_csbp)
4378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
4388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pi2_coeff_data = ps_dec->pi2_coeff_data;
4398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u4_temp = ih264d_unpack_coeff4x4_8x8blk(ps_dec,
4408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          ps_cur_mb_info,
4418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          ui2_luma_csbp,
4428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          pi2_coeff_data);
4438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u4_luma_dc_only_csbp = u4_temp;
4448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pi2_coeff_data += 32;
4468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ui2_luma_csbp = ui2_luma_csbp >> 2;
4488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u4_temp = ih264d_unpack_coeff4x4_8x8blk(ps_dec,
4498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          ps_cur_mb_info,
4508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          ui2_luma_csbp,
4518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          pi2_coeff_data);
4528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u4_luma_dc_only_csbp |= (u4_temp << 2);
4548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pi2_coeff_data += 32 + 64;
4568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ui2_luma_csbp = ui2_luma_csbp >> 6;
4588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u4_temp = ih264d_unpack_coeff4x4_8x8blk(ps_dec,
4598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          ps_cur_mb_info,
4608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          ui2_luma_csbp,
4618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          pi2_coeff_data);
4628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u4_luma_dc_only_csbp |= (u4_temp << 8);
4648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pi2_coeff_data += 32;
4668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ui2_luma_csbp = ui2_luma_csbp >> 2;
4688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u4_temp = ih264d_unpack_coeff4x4_8x8blk(ps_dec,
4698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          ps_cur_mb_info,
4708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          ui2_luma_csbp,
4718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          pi2_coeff_data);
4728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u4_luma_dc_only_csbp |= (u4_temp << 10);
4738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
4748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(pi2_dc_val != NULL)
4768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
4778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            WORD32 i;
4788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pi2_coeff_data = ps_dec->pi2_coeff_data;
4798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            for(i = 0; i < 4; i++)
4808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
4818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                pi2_coeff_data[0] = pi2_dc_val[0];
4828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                pi2_coeff_data[4 * 16] = pi2_dc_val[4];
4838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                pi2_coeff_data[8 * 16] = pi2_dc_val[8];
4848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                pi2_coeff_data[12 * 16] = pi2_dc_val[12];
4858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                pi2_dc_val++; /* Point to next column */
4878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                pi2_coeff_data += 16;
4888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
4898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u4_luma_dc_only_csbp = ps_cur_mb_info->u2_luma_csbp ^ 0xFFFF;
4908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
4918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        return u4_luma_dc_only_csbp;
4928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
4938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else
4948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
4958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD32 u4_luma_dc_only_cbp = 0;
4968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        WORD32 dc_only_flag;
4978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(ui2_luma_csbp)
4988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
4998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pi2_coeff_data = ps_dec->pi2_coeff_data;
5008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            dc_only_flag = ih264d_unpack_coeff8x8_8x8blk_cavlc(ps_dec,
5018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          ps_cur_mb_info,
5028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          ui2_luma_csbp,
5038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          pi2_coeff_data);
5048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            INSERT_BIT(u4_luma_dc_only_cbp, 0, dc_only_flag);
5058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pi2_coeff_data += 64;
5078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ui2_luma_csbp = ui2_luma_csbp >> 2;
5098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            dc_only_flag = ih264d_unpack_coeff8x8_8x8blk_cavlc(ps_dec,
5108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          ps_cur_mb_info,
5118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          ui2_luma_csbp,
5128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          pi2_coeff_data);
5138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            INSERT_BIT(u4_luma_dc_only_cbp, 1, dc_only_flag);
5158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pi2_coeff_data += 64;
5178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ui2_luma_csbp = ui2_luma_csbp >> 6;
5198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            dc_only_flag = ih264d_unpack_coeff8x8_8x8blk_cavlc(ps_dec,
5208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          ps_cur_mb_info,
5218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          ui2_luma_csbp,
5228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          pi2_coeff_data);
5238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            INSERT_BIT(u4_luma_dc_only_cbp, 2, dc_only_flag);
5258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pi2_coeff_data += 64;
5278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ui2_luma_csbp = ui2_luma_csbp >> 2;
5288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            dc_only_flag = ih264d_unpack_coeff8x8_8x8blk_cavlc(ps_dec,
5298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          ps_cur_mb_info,
5308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          ui2_luma_csbp,
5318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          pi2_coeff_data);
5328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            INSERT_BIT(u4_luma_dc_only_cbp, 3, dc_only_flag);
5338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
5348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        return u4_luma_dc_only_cbp;
5358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
5368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
5388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_unpack_chroma_coeff4x4_mb(dec_struct_t * ps_dec,
5408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      dec_mb_info_t * ps_cur_mb_info)
5418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
5428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 u1_mb_type = ps_cur_mb_info->u1_mb_type;
5438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD16 ui2_chroma_csbp = ps_cur_mb_info->u2_chroma_csbp;
5448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 *pu1_inv_scan = ps_dec->pu1_inv_scan;
5458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD16 *pi2_coeff_data = ps_dec->pi2_coeff_data;
5468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 i;
5478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD16 *pi2_dc_val_u = NULL;
5488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD16 *pi2_dc_val_v = NULL;
5498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    PROFILE_DISABLE_UNPACK_CHROMA()
5518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if((ps_cur_mb_info->u1_cbp >> 4) == CBPC_ALLZERO)
5528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        return;
5538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*
5558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S     * Reserve the pointers to dc vals. The dc vals will be copied
5568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S     * after unpacking of ac vals since memset to 0 inside.
5578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S     */
5588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(CHECKBIT(ps_cur_mb_info->u1_yuv_dc_block_flag,1))
5598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
5608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_dc_val_u = (WORD16 *)ps_dec->pv_proc_tu_coeff_data;
5618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->pv_proc_tu_coeff_data = (void *)(pi2_dc_val_u + 4);
5638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
5648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(CHECKBIT(ps_cur_mb_info->u1_yuv_dc_block_flag,2))
5658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
5668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_dc_val_v = (WORD16 *)ps_dec->pv_proc_tu_coeff_data;
5678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->pv_proc_tu_coeff_data = (void *)(pi2_dc_val_v + 4);
5698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
5708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if((ps_cur_mb_info->u1_cbp >> 4) == CBPC_NONZERO)
5728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
5738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_coeff_data = ps_dec->pi2_coeff_data;
5748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ih264d_unpack_coeff4x4_8x8blk_chroma(ps_dec,
5758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                             ps_cur_mb_info,
5768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                             ui2_chroma_csbp,
5778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                             pi2_coeff_data);
5788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_coeff_data += 64;
5808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ui2_chroma_csbp = ui2_chroma_csbp >> 4;
5818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ih264d_unpack_coeff4x4_8x8blk_chroma(ps_dec,
5828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                             ps_cur_mb_info,
5838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                             ui2_chroma_csbp,
5848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                             pi2_coeff_data);
5858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
5878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    pi2_coeff_data = ps_dec->pi2_coeff_data;
5898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(pi2_dc_val_u != NULL)
5908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
5918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_coeff_data[0] = *pi2_dc_val_u++;
5928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_coeff_data[1 * 16] = *pi2_dc_val_u++;
5938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_coeff_data[2 * 16] = *pi2_dc_val_u++;
5948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_coeff_data[3 * 16] = *pi2_dc_val_u++;
5958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
5968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else
5978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
5988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_coeff_data[0] = 0;
5998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_coeff_data[1 * 16] = 0;
6008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_coeff_data[2 * 16] = 0;
6018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_coeff_data[3 * 16] = 0;
6028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
6038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    pi2_coeff_data += 64;
6048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(pi2_dc_val_v != NULL)
6058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
6068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_coeff_data[0] = *pi2_dc_val_v++;
6078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_coeff_data[1 * 16] = *pi2_dc_val_v++;
6088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_coeff_data[2 * 16] = *pi2_dc_val_v++;
6098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_coeff_data[3 * 16] = *pi2_dc_val_v++;
6108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
6118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else
6128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
6138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_coeff_data[0] = 0;
6148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_coeff_data[1 * 16] = 0;
6158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_coeff_data[2 * 16] = 0;
6168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_coeff_data[3 * 16] = 0;
6178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
6188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
6198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SUWORD32 ih264d_unpack_luma_coeff8x8_mb(dec_struct_t * ps_dec,
6208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                    dec_mb_info_t * ps_cur_mb_info)
6218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
6228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 blk_8x8_cnt;
6238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD16 *pi2_out_coeff_data = ps_dec->pi2_coeff_data;
6248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 u1_field_coding_flag = ps_cur_mb_info->ps_curmb->u1_mb_fld;
6258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 *pu1_inv_scan;
6268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_luma_dc_only_cbp = 0;
6278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    PROFILE_DISABLE_UNPACK_LUMA()
6298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(!u1_field_coding_flag)
6308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
6318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*******************************************************************/
6328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* initializing inverse scan  matrices                             */
6338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*******************************************************************/
6348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_inv_scan = (UWORD8 *)gau1_ih264d_inv_scan_prog8x8_cabac;
6358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
6368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else
6378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
6388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*******************************************************************/
6398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* initializing inverse scan  matrices                             */
6408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*******************************************************************/
6418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_inv_scan = (UWORD8 *)gau1_ih264d_inv_scan_int8x8_cabac;
6428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
6438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    for(blk_8x8_cnt = 0; blk_8x8_cnt < 4; blk_8x8_cnt++)
6458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
6468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(CHECKBIT(ps_cur_mb_info->u1_cbp, blk_8x8_cnt))
6478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
6488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            tu_blk8x8_coeff_data_t *ps_tu_8x8 = (tu_blk8x8_coeff_data_t *)ps_dec->pv_proc_tu_coeff_data;
6498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            UWORD32 u4_sig_coeff_map;
6508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            WORD32 idx = 0;
6518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            WORD16 *pi2_coeff_data = &ps_tu_8x8->ai2_level[0];
6528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            WORD32 num_coeff = 0;
6538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* memset 64 coefficient to zero */
6558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            memset(pi2_out_coeff_data,0,64*sizeof(WORD16));
6568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u4_sig_coeff_map = ps_tu_8x8->au4_sig_coeff_map[1];
6588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            while(u4_sig_coeff_map)
6608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
6618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                idx = CLZ(u4_sig_coeff_map);
6628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                idx = 31 - idx;
6648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                RESET_BIT(u4_sig_coeff_map,idx);
6658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                idx = pu1_inv_scan[idx + 32];
6678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                pi2_out_coeff_data[idx] = *pi2_coeff_data++;
6688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                num_coeff++;
6698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
6708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u4_sig_coeff_map = ps_tu_8x8->au4_sig_coeff_map[0];
6728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            while(u4_sig_coeff_map)
6738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
6748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                idx = CLZ(u4_sig_coeff_map);
6758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                idx = 31 - idx;
6778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                RESET_BIT(u4_sig_coeff_map,idx);
6788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                idx = pu1_inv_scan[idx];
6808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                pi2_out_coeff_data[idx] = *pi2_coeff_data++;
6818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                num_coeff++;
6828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
6838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if((num_coeff == 1) && (idx == 0))
6858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
6868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                SET_BIT(u4_luma_dc_only_cbp,blk_8x8_cnt);
6878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
6888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
6918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                WORD32 offset;
6928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                offset = (UWORD8 *)pi2_coeff_data - (UWORD8 *)ps_tu_8x8;
6938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                offset = ALIGN4(offset);
6948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ps_dec->pv_proc_tu_coeff_data = (void *)((UWORD8 *)ps_dec->pv_proc_tu_coeff_data + offset);
6958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
6968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
6978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_out_coeff_data += 64;
6988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
6998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return u4_luma_dc_only_cbp;
7018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
7028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*!
7038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S **************************************************************************
7048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \if Function name : ih264d_process_intra_mb \endif
7058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
7068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \brief
7078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    This function decodes an I MB. Intraprediction is carried out followed
7088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    by InvTramsform. Both IntraPrediction and Reconstrucion are carried out
7098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    row buffer itself.
7108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
7118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
7128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \return
7138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    0 on Success and Error code otherwise
7148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S **************************************************************************
7158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */
7168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SWORD32 ih264d_process_intra_mb(dec_struct_t * ps_dec,
7178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                               dec_mb_info_t * ps_cur_mb_info,
7188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                               UWORD8 u1_mb_num)
7198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
7208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 u1_mb_type = ps_cur_mb_info->u1_mb_type;
7218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 uc_temp = ps_cur_mb_info->u1_mb_ngbr_availablity;
7228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 u1_top_available = BOOLEAN(uc_temp & TOP_MB_AVAILABLE_MASK);
7238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 u1_left_available = BOOLEAN(uc_temp & LEFT_MB_AVAILABLE_MASK);
7248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 u1_use_top_right_mb = BOOLEAN(uc_temp & TOP_RIGHT_MB_AVAILABLE_MASK);
7258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 u1_use_top_left_mb = BOOLEAN(uc_temp & TOP_LEFT_MB_AVAILABLE_MASK);
7268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 uc_useTopMB = u1_top_available;
7278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD16 u2_use_left_mb = u1_left_available;
7288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD16 u2_use_left_mb_pack;
7298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 *pu1_luma_pred_buffer;
7308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* CHANGED CODE */
7318ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    UWORD8 *pu1_luma_rec_buffer;
7328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 *puc_top;
7338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    mb_neigbour_params_t *ps_left_mb;
7358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    mb_neigbour_params_t *ps_top_mb;
7368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    mb_neigbour_params_t *ps_top_right_mb;
7378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    mb_neigbour_params_t *ps_curmb;
7388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD16 u2_mbx = ps_cur_mb_info->u2_mbx;
7408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 ui_pred_width, ui_rec_width;
7418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD16 *pi2_y_coeff;
7428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 u1_mbaff, u1_topmb, u1_mb_field_decoding_flag;
7438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_num_pmbair;
7448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD16 ui2_luma_csbp = ps_cur_mb_info->u2_luma_csbp;
7458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 *pu1_yleft, *pu1_ytop_left;
7468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Chroma variables*/
7478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 *pu1_top_u;
7488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 *pu1_uleft;
7498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 *pu1_u_top_left;
7508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* CHANGED CODE */
7518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 *pu1_mb_cb_rei1_buffer, *pu1_mb_cr_rei1_buffer;
7528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_recwidth_cr;
7538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* CHANGED CODE */
7548ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    tfr_ctxt_t *ps_frame_buf = ps_dec->ps_frame_buf_ip_recon;
7558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_luma_dc_only_csbp = 0;
7568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_luma_dc_only_cbp = 0;
7578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 *pu1_prev_intra4x4_pred_mode_data = (UWORD8 *)ps_dec->pv_proc_tu_coeff_data;                 //Pointer to keep track of intra4x4_pred_mode data in pv_proc_tu_coeff_data buffer
7598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u1_mbaff = ps_dec->ps_cur_slice->u1_mbaff_frame_flag;
7608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u1_topmb = ps_cur_mb_info->u1_topmb;
7618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_num_pmbair = (u1_mb_num >> u1_mbaff);
7628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*--------------------------------------------------------------------*/
7658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Find the current MB's mb params                                    */
7668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*--------------------------------------------------------------------*/
7678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u1_mb_field_decoding_flag = ps_cur_mb_info->u1_mb_field_decodingflag;
7688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_curmb = ps_cur_mb_info->ps_curmb;
7708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_top_mb = ps_cur_mb_info->ps_top_mb;
7718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_left_mb = ps_cur_mb_info->ps_left_mb;
7728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_top_right_mb = ps_cur_mb_info->ps_top_right_mb;
7738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*--------------------------------------------------------------------*/
7758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Check whether neighbouring MB is Inter MB and                      */
7768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* constrained intra pred is 1.                                       */
7778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*--------------------------------------------------------------------*/
7788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u2_use_left_mb_pack = (u2_use_left_mb << 8) + u2_use_left_mb;
7798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(ps_dec->ps_cur_pps->u1_constrained_intra_pred_flag)
7818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
7828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD8 u1_left = (UWORD8)u2_use_left_mb;
7838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        uc_useTopMB = uc_useTopMB
7858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        && ((ps_top_mb->u1_mb_type != P_MB)
7868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        && (ps_top_mb->u1_mb_type != B_MB));
7878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        u2_use_left_mb = u2_use_left_mb
7888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        && ((ps_left_mb->u1_mb_type != P_MB)
7898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        && (ps_left_mb->u1_mb_type != B_MB));
7908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        u2_use_left_mb_pack = (u2_use_left_mb << 8) + u2_use_left_mb;
7928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(u1_mbaff)
7938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
7948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(u1_mb_field_decoding_flag ^ ps_left_mb->u1_mb_fld)
7958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
7968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                u1_left = u1_left
7978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                && (((ps_left_mb + 1)->u1_mb_type != P_MB)
7988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                && ((ps_left_mb + 1)->u1_mb_type
7998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                                != B_MB));
8008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                u2_use_left_mb = u2_use_left_mb && u1_left;
8018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if(u1_mb_field_decoding_flag)
8028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    u2_use_left_mb_pack = (u1_left << 8)
8038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                    + (u2_use_left_mb_pack & 0xff);
8048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                else
8058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    u2_use_left_mb_pack = (u2_use_left_mb << 8)
8068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                    + (u2_use_left_mb);
8078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
8088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
8098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        u1_use_top_right_mb =
8108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        u1_use_top_right_mb
8118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        && ((ps_top_right_mb->u1_mb_type != P_MB)
8128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                        && (ps_top_right_mb->u1_mb_type
8138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                                        != B_MB));
8148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
8158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        u1_use_top_left_mb =
8168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        u1_use_top_left_mb
8178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        && ((ps_cur_mb_info->u1_topleft_mbtype != P_MB)
8188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                        && (ps_cur_mb_info->u1_topleft_mbtype
8198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                                        != B_MB));
8208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
8218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
8228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*********************Common pointer calculations *************************/
8238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* CHANGED CODE */
8248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    pu1_luma_pred_buffer = ps_dec->pu1_y;
8258ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    pu1_luma_rec_buffer = ps_frame_buf->pu1_dest_y + (u4_num_pmbair << 4);
8268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    pu1_mb_cb_rei1_buffer = ps_frame_buf->pu1_dest_u
8278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    + (u4_num_pmbair << 3) * YUV420SP_FACTOR;
8288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    pu1_mb_cr_rei1_buffer = ps_frame_buf->pu1_dest_v + (u4_num_pmbair << 3);
8298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ui_pred_width = MB_SIZE;
8308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ui_rec_width = ps_dec->u2_frm_wd_y << u1_mb_field_decoding_flag;
8318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_recwidth_cr = ps_dec->u2_frm_wd_uv << u1_mb_field_decoding_flag;
8328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /************* Current and top luma pointer *****************/
8338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
8348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(u1_mbaff)
8358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
8368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(u1_topmb == 0)
8378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
8388ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            pu1_luma_rec_buffer += (
8398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            u1_mb_field_decoding_flag ?
8408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            (ui_rec_width >> 1) :
8418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            (ui_rec_width << 4));
8428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pu1_mb_cb_rei1_buffer += (
8438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            u1_mb_field_decoding_flag ?
8448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            (u4_recwidth_cr >> 1) :
8458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            (u4_recwidth_cr << 3));
8468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pu1_mb_cr_rei1_buffer += (
8478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            u1_mb_field_decoding_flag ?
8488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            (u4_recwidth_cr >> 1) :
8498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            (u4_recwidth_cr << 3));
8508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
8518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
8528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
8538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* CHANGED CODE */
8548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(ps_dec->u4_use_intrapred_line_copy == 1)
8558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
8568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        puc_top = ps_dec->pu1_prev_y_intra_pred_line + (ps_cur_mb_info->u2_mbx << 4);
8578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_top_u = ps_dec->pu1_prev_u_intra_pred_line
8588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        + (ps_cur_mb_info->u2_mbx << 3) * YUV420SP_FACTOR;
8598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
8608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else
8618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
8628ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        puc_top = pu1_luma_rec_buffer - ui_rec_width;
8638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_top_u = pu1_mb_cb_rei1_buffer - u4_recwidth_cr;
8648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
8658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* CHANGED CODE */
8668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
8678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /************* Left pointer *****************/
8688ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    pu1_yleft = pu1_luma_rec_buffer - 1;
8698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    pu1_uleft = pu1_mb_cb_rei1_buffer - 1 * YUV420SP_FACTOR;
8708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
8718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /**************Top Left pointer calculation**********/
8728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    pu1_ytop_left = puc_top - 1;
8738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    pu1_u_top_left = pu1_top_u - 1 * YUV420SP_FACTOR;
8748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
8758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* CHANGED CODE */
8768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    PROFILE_DISABLE_INTRA_PRED()
8778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
8788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_prev_intra4x4_pred_mode_data = (UWORD8 *)ps_dec->pv_proc_tu_coeff_data;
8798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(u1_mb_type == I_4x4_MB && ps_cur_mb_info->u1_tran_form8x8 == 0)
8808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
8818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->pv_proc_tu_coeff_data = (void *)((UWORD8 *)ps_dec->pv_proc_tu_coeff_data + 32);
8828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
8838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
8848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        else if (u1_mb_type == I_4x4_MB && ps_cur_mb_info->u1_tran_form8x8 == 1)
8858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
8868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->pv_proc_tu_coeff_data = (void *)((UWORD8 *)ps_dec->pv_proc_tu_coeff_data + 8);
8878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
8888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
8898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(!ps_cur_mb_info->u1_tran_form8x8)
8908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
8918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        u4_luma_dc_only_csbp = ih264d_unpack_luma_coeff4x4_mb(ps_dec,
8928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                       ps_cur_mb_info,
8938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                       1);
8948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
8958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else
8968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
8978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(!ps_dec->ps_cur_pps->u1_entropy_coding_mode)
8988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
8998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u4_luma_dc_only_cbp = ih264d_unpack_luma_coeff4x4_mb(ps_dec,
9008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                           ps_cur_mb_info,
9018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                           1);
9028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
9038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        else
9048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
9058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u4_luma_dc_only_cbp = ih264d_unpack_luma_coeff8x8_mb(ps_dec,
9068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                           ps_cur_mb_info);
9078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
9088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
9098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
9108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    pi2_y_coeff = ps_dec->pi2_coeff_data;
9118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
9128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(u1_mb_type != I_4x4_MB)
9138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
9148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD8 u1_intrapred_mode = MB_TYPE_TO_INTRA_16x16_MODE(u1_mb_type);
9158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*--------------------------------------------------------------------*/
9168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* 16x16 IntraPrediction                                              */
9178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*--------------------------------------------------------------------*/
9188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
9198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            UWORD8 u1_packed_modes = (u1_top_available << 1)
9208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            + u1_left_available;
9218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            UWORD8 u1_err_code =
9228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            (u1_intrapred_mode & 1) ?
9238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            u1_intrapred_mode :
9248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            (u1_intrapred_mode ^ 2);
9258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
9268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if((u1_err_code & u1_packed_modes) ^ u1_err_code)
9279f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S            {
9289f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S                u1_intrapred_mode = 0;
9298ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                ps_dec->i4_error_code = ERROR_INTRAPRED;
9309f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S            }
9318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
9328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
9338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            UWORD8 au1_ngbr_pels[33];
9348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* Get neighbour pixels */
9358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* left pels */
9368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(u2_use_left_mb)
9378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
9388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                WORD32 i;
9398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                for(i = 0; i < 16; i++)
9408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    au1_ngbr_pels[16 - 1 - i] = pu1_yleft[i * ui_rec_width];
9418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
9428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            else
9438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
9448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                memset(au1_ngbr_pels, 0, 16);
9458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
9468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
9478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* top left pels */
9488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            au1_ngbr_pels[16] = *pu1_ytop_left;
9498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
9508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* top pels */
9518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(uc_useTopMB)
9528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
9538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                memcpy(au1_ngbr_pels + 16 + 1, puc_top, 16);
9548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
9558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            else
9568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
9578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                memset(au1_ngbr_pels + 16 + 1, 0, 16);
9588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
9598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            PROFILE_DISABLE_INTRA_PRED()
9608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->apf_intra_pred_luma_16x16[u1_intrapred_mode](
9618ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                            au1_ngbr_pels, pu1_luma_rec_buffer, 1, ui_rec_width,
9628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            ((uc_useTopMB << 2) | u2_use_left_mb));
9638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
9648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
9658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            UWORD32 i;
9668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            WORD16 ai2_tmp[16];
9678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            for(i = 0; i < 16; i++)
9688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
9698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                WORD16 *pi2_level = pi2_y_coeff + (i << 4);
9708ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                UWORD8 *pu1_pred_sblk = pu1_luma_rec_buffer
9718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                + ((i & 0x3) * BLK_SIZE)
9728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                + (i >> 2) * (ui_rec_width << 2);
9738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                PROFILE_DISABLE_IQ_IT_RECON()
9748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
9758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    if(CHECKBIT(ps_cur_mb_info->u2_luma_csbp, i))
9768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    {
9778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        ps_dec->pf_iquant_itrans_recon_luma_4x4(
9788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        pi2_level,
9798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        pu1_pred_sblk,
9808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        pu1_pred_sblk,
9818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        ui_rec_width,
9828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        ui_rec_width,
9838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        gau2_ih264_iquant_scale_4x4[ps_cur_mb_info->u1_qp_rem6],
9848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        (UWORD16 *)ps_dec->s_high_profile.i2_scalinglist4x4[0],
9858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        ps_cur_mb_info->u1_qp_div6, ai2_tmp, 1,
9868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        pi2_level);
9878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    }
9888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    else if((CHECKBIT(u4_luma_dc_only_csbp, i)) && pi2_level[0] != 0)
9898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    {
9908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        ps_dec->pf_iquant_itrans_recon_luma_4x4_dc(
9918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        pi2_level,
9928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        pu1_pred_sblk,
9938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        pu1_pred_sblk,
9948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        ui_rec_width,
9958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        ui_rec_width,
9968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        gau2_ih264_iquant_scale_4x4[ps_cur_mb_info->u1_qp_rem6],
9978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        (UWORD16 *)ps_dec->s_high_profile.i2_scalinglist4x4[0],
9988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        ps_cur_mb_info->u1_qp_div6, ai2_tmp, 1,
9998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        pi2_level);
10008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    }
10018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
10028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
10038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
10048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
10058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else if(!ps_cur_mb_info->u1_tran_form8x8)
10068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
10078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD8 u1_is_left_sub_block, u1_is_top_sub_block = uc_useTopMB;
10088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD8 u1_sub_blk_x, u1_sub_blk_y, u1_sub_mb_num;
10098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        WORD8 i1_top_pred_mode;
10108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        WORD8 i1_left_pred_mode;
10118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD8 *pu1_top, *pu1_left, *pu1_top_left, *pu1_top_right;
10128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        WORD8 *pi1_cur_pred_mode, *pi1_left_pred_mode, *pc_topPredMode;
10138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD16 ui2_left_pred_buf_width = 0xffff;
10148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        WORD8 i1_intra_pred;
10158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD8 *pu1_prev_intra4x4_pred_mode_flag = pu1_prev_intra4x4_pred_mode_data;
10168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD8 *pu1_rem_intra4x4_pred_mode = pu1_prev_intra4x4_pred_mode_data + 16;
10178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        WORD16 *pi2_y_coeff1;
10188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD8 u1_cur_sub_block;
10198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD16 ui2_top_rt_mask;
10208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*--------------------------------------------------------------------*/
10228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* 4x4 IntraPrediction                                                */
10238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*--------------------------------------------------------------------*/
10248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* Calculation of Top Right subblock mask                             */
10258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*                                                                    */
10268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* (a) Set it to default mask                                         */
10278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*     [It has 0 for sublocks which will never have top-right sub block] */
10288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*                                                                    */
10298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* (b) If top MB is not available                                     */
10308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*      Clear the bits of the first row sub blocks                    */
10318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*                                                                    */
10328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* (c) Set/Clear bit for top-right sublock of MB                      */
10338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*      [5 sub-block in decoding order] based on TOP RIGHT MB availablity */
10348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*--------------------------------------------------------------------*/
10358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_top = puc_top;
10378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ui2_top_rt_mask = (u1_use_top_right_mb << 3) | (0x5750);
10398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(uc_useTopMB)
10408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ui2_top_rt_mask |= 0x7;
10418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*Top Related initialisations*/
10438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi1_cur_pred_mode = ps_cur_mb_info->ps_curmb->pi1_intrapredmodes;
10468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pc_topPredMode = ps_cur_mb_info->ps_top_mb->pi1_intrapredmodes;
10478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*--------------------------------------
10488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S         if(u1_mbaff)
10498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S         {
10508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S         pi1_cur_pred_mode += (u2_mbx << 2);
10528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S         pc_topPredMode = pi1_cur_pred_mode + ps_cur_mb_info->i1_offset;
10538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S         pi1_cur_pred_mode += (u1_topmb) ? 0: 4;
10548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S         }*/
10558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(u1_top_available)
10578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
10588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(ps_top_mb->u1_mb_type == I_4x4_MB)
10598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                *(WORD32*)pi1_cur_pred_mode = *(WORD32*)pc_topPredMode;
10608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            else
10618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                *(WORD32*)pi1_cur_pred_mode =
10628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                (uc_useTopMB) ? DC_DC_DC_DC : NOT_VALID;
10638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
10648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        else
10658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            *(WORD32*)pi1_cur_pred_mode = NOT_VALID;
10668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* CHANGED CODE */
10678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* CHANGED CODE */
10698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*Left Related initialisations*/
10718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi1_left_pred_mode = ps_dec->pi1_left_pred_mode;
10728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(!u1_mbaff)
10738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
10748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(u1_left_available)
10768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
10778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if(ps_left_mb->u1_mb_type != I_4x4_MB)
10798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    *(WORD32*)pi1_left_pred_mode =
10808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                    (u2_use_left_mb_pack) ?
10818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                    DC_DC_DC_DC :
10828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                            NOT_VALID;
10838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
10858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            else
10868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
10878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                *(WORD32*)pi1_left_pred_mode = NOT_VALID;
10898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
10908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
10928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        else
10938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
10948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            UWORD8 u1_curMbfld = ps_cur_mb_info->u1_mb_field_decodingflag;
10958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            UWORD8 u1_leftMbfld = ps_left_mb->u1_mb_fld;
10968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(u1_curMbfld ^ u1_leftMbfld)
10988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
10998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if(u1_topmb
11018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                | ((u1_topmb == 0)
11028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                && ((ps_curmb - 1)->u1_mb_type
11038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                                != I_4x4_MB)))
11048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
11058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    if(u1_left_available)
11068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    {
11078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        if(ps_left_mb->u1_mb_type != I_4x4_MB)
11088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        {
11098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            if(CHECKBIT(u2_use_left_mb_pack,0) == 0)
11108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                *(WORD32*)pi1_left_pred_mode = NOT_VALID;
11118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            else
11128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                *(WORD32*)pi1_left_pred_mode = DC_DC_DC_DC;
11138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        }
11148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    }
11158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    else
11168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        *(WORD32*)pi1_left_pred_mode = NOT_VALID;
11178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    if(u1_curMbfld)
11198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    {
11208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        if(u1_left_available)
11218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        {
11228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            if((ps_left_mb + 1)->u1_mb_type != I_4x4_MB)
11238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            {
11248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                if(u2_use_left_mb_pack >> 8)
11258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                    *(WORD32*)(pi1_left_pred_mode + 4) =
11268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                    DC_DC_DC_DC;
11278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                else
11288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                    *(WORD32*)(pi1_left_pred_mode + 4) =
11298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                    NOT_VALID;
11308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            }
11318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        }
11328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        else
11338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            *(WORD32*)(pi1_left_pred_mode + 4) = NOT_VALID;
11348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        pi1_left_pred_mode[1] = pi1_left_pred_mode[2];
11358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        pi1_left_pred_mode[2] = pi1_left_pred_mode[4];
11368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        pi1_left_pred_mode[3] = pi1_left_pred_mode[6];
11378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        *(WORD32*)(pi1_left_pred_mode + 4) =
11388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        *(WORD32*)pi1_left_pred_mode;
11398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    }
11408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    else
11418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    {
11428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        pi1_left_pred_mode[7] = pi1_left_pred_mode[3];
11448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        pi1_left_pred_mode[6] = pi1_left_pred_mode[3];
11458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        pi1_left_pred_mode[5] = pi1_left_pred_mode[2];
11468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        pi1_left_pred_mode[4] = pi1_left_pred_mode[2];
11478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        pi1_left_pred_mode[3] = pi1_left_pred_mode[1];
11488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        pi1_left_pred_mode[2] = pi1_left_pred_mode[1];
11498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        pi1_left_pred_mode[1] = pi1_left_pred_mode[0];
11508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    }
11518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
11528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                pi1_left_pred_mode += (u1_topmb) ? 0 : 4;
11538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
11548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            else
11558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
11568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                pi1_left_pred_mode += (u1_topmb) ? 0 : 4;
11588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if(u1_left_available)
11598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
11608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    if(ps_left_mb->u1_mb_type != I_4x4_MB)
11628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        *(WORD32*)pi1_left_pred_mode =
11638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        (u2_use_left_mb_pack) ?
11648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        DC_DC_DC_DC :
11658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                                NOT_VALID;
11668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
11678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                else
11688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    *(WORD32*)pi1_left_pred_mode = NOT_VALID;
11698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
11708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
11718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* One time pointer initialisations*/
11728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_y_coeff1 = pi2_y_coeff;
11738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_top_left = pu1_ytop_left;
11748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* Scan the sub-blocks in Raster Scan Order */
11768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        for(u1_sub_mb_num = 0; u1_sub_mb_num < 16; u1_sub_mb_num++)
11778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
11788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            UWORD8 au1_ngbr_pels[13];
11798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u1_sub_blk_x = u1_sub_mb_num & 0x3;
11818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u1_sub_blk_y = u1_sub_mb_num >> 2;
11828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            i1_top_pred_mode = pi1_cur_pred_mode[u1_sub_blk_x];
11838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            i1_left_pred_mode = pi1_left_pred_mode[u1_sub_blk_y];
11848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u1_use_top_right_mb = (!!CHECKBIT(ui2_top_rt_mask, u1_sub_mb_num));
11858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /*********** left subblock availability**********/
11878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(u1_sub_blk_x)
11888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                u1_is_left_sub_block = 1;
11898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            else
11908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                u1_is_left_sub_block =
11918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                (u1_sub_blk_y < 2) ?
11928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                (CHECKBIT(u2_use_left_mb_pack,
11938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                          0)) :
11948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                (u2_use_left_mb_pack >> 8);
11958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* CHANGED CODE */
11978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(u1_sub_blk_y)
11988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                u1_is_top_sub_block = 1;
11998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
12008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* CHANGED CODE */
12018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /***************** Top *********************/
12028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(ps_dec->u4_use_intrapred_line_copy == 1)
12038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
12048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
12058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if(u1_sub_blk_y)
12068ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                    pu1_top = pu1_luma_rec_buffer - ui_rec_width;
12078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                else
12088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    pu1_top = puc_top + (u1_sub_blk_x << 2);
12098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
12108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            else
12118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
12128ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                pu1_top = pu1_luma_rec_buffer - ui_rec_width;
12138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
12148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /***************** Top Right *********************/
12158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pu1_top_right = pu1_top + 4;
12168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /***************** Top Left *********************/
12178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pu1_top_left = pu1_top - 1;
12188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /***************** Left *********************/
12198ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            pu1_left = pu1_luma_rec_buffer - 1;
12208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* CHANGED CODE */
12218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
12228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /*---------------------------------------------------------------*/
12238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* Calculation of Intra prediction mode                          */
12248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /*---------------------------------------------------------------*/
12258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            i1_intra_pred = ((i1_left_pred_mode < 0) | (i1_top_pred_mode < 0)) ?
12268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            DC : MIN(i1_left_pred_mode, i1_top_pred_mode);
12278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
12288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                UWORD8 u1_packed_modes = (u1_is_top_sub_block << 1)
12298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                + u1_is_left_sub_block;
12308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                UWORD8 *pu1_intra_err_codes =
12318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                (UWORD8 *)gau1_ih264d_intra_pred_err_code;
12328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                UWORD8 uc_b2b0 = ((u1_sub_mb_num & 4) >> 1) | (u1_sub_mb_num & 1);
12338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                UWORD8 uc_b3b1 = ((u1_sub_mb_num & 8) >> 2)
12348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                | ((u1_sub_mb_num & 2) >> 1);
12358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
12368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                u1_cur_sub_block = (uc_b3b1 << 2) + uc_b2b0;
12378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                PROFILE_DISABLE_INTRA_PRED()
12388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if(!pu1_prev_intra4x4_pred_mode_flag[u1_cur_sub_block])
12398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
12408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    i1_intra_pred =
12418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                    pu1_rem_intra4x4_pred_mode[u1_cur_sub_block]
12428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                    + (pu1_rem_intra4x4_pred_mode[u1_cur_sub_block]
12438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                                    >= i1_intra_pred);
12448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
12458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
12468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    UWORD8 u1_err_code = pu1_intra_err_codes[i1_intra_pred];
12478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
12489f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S                    if((u1_err_code & u1_packed_modes) ^ u1_err_code)
12498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                     {
12509f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S                        i1_intra_pred = 0;
12519f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S                        ps_dec->i4_error_code = ERROR_INTRAPRED;
12529f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S                     }
12538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
12548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
12558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
12568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
12578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                /* Get neighbour pixels */
12588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                /* left pels */
12598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if(u1_is_left_sub_block)
12608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
12618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    WORD32 i;
12628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    for(i = 0; i < 4; i++)
12638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        au1_ngbr_pels[4 - 1 - i] = pu1_left[i * ui_rec_width];
12648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
12658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                else
12668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
12678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    memset(au1_ngbr_pels, 0, 4);
12688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
12698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
12708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                /* top left pels */
12718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                au1_ngbr_pels[4] = *pu1_top_left;
12728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
12738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                /* top pels */
12748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if(u1_is_top_sub_block)
12758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
12768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    memcpy(au1_ngbr_pels + 4 + 1, pu1_top, 4);
12778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
12788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                else
12798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
12808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    memset(au1_ngbr_pels + 4 + 1, 0, 4);
12818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
12828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
12838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                /* top right pels */
12848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if(u1_use_top_right_mb)
12858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
12868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    memcpy(au1_ngbr_pels + 4 * 2 + 1, pu1_top_right, 4);
12878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
12888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                else if(u1_is_top_sub_block)
12898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
12908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    memset(au1_ngbr_pels + 4 * 2 + 1, au1_ngbr_pels[4 * 2], 4);
12918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
12928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
12938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            PROFILE_DISABLE_INTRA_PRED()
12948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->apf_intra_pred_luma_4x4[i1_intra_pred](
12958ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                            au1_ngbr_pels, pu1_luma_rec_buffer, 1,
12968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            ui_rec_width,
12978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            ((u1_is_top_sub_block << 2) | u1_is_left_sub_block));
12988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
12998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* CHANGED CODE */
13008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(CHECKBIT(ui2_luma_csbp, u1_sub_mb_num))
13018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
13028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                WORD16 ai2_tmp[16];
13038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                PROFILE_DISABLE_IQ_IT_RECON()
13048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
13058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    if(CHECKBIT(u4_luma_dc_only_csbp, u1_sub_mb_num))
13068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    {
13078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        ps_dec->pf_iquant_itrans_recon_luma_4x4_dc(
13088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        pi2_y_coeff1,
13098ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                                        pu1_luma_rec_buffer,
13108ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                                        pu1_luma_rec_buffer,
13118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        ui_rec_width,
13128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        ui_rec_width,
13138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        gau2_ih264_iquant_scale_4x4[ps_cur_mb_info->u1_qp_rem6],
13148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        (UWORD16 *)ps_dec->s_high_profile.i2_scalinglist4x4[0],
13158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        ps_cur_mb_info->u1_qp_div6, ai2_tmp, 0,
13168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        NULL);
13178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    }
13188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    else
13198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    {
13208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        ps_dec->pf_iquant_itrans_recon_luma_4x4(
13218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        pi2_y_coeff1,
13228ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                                        pu1_luma_rec_buffer,
13238ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                                        pu1_luma_rec_buffer,
13248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        ui_rec_width,
13258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        ui_rec_width,
13268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        gau2_ih264_iquant_scale_4x4[ps_cur_mb_info->u1_qp_rem6],
13278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        (UWORD16 *)ps_dec->s_high_profile.i2_scalinglist4x4[0],
13288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        ps_cur_mb_info->u1_qp_div6, ai2_tmp, 0,
13298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        NULL);
13308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    }
13318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
13328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
13338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
13348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
13358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /*---------------------------------------------------------------*/
13368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* Update sub block number                                       */
13378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /*---------------------------------------------------------------*/
13388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pi2_y_coeff1 += 16;
13398ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            pu1_luma_rec_buffer +=
13408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            (u1_sub_blk_x == 3) ? (ui_rec_width << 2) - 12 : 4;
13418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pu1_luma_pred_buffer +=
13428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            (u1_sub_blk_x == 3) ? (ui_pred_width << 2) - 12 : 4;
13438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* CHANGED CODE */
13448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pi1_cur_pred_mode[u1_sub_blk_x] = i1_intra_pred;
13458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pi1_left_pred_mode[u1_sub_blk_y] = i1_intra_pred;
13468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
13478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
13488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else if((u1_mb_type == I_4x4_MB) && (ps_cur_mb_info->u1_tran_form8x8 == 1))
13498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
13508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD8 u1_is_left_sub_block, u1_is_top_sub_block = uc_useTopMB;
13518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD8 u1_sub_blk_x, u1_sub_blk_y, u1_sub_mb_num;
13528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        WORD8 i1_top_pred_mode;
13538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        WORD8 i1_left_pred_mode;
13548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD8 *pu1_top, *pu1_left, *pu1_top_left;
13558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        WORD8 *pi1_cur_pred_mode, *pi1_left_pred_mode, *pc_topPredMode;
13568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD16 ui2_left_pred_buf_width = 0xffff;
13578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        WORD8 i1_intra_pred;
13588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD8 *pu1_prev_intra4x4_pred_mode_flag = pu1_prev_intra4x4_pred_mode_data;
13598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD8 *pu1_rem_intra4x4_pred_mode = pu1_prev_intra4x4_pred_mode_data + 4;
13608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        WORD16 *pi2_y_coeff1;
13618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD16 ui2_top_rt_mask;
13628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD32 u4_4x4_left_offset = 0;
13638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
13648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*--------------------------------------------------------------------*/
13658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* 8x8 IntraPrediction                                                */
13668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*--------------------------------------------------------------------*/
13678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* Calculation of Top Right subblock mask                             */
13688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*                                                                    */
13698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* (a) Set it to default mask                                         */
13708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*  [It has 0 for sublocks which will never have top-right sub block] */
13718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*                                                                    */
13728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* (b) If top MB is not available                                     */
13738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*      Clear the bits of the first row sub blocks                    */
13748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*                                                                    */
13758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* (c) Set/Clear bit for top-right sublock of MB                      */
13768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*  [5 sub-block in decoding order] based on TOP RIGHT MB availablity */
13778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*                                                                    */
13788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* ui2_top_rt_mask: marks availibility of top right(neighbour)         */
13798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* in the 8x8 Block ordering                                          */
13808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*                                                                    */
13818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*      tr0   tr1                                                     */
13828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*   0    1   tr3                                                     */
13838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*   2    3                                                           */
13848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*                                                                    */
13858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*  Top rights for 0 is in top MB                                     */
13868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*  top right of 1 will be in top right MB                            */
13878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*  top right of 3 in right MB and hence not available                */
13888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*  This corresponds to ui2_top_rt_mask  having default value 0x4      */
13898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*--------------------------------------------------------------------*/
13908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
13918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ui2_top_rt_mask = (u1_use_top_right_mb << 1) | (0x4);
13928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
13938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(uc_useTopMB)
13948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
13958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ui2_top_rt_mask |= 0x1;
13968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
13978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
13988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* Top Related initialisations */
13998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi1_cur_pred_mode = ps_cur_mb_info->ps_curmb->pi1_intrapredmodes;
14008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pc_topPredMode = ps_cur_mb_info->ps_top_mb->pi1_intrapredmodes;
14018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*
14028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S         if(u1_mbaff)
14038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S         {
14048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S         pi1_cur_pred_mode += (u2_mbx << 2);
14058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S         pc_topPredMode = pi1_cur_pred_mode + ps_cur_mb_info->i1_offset;
14068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S         pi1_cur_pred_mode += (u1_topmb) ? 0: 4;
14078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S         }
14088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S         */
14098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(u1_top_available)
14108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
14118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(ps_top_mb->u1_mb_type == I_4x4_MB)
14128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
14138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                *(WORD32*)pi1_cur_pred_mode = *(WORD32*)pc_topPredMode;
14148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
14158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            else
14168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
14178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                *(WORD32*)pi1_cur_pred_mode =
14188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                (uc_useTopMB) ? DC_DC_DC_DC : NOT_VALID;
14198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
14208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
14218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        else
14228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
14238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            *(WORD32*)pi1_cur_pred_mode = NOT_VALID;
14248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
14258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
14268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_top = puc_top - 8;
14278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
14288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*Left Related initialisations*/
14298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi1_left_pred_mode = ps_dec->pi1_left_pred_mode;
14308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
14318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(!u1_mbaff)
14328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
14338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(u1_left_available)
14348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
14358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if(ps_left_mb->u1_mb_type != I_4x4_MB)
14368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
14378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    *(WORD32*)pi1_left_pred_mode =
14388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                    (u2_use_left_mb_pack) ?
14398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                    DC_DC_DC_DC :
14408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                            NOT_VALID;
14418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
14428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
14438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            else
14448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
14458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                *(WORD32*)pi1_left_pred_mode = NOT_VALID;
14468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
14478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
14488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        else
14498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
14508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            UWORD8 u1_curMbfld = ps_cur_mb_info->u1_mb_field_decodingflag;
14518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
14528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            UWORD8 u1_leftMbfld = ps_left_mb->u1_mb_fld;
14538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
14548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if((!u1_curMbfld) && (u1_leftMbfld))
14558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
14568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                u4_4x4_left_offset = 1;
14578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
14588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
14598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(u1_curMbfld ^ u1_leftMbfld)
14608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
14618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
14628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if(u1_topmb
14638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                | ((u1_topmb == 0)
14648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                && ((ps_curmb - 1)->u1_mb_type
14658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                                != I_4x4_MB)))
14668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
14678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
14688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    if(u1_left_available)
14698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    {
14708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        if(ps_left_mb->u1_mb_type != I_4x4_MB)
14718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        {
14728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            if(CHECKBIT(u2_use_left_mb_pack,0) == 0)
14738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            {
14748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                *(WORD32*)pi1_left_pred_mode = NOT_VALID;
14758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            }
14768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            else
14778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            {
14788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                *(WORD32*)pi1_left_pred_mode = DC_DC_DC_DC;
14798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            }
14808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        }
14818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    }
14828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    else
14838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    {
14848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        *(WORD32*)pi1_left_pred_mode = NOT_VALID;
14858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    }
14868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
14878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    if(u1_curMbfld)
14888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    {
14898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        if(u1_left_available)
14908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        {
14918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            if((ps_left_mb + 1)->u1_mb_type != I_4x4_MB)
14928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            {
14938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                if(u2_use_left_mb_pack >> 8)
14948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                {
14958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                    *(WORD32*)(pi1_left_pred_mode + 4) =
14968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                    DC_DC_DC_DC;
14978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                }
14988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                else
14998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                {
15008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                    *(WORD32*)(pi1_left_pred_mode + 4) =
15018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                    NOT_VALID;
15028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                }
15038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            }
15048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        }
15058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        else
15068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        {
15078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            *(WORD32*)(pi1_left_pred_mode + 4) = NOT_VALID;
15088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        }
15098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
15108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        pi1_left_pred_mode[1] = pi1_left_pred_mode[2];
15118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        pi1_left_pred_mode[2] = pi1_left_pred_mode[4];
15128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        pi1_left_pred_mode[3] = pi1_left_pred_mode[6];
15138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        *(WORD32*)(pi1_left_pred_mode + 4) =
15148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        *(WORD32*)pi1_left_pred_mode;
15158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    }
15168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    else
15178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    {
15188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        pi1_left_pred_mode[7] = pi1_left_pred_mode[3];
15198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        pi1_left_pred_mode[6] = pi1_left_pred_mode[3];
15208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        pi1_left_pred_mode[5] = pi1_left_pred_mode[2];
15218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        pi1_left_pred_mode[4] = pi1_left_pred_mode[2];
15228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        pi1_left_pred_mode[3] = pi1_left_pred_mode[1];
15238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        pi1_left_pred_mode[2] = pi1_left_pred_mode[1];
15248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        pi1_left_pred_mode[1] = pi1_left_pred_mode[0];
15258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    }
15268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
15278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                pi1_left_pred_mode += (u1_topmb) ? 0 : 4;
15288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
15298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            else
15308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
15318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                pi1_left_pred_mode += (u1_topmb) ? 0 : 4;
15328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
15338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if(u1_left_available)
15348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
15358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    if(ps_left_mb->u1_mb_type != I_4x4_MB)
15368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    {
15378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        *(WORD32*)pi1_left_pred_mode =
15388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        (u2_use_left_mb_pack) ?
15398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        DC_DC_DC_DC :
15408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                                NOT_VALID;
15418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    }
15428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
15438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                else
15448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
15458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    *(WORD32*)pi1_left_pred_mode = NOT_VALID;
15468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
15478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
15488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
15498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
15508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* One time pointer initialisations*/
15518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_y_coeff1 = pi2_y_coeff;
15528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
15538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(u1_use_top_left_mb)
15548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
15558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pu1_top_left = pu1_ytop_left;
15568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
15578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        else
15588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
15598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pu1_top_left = NULL;
15608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
15618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
15628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* Scan the sub-blocks in Raster Scan Order */
15638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        for(u1_sub_mb_num = 0; u1_sub_mb_num < 4; u1_sub_mb_num++)
15648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
15658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u1_sub_blk_x = (u1_sub_mb_num & 0x1);
15668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u1_sub_blk_y = (u1_sub_mb_num >> 1);
15678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            i1_top_pred_mode = pi1_cur_pred_mode[u1_sub_blk_x << 1];
15688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            i1_left_pred_mode = pi1_left_pred_mode[u1_sub_blk_y << 1];
15698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
15708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(2 == u1_sub_mb_num)
15718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
15728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                i1_left_pred_mode = pi1_left_pred_mode[(u1_sub_blk_y << 1)
15738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                + u4_4x4_left_offset];
15748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
15758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
15768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u1_use_top_right_mb = (!!CHECKBIT(ui2_top_rt_mask, u1_sub_mb_num));
15778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
15788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /*********** left subblock availability**********/
15798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(u1_sub_blk_x)
15808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
15818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                u1_is_left_sub_block = 1;
15828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
15838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            else
15848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
15858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                u1_is_left_sub_block =
15868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                (u1_sub_blk_y < 1) ?
15878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                (CHECKBIT(u2_use_left_mb_pack,
15888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                          0)) :
15898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                (u2_use_left_mb_pack >> 8);
15908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
15918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
15928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /***************** Top *********************/
15938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(u1_sub_blk_y)
15948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
15958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                u1_is_top_sub_block = 1;
15968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                // sushant
15978ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                pu1_top = /*pu1_luma_pred_buffer*/pu1_luma_rec_buffer - ui_rec_width;
15988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
15998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            else
16008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
16018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                pu1_top += 8;
16028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
16038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /***************** Left *********************/
16058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if((u1_sub_blk_x) | (u4_num_pmbair != 0))
16068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
16078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                // sushant
16088ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                pu1_left = /*pu1_luma_pred_buffer*/pu1_luma_rec_buffer - 1;
16098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ui2_left_pred_buf_width = ui_rec_width;
16108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
16118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            else
16128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
16138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                pu1_left = pu1_yleft;
16148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                pu1_yleft += (ui_rec_width << 3);
16158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ui2_left_pred_buf_width = ui_rec_width;
16168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
16178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /***************** Top Left *********************/
16198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(u1_sub_mb_num)
16208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
16218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                pu1_top_left = (u1_sub_blk_x) ?
16228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                pu1_top - 1 : pu1_left - ui_rec_width;
16238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if((u1_sub_blk_x && (!u1_is_top_sub_block))
16258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                || ((!u1_sub_blk_x) && (!u1_is_left_sub_block)))
16268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
16278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    pu1_top_left = NULL;
16288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
16298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
16308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /*---------------------------------------------------------------*/
16328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* Calculation of Intra prediction mode                          */
16338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /*---------------------------------------------------------------*/
16348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            i1_intra_pred = ((i1_left_pred_mode < 0) | (i1_top_pred_mode < 0)) ?
16358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            DC : MIN(i1_left_pred_mode, i1_top_pred_mode);
16368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
16378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                UWORD8 u1_packed_modes = (u1_is_top_sub_block << 1)
16388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                + u1_is_left_sub_block;
16398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                UWORD8 *pu1_intra_err_codes =
16408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                (UWORD8 *)gau1_ih264d_intra_pred_err_code;
16418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                /********************************************************************/
16438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                /* Same intra4x4_pred_mode array is filled with intra4x4_pred_mode  */
16448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                /* for a MB with 8x8 intrapredicition                               */
16458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                /********************************************************************/
16468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                PROFILE_DISABLE_INTRA_PRED()
16478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if(!pu1_prev_intra4x4_pred_mode_flag[u1_sub_mb_num])
16488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
16498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    i1_intra_pred = pu1_rem_intra4x4_pred_mode[u1_sub_mb_num]
16508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                    + (pu1_rem_intra4x4_pred_mode[u1_sub_mb_num]
16518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                    >= i1_intra_pred);
16528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
16538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
16548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    UWORD8 u1_err_code = pu1_intra_err_codes[i1_intra_pred];
16558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    if((u1_err_code & u1_packed_modes) ^ u1_err_code)
16579f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S                    {
16589f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S                        i1_intra_pred = 0;
16598ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                        ps_dec->i4_error_code = ERROR_INTRAPRED;
16609f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S                    }
16618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
16628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
16638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
16658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                UWORD8 au1_ngbr_pels[25];
16668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                WORD32 ngbr_avail;
16678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ngbr_avail = u1_is_left_sub_block << 0;
16688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ngbr_avail |= u1_is_top_sub_block << 2;
16698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if(pu1_top_left)
16718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    ngbr_avail |= 1 << 1;
16728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ngbr_avail |= u1_use_top_right_mb << 3;
16748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                PROFILE_DISABLE_INTRA_PRED()
16758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
16768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    ps_dec->pf_intra_pred_ref_filtering(pu1_left, pu1_top_left,
16778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                        pu1_top, au1_ngbr_pels,
16788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                        ui2_left_pred_buf_width,
16798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                        ngbr_avail);
16808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    ps_dec->apf_intra_pred_luma_8x8[i1_intra_pred](
16828ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                                    au1_ngbr_pels, pu1_luma_rec_buffer, 1,
16838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                    ui_rec_width,
16848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                    ((u1_is_top_sub_block << 2) | u1_is_left_sub_block));
16858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
16868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
16878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* Inverse Transform and Reconstruction */
16898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(CHECKBIT(ps_cur_mb_info->u1_cbp, u1_sub_mb_num))
16908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
16918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                WORD16 *pi2_scale_matrix_ptr;
16928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                WORD16 ai2_tmp[64];
16938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                pi2_scale_matrix_ptr =
16958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                ps_dec->s_high_profile.i2_scalinglist8x8[0];
16968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                PROFILE_DISABLE_IQ_IT_RECON()
16978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
16988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    if(CHECKBIT(u4_luma_dc_only_cbp, u1_sub_mb_num))
16998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    {
17008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        ps_dec->pf_iquant_itrans_recon_luma_8x8_dc(
17018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        pi2_y_coeff1,
17028ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                                        pu1_luma_rec_buffer,
17038ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                                        pu1_luma_rec_buffer,
17048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        ui_rec_width,
17058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        ui_rec_width,
17068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        gau1_ih264d_dequant8x8_cavlc[ps_cur_mb_info->u1_qp_rem6],
17078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        (UWORD16 *)pi2_scale_matrix_ptr,
17088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        ps_cur_mb_info->u1_qp_div6, ai2_tmp, 0,
17098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        NULL);
17108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    }
17118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    else
17128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    {
17138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        ps_dec->pf_iquant_itrans_recon_luma_8x8(
17148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        pi2_y_coeff1,
17158ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                                        pu1_luma_rec_buffer,
17168ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                                        pu1_luma_rec_buffer,
17178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        ui_rec_width,
17188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        ui_rec_width,
17198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        gau1_ih264d_dequant8x8_cavlc[ps_cur_mb_info->u1_qp_rem6],
17208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        (UWORD16 *)pi2_scale_matrix_ptr,
17218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        ps_cur_mb_info->u1_qp_div6, ai2_tmp, 0,
17228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        NULL);
17238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    }
17248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
17258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
17278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /*---------------------------------------------------------------*/
17298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* Update sub block number                                       */
17308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /*---------------------------------------------------------------*/
17318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pi2_y_coeff1 += 64;
17328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17338ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            pu1_luma_rec_buffer +=
17348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            (u1_sub_blk_x == 1) ?
17358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            (ui_rec_width << 3) - (8 * 1) : 8;
17368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /*---------------------------------------------------------------*/
17388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* Pred mode filled in terms of 4x4 block so replicated in 2     */
17398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* locations.                                                    */
17408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /*---------------------------------------------------------------*/
17418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pi1_cur_pred_mode[u1_sub_blk_x << 1] = i1_intra_pred;
17428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pi1_cur_pred_mode[(u1_sub_blk_x << 1) + 1] = i1_intra_pred;
17438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pi1_left_pred_mode[u1_sub_blk_y << 1] = i1_intra_pred;
17448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pi1_left_pred_mode[(u1_sub_blk_y << 1) + 1] = i1_intra_pred;
17458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
17468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
17478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Decode Chroma Block */
17488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ih264d_unpack_chroma_coeff4x4_mb(ps_dec,
17498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                     ps_cur_mb_info);
17508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*--------------------------------------------------------------------*/
17518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Chroma Blocks decoding                                             */
17528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*--------------------------------------------------------------------*/
17538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
17548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD8 u1_intra_chrom_pred_mode;
17558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD8 u1_chroma_cbp = (UWORD8)(ps_cur_mb_info->u1_cbp >> 4);
17568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*--------------------------------------------------------------------*/
17588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* Perform Chroma intra prediction                                    */
17598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*--------------------------------------------------------------------*/
17608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        u1_intra_chrom_pred_mode = CHROMA_TO_LUMA_INTRA_MODE(
17628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        ps_cur_mb_info->u1_chroma_pred_mode);
17638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
17658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            UWORD8 u1_packed_modes = (u1_top_available << 1)
17668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            + u1_left_available;
17678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            UWORD8 u1_err_code =
17688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            (u1_intra_chrom_pred_mode & 1) ?
17698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            u1_intra_chrom_pred_mode :
17708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            (u1_intra_chrom_pred_mode ^ 2);
17718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if((u1_err_code & u1_packed_modes) ^ u1_err_code)
17729f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S            {
17739f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S                u1_intra_chrom_pred_mode = 0;
17748ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                ps_dec->i4_error_code = ERROR_INTRAPRED;
17759f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S            }
17768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
17778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* CHANGED CODE */
17798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(u1_chroma_cbp != CBPC_ALLZERO)
17808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
17818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            UWORD16 u2_chroma_csbp =
17828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            (u1_chroma_cbp == CBPC_ACZERO) ?
17838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            0 : ps_cur_mb_info->u2_chroma_csbp;
17848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            UWORD32 u4_scale_u;
17858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            UWORD32 u4_scale_v;
17868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
17888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                UWORD16 au2_ngbr_pels[33];
17898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                UWORD8 *pu1_ngbr_pels = (UWORD8 *)au2_ngbr_pels;
17908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                UWORD16 *pu2_left_uv;
17918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                UWORD16 *pu2_topleft_uv;
17928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                WORD32 use_left1 = (u2_use_left_mb_pack & 0x0ff);
17938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                WORD32 use_left2 = (u2_use_left_mb_pack & 0xff00) >> 8;
17948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                pu2_left_uv = (UWORD16 *)pu1_uleft;
17968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                pu2_topleft_uv = (UWORD16 *)pu1_u_top_left;
17978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                /* Get neighbour pixels */
17988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                /* left pels */
17998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if(u2_use_left_mb_pack)
18008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
18018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    WORD32 i;
18028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    if(use_left1)
18038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    {
18048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        for(i = 0; i < 4; i++)
18058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            au2_ngbr_pels[8 - 1 - i] = pu2_left_uv[i
18068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            * u4_recwidth_cr / YUV420SP_FACTOR];
18078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    }
18088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    else
18098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    {
18108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        memset(au2_ngbr_pels + 4, 0, 4 * sizeof(UWORD16));
18118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    }
18128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
18138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    if(use_left2)
18148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    {
18158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        for(i = 4; i < 8; i++)
18168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            au2_ngbr_pels[8 - 1 - i] = pu2_left_uv[i
18178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            * u4_recwidth_cr / YUV420SP_FACTOR];
18188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    }
18198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    else
18208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    {
18218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        memset(au2_ngbr_pels, 0, 4 * sizeof(UWORD16));
18228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    }
18238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
18248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                else
18258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
18268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    memset(au2_ngbr_pels, 0, 8 * sizeof(UWORD16));
18278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
18288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
18298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                /* top left pels */
18308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                au2_ngbr_pels[8] = *pu2_topleft_uv;
18318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
18328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                /* top pels */
18338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if(uc_useTopMB)
18348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
18358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    memcpy(au2_ngbr_pels + 8 + 1, pu1_top_u,
18368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                           8 * sizeof(UWORD16));
18378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
18388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                else
18398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
18408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    memset(au2_ngbr_pels + 8 + 1, 0, 8 * sizeof(UWORD16));
18418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
18428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
18438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                PROFILE_DISABLE_INTRA_PRED()
18448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ps_dec->apf_intra_pred_chroma[u1_intra_chrom_pred_mode](
18458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                pu1_ngbr_pels,
18468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                pu1_mb_cb_rei1_buffer,
18478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                1,
18488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                u4_recwidth_cr,
18498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                ((uc_useTopMB << 2) | (use_left2 << 4)
18508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                | use_left1));
18518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
18528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u4_scale_u = ps_cur_mb_info->u1_qpc_div6;
18538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u4_scale_v = ps_cur_mb_info->u1_qpcr_div6;
18548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pi2_y_coeff = ps_dec->pi2_coeff_data;
18558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
18568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
18578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                UWORD32 i;
18588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                WORD16 ai2_tmp[16];
18598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                for(i = 0; i < 4; i++)
18608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
18618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    WORD16 *pi2_level = pi2_y_coeff + (i << 4);
18628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    UWORD8 *pu1_pred_sblk = pu1_mb_cb_rei1_buffer
18638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                    + ((i & 0x1) * BLK_SIZE * YUV420SP_FACTOR)
18648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                    + (i >> 1) * (u4_recwidth_cr << 2);
18658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    PROFILE_DISABLE_IQ_IT_RECON()
18668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    {
18678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        if(CHECKBIT(u2_chroma_csbp, i))
18688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        {
18698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            ps_dec->pf_iquant_itrans_recon_chroma_4x4(
18708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            pi2_level,
18718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            pu1_pred_sblk,
18728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            pu1_pred_sblk,
18738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            u4_recwidth_cr,
18748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            u4_recwidth_cr,
18758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            gau2_ih264_iquant_scale_4x4[ps_cur_mb_info->u1_qpc_rem6],
18768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            (UWORD16 *)ps_dec->s_high_profile.i2_scalinglist4x4[1],
18778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            u4_scale_u, ai2_tmp, pi2_level);
18788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        }
18798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        else if(pi2_level[0] != 0)
18808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        {
18818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            ps_dec->pf_iquant_itrans_recon_chroma_4x4_dc(
18828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            pi2_level,
18838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            pu1_pred_sblk,
18848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            pu1_pred_sblk,
18858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            u4_recwidth_cr,
18868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            u4_recwidth_cr,
18878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            gau2_ih264_iquant_scale_4x4[ps_cur_mb_info->u1_qpc_rem6],
18888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            (UWORD16 *)ps_dec->s_high_profile.i2_scalinglist4x4[1],
18898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            u4_scale_u, ai2_tmp, pi2_level);
18908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        }
18918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    }
18928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
18938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
18948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
18958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
18968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pi2_y_coeff += MB_CHROM_SIZE;
18978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u2_chroma_csbp = u2_chroma_csbp >> 4;
18988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
18998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                UWORD32 i;
19008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                WORD16 ai2_tmp[16];
19018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                for(i = 0; i < 4; i++)
19028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
19038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    WORD16 *pi2_level = pi2_y_coeff + (i << 4);
19048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    UWORD8 *pu1_pred_sblk = pu1_mb_cb_rei1_buffer + 1
19058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                    + ((i & 0x1) * BLK_SIZE * YUV420SP_FACTOR)
19068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                    + (i >> 1) * (u4_recwidth_cr << 2);
19078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    PROFILE_DISABLE_IQ_IT_RECON()
19088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    {
19098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        if(CHECKBIT(u2_chroma_csbp, i))
19108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        {
19118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            ps_dec->pf_iquant_itrans_recon_chroma_4x4(
19128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            pi2_level,
19138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            pu1_pred_sblk,
19148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            pu1_pred_sblk,
19158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            u4_recwidth_cr,
19168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            u4_recwidth_cr,
19178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            gau2_ih264_iquant_scale_4x4[ps_cur_mb_info->u1_qpcr_rem6],
19188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            (UWORD16 *)ps_dec->s_high_profile.i2_scalinglist4x4[2],
19198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            u4_scale_v, ai2_tmp, pi2_level);
19208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        }
19218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        else if(pi2_level[0] != 0)
19228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        {
19238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            ps_dec->pf_iquant_itrans_recon_chroma_4x4_dc(
19248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            pi2_level,
19258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            pu1_pred_sblk,
19268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            pu1_pred_sblk,
19278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            u4_recwidth_cr,
19288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            u4_recwidth_cr,
19298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            gau2_ih264_iquant_scale_4x4[ps_cur_mb_info->u1_qpcr_rem6],
19308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            (UWORD16 *)ps_dec->s_high_profile.i2_scalinglist4x4[2],
19318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            u4_scale_v, ai2_tmp, pi2_level);
19328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        }
19338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    }
19348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
19358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
19368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
19378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
19388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        else
19398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
19408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* If no inverse transform is needed, pass recon buffer pointer */
19418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* to Intraprediction module instead of pred buffer pointer     */
19428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
19438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                UWORD16 au2_ngbr_pels[33];
19448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                UWORD8 *pu1_ngbr_pels = (UWORD8 *)au2_ngbr_pels;
19458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                UWORD16 *pu2_left_uv;
19468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                UWORD16 *pu2_topleft_uv;
19478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                WORD32 use_left1 = (u2_use_left_mb_pack & 0x0ff);
19488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                WORD32 use_left2 = (u2_use_left_mb_pack & 0xff00) >> 8;
19498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1950086dd8ea90eaf4ead8b4927e777b1c8a19bd23a9Martin Storsjo                pu2_topleft_uv = (UWORD16 *)pu1_u_top_left;
1951086dd8ea90eaf4ead8b4927e777b1c8a19bd23a9Martin Storsjo                pu2_left_uv = (UWORD16 *)pu1_uleft;
1952086dd8ea90eaf4ead8b4927e777b1c8a19bd23a9Martin Storsjo
19538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                /* Get neighbour pixels */
19548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                /* left pels */
19558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if(u2_use_left_mb_pack)
19568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
19578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    WORD32 i;
19588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    if(use_left1)
19598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    {
19608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        for(i = 0; i < 4; i++)
19618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            au2_ngbr_pels[8 - 1 - i] = pu2_left_uv[i
19628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            * u4_recwidth_cr / YUV420SP_FACTOR];
19638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    }
19648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    else
19658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    {
19668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        memset(au2_ngbr_pels + 4, 0, 4 * sizeof(UWORD16));
19678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    }
19688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
19698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    if(use_left2)
19708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    {
19718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        for(i = 4; i < 8; i++)
19728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            au2_ngbr_pels[8 - 1 - i] = pu2_left_uv[i
19738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            * u4_recwidth_cr / YUV420SP_FACTOR];
19748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    }
19758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    else
19768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    {
19778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        memset(au2_ngbr_pels, 0, 4 * sizeof(UWORD16));
19788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    }
19798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
19808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
19818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                else
19828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
19838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    memset(au2_ngbr_pels, 0, 8 * sizeof(UWORD16));
19848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
19858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
19868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                /* top left pels */
19878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                au2_ngbr_pels[8] = *pu2_topleft_uv;
19888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
19898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                /* top pels */
19908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if(uc_useTopMB)
19918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
19928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    memcpy(au2_ngbr_pels + 8 + 1, pu1_top_u,
19938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                           8 * sizeof(UWORD16));
19948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
19958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                else
19968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
19978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    memset(au2_ngbr_pels + 8 + 1, 0, 8 * sizeof(UWORD16));
19988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
19998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
20008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                PROFILE_DISABLE_INTRA_PRED()
20018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ps_dec->apf_intra_pred_chroma[u1_intra_chrom_pred_mode](
20028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                pu1_ngbr_pels,
20038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                pu1_mb_cb_rei1_buffer,
20048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                1,
20058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                u4_recwidth_cr,
20068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                ((uc_useTopMB << 2) | (use_left2 << 4)
20078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                | use_left1));
20088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
20098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
20108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
20118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
20128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
20138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return OK;
20148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
2015