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