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_bslice.c 238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \brief 258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Contains routines that decode B slice type 268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Detailed_description 288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \date 308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 21/12/2002 318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \author NS 338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ************************************************************************** 348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */ 358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_typedefs.h" 368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_macros.h" 378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_platform_macros.h" 388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include <string.h> 408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_structs.h" 418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_bitstrm.h" 428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_parse_cavlc.h" 438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_mb_utils.h" 448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_mvpred.h" 458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_inter_pred.h" 468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_process_pslice.h" 478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_error_handler.h" 488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_tables.h" 498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_parse_slice.h" 508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_process_pslice.h" 518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_process_bslice.h" 528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_tables.h" 538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_parse_islice.h" 548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_mvpred.h" 558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_init_cabac_contexts(UWORD8 u1_slice_type, dec_struct_t * ps_dec); 578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S//UWORD32 g_hits = 0; 588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S//UWORD32 g_miss = 0; 598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*! 608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ************************************************************************** 618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \if Function name : ih264d_decode_spatial_direct \endif 628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \brief 648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Decodes spatial direct mode. 658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \return 678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * None. 688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Arunoday T 698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ************************************************************************** 708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */ 718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SWORD32 ih264d_decode_spatial_direct(dec_struct_t * ps_dec, 728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_wd_x, 738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S dec_mb_info_t * ps_cur_mb_info, 748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_mb_num) 758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S mv_pred_t s_mv_pred, *ps_mv; 778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_col_zero_flag, u1_sub_mb_num, u1_direct_zero_pred_flag = 0; 788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_mbaff = ps_dec->ps_cur_slice->u1_mbaff_frame_flag; 798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S mv_pred_t *ps_mv_ntop_start; 808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S mv_pred_t *ps_mv_nmb_start = ps_dec->ps_mv_cur + (u1_mb_num << 4); 818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 partition_size, sub_partition, u1_mb_partw, u1_mb_parth; 828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 i; 838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 i1_pred, i1_ref_frame0, i1_ref_frame1; 848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S struct pic_buffer_t *ps_ref_frame = NULL, *ps_col_pic, *ps_pic_buff0 = NULL, 858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *ps_pic_buff1 = NULL; 868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_zero_pred_cond_f, u1_zero_pred_cond_b; 888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 i2_def_mv[2], i2_spat_pred_mv[4], *pi2_final_mv0, *pi2_final_mv1; 898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD16 ui2_mask_fwd = 0, ui2_mask_bwd = 0, u2_mask = 0; 908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 *pui32_weight_ofsts = NULL; 918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S directmv_t s_mvdirect; 928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_colz; 938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_final_ref_idx = 0; 948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD8 *pu1_mb_parth = (const UWORD8 *)gau1_ih264d_mb_parth; 958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD8 *pu1_mb_partw = (const UWORD8 *)gau1_ih264d_mb_partw; 968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD16 sub_mask_table[] = 978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 0x33, 0x3, 0x11, 0x1 }; 988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD16 mask_table[] = 998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 0xffff, /*16x16 NA */ 1008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 0xff, /* 16x8*/ 1018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 0x3333, /* 8x16*/ 1028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 0x33 };/* 8x8*/ 1038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S mv_pred_t s_temp_mv_pred; 1048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 ret = 0; 1058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* CHANGED CODE */ 1078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_mv_ntop_start = ps_dec->ps_mv_cur + (u1_mb_num << 4) 1088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S - (ps_dec->u2_frm_wd_in_mbs << (4 + u1_mbaff)) + 12; 1098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* assign default values for MotionVector as zero */ 1118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_def_mv[0] = 0; 1128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_def_mv[1] = 0; 1138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_direct_zero_pred_flag = ps_dec->pf_mvpred(ps_dec, ps_cur_mb_info, ps_mv_nmb_start, 1158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_mv_ntop_start, &s_mv_pred, 0, 4, 1168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 0, 1, B_DIRECT_SPATIAL); 1178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_spat_pred_mv[0] = s_mv_pred.i2_mv[0]; 1198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_spat_pred_mv[1] = s_mv_pred.i2_mv[1]; 1208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_spat_pred_mv[2] = s_mv_pred.i2_mv[2]; 1218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_spat_pred_mv[3] = s_mv_pred.i2_mv[3]; 1228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i1_ref_frame0 = s_mv_pred.i1_ref_frame[0]; 1248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i1_ref_frame1 = s_mv_pred.i1_ref_frame[1]; 1258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i1_ref_frame0 = (i1_ref_frame0 < 0) ? -1 : i1_ref_frame0; 1278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i1_ref_frame1 = (i1_ref_frame1 < 0) ? -1 : i1_ref_frame1; 1288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i1_pred = 0; 1308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 1328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 u1_ref_idx, u1_ref_idx1; 1338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 uc_Idx, uc_Idx1; 1348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_scale_ref = (ps_dec->ps_cur_slice->u1_mbaff_frame_flag 1358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S && ps_cur_mb_info->u1_mb_field_decodingflag); 1368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_final_ref_idx = i1_ref_frame0; 1378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(i1_ref_frame0 >= 0) 1388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 1398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* convert RefIdx if it is MbAff */ 1408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_ref_idx = i1_ref_frame0; 1418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_ref_idx1 = i1_ref_frame0; 1428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_scale_ref) 1438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 1448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_ref_idx1 = u1_ref_idx >> 1; 1458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((u1_ref_idx & 0x01) != (1 - ps_cur_mb_info->u1_topmb)) 1468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_ref_idx1 += MAX_REF_BUFS; 1478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 1488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* If i1_ref_frame0 < 0 then refIdxCol is obtained from ps_pic_buff1 */ 1498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_pic_buff0 = ps_dec->ps_ref_pic_buf_lx[0][u1_ref_idx1]; 1508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_frame = ps_pic_buff0; 1518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i1_pred = PRED_L0; 1528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 1538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(i1_ref_frame1 >= 0) 1558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 1568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* convert RefIdx if it is MbAff */ 1578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_ref_idx = i1_ref_frame1; 1588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_ref_idx1 = i1_ref_frame1; 1598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_scale_ref) 1608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 1618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_ref_idx1 = u1_ref_idx >> 1; 1628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((u1_ref_idx & 0x01) != (1 - ps_cur_mb_info->u1_topmb)) 1638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_ref_idx1 += MAX_REF_BUFS; 1648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 1658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_pic_buff1 = ps_dec->ps_ref_pic_buf_lx[1][u1_ref_idx1]; 1668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i1_pred = i1_pred | PRED_L1; 1678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 1688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(i1_ref_frame0 < 0) 1698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 1708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_frame = ps_pic_buff1; 1718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_final_ref_idx = i1_ref_frame1; 1728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 1738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_zero_pred_cond_f = (u1_direct_zero_pred_flag) || (i1_ref_frame0 < 0); 1758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_zero_pred_cond_b = (u1_direct_zero_pred_flag) || (i1_ref_frame1 < 0); 1768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_dec->ps_cur_pps->u1_wted_bipred_idc) 1788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 1798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_Idx = ((i1_ref_frame0 < 1) ? 0 : i1_ref_frame0) 1808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * ps_dec->ps_cur_slice->u1_num_ref_idx_lx_active[1]; 1818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_scale_ref) 1828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_Idx >>= 1; 1838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_Idx1 = (i1_ref_frame1 < 0) ? 0 : i1_ref_frame1; 1848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_Idx += (u1_scale_ref) ? (uc_Idx1 >> 1) : uc_Idx1; 1858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pui32_weight_ofsts = 1868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (UWORD32*)&ps_dec->pu4_wt_ofsts[2 * X3(uc_Idx)]; 1878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(i1_ref_frame0 < 0) 1898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pui32_weight_ofsts += 1; 1908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_scale_ref && (ps_dec->ps_cur_pps->u1_wted_bipred_idc == 2)) 1928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 1938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 i2_ref_idx; 1948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_ref_idx = MAX(i1_ref_frame0, 0); 1958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_ref_idx *= (ps_dec->ps_cur_slice->u1_num_ref_idx_lx_active[1] 1968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S << 1); 1978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_ref_idx += MAX(i1_ref_frame1, 0); 1988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!ps_cur_mb_info->u1_topmb) 1998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_ref_idx += 2008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ps_dec->ps_cur_slice->u1_num_ref_idx_lx_active[0] 2018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S << 1) 2028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * (ps_dec->ps_cur_slice->u1_num_ref_idx_lx_active[1] 2038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S << 1); 2048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pui32_weight_ofsts = (UWORD32*)&ps_dec->pu4_mbaff_wt_mat[2 2058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * X3(i2_ref_idx)]; 2068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 2078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 2088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 2098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S s_temp_mv_pred.i1_ref_frame[0] = i1_ref_frame0; 2118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S s_temp_mv_pred.i1_ref_frame[1] = i1_ref_frame1; 2128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S s_temp_mv_pred.u1_col_ref_pic_idx = ps_ref_frame->u1_mv_buf_id; 2138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S s_temp_mv_pred.u1_pic_type = ps_ref_frame->u1_pic_type; 2148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /**********************************************************************/ 2168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Call the function which gets the number of partitions and */ 2178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* partition info of colocated Mb */ 2188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /**********************************************************************/ 2198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pf_parse_mvdirect(ps_dec, ps_dec->ps_col_pic, &s_mvdirect, u1_wd_x, 2218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->i4_submb_ofst, ps_cur_mb_info); 2228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_col_pic = ps_dec->ps_col_pic; 2238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((s_mvdirect.u1_col_zeroflag_change == 0) || u1_direct_zero_pred_flag) 2248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 2258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 i2_mv_x, i2_mv_y, i2_mvX1, i2_mvY1; 2268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Most probable case */ 2278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_col_zero_flag = *(ps_col_pic->pu1_col_zero_flag 2288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + s_mvdirect.i4_mv_indices[0]); 2298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_col_zero_flag = u1_col_zero_flag & 0x01; 2308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_zero_pred_cond_f || ((i1_ref_frame0 == 0) && (u1_col_zero_flag == 1))) 2328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 2338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mv_x = 0; 2348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mv_y = 0; 2358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 2368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 2378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 2388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mv_x = i2_spat_pred_mv[0]; 2398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mv_y = i2_spat_pred_mv[1]; 2408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 2428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_zero_pred_cond_b || ((i1_ref_frame1 == 0) && (u1_col_zero_flag == 1))) 2448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 2458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mvX1 = 0; 2468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mvY1 = 0; 2478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 2488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 2498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 2508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mvX1 = i2_spat_pred_mv[2]; 2518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mvY1 = i2_spat_pred_mv[3]; 2528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 2538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_sub_mb_num = ps_dec->u1_sub_mb_num; 2558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_mb_partw = (u1_wd_x >> 2); 2568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(i1_ref_frame0 >= 0) 2598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 2608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 2618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pred_info_pkd_t *ps_pred_pkd; 2628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 i2_mv[2]; 2638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 i1_ref_idx= 0; 2648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mv[0] = i2_mv_x; 2668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mv[1] = i2_mv_y; 2678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_pred_pkd = ps_dec->ps_pred_pkd + ps_dec->u4_pred_info_pkd_idx; 2698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264d_fill_pred_info(i2_mv,u1_mb_partw,u1_mb_partw,u1_sub_mb_num,i1_pred, 2708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_pred_pkd,ps_pic_buff0->u1_pic_buf_id,i1_ref_idx,pui32_weight_ofsts, 2718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_pic_buff0->u1_pic_type); 2728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->u4_pred_info_pkd_idx++; 2738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_info->u1_num_pred_parts++; 2748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 2778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 2798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(i1_ref_frame1 >= 0) 2818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 2828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 2838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pred_info_pkd_t *ps_pred_pkd; 2848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 i2_mv[2]; 2858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 i1_ref_idx= 0; 2868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mv[0] = i2_mvX1; 2888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mv[1] = i2_mvY1; 2898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_pred_pkd = ps_dec->ps_pred_pkd + ps_dec->u4_pred_info_pkd_idx; 2918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264d_fill_pred_info(i2_mv,u1_mb_partw,u1_mb_partw,u1_sub_mb_num,i1_pred, 2928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_pred_pkd,ps_pic_buff1->u1_pic_buf_id,i1_ref_idx,pui32_weight_ofsts, 2938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_pic_buff1->u1_pic_type); 2948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->u4_pred_info_pkd_idx++; 2958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_info->u1_num_pred_parts++; 2968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 2998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 3008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Replication optimisation */ 3038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S s_temp_mv_pred.i2_mv[0] = i2_mv_x; 3048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S s_temp_mv_pred.i2_mv[1] = i2_mv_y; 3058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S s_temp_mv_pred.i2_mv[2] = i2_mvX1; 3068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S s_temp_mv_pred.i2_mv[3] = i2_mvY1; 3078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Calculating colocated zero information */ 3098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 3108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*************************************/ 3118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* If(bit2 and bit3 set) */ 3128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* then */ 3138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* (bit0 and bit1) => submmbmode */ 3148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* (bit2 and bit3) => mbmode */ 3158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* else */ 3168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* (bit0 and bit1) => mbmode */ 3178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*************************************/ 3188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*UWORD8 u1_packed_mb_sub_mb_mode = sub_partition ? 3198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (s_mvdirect.i1_partitionsize[0]) : ((s_mvdirect.i1_partitionsize[0]) << 2);*/ 3208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_packed_mb_sub_mb_mode = (u1_mb_partw == 2) ? 0x03 : 0; 3218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(i1_ref_frame0 < 0) 3238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 3248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mv_x = i2_mvX1; 3258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mv_y = i2_mvY1; 3268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 3278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Change from left shift 4 to 6 - Varun */ 3298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_colz = (ps_cur_mb_info->u1_mb_field_decodingflag << 1) 3308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | ((u1_final_ref_idx == 0) && (ABS(i2_mv_x) <= 1) 3318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S && (ABS(i2_mv_y) <= 1)); 3328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_colz |= (u1_packed_mb_sub_mb_mode << 6); 3338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 3348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_mv = ps_mv_nmb_start + u1_sub_mb_num; 3358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264d_rep_mv_colz(ps_dec, &s_temp_mv_pred, ps_mv, u1_sub_mb_num, u1_colz, 3368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_mb_partw, u1_mb_partw); 3378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_wd_x == MB_SIZE) 3388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->u1_currB_type = 0; 3398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return OK; 3438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 3448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /***************************************************************************/ 3458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* If present MB is 16x16 and the partition of colocated Mb is >= PRED_8x8 */ 3468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* i.e 8x8 or less than 8x8 partitions then set up DMA for (0,0) and */ 3478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* spatially predicted motion vector and do the multiplexing after */ 3488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* motion compensation */ 3498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /***************************************************************************/ 3508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((u1_wd_x == MB_SIZE) && (s_mvdirect.i1_num_partitions > 2)) 3538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 3548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_info->u1_Mux = 1; 3558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(i1_ref_frame0 >= 0) 3568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 3578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 3598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pred_info_pkd_t *ps_pred_pkd; 3608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 i1_ref_idx= 0; 3618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_pred_pkd = ps_dec->ps_pred_pkd + ps_dec->u4_pred_info_pkd_idx; 3638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264d_fill_pred_info(&(i2_spat_pred_mv[0]),4,4,0,i1_pred, 3648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_pred_pkd,ps_pic_buff0->u1_pic_buf_id,i1_ref_idx,pui32_weight_ofsts, 3658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_pic_buff0->u1_pic_type); 3668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->u4_pred_info_pkd_idx++; 3678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_info->u1_num_pred_parts++; 3688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 3718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /****** (0,0) Motion vectors DMA *****/ 3738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 3748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pred_info_pkd_t *ps_pred_pkd; 3758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 i2_mv[2]; 3768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 i1_ref_idx= 0; 3778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mv[0] = 0; 3798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mv[1] = 0; 3808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_pred_pkd = ps_dec->ps_pred_pkd + ps_dec->u4_pred_info_pkd_idx; 3828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264d_fill_pred_info(i2_mv,4,4,0,i1_pred, 3838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_pred_pkd,ps_pic_buff0->u1_pic_buf_id,i1_ref_idx,pui32_weight_ofsts, 3848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_pic_buff0->u1_pic_type); 3858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->u4_pred_info_pkd_idx++; 3868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_info->u1_num_pred_parts++; 3878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 3908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 3918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(i1_ref_frame1 >= 0) 3928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 3938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 3948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pred_info_pkd_t *ps_pred_pkd; 3958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 i2_mv[2]; 3968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 i1_ref_idx= 0; 3978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_pred_pkd = ps_dec->ps_pred_pkd + ps_dec->u4_pred_info_pkd_idx; 3998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264d_fill_pred_info(&(i2_spat_pred_mv[2]),4,4,0,i1_pred, 4008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_pred_pkd,ps_pic_buff1->u1_pic_buf_id,i1_ref_idx,pui32_weight_ofsts, 4018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_pic_buff1->u1_pic_type); 4028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->u4_pred_info_pkd_idx++; 4038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_info->u1_num_pred_parts++; 4048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 4078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /****** (0,0) Motion vectors DMA *****/ 4098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 4118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pred_info_pkd_t *ps_pred_pkd; 4128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 i2_mv[2]; 4138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 i1_ref_idx= 0; 4148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mv[0] = 0; 4168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mv[1] = 0; 4178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_pred_pkd = ps_dec->ps_pred_pkd + ps_dec->u4_pred_info_pkd_idx; 4198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264d_fill_pred_info(i2_mv,4,4,0,i1_pred, 4208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_pred_pkd,ps_pic_buff1->u1_pic_buf_id,i1_ref_idx,pui32_weight_ofsts, 4218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_pic_buff1->u1_pic_type); 4228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->u4_pred_info_pkd_idx++; 4238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_info->u1_num_pred_parts++; 4248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 4278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 4288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 4298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*u1_col = *(ps_col_pic->pu1_col_zero_flag + s_mvdirect.i4_mv_indices[0]); 4318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_col &= 1; 4328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_init = 0;*/ 4338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i = 0; i < s_mvdirect.i1_num_partitions; i++) 4358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 4368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S partition_size = s_mvdirect.i1_partitionsize[i]; 4378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_sub_mb_num = s_mvdirect.i1_submb_num[i]; 4388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S sub_partition = partition_size >> 2; 4408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S partition_size &= 0x3; 4418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_mb_partw = pu1_mb_partw[partition_size]; 4428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_mb_parth = pu1_mb_parth[partition_size]; 4438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_mask = mask_table[partition_size]; 4448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(sub_partition != 0) 4458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 4468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_mb_partw >>= 1; 4478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_mb_parth >>= 1; 4488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_mask = sub_mask_table[partition_size]; 4498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 4508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_col_zero_flag = *(ps_col_pic->pu1_col_zero_flag 4528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + s_mvdirect.i4_mv_indices[i]); 4538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_col_zero_flag = u1_col_zero_flag & 0x01; 4548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*if(u1_col != u1_col_zero_flag) 4568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_init = 1;*/ 4578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_zero_pred_cond_f || ((i1_ref_frame0 == 0) && (u1_col_zero_flag == 1))) 4598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 4608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pi2_final_mv0 = &i2_def_mv[0]; 4618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ui2_mask_fwd |= (u2_mask << u1_sub_mb_num); 4628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 4638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 4648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pi2_final_mv0 = &i2_spat_pred_mv[0]; 4658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_zero_pred_cond_b || ((i1_ref_frame1 == 0) && (u1_col_zero_flag == 1))) 4678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 4688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pi2_final_mv1 = &i2_def_mv[0]; 4698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ui2_mask_bwd |= (u2_mask << u1_sub_mb_num); 4708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 4718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 4728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pi2_final_mv1 = &i2_spat_pred_mv[2]; 4738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_cur_mb_info->u1_Mux != 1) 4758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 4768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*u1_sub_mb_x = u1_sub_mb_num & 0x03; 4778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_sub_mb_y = (u1_sub_mb_num >> 2);*/ 4788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(i1_ref_frame0 >= 0) 4798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 4808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 4828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pred_info_pkd_t *ps_pred_pkd; 4838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 i1_ref_idx= 0; 4848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_pred_pkd = ps_dec->ps_pred_pkd + ps_dec->u4_pred_info_pkd_idx; 4868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264d_fill_pred_info(pi2_final_mv0,u1_mb_partw,u1_mb_parth,u1_sub_mb_num,i1_pred, 4878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_pred_pkd,ps_pic_buff0->u1_pic_buf_id,i1_ref_idx,pui32_weight_ofsts, 4888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_pic_buff0->u1_pic_type); 4898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->u4_pred_info_pkd_idx++; 4908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_info->u1_num_pred_parts++; 4918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 4948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 4968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(i1_ref_frame1 >= 0) 4988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 4998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 5008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pred_info_pkd_t *ps_pred_pkd; 5018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 i1_ref_idx= 0; 5028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_pred_pkd = ps_dec->ps_pred_pkd + ps_dec->u4_pred_info_pkd_idx; 5048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264d_fill_pred_info(pi2_final_mv1,u1_mb_partw,u1_mb_parth,u1_sub_mb_num,i1_pred, 5058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_pred_pkd,ps_pic_buff1->u1_pic_buf_id,i1_ref_idx,pui32_weight_ofsts, 5068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_pic_buff1->u1_pic_type); 5078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->u4_pred_info_pkd_idx++; 5088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_info->u1_num_pred_parts++; 5098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 5128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 5138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 5148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Replication optimisation */ 5168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S s_temp_mv_pred.i2_mv[0] = pi2_final_mv0[0]; 5178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S s_temp_mv_pred.i2_mv[1] = pi2_final_mv0[1]; 5188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S s_temp_mv_pred.i2_mv[2] = pi2_final_mv1[0]; 5198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S s_temp_mv_pred.i2_mv[3] = pi2_final_mv1[1]; 5208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Calculating colocated zero information */ 5228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 5238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 i2_mv_x = 0, i2_mv_y = 0; 5248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*************************************/ 5258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* If(bit2 and bit3 set) */ 5268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* then */ 5278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* (bit0 and bit1) => submmbmode */ 5288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* (bit2 and bit3) => mbmode */ 5298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* else */ 5308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* (bit0 and bit1) => mbmode */ 5318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*************************************/ 5328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_packed_mb_sub_mb_mode = 5338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S sub_partition ? (s_mvdirect.i1_partitionsize[i]) : ((s_mvdirect.i1_partitionsize[i]) 5348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S << 2); 5358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(i1_ref_frame0 >= 0) 5378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 5388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mv_x = pi2_final_mv0[0]; 5398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mv_y = pi2_final_mv0[1]; 5408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 5418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 5428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 5438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mv_x = pi2_final_mv1[0]; 5448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mv_y = pi2_final_mv1[1]; 5458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 5468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_colz = (ps_cur_mb_info->u1_mb_field_decodingflag << 1) 5488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | ((u1_final_ref_idx == 0) && (ABS(i2_mv_x) <= 1) 5498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S && (ABS(i2_mv_y) <= 1)); 5508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_colz |= (u1_packed_mb_sub_mb_mode << 4); 5518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 5528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_mv = ps_mv_nmb_start + u1_sub_mb_num; 5538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264d_rep_mv_colz(ps_dec, &s_temp_mv_pred, ps_mv, u1_sub_mb_num, u1_colz, 5548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_mb_parth, u1_mb_partw); 5558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 5568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i = 0; 5578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(i1_ref_frame0 >= 0) 5588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_info->u2_mask[i++] = ui2_mask_fwd; 5598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(i1_ref_frame1 >= 0) 5608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_info->u2_mask[i] = ui2_mask_bwd; 5618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*if(u1_init) 5638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S H264_DEC_DEBUG_PRINT("hit\n"); 5648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 5658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S H264_DEC_DEBUG_PRINT("miss\n");*/ 5668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return OK; 5688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 5698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*! 5718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ************************************************************************** 5728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \if Function name : ih264d_decode_temporal_direct \endif 5738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 5748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \brief 5758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Decodes temporal direct mode. 5768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 5778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \return 5788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * None. 5798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 5808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ************************************************************************** 5818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */ 5828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SWORD32 ih264d_decode_temporal_direct(dec_struct_t * ps_dec, 5838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_wd_x, 5848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S dec_mb_info_t * ps_cur_mb_info, 5858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_mb_num) 5868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 5878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S struct pic_buffer_t *ps_pic_buff0, *ps_pic_buff1, *ps_col_pic; 5888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S mv_pred_t *ps_mv, s_temp_mv_pred; 5898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_sub_mb_num; 5908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_mbaff = ps_dec->ps_cur_slice->u1_mbaff_frame_flag; 5918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 i2_mv_x0, i2_mv_y0, i2_mv_x1, i2_mv_y1; 5928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_mb_partw, u1_mb_parth; 5938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 i, partition_size, sub_partition; 5948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 *pui32_weight_ofsts = NULL; 5958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S directmv_t s_mvdirect; 5968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD8 *pu1_mb_parth = (const UWORD8 *)gau1_ih264d_mb_parth; 5978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD8 *pu1_mb_partw = (const UWORD8 *)gau1_ih264d_mb_partw; 5988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 c_refFrm0, c_refFrm1; 5998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_ref_idx0, u1_is_cur_mb_fld; 6008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 pic0_poc, pic1_poc, cur_poc; 6018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 ret = 0; 6028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 6038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_is_cur_mb_fld = ps_cur_mb_info->u1_mb_field_decodingflag; 6048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_pic_buff1 = ps_dec->ps_ref_pic_buf_lx[1][0]; 6058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 6068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /**********************************************************************/ 6078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Call the function which gets the number of partitions and */ 6088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* partition info of colocated Mb */ 6098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /**********************************************************************/ 6108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pf_parse_mvdirect(ps_dec, ps_dec->ps_col_pic, &s_mvdirect, u1_wd_x, 6118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->i4_submb_ofst, ps_cur_mb_info); 6128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_col_pic = ps_dec->ps_col_pic; 6138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 6148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i = 0; i < s_mvdirect.i1_num_partitions; i++) 6158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 6168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_colz; 6178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S partition_size = s_mvdirect.i1_partitionsize[i]; 6188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_sub_mb_num = s_mvdirect.i1_submb_num[i]; 6198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_mv = ps_col_pic->ps_mv + s_mvdirect.i4_mv_indices[i]; 6208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 6218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* This should be removed to catch unitialized memory read */ 6228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_ref_idx0 = 0; 6238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 6248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S sub_partition = partition_size >> 2; 6258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S partition_size &= 0x3; 6268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_mb_partw = pu1_mb_partw[partition_size]; 6278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_mb_parth = pu1_mb_parth[partition_size]; 6288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(sub_partition != 0) 6298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 6308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_mb_partw >>= 1; 6318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_mb_parth >>= 1; 6328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 6338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S c_refFrm0 = ps_mv->i1_ref_frame[0]; 6348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S c_refFrm1 = ps_mv->i1_ref_frame[1]; 6358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 6368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((c_refFrm0 == -1) && (c_refFrm1 == -1)) 6378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 6388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_ref_idx0 = 0; 6398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_pic_buff0 = ps_dec->ps_ref_pic_buf_lx[0][0]; 6408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_mbaff && u1_is_cur_mb_fld) 6418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 6428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_cur_mb_info->u1_topmb) 6438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 6448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pic0_poc = ps_pic_buff0->i4_top_field_order_cnt; 6458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pic1_poc = ps_pic_buff1->i4_top_field_order_cnt; 6468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S cur_poc = ps_dec->ps_cur_pic->i4_top_field_order_cnt; 6478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 6488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 6498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 6508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pic1_poc = ps_pic_buff1->i4_bottom_field_order_cnt; 6518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S cur_poc = ps_dec->ps_cur_pic->i4_bottom_field_order_cnt; 6528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_pic_buff1 = ps_dec->ps_ref_pic_buf_lx[1][MAX_REF_BUFS]; 6538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pic0_poc = ps_pic_buff0->i4_bottom_field_order_cnt; 6548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_pic_buff0 = ps_dec->ps_ref_pic_buf_lx[0][MAX_REF_BUFS]; 6558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 6568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 6578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 6588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 6598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pic0_poc = ps_pic_buff0->i4_avg_poc; 6608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pic1_poc = ps_pic_buff1->i4_avg_poc; 6618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S cur_poc = ps_dec->ps_cur_pic->i4_poc; 6628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 6638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 6648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 6658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 6668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 uc_i, u1_num_frw_ref_pics; 6678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 buf_id, u1_pic_type; 6688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S buf_id = ps_mv->u1_col_ref_pic_idx; 6698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_pic_type = ps_mv->u1_pic_type; 6708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_dec->ps_cur_slice->u1_field_pic_flag) 6718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 6728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(s_mvdirect.u1_vert_mv_scale == FRM_TO_FLD) 6738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 6748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_pic_type = TOP_FLD; 6758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_dec->ps_cur_slice->u1_bottom_field_flag) 6768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_pic_type = BOT_FLD; 6778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 6788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 6798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_num_frw_ref_pics = 6808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->ps_cur_slice->u1_num_ref_idx_lx_active[0]; 6818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 6828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(uc_i = 0; uc_i < u1_num_frw_ref_pics; uc_i++) 6838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 6848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_dec->ps_cur_slice->u1_field_pic_flag) 6858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 6868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_dec->ps_ref_pic_buf_lx[0][uc_i]->u1_mv_buf_id == buf_id) 6878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 6888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_dec->ps_ref_pic_buf_lx[0][uc_i]->u1_pic_type 6898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S == u1_pic_type) 6908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 6918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_ref_idx0 = uc_i; 6928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S break; 6938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 6948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 6958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 6968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 6978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 6988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_dec->ps_ref_pic_buf_lx[0][uc_i]->u1_mv_buf_id == buf_id) 6998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 7008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_ref_idx0 = uc_i; 7018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S break; 7028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 7038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 7048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 7058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 7068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_pic_buff0 = ps_dec->ps_ref_pic_buf_lx[0][u1_ref_idx0]; 7078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_pic_buff1 = ps_dec->ps_ref_pic_buf_lx[1][0]; 7088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 7098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_mbaff && u1_is_cur_mb_fld) 7108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 7118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pic0_poc = ps_pic_buff0->i4_top_field_order_cnt; 7128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_ref_idx0 <<= 1; 7138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(s_mvdirect.u1_vert_mv_scale == ONE_TO_ONE) 7148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 7158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_pic_type == BOT_FLD) 7168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 7178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pic0_poc = ps_pic_buff0->i4_bottom_field_order_cnt; 7188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_pic_buff0 = ps_dec->ps_ref_pic_buf_lx[0][(u1_ref_idx0 7198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >> 1) + MAX_REF_BUFS]; 7208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_cur_mb_info->u1_topmb) 7218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_ref_idx0++; 7228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 7238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 7248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 7258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(1 - ps_cur_mb_info->u1_topmb) 7268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_ref_idx0++; 7278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 7288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 7298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(s_mvdirect.u1_vert_mv_scale == FRM_TO_FLD) 7308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 7318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(1 - ps_cur_mb_info->u1_topmb) 7328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 7338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pic0_poc = ps_pic_buff0->i4_bottom_field_order_cnt; 7348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_pic_buff0 = ps_dec->ps_ref_pic_buf_lx[0][(u1_ref_idx0 7358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >> 1) + MAX_REF_BUFS]; 7368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 7378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 7388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_cur_mb_info->u1_topmb) 7398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 7408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pic1_poc = ps_pic_buff1->i4_top_field_order_cnt; 7418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S cur_poc = ps_dec->ps_cur_pic->i4_top_field_order_cnt; 7428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 7438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 7448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 7458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pic1_poc = ps_pic_buff1->i4_bottom_field_order_cnt; 7468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S cur_poc = ps_dec->ps_cur_pic->i4_bottom_field_order_cnt; 7478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_pic_buff1 = ps_dec->ps_ref_pic_buf_lx[1][MAX_REF_BUFS]; 7488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 7498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 7508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 7518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 7528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pic0_poc = ps_pic_buff0->i4_avg_poc; 7538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pic1_poc = ps_pic_buff1->i4_avg_poc; 7548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S cur_poc = ps_dec->ps_cur_pic->i4_poc; 7558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 7568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 7578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 7588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 i16_td; 7598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 7608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(c_refFrm0 >= 0) 7618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 7628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mv_x0 = ps_mv->i2_mv[0]; 7638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mv_y0 = ps_mv->i2_mv[1]; 7648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 7658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else if(c_refFrm1 >= 0) 7668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 7678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mv_x0 = ps_mv->i2_mv[2]; 7688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mv_y0 = ps_mv->i2_mv[3]; 7698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 7708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 7718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 7728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mv_x0 = 0; 7738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mv_y0 = 0; 7748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 7758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* If FRM_TO_FLD or FLD_TO_FRM scale the "y" component of the colocated Mv*/ 7768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(s_mvdirect.u1_vert_mv_scale == FRM_TO_FLD) 7778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 7788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mv_y0 /= 2; 7798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 7808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else if(s_mvdirect.u1_vert_mv_scale == FLD_TO_FRM) 7818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 7828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mv_y0 *= 2; 7838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 7848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 7858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i16_td = pic1_poc - pic0_poc; 7868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((ps_pic_buff0->u1_is_short == 0) || (i16_td == 0)) 7878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 7888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mv_x1 = 0; 7898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mv_y1 = 0; 7908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 7918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 7928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 7938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 i16_tb, i16_tx, i2_dist_scale_factor, i16_temp; 7948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 7958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i16_td = CLIP3(-128, 127, i16_td); 7968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i16_tb = cur_poc - pic0_poc; 7978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i16_tb = CLIP3(-128, 127, i16_tb); 7988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 7998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i16_tx = (16384 + ABS(SIGN_POW2_DIV(i16_td, 1))) / i16_td; 8008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_dist_scale_factor = CLIP3(-1024, 1023, 8018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (((i16_tb * i16_tx) + 32) >> 6)); 8028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i16_temp = (i2_mv_x0 * i2_dist_scale_factor + 128) >> 8; 8038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mv_x1 = i16_temp - i2_mv_x0; 8048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mv_x0 = i16_temp; 8058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i16_temp = (i2_mv_y0 * i2_dist_scale_factor + 128) >> 8; 8078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mv_y1 = i16_temp - i2_mv_y0; 8088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mv_y0 = i16_temp; 8098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 8108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 8118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S mv_pred_t *ps_mv; 8128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*u1_sub_mb_x = u1_sub_mb_num & 0x03; 8148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_sub_mb_y = u1_sub_mb_num >> 2;*/ 8158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_dec->ps_cur_pps->u1_wted_bipred_idc) 8168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 8178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_idx = 8188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_ref_idx0 8198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * ps_dec->ps_cur_slice->u1_num_ref_idx_lx_active[1]; 8208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_scale_ref = u1_mbaff && u1_is_cur_mb_fld; 8218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_scale_ref) 8228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_idx >>= 1; 8238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pui32_weight_ofsts = (UWORD32*)&ps_dec->pu4_wt_ofsts[2 8248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * X3(u1_idx)]; 8258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_scale_ref 8268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S && (ps_dec->ps_cur_pps->u1_wted_bipred_idc 8278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S == 2)) 8288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 8298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 i2_ref_idx; 8308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_ref_idx = u1_ref_idx0; 8318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_ref_idx *= 8328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ps_dec->ps_cur_slice->u1_num_ref_idx_lx_active[1] 8338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S << 1); 8348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!ps_cur_mb_info->u1_topmb) 8358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_ref_idx += 8368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ps_dec->ps_cur_slice->u1_num_ref_idx_lx_active[0] 8378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S << 1) 8388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * (ps_dec->ps_cur_slice->u1_num_ref_idx_lx_active[1] 8398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S << 1); 8408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pui32_weight_ofsts = 8418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (UWORD32*)&ps_dec->pu4_mbaff_wt_mat[2 8428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * X3(i2_ref_idx)]; 8438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 8448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 8458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 8468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pred_info_pkd_t *ps_pred_pkd; 8478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 i2_mv[2]; 8488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 i1_ref_idx= 0; 8498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mv[0] = i2_mv_x0; 8518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mv[1] = i2_mv_y0; 8528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_pred_pkd = ps_dec->ps_pred_pkd + ps_dec->u4_pred_info_pkd_idx; 8548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264d_fill_pred_info(i2_mv,u1_mb_partw,u1_mb_parth,u1_sub_mb_num,PRED_L0 | PRED_L1, 8558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_pred_pkd,ps_pic_buff0->u1_pic_buf_id,i1_ref_idx,pui32_weight_ofsts, 8568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_pic_buff0->u1_pic_type); 8578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->u4_pred_info_pkd_idx++; 8588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_info->u1_num_pred_parts++; 8598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 8628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 8638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pred_info_pkd_t *ps_pred_pkd; 8648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 i2_mv[2]; 8658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 i1_ref_idx= 0; 8668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mv[0] = i2_mv_x1; 8688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mv[1] = i2_mv_y1; 8698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_pred_pkd = ps_dec->ps_pred_pkd + ps_dec->u4_pred_info_pkd_idx; 8718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264d_fill_pred_info(i2_mv,u1_mb_partw,u1_mb_parth,u1_sub_mb_num,PRED_L0 | PRED_L1, 8728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_pred_pkd,ps_pic_buff1->u1_pic_buf_id,i1_ref_idx,pui32_weight_ofsts, 8738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_pic_buff1->u1_pic_type); 8748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->u4_pred_info_pkd_idx++; 8758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_info->u1_num_pred_parts++; 8768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 8798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Replication optimisation */ 8818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S s_temp_mv_pred.i2_mv[0] = i2_mv_x0; 8828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S s_temp_mv_pred.i2_mv[1] = i2_mv_y0; 8838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S s_temp_mv_pred.i2_mv[2] = i2_mv_x1; 8848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S s_temp_mv_pred.i2_mv[3] = i2_mv_y1; 8858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S s_temp_mv_pred.i1_ref_frame[0] = u1_ref_idx0; 8868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S s_temp_mv_pred.i1_ref_frame[1] = 0; 8878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S s_temp_mv_pred.u1_col_ref_pic_idx = ps_pic_buff0->u1_mv_buf_id; 8888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S s_temp_mv_pred.u1_pic_type = ps_pic_buff0->u1_pic_type; 8898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_mv = ps_dec->ps_mv_cur + (u1_mb_num << 4) + u1_sub_mb_num; 8908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 8928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 i2_mv_x = 0, i2_mv_y = 0; 8938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_packed_mb_sub_mb_mode = 8948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S sub_partition ? (s_mvdirect.i1_partitionsize[i]) : ((s_mvdirect.i1_partitionsize[i]) 8958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S << 2); 8968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(c_refFrm0 >= 0) 8988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 8998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mv_x = i2_mv_x0; 9008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mv_y = i2_mv_y0; 9018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 9028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 9038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 9048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mv_x = i2_mv_x1; 9058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_mv_y = i2_mv_y1; 9068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 9078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 9088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_colz = 9098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ps_cur_mb_info->u1_mb_field_decodingflag << 1) 9108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | ((u1_ref_idx0 == 0) 9118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S && (ABS(i2_mv_x) 9128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S <= 1) 9138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S && (ABS(i2_mv_y) 9148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S <= 1)); 9158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_colz |= (u1_packed_mb_sub_mb_mode << 4); 9168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 9178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264d_rep_mv_colz(ps_dec, &s_temp_mv_pred, ps_mv, u1_sub_mb_num, 9188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_colz, u1_mb_parth, u1_mb_partw); 9198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 9208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 9218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 9228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* return value set to UWORD8 to make it homogeneous */ 9238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* with decodespatialdirect */ 9248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return OK; 9258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 9268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 9278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_convert_frm_to_fld_list(struct pic_buffer_t *ps_ref_pic_buf_lx, 9288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_L0, 9298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S dec_struct_t *ps_dec, 9308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_num_short_term_bufs) 9318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 9328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 uc_count = *pu1_L0, i, uc_l1, uc_lx, j; 9338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S struct pic_buffer_t *ps_ref_lx[2], *ps_ref_pic_lx; 9348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_bottom_field_flag; 9358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S dec_slice_params_t *ps_cur_slice; 9368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_ref[2], u1_fld[2], u1_same_fld, u1_op_fld; 9378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 ui_half_num_of_sub_mbs; 9388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 9398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_l1 = 0; 9408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_lx = 0; 9418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_slice = ps_dec->ps_cur_slice; 9428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx = ps_ref_pic_buf_lx - MAX_REF_BUFS; 9438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_lx[0] = ps_ref_pic_buf_lx; 9448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_lx[1] = ps_ref_pic_buf_lx; 9458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_bottom_field_flag = ps_cur_slice->u1_bottom_field_flag; 9468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ui_half_num_of_sub_mbs = ((ps_dec->u2_pic_ht * ps_dec->u2_pic_wd) >> 5); 9478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_bottom_field_flag) 9488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 9498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_ref[0] = BOT_REF; 9508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_ref[1] = TOP_REF; 9518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_fld[0] = BOT_FLD; 9528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_fld[1] = TOP_FLD; 9538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_same_fld = BOT_FLD; 9548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_op_fld = TOP_FLD; 9558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 9568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 9578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 9588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_ref[0] = TOP_REF; 9598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_ref[1] = BOT_REF; 9608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_fld[0] = TOP_FLD; 9618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_fld[1] = BOT_FLD; 9628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_same_fld = TOP_FLD; 9638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_op_fld = BOT_FLD; 9648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 9658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 9668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Create the field list starting with all the short term */ 9678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* frames followed by all the long term frames. No long term */ 9688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* reference field should have a list idx less than a short */ 9698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* term reference field during initiailization. */ 9708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 9718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(j = 0; j < 2; j++) 9728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 9738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i = ((j == 0) ? 0 : u1_num_short_term_bufs); 9748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_count = ((j == 0) ? u1_num_short_term_bufs : *pu1_L0); 9758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(; i < uc_count; i++, ps_ref_lx[0]++) 9768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 9778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Search field of same parity in Frame list */ 9788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((ps_ref_lx[0]->u1_pic_type & u1_ref[0])) // || ((ps_ref_lx[0]->u1_picturetype & 0x3) == 0)) 9798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 9808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Insert PIC of same parity in RefPicList */ 9818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264d_insert_pic_in_ref_pic_listx(ps_ref_pic_lx, ps_ref_lx[0]); 9828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->i4_pic_num = (ps_ref_pic_lx->i4_pic_num * 2 + 1); 9838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->u1_long_term_pic_num = 9848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ps_ref_pic_lx->u1_long_term_frm_idx * 2 + 1); 9858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->u1_pic_type = u1_same_fld; 9868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_fld[0] & BOT_FLD) 9878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 9888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->u1_pic_type = BOT_FLD; 9898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->pu1_buf1 += ps_ref_pic_lx->u2_frm_wd_y; 9908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->pu1_buf2 += ps_ref_pic_lx->u2_frm_wd_uv; 9918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->pu1_buf3 += ps_ref_pic_lx->u2_frm_wd_uv; 9928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_ref_pic_lx->u1_picturetype & 0x3) 9938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 9948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->pu1_col_zero_flag += ui_half_num_of_sub_mbs; 9958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->ps_mv += ui_half_num_of_sub_mbs; 9968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 9978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->i4_poc = 9988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->i4_bottom_field_order_cnt; 9998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->i4_avg_poc = 10008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->i4_bottom_field_order_cnt; 10018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 10028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 10038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 10048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->u1_pic_type = TOP_FLD; 10058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->i4_poc = ps_ref_pic_lx->i4_top_field_order_cnt; 10068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->i4_avg_poc = 10078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->i4_top_field_order_cnt; 10088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 10098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 10108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx++; 10118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_lx++; 10128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Find field of opposite parity */ 10138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(uc_l1 < uc_count && ps_ref_lx[1]) 10148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 10158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S while(!(ps_ref_lx[1]->u1_pic_type & u1_ref[1])) 10168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 10178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_lx[1]++; 10188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_l1++; 10198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(uc_l1 >= uc_count) 10208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_lx[1] = 0; 10218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!ps_ref_lx[1]) 10228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S break; 10238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 10248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 10258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_ref_lx[1]) 10268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 10278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_l1++; 10288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264d_insert_pic_in_ref_pic_listx(ps_ref_pic_lx, 10298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_lx[1]); 10308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->u1_pic_type = u1_op_fld; 10318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->i4_pic_num = (ps_ref_pic_lx->i4_pic_num * 2); 10328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->u1_long_term_pic_num = 10338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ps_ref_pic_lx->u1_long_term_frm_idx * 2); 10348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_fld[1] & BOT_FLD) 10358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 10368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->u1_pic_type = BOT_FLD; 10378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->pu1_buf1 += ps_ref_pic_lx->u2_frm_wd_y; 10388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->pu1_buf2 += ps_ref_pic_lx->u2_frm_wd_uv; 10398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->pu1_buf3 += ps_ref_pic_lx->u2_frm_wd_uv; 10408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_ref_pic_lx->u1_picturetype & 0x3) 10418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 10428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->pu1_col_zero_flag += 10438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ui_half_num_of_sub_mbs; 10448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->ps_mv += ui_half_num_of_sub_mbs; 10458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 10468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->i4_poc = 10478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->i4_bottom_field_order_cnt; 10488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->i4_avg_poc = 10498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->i4_bottom_field_order_cnt; 10508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 10518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 10528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 10538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->u1_pic_type = TOP_FLD; 10548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->i4_poc = 10558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->i4_top_field_order_cnt; 10568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->i4_avg_poc = 10578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->i4_top_field_order_cnt; 10588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 10598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx++; 10608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_lx++; 10618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_lx[1]++; 10628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 10638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 10648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 10658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 10668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 10678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Same parity fields are over, now insert left over opposite parity fields */ 10688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /** Added if(ps_ref_lx[1]) for error checks */ 10698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_ref_lx[1]) 10708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 10718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(; uc_l1 < uc_count; uc_l1++) 10728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 10738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_ref_lx[1]->u1_pic_type & u1_ref[1]) 10748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 10758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Insert PIC of opposite parity in RefPicList */ 10768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264d_insert_pic_in_ref_pic_listx(ps_ref_pic_lx, 10778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_lx[1]); 10788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->u1_pic_type = u1_op_fld; 10798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->i4_pic_num = (ps_ref_pic_lx->i4_pic_num * 2); 10808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->u1_long_term_pic_num = 10818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ps_ref_pic_lx->u1_long_term_frm_idx * 2); 10828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_op_fld == BOT_FLD) 10838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 10848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->u1_pic_type = BOT_FLD; 10858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->pu1_buf1 += ps_ref_pic_lx->u2_frm_wd_y; 10868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->pu1_buf2 += ps_ref_pic_lx->u2_frm_wd_uv; 10878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->pu1_buf3 += ps_ref_pic_lx->u2_frm_wd_uv; 10888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_ref_pic_lx->u1_picturetype & 0x3) 10898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 10908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->pu1_col_zero_flag += 10918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ui_half_num_of_sub_mbs; 10928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->ps_mv += ui_half_num_of_sub_mbs; 10938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 10948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->i4_poc = 10958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->i4_bottom_field_order_cnt; 10968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->i4_avg_poc = 10978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->i4_bottom_field_order_cnt; 10988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 10998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 11008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 11018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->i4_poc = 11028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->i4_top_field_order_cnt; 11038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->i4_avg_poc = 11048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx->i4_top_field_order_cnt; 11058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 11068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx++; 11078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_lx++; 11088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_lx[1]++; 11098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 11108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 11118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 11128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 11138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *pu1_L0 = uc_lx; 11148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 11158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_convert_frm_mbaff_list(dec_struct_t *ps_dec) 11178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 11188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S struct pic_buffer_t **ps_ref_pic_lx; 11198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_max_ref_idx, idx; 11208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD16 u2_frm_wd_y, u2_frm_wd_uv; 11218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S struct pic_buffer_t **ps_ref_pic_buf_lx; 11228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_half_num_of_sub_mbs = ((ps_dec->u2_pic_ht * ps_dec->u2_pic_wd) >> 5); 11238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_buf_lx = ps_dec->ps_ref_pic_buf_lx[0]; 11258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx = ps_dec->ps_ref_pic_buf_lx[0]; 11268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_max_ref_idx = ps_dec->ps_cur_slice->u1_num_ref_idx_lx_active[0]; 11278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(idx = 0; idx < u1_max_ref_idx; idx++) 11288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 11298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx[idx]->u1_pic_type = TOP_FLD; 11308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx[idx]->i4_poc = ps_ref_pic_lx[idx]->i4_top_field_order_cnt; 11318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 11338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_frm_wd_y = ps_dec->u2_frm_wd_y; 11348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_frm_wd_uv = ps_dec->u2_frm_wd_uv; 11358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(idx = 0; idx < u1_max_ref_idx; idx++) 11378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 11388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *ps_ref_pic_lx[idx + MAX_REF_BUFS] = *ps_ref_pic_buf_lx[idx]; 11398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx[idx + MAX_REF_BUFS]->pu1_buf1 = 11408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_buf_lx[idx]->pu1_buf1 + u2_frm_wd_y; 11418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx[idx + MAX_REF_BUFS]->pu1_buf2 = 11428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_buf_lx[idx]->pu1_buf2 + u2_frm_wd_uv; 11438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx[idx + MAX_REF_BUFS]->pu1_buf3 = 11448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_buf_lx[idx]->pu1_buf3 + u2_frm_wd_uv; 11458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx[idx + MAX_REF_BUFS]->u1_pic_type = BOT_FLD; 11478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx[idx + MAX_REF_BUFS]->i4_poc = 11488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_buf_lx[idx]->i4_bottom_field_order_cnt; 11498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_ref_pic_buf_lx[idx]->u1_picturetype & 0x3) 11508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 11518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx[idx + MAX_REF_BUFS]->pu1_col_zero_flag = 11528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_buf_lx[idx]->pu1_col_zero_flag 11538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + u4_half_num_of_sub_mbs; 11548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx[idx + MAX_REF_BUFS]->ps_mv = 11558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_buf_lx[idx]->ps_mv + u4_half_num_of_sub_mbs; 11568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 11578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 11588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_dec->u1_B) 11608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 11618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_buf_lx = ps_dec->ps_ref_pic_buf_lx[1]; 11628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx = ps_dec->ps_ref_pic_buf_lx[1]; 11638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_max_ref_idx = ps_dec->ps_cur_slice->u1_num_ref_idx_lx_active[1]; 11648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(idx = 0; idx < u1_max_ref_idx; idx++) 11658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 11668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx[idx]->u1_pic_type = TOP_FLD; 11678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx[idx]->i4_poc = ps_ref_pic_lx[idx]->i4_top_field_order_cnt; 11688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 11708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(idx = 0; idx < u1_max_ref_idx; idx++) 11728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 11738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *ps_ref_pic_lx[idx + MAX_REF_BUFS] = *ps_ref_pic_buf_lx[idx]; 11748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx[idx + MAX_REF_BUFS]->pu1_buf1 = 11758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_buf_lx[idx]->pu1_buf1 + u2_frm_wd_y; 11768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx[idx + MAX_REF_BUFS]->pu1_buf2 = 11778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_buf_lx[idx]->pu1_buf2 + u2_frm_wd_uv; 11788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx[idx + MAX_REF_BUFS]->pu1_buf3 = 11798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_buf_lx[idx]->pu1_buf3 + u2_frm_wd_uv; 11808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx[idx + MAX_REF_BUFS]->u1_pic_type = BOT_FLD; 11818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx[idx + MAX_REF_BUFS]->i4_poc = 11828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_buf_lx[idx]->i4_bottom_field_order_cnt; 11838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_ref_pic_buf_lx[idx]->u1_picturetype & 0x3) 11858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 11868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx[idx + MAX_REF_BUFS]->pu1_col_zero_flag = 11878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_buf_lx[idx]->pu1_col_zero_flag 11888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + u4_half_num_of_sub_mbs; 11898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_lx[idx + MAX_REF_BUFS]->ps_mv = 11908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_buf_lx[idx]->ps_mv 11918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + u4_half_num_of_sub_mbs; 11928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 11938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 11948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 11958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 11968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*! 11978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ************************************************************************** 11988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \if Function name : ih264d_init_ref_idx_lx_b \endif 11998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 12008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \brief 12018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Initializes forward and backward refernce lists for B slice decoding. 12028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 12038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 12048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \return 12058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 0 on Success and Error code otherwise 12068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ************************************************************************** 12078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */ 12088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_init_ref_idx_lx_b(dec_struct_t *ps_dec) 12098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 12108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S struct pic_buffer_t *ps_ref_pic_buf_lx; 12118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S dpb_manager_t *ps_dpb_mgr; 12128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S struct dpb_info_t *ps_next_dpb; 12138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 i_cur_poc, i_max_st_poc, i_min_st_poc, i_ref_poc, i_temp_poc; 12148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 i; 1215cbcd2846fa837e4be6d35f5c1211b070bc8d26daHamsalekha S UWORD8 u1_max_lt_index, u1_min_lt_index; 1216cbcd2846fa837e4be6d35f5c1211b070bc8d26daHamsalekha S UWORD32 u4_lt_index; 12178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_field_pic_flag; 12188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S dec_slice_params_t *ps_cur_slice; 12198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_L0, u1_L1; 12208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_num_short_term_bufs; 12218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_max_ref_idx_l0, u1_max_ref_idx_l1; 12228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_slice = ps_dec->ps_cur_slice; 12248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_field_pic_flag = ps_cur_slice->u1_field_pic_flag; 12258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_max_ref_idx_l0 = ps_cur_slice->u1_num_ref_idx_lx_active[0] 12268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S << u1_field_pic_flag; 12278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_max_ref_idx_l1 = ps_cur_slice->u1_num_ref_idx_lx_active[1] 12288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S << u1_field_pic_flag; 12298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dpb_mgr = ps_dec->ps_dpb_mgr; 12318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Get the current POC */ 12328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i_cur_poc = ps_dec->ps_cur_pic->i4_poc; 12338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Get MaxStPOC,MinStPOC,MaxLt,MinLt */ 12358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i_max_st_poc = i_cur_poc; 12368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i_min_st_poc = i_cur_poc; 12378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_max_lt_index = MAX_REF_BUFS + 1; 12388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_min_lt_index = MAX_REF_BUFS + 1; 12398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Start from ST head */ 12408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_next_dpb = ps_dpb_mgr->ps_dpb_st_head; 12418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i = 0; i < ps_dpb_mgr->u1_num_st_ref_bufs; i++) 12428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 12438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i_ref_poc = ps_next_dpb->ps_pic_buf->i4_poc; 12448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(i_ref_poc < i_cur_poc) 12458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 12468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* RefPic Buf POC is before Current POC in display order */ 12478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i_min_st_poc = MIN(i_min_st_poc, i_ref_poc); 12488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 12498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 12508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 12518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* RefPic Buf POC is after Current POC in display order */ 12528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i_max_st_poc = MAX(i_max_st_poc, i_ref_poc); 12538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 12548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Chase the next link */ 12568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_next_dpb = ps_next_dpb->ps_prev_short; 12578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 12588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Start from LT head */ 12608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_next_dpb = ps_dpb_mgr->ps_dpb_ht_head; 12618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_next_dpb) 12628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 12638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_max_lt_index = ps_next_dpb->u1_lt_idx; 12648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_min_lt_index = ps_next_dpb->u1_lt_idx; 12658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 12668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i = 0; i < ps_dpb_mgr->u1_num_lt_ref_bufs; i++) 12678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 1268cbcd2846fa837e4be6d35f5c1211b070bc8d26daHamsalekha S u4_lt_index = ps_next_dpb->u1_lt_idx; 1269cbcd2846fa837e4be6d35f5c1211b070bc8d26daHamsalekha S u1_max_lt_index = (UWORD8)(MAX(u1_max_lt_index, u4_lt_index)); 1270cbcd2846fa837e4be6d35f5c1211b070bc8d26daHamsalekha S u1_min_lt_index = (UWORD8)(MIN(u1_min_lt_index, u4_lt_index)); 12718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Chase the next link */ 12738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_next_dpb = ps_next_dpb->ps_prev_long; 12748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 12758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* 1. Initialize refIdxL0 */ 12778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_L0 = 0; 12788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_field_pic_flag) 12798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 12808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_buf_lx = ps_dpb_mgr->ps_init_dpb[0][0]; 12818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_buf_lx += MAX_REF_BUFS; 12828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i_temp_poc = i_cur_poc; 12838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 12848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 12858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 12868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_buf_lx = ps_dpb_mgr->ps_init_dpb[0][0]; 12878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i_temp_poc = i_cur_poc - 1; 12888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 12898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Arrange all short term buffers in output order as given by POC */ 12908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* 1.1 Arrange POC's less than CurrPOC in the descending POC order starting 12918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S from (CurrPOC - 1)*/ 12928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(; i_temp_poc >= i_min_st_poc; i_temp_poc--) 12938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 12948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Start from ST head */ 12958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_next_dpb = ps_dpb_mgr->ps_dpb_st_head; 12968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i = 0; i < ps_dpb_mgr->u1_num_st_ref_bufs; i++) 12978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 12988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((WORD32)ps_next_dpb->ps_pic_buf->i4_poc == i_temp_poc) 12998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 13008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Copy info in pic buffer */ 13018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264d_insert_pic_in_ref_pic_listx(ps_ref_pic_buf_lx, 13028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_next_dpb->ps_pic_buf); 13038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_buf_lx++; 13048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_L0++; 13058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S break; 13068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 13078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_next_dpb = ps_next_dpb->ps_prev_short; 13088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 13098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 13108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 13128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* 1.2. Arrange POC's more than CurrPOC in the ascending POC order starting 13138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S from (CurrPOC + 1)*/ 13148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i_temp_poc = i_cur_poc + 1; i_temp_poc <= i_max_st_poc; i_temp_poc++) 13158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 13168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Start from ST head */ 13178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_next_dpb = ps_dpb_mgr->ps_dpb_st_head; 13188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i = 0; i < ps_dpb_mgr->u1_num_st_ref_bufs; i++) 13198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 13208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((WORD32)ps_next_dpb->ps_pic_buf->i4_poc == i_temp_poc) 13218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 13228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264d_insert_pic_in_ref_pic_listx(ps_ref_pic_buf_lx, 13238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_next_dpb->ps_pic_buf); 13248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_buf_lx++; 13258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_L0++; 13268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S break; 13278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 13288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_next_dpb = ps_next_dpb->ps_prev_short; 13298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 13308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 13318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 13328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* 1.3 Arrange all Long term buffers in ascending order, in LongtermIndex */ 13348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Start from ST head */ 13358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_num_short_term_bufs = u1_L0; 1337cbcd2846fa837e4be6d35f5c1211b070bc8d26daHamsalekha S for(u4_lt_index = u1_min_lt_index; u4_lt_index <= u1_max_lt_index; u4_lt_index++) 13388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 13398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_next_dpb = ps_dpb_mgr->ps_dpb_ht_head; 13408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i = 0; i < ps_dpb_mgr->u1_num_lt_ref_bufs; i++) 13418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 1342cbcd2846fa837e4be6d35f5c1211b070bc8d26daHamsalekha S if(ps_next_dpb->u1_lt_idx == u4_lt_index) 13438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 13448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264d_insert_pic_in_ref_pic_listx(ps_ref_pic_buf_lx, 13458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_next_dpb->ps_pic_buf); 13468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_buf_lx->u1_long_term_pic_num = 13478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_buf_lx->u1_long_term_frm_idx; 13488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_buf_lx++; 13508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_L0++; 13518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S break; 13528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 13538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_next_dpb = ps_next_dpb->ps_prev_long; 13548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 13558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 13568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_field_pic_flag) 13588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 13598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Initialize the rest of the entries in the */ 13608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* reference list to handle of errors */ 13618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 13628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_i; 13638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pic_buffer_t *ps_ref_pic; 13648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic = ps_dpb_mgr->ps_init_dpb[0][0] + MAX_REF_BUFS; 13668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(NULL == ps_ref_pic->pu1_buf1) 13688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 13698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic = ps_dec->ps_cur_pic; 13708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 13718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(u1_i = u1_L0; u1_i < u1_max_ref_idx_l0; u1_i++) 13728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 13738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *ps_ref_pic_buf_lx = *ps_ref_pic; 13748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_buf_lx++; 13758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 13768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 13778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264d_convert_frm_to_fld_list( 13788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dpb_mgr->ps_init_dpb[0][0] + MAX_REF_BUFS, &u1_L0, 13798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec, u1_num_short_term_bufs); 13808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_buf_lx = ps_dpb_mgr->ps_init_dpb[0][0] + u1_L0; 13828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 13838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->ps_cur_slice->u1_initial_list_size[0] = u1_L0; 13858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Initialize the rest of the entries in the */ 13878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* reference list to handle of errors */ 13888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 13898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_i; 13908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pic_buffer_t *ps_ref_pic; 13918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic = ps_dpb_mgr->ps_init_dpb[0][0]; 13938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(NULL == ps_ref_pic->pu1_buf1) 13958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 13968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic = ps_dec->ps_cur_pic; 13978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 13988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(u1_i = u1_L0; u1_i < u1_max_ref_idx_l0; u1_i++) 13998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 14008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *ps_ref_pic_buf_lx = *ps_ref_pic; 14018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_buf_lx++; 14028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 14038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 14048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 14058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* 2. Initialize refIdxL1 */ 14068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_L1 = 0; 14078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_field_pic_flag) 14088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 14098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_buf_lx = ps_dpb_mgr->ps_init_dpb[1][0] + MAX_REF_BUFS; 14108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 14118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 14128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 14138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_buf_lx = ps_dpb_mgr->ps_init_dpb[1][0]; 14148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 14158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* 2.1. Arrange POC's more than CurrPOC in the ascending POC order starting 14178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S from (CurrPOC + 1)*/ 14188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i_temp_poc = i_cur_poc + 1; i_temp_poc <= i_max_st_poc; i_temp_poc++) 14198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 14208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Start from ST head */ 14218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_next_dpb = ps_dpb_mgr->ps_dpb_st_head; 14228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i = 0; i < ps_dpb_mgr->u1_num_st_ref_bufs; i++) 14238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 14248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((WORD32)ps_next_dpb->ps_pic_buf->i4_poc == i_temp_poc) 14258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 14268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264d_insert_pic_in_ref_pic_listx(ps_ref_pic_buf_lx, 14278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_next_dpb->ps_pic_buf); 14288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_buf_lx++; 14298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_L1++; 14308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S break; 14318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 14328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_next_dpb = ps_next_dpb->ps_prev_short; 14338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 14348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 14358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_field_pic_flag) 14378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 14388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i_temp_poc = i_cur_poc; 14398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 14408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 14418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 14428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i_temp_poc = i_cur_poc - 1; 14438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 14448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Arrange all short term buffers in output order as given by POC */ 14468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* 2.2 Arrange POC's less than CurrPOC in the descending POC order starting 14478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S from (CurrPOC - 1)*/ 14488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(; i_temp_poc >= i_min_st_poc; i_temp_poc--) 14498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 14508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Start from ST head */ 14518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_next_dpb = ps_dpb_mgr->ps_dpb_st_head; 14528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i = 0; i < ps_dpb_mgr->u1_num_st_ref_bufs; i++) 14538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 14548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((WORD32)ps_next_dpb->ps_pic_buf->i4_poc == i_temp_poc) 14558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 14568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264d_insert_pic_in_ref_pic_listx(ps_ref_pic_buf_lx, 14578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_next_dpb->ps_pic_buf); 14588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_buf_lx++; 14598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_L1++; 14608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S break; 14618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 14628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_next_dpb = ps_next_dpb->ps_prev_short; 14638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 14648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 14658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* 2.3 Arrange all Long term buffers in ascending order, in LongtermIndex */ 14678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Start from ST head */ 14688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_num_short_term_bufs = u1_L1; 146954cbe1b29b35e8bd8ebbaed2b5eeacfeecca98ccHarish Mahendrakar 1470cbcd2846fa837e4be6d35f5c1211b070bc8d26daHamsalekha S for(u4_lt_index = u1_min_lt_index; u4_lt_index <= u1_max_lt_index; 1471cbcd2846fa837e4be6d35f5c1211b070bc8d26daHamsalekha S u4_lt_index++) 14728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 147354cbe1b29b35e8bd8ebbaed2b5eeacfeecca98ccHarish Mahendrakar ps_next_dpb = ps_dpb_mgr->ps_dpb_ht_head; 14748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i = 0; i < ps_dpb_mgr->u1_num_lt_ref_bufs; i++) 14758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 1476cbcd2846fa837e4be6d35f5c1211b070bc8d26daHamsalekha S if(ps_next_dpb->u1_lt_idx == u4_lt_index) 14778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 14788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264d_insert_pic_in_ref_pic_listx(ps_ref_pic_buf_lx, 14798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_next_dpb->ps_pic_buf); 14808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_buf_lx->u1_long_term_pic_num = 14818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_buf_lx->u1_long_term_frm_idx; 14828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_buf_lx++; 14838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_L1++; 14848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S break; 14858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 14868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_next_dpb = ps_next_dpb->ps_prev_long; 14878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 14888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 14898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_field_pic_flag) 14918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 14928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Initialize the rest of the entries in the */ 14938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* reference list to handle of errors */ 14948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 14958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_i; 14968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pic_buffer_t *ps_ref_pic; 14978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 149893954f5e9a5d727e402921ac6fa100e6dcc1d4e8Hamsalekha S ps_ref_pic = ps_dpb_mgr->ps_init_dpb[0][0] + MAX_REF_BUFS; 14998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 15008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(NULL == ps_ref_pic->pu1_buf1) 15018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 15028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic = ps_dec->ps_cur_pic; 15038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 15048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(u1_i = u1_L1; u1_i < u1_max_ref_idx_l1; u1_i++) 15058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 15068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *ps_ref_pic_buf_lx = *ps_ref_pic; 15078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_buf_lx++; 15088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 15098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 15108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 15118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264d_convert_frm_to_fld_list( 15128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dpb_mgr->ps_init_dpb[1][0] + MAX_REF_BUFS, 15138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S &u1_L1, ps_dec, u1_num_short_term_bufs); 15148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_buf_lx = ps_dpb_mgr->ps_init_dpb[1][0] + u1_L1; 15158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 15168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 15178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->ps_cur_slice->u1_initial_list_size[1] = u1_L1; 15188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 15198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Initialize the rest of the entries in the */ 15208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* reference list to handle of errors */ 15218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 15228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_i; 15238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pic_buffer_t *ps_ref_pic; 15248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 152593954f5e9a5d727e402921ac6fa100e6dcc1d4e8Hamsalekha S ps_ref_pic = ps_dpb_mgr->ps_init_dpb[0][0]; 15268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 15278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(NULL == ps_ref_pic->pu1_buf1) 15288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 15298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic = ps_dec->ps_cur_pic; 15308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 15318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(u1_i = u1_L1; u1_i < u1_max_ref_idx_l1; u1_i++) 15328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 15338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *ps_ref_pic_buf_lx = *ps_ref_pic; 15348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic_buf_lx++; 15358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 15368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 15378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 15388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* If list0 and list 1 ebtries are same then swap the 0th and 1st entry */ 15398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* of list 1 */ 15408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 15418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S struct pic_buffer_t *ps_ref_pic1_buf_l0, *ps_ref_pic1_buf_l1; 15428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S struct pic_buffer_t s_ref_pic1_buf_temp; 15438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 15448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic1_buf_l0 = ps_dpb_mgr->ps_init_dpb[0][0]; 15458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_ref_pic1_buf_l1 = ps_dpb_mgr->ps_init_dpb[1][0]; 15468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 15478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((u1_L0 == u1_L1) && (u1_L0 > 1)) 15488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 15498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 i_index, i_swap; 15508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 15518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i_swap = 1; 15528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 15538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i_index = 0; i_index < u1_L0; i_index++) 15548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 15558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((ps_ref_pic1_buf_l0[i_index]).pu1_buf1 15568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S != (ps_ref_pic1_buf_l1[i_index]).pu1_buf1) 15578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 15588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i_swap = 0; 15598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S break; 15608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 15618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 15628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(1 == i_swap) 15638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 15648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S memcpy(&s_ref_pic1_buf_temp, &ps_ref_pic1_buf_l1[1], 15658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S sizeof(struct pic_buffer_t)); 15668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S memcpy(&ps_ref_pic1_buf_l1[1], &ps_ref_pic1_buf_l1[0], 15678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S sizeof(struct pic_buffer_t)); 15688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S memcpy(&ps_ref_pic1_buf_l1[0], &s_ref_pic1_buf_temp, 15698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S sizeof(struct pic_buffer_t)); 15708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 15718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 15728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 15738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 15748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 15758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 15768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 15778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 15788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_get_implicit_weights(dec_struct_t *ps_dec); 15798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 15808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*! 15818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ************************************************************************** 15828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \if Function name : ih264d_one_to_one \endif 15838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 15848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \brief 15858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Initializes forward and backward refernce lists for B slice decoding. 15868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 15878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 15888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \return 15898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 0 on Success and Error code otherwise 15908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ************************************************************************** 15918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */ 15928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_one_to_one(dec_struct_t *ps_dec, 15938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S struct pic_buffer_t *ps_col_pic, 15948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S directmv_t *ps_direct, 15958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_wd_x, 15968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 u2_sub_mb_ofst, 15978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S dec_mb_info_t * ps_cur_mb_info) 15988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 15998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_col_zero_flag_start, u1_col_mb_pred_mode, u1_num_blks, u1_sub_mb_num; 16008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_init_colzero_flag; 16018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UNUSED(ps_cur_mb_info); 16028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_col_zero_flag_start = ps_col_pic->pu1_col_zero_flag + u2_sub_mb_ofst; 16038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_col_mb_pred_mode = pu1_col_zero_flag_start[ps_dec->u1_sub_mb_num]; 16048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_init_colzero_flag = u1_col_mb_pred_mode & 1; 16058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_col_mb_pred_mode >>= 6; 16068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->u1_vert_mv_scale = ONE_TO_ONE; 16078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->u1_col_zeroflag_change = 0; 16088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 16098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_wd_x == MB_SIZE) 16108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 16118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->u1_currB_type = (!!u1_col_mb_pred_mode); 16128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_col_mb_pred_mode == PRED_16x16) 16138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 16148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_num_partitions = 1; 16158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i4_mv_indices[0] = u2_sub_mb_ofst; 16168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_submb_num[0] = 0; 16178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_partitionsize[0] = PRED_16x16; 16188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 16198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return; 16208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 16218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else if(u1_col_mb_pred_mode < PRED_8x8) 16228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 16238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_num_partitions = 2; 16248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i4_mv_indices[0] = u2_sub_mb_ofst; 16258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_submb_num[0] = 0; 16268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_partitionsize[0] = u1_col_mb_pred_mode; 16278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_sub_mb_num = (u1_col_mb_pred_mode == PRED_16x8) ? 8 : 2; 16288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_submb_num[1] = u1_sub_mb_num; 16298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i4_mv_indices[1] = u2_sub_mb_ofst 16308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + ps_direct->i1_submb_num[1]; 16318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_partitionsize[1] = u1_col_mb_pred_mode; 16328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((pu1_col_zero_flag_start[u1_sub_mb_num] & 1) != u1_init_colzero_flag) 16338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->u1_col_zeroflag_change = 1; 16348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return; 16358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 16368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 16378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 16388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_num_blks = 4; 16398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 16408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 16418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 16428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 16438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_num_blks = 1; 16448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 16458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 16468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 16478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD8 *pu1_top_lt_mb_part_idx; 16488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_col_sub_mb_pred_mode, uc_blk, u1_sub_blk, u1_submb_col = 0; 16498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_num_sub_blks, uc_direct8x8inf, *pu1_col_zero_flag, u1_sub_mb_num; 16508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD8 *pu1_num_sub_mb_part = 16518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (const UWORD8 *)gau1_ih264d_num_submb_part; 16528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 i1_num_partitions = 0, partition_size; 16538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 mv_index; 16548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD8 *pu1_top_lt_sub_mb_idx = gau1_ih264d_submb_indx_mod_sp_drct; 16558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 16568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_sub_mb_num = ps_dec->u1_sub_mb_num; 16578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_direct8x8inf = ps_dec->ps_cur_slice->u1_direct_8x8_inference_flag; 16588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_top_lt_mb_part_idx = gau1_ih264d_top_left_mb_part_indx_mod 16598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + (PRED_8x8 << 1) + 1; 16608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 16618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(uc_blk = 0; uc_blk < u1_num_blks; uc_blk++) 16628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 16638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S partition_size = PRED_8x8; 16648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_top_lt_sub_mb_idx = gau1_ih264d_submb_indx_mod_sp_drct; 16658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(uc_direct8x8inf == 1) 16668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 16678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_submb_col = u1_sub_mb_num | (u1_sub_mb_num >> 1); 16688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S mv_index = u2_sub_mb_ofst + u1_submb_col; 16698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_num_sub_blks = 1; 16708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 16718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 16728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 16738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* colMbPart is either 8x8, 8x4, 4x8, 4x4 */ 16748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_col_zero_flag = pu1_col_zero_flag_start + u1_sub_mb_num; 16758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_col_sub_mb_pred_mode = *pu1_col_zero_flag; 16768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_col_sub_mb_pred_mode = (u1_col_sub_mb_pred_mode & 0x30) >> 4; 16778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S partition_size = (UWORD8)((u1_col_sub_mb_pred_mode) 16788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (PRED_8x8 << 2)); 16798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S mv_index = u2_sub_mb_ofst + u1_sub_mb_num; 16808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_top_lt_sub_mb_idx += (u1_col_sub_mb_pred_mode << 1); 16818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_num_sub_blks = pu1_num_sub_mb_part[u1_col_sub_mb_pred_mode]; 16828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 16838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 16848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 16858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(u1_sub_blk = 0; u1_sub_blk < u1_num_sub_blks; 16868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_sub_blk++, pu1_top_lt_sub_mb_idx++) 16878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 16888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_sub_mb_num += *pu1_top_lt_sub_mb_idx; 16898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S mv_index += *pu1_top_lt_sub_mb_idx; 16908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i4_mv_indices[i1_num_partitions] = mv_index; 16918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_submb_num[i1_num_partitions] = u1_sub_mb_num; 16928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_partitionsize[i1_num_partitions] = partition_size; 16938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i1_num_partitions++; 16948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!uc_direct8x8inf) 16958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_submb_col = u1_sub_mb_num; 16968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((pu1_col_zero_flag_start[u1_submb_col] & 1) 16978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S != u1_init_colzero_flag) 16988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->u1_col_zeroflag_change = 1; 16998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 17008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_sub_mb_num = *pu1_top_lt_mb_part_idx++; 17018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 17028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_num_partitions = i1_num_partitions; 17038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 17048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 17058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*! 17068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ************************************************************************** 17078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \if Function name : ih264d_mbaff_cross_pmbair \endif 17088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 17098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \brief 17108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Initializes forward and backward refernce lists for B slice decoding. 17118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 17128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 17138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \return 17148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 0 on Success and Error code otherwise 17158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ************************************************************************** 17168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */ 17178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_mbaff_cross_pmbair(dec_struct_t *ps_dec, 17188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S struct pic_buffer_t *ps_col_pic, 17198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S directmv_t *ps_direct, 17208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_wd_x, 17218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 u2_sub_mb_ofst, 17228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S dec_mb_info_t * ps_cur_mb_info) 17238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 17248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_col_zero_flag_start, *pu1_col_zero_flag, u1_sub_mb_num, 17258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_sub_mb_num_col; 17268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_col_zero_flag_right_half; 17278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 i4_force_8X8; 17288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_num_blks, u1_col_mb_pred_mode, uc_blk, u1_col_sub_mb_pred_mode, 17298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_col_sub_mb_pred_mode_rt; 17308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 i1_num_partitions = 0, partition_size; 17318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 17328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 mv_index; 17338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 17348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_num_sub_blks; 17358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_is_cur_mb_fld, i; 17368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_init_colzero_flag; 17378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 17388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_is_cur_mb_fld = ps_cur_mb_info->u1_mb_field_decodingflag; 17398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_sub_mb_num = ps_dec->u1_sub_mb_num; 17408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->u1_col_zeroflag_change = 0; 17418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*pu1_col_zero_flag_start = ps_col_pic->pu1_col_zero_flag + u2_sub_mb_ofst; 17428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_col_mb_pred_mode = pu1_col_zero_flag_start[u1_sub_mb_num]; 17438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_init_colzero_flag = u1_col_mb_pred_mode & 1; 17448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_col_mb_pred_mode >>= 6; */ 17458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(0 == u1_is_cur_mb_fld) 17468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 17478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->u1_vert_mv_scale = FLD_TO_FRM; 17488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_wd_x == MB_SIZE) 17498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 17508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_col_zero_flag_start = ps_col_pic->pu1_col_zero_flag 17518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + u2_sub_mb_ofst; 17528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_col_mb_pred_mode = pu1_col_zero_flag_start[0]; 17538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_init_colzero_flag = u1_col_mb_pred_mode & 1; 17548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_col_mb_pred_mode >>= 6; 17558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 17568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 17578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_col_mb_pred_mode & 0x2) 17588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 17598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->u1_currB_type = 1; 17608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_col_mb_pred_mode == PRED_8x16) 17618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 17628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_num_partitions = 2; 17638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i4_mv_indices[0] = u2_sub_mb_ofst; 17648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_submb_num[0] = 0; 17658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_partitionsize[0] = PRED_8x16; 17668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i4_mv_indices[1] = u2_sub_mb_ofst + 2; 17678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_submb_num[1] = 2; 17688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_partitionsize[1] = PRED_8x16; 17698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((pu1_col_zero_flag_start[2] & 1) != u1_init_colzero_flag) 17708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->u1_col_zeroflag_change = 1; 17718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 17728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 17738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 17748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_col_zero_flag = pu1_col_zero_flag_start + u1_sub_mb_num; 17758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_col_sub_mb_pred_mode = (*pu1_col_zero_flag & 0x10);/* 8x4 or 4x4 mode */ 17768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 17778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_col_zero_flag_right_half = pu1_col_zero_flag_start 17788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + u1_sub_mb_num + 2; 17798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_col_sub_mb_pred_mode_rt = 17808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (*pu1_col_zero_flag_right_half & 0x10);/* 8x4 or 4x4 mode */ 17818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 17828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i4_force_8X8 = (u1_col_sub_mb_pred_mode) 17838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S || (u1_col_sub_mb_pred_mode_rt); 17848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(i4_force_8X8) 17858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 17868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_num_sub_blks = 2; 17878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S partition_size = PRED_8x8; 17888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 17898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 17908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 17918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S partition_size = PRED_8x16; 17928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_num_sub_blks = 1; 17938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 17948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 17958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i = 0; i < 2; i++) 17968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 17978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(uc_blk = 0; uc_blk < u1_num_sub_blks; uc_blk++) 17988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 17998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_sub_mb_num_col = u1_sub_mb_num | (u1_sub_mb_num >> 1); 18008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_sub_mb_num_col &= 0x7; 18018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S mv_index = u2_sub_mb_ofst + uc_sub_mb_num_col; 18028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 18038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i4_mv_indices[i1_num_partitions] = 18048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S mv_index; 18058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_submb_num[i1_num_partitions] = 18068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_sub_mb_num; 18078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_partitionsize[i1_num_partitions] = 18088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S partition_size; 18098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i1_num_partitions++; 18108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((pu1_col_zero_flag_start[uc_sub_mb_num_col] & 1) 18118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S != u1_init_colzero_flag) 18128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->u1_col_zeroflag_change = 1; 18138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_sub_mb_num += 8; 18148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 18158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_sub_mb_num = 2; /* move to second half of Cur MB */ 18168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 18178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_num_partitions = i1_num_partitions; 18188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return; 18198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 18208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 18218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 18228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 18238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_num_partitions = 1; 18248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i4_mv_indices[0] = u2_sub_mb_ofst; 18258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_submb_num[0] = 0; 18268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_partitionsize[0] = PRED_16x16; 18278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->u1_currB_type = 0; 18288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return; 18298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 18308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 18318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 18328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 18338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_sub_mb_num_col = u1_sub_mb_num | (u1_sub_mb_num >> 1); 18348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_sub_mb_num_col &= 0x7; 18358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 18368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i4_mv_indices[0] = u2_sub_mb_ofst + uc_sub_mb_num_col; 18378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_submb_num[0] = u1_sub_mb_num; 18388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_partitionsize[0] = PRED_8x8; 18398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_num_partitions = 1; 18408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 18418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 18428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 18438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 18448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->u1_vert_mv_scale = FRM_TO_FLD; 18458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_col_zero_flag_start = ps_col_pic->pu1_col_zero_flag + u2_sub_mb_ofst; 18468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_init_colzero_flag = pu1_col_zero_flag_start[0] & 1; 18478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 18488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_wd_x == MB_SIZE) 18498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 18508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_submb_col; 18518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *puc_colZeroFlagStart_bot_mb, uc_colMbPredMode_bot_mb; 18528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 18538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_col_zero_flag_start = ps_col_pic->pu1_col_zero_flag 18548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + u2_sub_mb_ofst; 18558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_col_mb_pred_mode = pu1_col_zero_flag_start[u1_sub_mb_num] >> 6; 18568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 18578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S puc_colZeroFlagStart_bot_mb = ps_col_pic->pu1_col_zero_flag 18588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + u2_sub_mb_ofst + 16; 18598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_colMbPredMode_bot_mb = puc_colZeroFlagStart_bot_mb[8] >> 6; 18608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 18618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i4_force_8X8 = (u1_col_mb_pred_mode & 0x2) 18628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S || (uc_colMbPredMode_bot_mb & 0x2); 18638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(i4_force_8X8) 18648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 18658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_num_blks = 2; 18668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S partition_size = PRED_8x8; 18678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 18688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 18698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 18708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_num_blks = 1; 18718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S partition_size = PRED_16x8; 18728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 18738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 18748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->u1_currB_type = 1; 18758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*As this mb is derived from 2 Mbs min no of partitions = 2*/ 18768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i = 0; i < 2; i++) 18778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 18788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 18798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_col_zero_flag_start = ps_col_pic->pu1_col_zero_flag 18808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + u2_sub_mb_ofst; 18818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_col_mb_pred_mode = pu1_col_zero_flag_start[u1_sub_mb_num] >> 6; 18828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 18838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(uc_blk = 0; uc_blk < u1_num_blks; uc_blk++) 18848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 18858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_submb_col = (u1_sub_mb_num & 0x7) ? 1 : 0; 18868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_submb_col += u1_sub_mb_num; 18878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S mv_index = u2_sub_mb_ofst + u1_submb_col; 18888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 18898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 18908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i4_mv_indices[i1_num_partitions] = mv_index; 18918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_submb_num[i1_num_partitions] = u1_sub_mb_num; 18928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_partitionsize[i1_num_partitions] = 18938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S partition_size; 18948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i1_num_partitions++; 18958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((pu1_col_zero_flag_start[u1_submb_col] & 1) 18968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S != u1_init_colzero_flag) 18978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->u1_col_zeroflag_change = 1; 18988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_sub_mb_num += 2; 18998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 19008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_sub_mb_num = 8; /* move to second half of Cur MB */ 19018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_sub_mb_ofst += 16;/* move to next Colocated MB */ 19028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 19038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_num_partitions = i1_num_partitions; 19048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return; 19058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 19068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 19078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 19088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_sub_mb_num_col = u1_sub_mb_num | (u1_sub_mb_num >> 1); 19098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_sub_mb_num_col &= 0xb; 19108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_sub_mb_ofst += (u1_sub_mb_num >> 3) ? 16 : 0; 19118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 19128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i4_mv_indices[0] = u2_sub_mb_ofst + uc_sub_mb_num_col; 19138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_submb_num[0] = u1_sub_mb_num; 19148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_partitionsize[0] = PRED_8x8; 19158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_num_partitions = 1; 19168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return; 19178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 19188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 19198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 19208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*! 19218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ************************************************************************** 19228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \if Function name : ih264d_cal_col_pic \endif 19238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 19248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \brief 19258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Finds the colocated picture. 19268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 19278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 19288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \return 19298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 0 on Success and Error code otherwise 19308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ************************************************************************** 19318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */ 19328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SWORD32 ih264d_cal_col_pic(dec_struct_t *ps_dec) 19338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 19348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S struct pic_buffer_t* ps_col_pic = ps_dec->ps_col_pic; 19358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 uc_curpictype, uc_colpictype; 19368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_col_pic = ps_dec->ps_ref_pic_buf_lx[1][0]; 19378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_curpictype = (ps_dec->ps_cur_pic->u1_picturetype & 0x7); 19388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_colpictype = (ps_col_pic->u1_picturetype & 0x7); 19398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(uc_curpictype == FRM_PIC) 19408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 19418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(uc_colpictype == FRM_PIC) 19428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pf_parse_mvdirect = ih264d_one_to_one; 19438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else if(uc_colpictype == COMP_FLD_PAIR) 19448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 19458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pf_parse_mvdirect = ih264d_fld_to_frm; 19468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_col_pic->i4_top_field_order_cnt 19478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= ps_col_pic->i4_bottom_field_order_cnt) 19488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 19498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S struct pic_buffer_t* ps_tempPic = ps_col_pic; 19508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 ui_half_num_of_sub_mbs = ((ps_dec->u2_pic_ht 19518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * ps_dec->u2_pic_wd) >> 5); 19528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_col_pic = ps_dec->ps_ref_pic_buf_lx[1][MAX_REF_BUFS]; 19538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* memcpy ps_tempPic to ps_col_pic */ 19548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *ps_col_pic = *ps_tempPic; 19558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_col_pic->pu1_buf1 = ps_tempPic->pu1_buf1 19568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + ps_tempPic->u2_frm_wd_y; 19578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_col_pic->pu1_buf2 = ps_tempPic->pu1_buf2 19588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + ps_tempPic->u2_frm_wd_uv; 19598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_col_pic->pu1_buf3 = ps_tempPic->pu1_buf3 19608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + ps_tempPic->u2_frm_wd_uv; 19618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_col_pic->pu1_col_zero_flag = ps_tempPic->pu1_col_zero_flag 19628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + ui_half_num_of_sub_mbs; 19638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_col_pic->ps_mv = ps_tempPic->ps_mv + ui_half_num_of_sub_mbs; 19648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 19658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 19668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_col_pic->u1_pic_type = 0;/*complementary reference field pair-refering as frame */ 19678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 19688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 19698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 19708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 19718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 19728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 19738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 19748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 i4_error_code; 19758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i4_error_code = ERROR_DBP_MANAGER_T; 19768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S// i4_error_code |= 1<<IVD_CORRUPTEDDATA; 19778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return i4_error_code; 19788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 19798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 19808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else if(uc_curpictype == AFRM_PIC) 19818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 19828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pf_parse_mvdirect = ih264d_fld_to_mbaff; 19838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 19848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else /* must be a field*/ 19858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 19868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(uc_colpictype == FRM_PIC) 19878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pf_parse_mvdirect = ih264d_frm_to_fld; 19888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else if(uc_colpictype == AFRM_PIC) 19898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pf_parse_mvdirect = ih264d_mbaff_to_fld; 19908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 19918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pf_parse_mvdirect = ih264d_one_to_one; 19928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 19938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->ps_col_pic = ps_col_pic; 19948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return OK; 19958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 19968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 19978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*! 19988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ************************************************************************** 19998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \if Function name : ih264d_frm_to_fld \endif 20008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 20018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \brief 20028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Initializes forward and backward refernce lists for B slice decoding. 20038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 20048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 20058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \return 20068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 0 on Success and Error code otherwise 20078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ************************************************************************** 20088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */ 20098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_frm_to_fld(dec_struct_t *ps_dec, 20108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S struct pic_buffer_t *ps_col_pic, 20118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S directmv_t *ps_direct, 20128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_wd_x, 20138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 u2_sub_mb_ofst, 20148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S dec_mb_info_t * ps_cur_mb_info) 20158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 20168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_col_zero_flag_start, u1_sub_mb_num; 20178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_num_blks, u1_col_mb_pred_mode, uc_blk; 20188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 i1_num_partitions = 0, partition_size, i; 20198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 mv_index; 20208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 increment; 20218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 i4_force_8X8; 20228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UNUSED(ps_cur_mb_info); 20238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->u1_col_zeroflag_change = 1; 20248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->u1_vert_mv_scale = FRM_TO_FLD; 20258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_sub_mb_num = ps_dec->u1_sub_mb_num; 20268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 20278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* new calculation specific to this function */ 20288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((ps_col_pic->u1_picturetype & 0x7) == FRM_PIC) 20298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 20308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD16 u2_frm_wd_in_mbs = ps_dec->u2_frm_wd_in_mbs; 20318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S increment = (u2_frm_wd_in_mbs << 4); 20328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*mbAddrCol = mbAddrCol1 */ 20338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_sub_mb_ofst = (ps_dec->u2_mbx 20348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + (2 * ps_dec->u2_mby * u2_frm_wd_in_mbs)) << 4; 20358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 20368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 20378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S increment = 16; 20388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 20398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_wd_x == MB_SIZE) 20408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 20418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->u1_currB_type = 1; 20428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 20438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 20448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *puc_colZeroFlagStart_bot_mb, uc_colMbPredMode_bot_mb; 20458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 20468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_col_zero_flag_start = ps_col_pic->pu1_col_zero_flag 20478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + u2_sub_mb_ofst; 20488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_col_mb_pred_mode = (*pu1_col_zero_flag_start >> 6); 20498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 20508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S puc_colZeroFlagStart_bot_mb = ps_col_pic->pu1_col_zero_flag 20518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + u2_sub_mb_ofst + increment; 20528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_colMbPredMode_bot_mb = (*puc_colZeroFlagStart_bot_mb >> 6); 20538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 20548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i4_force_8X8 = (u1_col_mb_pred_mode & 0x2) 20558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S || (uc_colMbPredMode_bot_mb & 0x2); 20568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 20578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(i4_force_8X8) 20588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 20598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_num_blks = 2; 20608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S partition_size = PRED_8x8; 20618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 20628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 20638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 20648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S partition_size = PRED_16x8; 20658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_num_blks = 1; 20668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 20678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 20688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 20698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*As this mb is derived from 2 Mbs, min no of partitions = 2*/ 20708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i = 0; i < 2; i++) 20718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 20728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(uc_blk = 0; uc_blk < u1_num_blks; uc_blk++) 20738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 20748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S mv_index = u2_sub_mb_ofst + u1_sub_mb_num; 20758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S mv_index += (u1_sub_mb_num & 0x7) ? 1 : 0; 20768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 20778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i4_mv_indices[i1_num_partitions] = mv_index; 20788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_submb_num[i1_num_partitions] = u1_sub_mb_num; 20798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_partitionsize[i1_num_partitions] = partition_size; 20808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i1_num_partitions++; 20818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 20828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_sub_mb_num += 2; 20838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 20848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_sub_mb_num = 8; /* move to second half of Cur MB */ 20858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_sub_mb_ofst += increment;/* move to next Colocated MB */ 20868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 20878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_num_partitions = i1_num_partitions; 20888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return; 20898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 20908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 20918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 20928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_sub_mb_num_col; 20938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_sub_mb_num_col = u1_sub_mb_num | (u1_sub_mb_num >> 1); 20948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_sub_mb_num_col &= 0xb; 20958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_sub_mb_ofst += (u1_sub_mb_num >> 3) ? increment : 0; 20968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 20978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i4_mv_indices[0] = u2_sub_mb_ofst + u1_sub_mb_num_col; 20988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_submb_num[0] = u1_sub_mb_num; 20998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_partitionsize[0] = PRED_8x8; 21008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_num_partitions = 1; 21018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return; 21028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 21038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 21048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*! 21058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ************************************************************************** 21068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \if Function name : ih264d_fld_to_frm \endif 21078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 21088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \brief 21098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Initializes forward and backward refernce lists for B slice decoding. 21108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 21118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 21128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \return 21138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 0 on Success and Error code otherwise 21148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ************************************************************************** 21158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */ 21168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_fld_to_frm(dec_struct_t *ps_dec, 21178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S struct pic_buffer_t *ps_col_pic, 21188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S directmv_t *ps_direct, 21198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_wd_x, 21208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 u2_sub_mb_ofst, 21218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S dec_mb_info_t * ps_cur_mb_info) 21228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 21238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_col_zero_flag_start, *pu1_col_zero_flag, 21248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *pu1_col_zero_flag_right_half, u1_sub_mb_num, uc_sub_mb_num_col; 21258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_col_mb_pred_mode, uc_blk; 21268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 i4_force_8X8; 21278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 21288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UNUSED(ps_cur_mb_info); 21298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->u1_vert_mv_scale = FLD_TO_FRM; 21308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->u1_col_zeroflag_change = 1; 21318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* new calculation specific to this function for u2_sub_mb_ofst*/ 21328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_sub_mb_ofst = (ps_dec->u2_mbx 21338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + ((ps_dec->u2_mby >> 1) * ps_dec->u2_frm_wd_in_mbs)) << 4; 21348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_sub_mb_ofst += ((ps_dec->u2_mby & 1) << 3); 21358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 21368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_wd_x == MB_SIZE) 21378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 21388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_col_zero_flag_start = ps_col_pic->pu1_col_zero_flag + u2_sub_mb_ofst; 21398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_col_mb_pred_mode = (*pu1_col_zero_flag_start >> 6); 21408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->u1_currB_type = (!!u1_col_mb_pred_mode); 21418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 21428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_col_mb_pred_mode & 0x2) 21438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 21448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_col_mb_pred_mode == PRED_8x16) 21458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 21468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_num_partitions = 2; 21478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i4_mv_indices[0] = u2_sub_mb_ofst; 21488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_submb_num[0] = 0; 21498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_partitionsize[0] = PRED_8x16; 21508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i4_mv_indices[1] = u2_sub_mb_ofst + 2; 21518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_submb_num[1] = 2; 21528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_partitionsize[1] = PRED_8x16; 21538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 21548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 21558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 21568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 i1_num_partitions = 0, partition_size; 21578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 mv_index; 21588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_num_sub_blks, i, u1_col_sub_mb_pred_mode, 21598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_col_sub_mb_pred_mode_rt; 21608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 21618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_sub_mb_num = ps_dec->u1_sub_mb_num; 21628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 21638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_col_zero_flag = pu1_col_zero_flag_start + u1_sub_mb_num; 21648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_col_sub_mb_pred_mode = (*pu1_col_zero_flag & 0x10);/* 8x4 or 4x4 mode */ 21658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 21668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_col_zero_flag_right_half = pu1_col_zero_flag_start + u1_sub_mb_num 21678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + 2; 21688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_col_sub_mb_pred_mode_rt = (*pu1_col_zero_flag_right_half 21698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S & 0x10);/* 8x4 or 4x4 mode */ 21708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 21718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i4_force_8X8 = (u1_col_sub_mb_pred_mode) 21728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S || (u1_col_sub_mb_pred_mode_rt); 21738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(i4_force_8X8) 21748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 21758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_num_sub_blks = 2; 21768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S partition_size = PRED_8x8; 21778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 21788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 21798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 21808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S partition_size = PRED_8x16; 21818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_num_sub_blks = 1; 21828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 21838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 21848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i = 0; i < 2; i++) 21858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 21868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(uc_blk = 0; uc_blk < u1_num_sub_blks; uc_blk++) 21878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 21888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_sub_mb_num_col = u1_sub_mb_num | (u1_sub_mb_num >> 1); 21898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_sub_mb_num_col &= 0x7; 21908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S mv_index = u2_sub_mb_ofst + uc_sub_mb_num_col; 21918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 21928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i4_mv_indices[i1_num_partitions] = mv_index; 21938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_submb_num[i1_num_partitions] = 21948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_sub_mb_num; 21958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_partitionsize[i1_num_partitions] = 21968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S partition_size; 21978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i1_num_partitions++; 21988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_sub_mb_num += 8; 21998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 22008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 22018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_sub_mb_num = 2; /* move to second half of Cur MB */ 22028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 22038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 22048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_num_partitions = i1_num_partitions; 22058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return; 22068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 22078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 22088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 22098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 22108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_num_partitions = 1; 22118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i4_mv_indices[0] = u2_sub_mb_ofst; 22128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_submb_num[0] = 0; 22138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_partitionsize[0] = PRED_16x16; 22148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return; 22158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 22168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 22178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 22188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 22198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_sub_mb_num = ps_dec->u1_sub_mb_num; 22208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_sub_mb_num_col = u1_sub_mb_num | (u1_sub_mb_num >> 1); 22218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_sub_mb_num_col &= 0x7; 22228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 22238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i4_mv_indices[0] = u2_sub_mb_ofst + uc_sub_mb_num_col; 22248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_submb_num[0] = u1_sub_mb_num; 22258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_partitionsize[0] = PRED_8x8; 22268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_direct->i1_num_partitions = 1; 22278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 22288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 22298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*! 22308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ************************************************************************** 22318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \if Function name : ih264d_one_to_one \endif 22328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 22338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \brief 22348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Initializes forward and backward refernce lists for B slice decoding. 22358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 22368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 22378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \return 22388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 0 on Success and Error code otherwise 22398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ************************************************************************** 22408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */ 22418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_mbaff_to_fld(dec_struct_t *ps_dec, 22428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S struct pic_buffer_t *ps_col_pic, 22438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S directmv_t *ps_direct, 22448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_wd_x, 22458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 u2_sub_mb_ofst, 22468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S dec_mb_info_t * ps_cur_mb_info) 22478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 22488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8* pu1_col_zero_flag, u1_iscol_mb_fld; 22498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_sub_mb_ofst <<= 1; 22508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_col_zero_flag = ps_col_pic->pu1_col_zero_flag + u2_sub_mb_ofst; 22518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_iscol_mb_fld = (*pu1_col_zero_flag & 0x2) >> 1; 22528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_iscol_mb_fld) 22538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 22548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_sub_mb_ofst += (ps_dec->ps_cur_slice->u1_bottom_field_flag << 4); 22558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264d_one_to_one(ps_dec, ps_col_pic, ps_direct, u1_wd_x, 22568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_sub_mb_ofst, ps_cur_mb_info); 22578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 22588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 22598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264d_frm_to_fld(ps_dec, ps_col_pic, ps_direct, u1_wd_x, 22608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_sub_mb_ofst, ps_cur_mb_info); 22618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 22628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*! 22638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ************************************************************************** 22648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \if Function name : ih264d_one_to_one \endif 22658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 22668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \brief 22678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Initializes forward and backward refernce lists for B slice decoding. 22688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 22698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 22708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \return 22718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 0 on Success and Error code otherwise 22728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ************************************************************************** 22738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */ 22748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_fld_to_mbaff(dec_struct_t *ps_dec, 22758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S struct pic_buffer_t *ps_col_pic, 22768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S directmv_t *ps_direct, 22778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_wd_x, 22788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 u2_sub_mb_ofst, 22798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S dec_mb_info_t * ps_cur_mb_info) 22808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 22818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((ps_col_pic->u1_picturetype & 0x7) == COMP_FLD_PAIR) 22828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 22838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* first calculate the colocated picture which varies with Mb */ 22848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_is_cur_mb_fld; 22858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_is_cur_mb_fld = ps_cur_mb_info->u1_mb_field_decodingflag; 22868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_sub_mb_ofst = (u2_sub_mb_ofst & 0xffe0); /* mbaddrCol5 = curmbaddr/2;*/ 22878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_sub_mb_ofst >>= 1; 22888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 22898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_col_pic = ps_dec->ps_ref_pic_buf_lx[1][0]; 22908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_is_cur_mb_fld) 22918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 22928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(1 - ps_cur_mb_info->u1_topmb) 22938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_col_pic = ps_dec->ps_ref_pic_buf_lx[1][MAX_REF_BUFS]; 22948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 22958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264d_one_to_one(ps_dec, ps_col_pic, ps_direct, u1_wd_x, 22968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_sub_mb_ofst, ps_cur_mb_info); 22978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 22988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 22998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 23008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 23018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ABS(ps_col_pic->i4_top_field_order_cnt 23028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S - ps_dec->ps_cur_pic->i4_poc) >= 23038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ABS(ps_dec->ps_cur_pic->i4_poc - ps_col_pic->i4_bottom_field_order_cnt)) 23048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 23058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_col_pic = ps_dec->ps_ref_pic_buf_lx[1][MAX_REF_BUFS]; 23068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 23078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 23088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_cur_mb_info->u1_topmb == 0) 23098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_sub_mb_ofst += 8; 23108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264d_mbaff_cross_pmbair(ps_dec, ps_col_pic, ps_direct, u1_wd_x, 23118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_sub_mb_ofst, ps_cur_mb_info); 23128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 23138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->ps_col_pic = ps_col_pic; 23148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 23158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 23168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 23178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8* pu1_col_zero_flag = ps_col_pic->pu1_col_zero_flag 23188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + u2_sub_mb_ofst; 23198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 temp, u1_is_cur_mb_fld, u1_iscol_mb_fld; 23208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 23218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_iscol_mb_fld = (*pu1_col_zero_flag & 0x2) >> 1; 23228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_is_cur_mb_fld = ps_cur_mb_info->u1_mb_field_decodingflag; 23238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S temp = (u1_iscol_mb_fld ^ u1_is_cur_mb_fld); 23248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 23258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(temp == 0) 23268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264d_one_to_one(ps_dec, ps_col_pic, ps_direct, u1_wd_x, 23278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_sub_mb_ofst, ps_cur_mb_info); 23288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 23298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 23308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_sub_mb_ofst &= 0xffef; 23318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_is_cur_mb_fld == 0) 23328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 23338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ABS(ps_col_pic->i4_top_field_order_cnt 23348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S - ps_dec->ps_cur_pic->i4_poc) >= 23358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ABS(ps_dec->ps_cur_pic->i4_poc - ps_col_pic->i4_bottom_field_order_cnt)) 23368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 23378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_sub_mb_ofst += 0x10; 23388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 23398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_cur_mb_info->u1_topmb == 0) 23408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_sub_mb_ofst += 8; 23418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 23428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264d_mbaff_cross_pmbair(ps_dec, ps_col_pic, ps_direct, u1_wd_x, 23438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_sub_mb_ofst, ps_cur_mb_info); 23448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 23458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 23468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 23478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2348