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