18d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/******************************************************************************
28d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
38d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Copyright (C) 2015 The Android Open Source Project
48d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
58d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Licensed under the Apache License, Version 2.0 (the "License");
68d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * you may not use this file except in compliance with the License.
78d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * You may obtain a copy of the License at:
88d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
98d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * http://www.apache.org/licenses/LICENSE-2.0
108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Unless required by applicable law or agreed to in writing, software
128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * distributed under the License is distributed on an "AS IS" BASIS,
138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * See the License for the specific language governing permissions and
158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * limitations under the License.
168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *****************************************************************************
188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*/
208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*!
218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S **************************************************************************
228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \file ih264d_parse_slice.c
238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \brief
258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    Contains routines that decodes a slice NAL unit
268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \date
288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    19/12/2002
298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \author  AI
318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S **************************************************************************
328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */
338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include <string.h>
348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_typedefs.h"
358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_macros.h"
368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_platform_macros.h"
378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ithread.h"
388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_structs.h"
398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_debug.h"
408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_bitstrm.h"
418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_parse_mb_header.h"
428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_process_bslice.h"
438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_process_pslice.h"
448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_parse_cavlc.h"
458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_utils.h"
468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_deblocking.h"
478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_defs.h"
488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_error_handler.h"
498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_tables.h"
508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_defs.h"
518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_mem_request.h"
528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_parse_islice.h"
538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_parse_slice.h"
548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_mvpred.h"
558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_mb_utils.h"
568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_defs.h"
588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_quant_scaling.h"
598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_inter_pred.h"
618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_sei.h"
638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d.h"
648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_error.h"
658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_disp_mgr.h"
668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_buf_mgr.h"
678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_thread_parse_decode.h"
698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_thread_compute_bs.h"
708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_dpb_manager.h"
718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include <assert.h>
728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_parse_islice.h"
738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define RET_LAST_SKIP  0x80000000
748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*!
768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S **************************************************************************
778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \if Function name : ih264d_form_pred_weight_matrix \endif
788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \brief
808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    Forms pred weight matrix.
818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \return
838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    None
848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S **************************************************************************
868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */
878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_form_pred_weight_matrix(dec_struct_t *ps_dec)
898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    dec_slice_params_t *ps_cur_slice;
918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 uc_num_ref_idx_l0_active, uc_num_ref_idx_l1_active;
928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 i, j;
938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 *pu4_mat_iwt_ofst;
948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD16 i2_idx;
958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 *pui32_weight_offset_l0, *pui32_weight_offset_l1;
968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_temp;
978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_cur_slice = ps_dec->ps_cur_slice;
998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    uc_num_ref_idx_l0_active = ps_cur_slice->u1_num_ref_idx_lx_active[0];
1008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    uc_num_ref_idx_l1_active = ps_cur_slice->u1_num_ref_idx_lx_active[1];
1018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    pu4_mat_iwt_ofst = ps_dec->pu4_wts_ofsts_mat;
1038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(ps_cur_slice->u1_slice_type == B_SLICE)
1058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
1068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        for(i = 0; i < uc_num_ref_idx_l0_active; i++)
1078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
1088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pui32_weight_offset_l0 = ps_cur_slice->u4_wt_ofst_lx[0][i];
1098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            for(j = 0; j < uc_num_ref_idx_l1_active; j++)
1108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
1118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                pui32_weight_offset_l1 = ps_cur_slice->u4_wt_ofst_lx[1][j];
1128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                i2_idx = i * uc_num_ref_idx_l0_active + j;
1138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                i2_idx = X3(i2_idx);
1148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                /*        u4_temp = (pui32_weight_offset_l0[0] | (pui32_weight_offset_l1[0] << 16));
1158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                 pu4_mat_iwt_ofst[0] = u4_temp;
1168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                 u4_temp = (pui32_weight_offset_l0[1] | (pui32_weight_offset_l1[1] << 16));
1178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                 pu4_mat_iwt_ofst[1] = u4_temp;
1188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                 u4_temp = (pui32_weight_offset_l0[2] | (pui32_weight_offset_l1[2] << 16));
1198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                 pu4_mat_iwt_ofst[2] = u4_temp;
1208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                 pu4_mat_iwt_ofst += 3;*/
1218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                pu4_mat_iwt_ofst[0] = pui32_weight_offset_l0[0];
1228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                pu4_mat_iwt_ofst[1] = pui32_weight_offset_l1[0];
1238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                pu4_mat_iwt_ofst[2] = pui32_weight_offset_l0[1];
1248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                pu4_mat_iwt_ofst[3] = pui32_weight_offset_l1[1];
1258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                pu4_mat_iwt_ofst[4] = pui32_weight_offset_l0[2];
1268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                pu4_mat_iwt_ofst[5] = pui32_weight_offset_l1[2];
1278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                pu4_mat_iwt_ofst += 6;
1288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
1298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
1308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
1318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else
1328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
1338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        for(i = 0; i < uc_num_ref_idx_l0_active; i++)
1348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
1358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pui32_weight_offset_l0 = ps_cur_slice->u4_wt_ofst_lx[0][i];
1368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            i2_idx = X3(i);
1378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u4_temp = (UWORD32)pui32_weight_offset_l0[0];
1388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pu4_mat_iwt_ofst[0] = u4_temp;
1398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u4_temp = (UWORD32)pui32_weight_offset_l0[1];
1408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pu4_mat_iwt_ofst[2] = u4_temp;
1418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u4_temp = (UWORD32)pui32_weight_offset_l0[2];
1428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pu4_mat_iwt_ofst[4] = u4_temp;
1438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pu4_mat_iwt_ofst += 6;
1448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
1458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
1468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
1478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*!
1508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S **************************************************************************
1518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \if Function name :  init_firstSliceParam \endif
1528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
1538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \brief
1548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    Initialize the Parameter required for all the slices for a picture
1558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
1568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \return           : Nothing
1578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
1588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S **************************************************************************
1598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */
1608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SWORD32 ih264d_start_of_pic(dec_struct_t *ps_dec,
1628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                         WORD32 i4_poc,
1638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                         pocstruct_t *ps_temp_poc,
1648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                         UWORD16 u2_frame_num,
1658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                         dec_pic_params_t *ps_pps)
1668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
1678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    pocstruct_t *ps_prev_poc = &ps_dec->s_cur_pic_poc;
1688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    pocstruct_t *ps_cur_poc = ps_temp_poc;
1698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    pic_buffer_t *pic_buf;
1718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ivd_video_decode_op_t * ps_dec_output =
1738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    (ivd_video_decode_op_t *)ps_dec->pv_dec_out;
1748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    dec_slice_params_t *ps_cur_slice = ps_dec->ps_cur_slice;
1758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    dec_seq_params_t *ps_seq = ps_pps->ps_sps;
1768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 u1_bottom_field_flag = ps_cur_slice->u1_bottom_field_flag;
1778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 u1_field_pic_flag = ps_cur_slice->u1_field_pic_flag;
1788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* high profile related declarations */
1798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    high_profile_tools_t s_high_profile;
1808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 ret;
1818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    H264_MUTEX_LOCK(&ps_dec->process_disp_mutex);
1838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_prev_poc->i4_pic_order_cnt_lsb = ps_cur_poc->i4_pic_order_cnt_lsb;
1858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_prev_poc->i4_pic_order_cnt_msb = ps_cur_poc->i4_pic_order_cnt_msb;
1868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_prev_poc->i4_delta_pic_order_cnt_bottom =
1878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    ps_cur_poc->i4_delta_pic_order_cnt_bottom;
1888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_prev_poc->i4_delta_pic_order_cnt[0] =
1898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    ps_cur_poc->i4_delta_pic_order_cnt[0];
1908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_prev_poc->i4_delta_pic_order_cnt[1] =
1918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    ps_cur_poc->i4_delta_pic_order_cnt[1];
1928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_prev_poc->u1_bot_field = ps_dec->ps_cur_slice->u1_bottom_field_flag;
1938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_prev_poc->i4_prev_frame_num_ofst = ps_cur_poc->i4_prev_frame_num_ofst;
1948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_prev_poc->u2_frame_num = u2_frame_num;
1958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->i1_prev_mb_qp_delta = 0;
1968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->i1_next_ctxt_idx = 0;
1978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1998ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    ps_dec->u4_nmb_deblk = 0;
2008ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    if(ps_dec->u4_num_cores == 1)
2018ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen       ps_dec->u4_nmb_deblk = 1;
2028ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
2038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(ps_seq->u1_mb_aff_flag == 1)
2068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
2078ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        ps_dec->u4_nmb_deblk = 0;
2088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(ps_dec->u4_num_cores > 2)
2098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->u4_num_cores = 2;
2108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
2118ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
2128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->u4_use_intrapred_line_copy = 0;
2138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2148ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
2158ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
2168ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    if (ps_seq->u1_mb_aff_flag == 0)
2178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
2188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->u4_use_intrapred_line_copy = 1;
2198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
2208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->u4_app_disable_deblk_frm = 0;
2228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* If degrade is enabled, set the degrade flags appropriately */
2238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(ps_dec->i4_degrade_type && ps_dec->i4_degrade_pics)
2248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
2258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        WORD32 degrade_pic;
2268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->i4_degrade_pic_cnt++;
2278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        degrade_pic = 0;
2288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* If degrade is to be done in all frames, then do not check further */
2308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        switch(ps_dec->i4_degrade_pics)
2318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
2328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            case 4:
2338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
2348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                degrade_pic = 1;
2358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                break;
2368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
2378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            case 3:
2388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
2398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if(ps_cur_slice->u1_slice_type != I_SLICE)
2408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    degrade_pic = 1;
2418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                break;
2438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
2448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            case 2:
2458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
2468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                /* If pic count hits non-degrade interval or it is an islice, then do not degrade */
2488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if((ps_cur_slice->u1_slice_type != I_SLICE)
2498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                && (ps_dec->i4_degrade_pic_cnt
2508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                != ps_dec->i4_nondegrade_interval))
2518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    degrade_pic = 1;
2528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                break;
2548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
2558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            case 1:
2568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
2578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                /* Check if the current picture is non-ref */
2588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if(0 == ps_cur_slice->u1_nal_ref_idc)
2598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
2608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    degrade_pic = 1;
2618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
2628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                break;
2638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
2648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
2668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(degrade_pic)
2678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
2688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(ps_dec->i4_degrade_type & 0x2)
2698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ps_dec->u4_app_disable_deblk_frm = 1;
2708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* MC degrading is done only for non-ref pictures */
2728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(0 == ps_cur_slice->u1_nal_ref_idc)
2738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
2748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if(ps_dec->i4_degrade_type & 0x4)
2758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    ps_dec->i4_mv_frac_mask = 0;
2768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if(ps_dec->i4_degrade_type & 0x8)
2788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    ps_dec->i4_mv_frac_mask = 0;
2798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
2808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
2818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        else
2828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->i4_degrade_pic_cnt = 0;
2838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
2848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
2868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        dec_err_status_t * ps_err = ps_dec->ps_dec_err_status;
2878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(ps_dec->u1_sl_typ_5_9
2888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        && ((ps_cur_slice->u1_slice_type == I_SLICE)
2898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        || (ps_cur_slice->u1_slice_type
2908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                        == SI_SLICE)))
2918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_err->u1_cur_pic_type = PIC_TYPE_I;
2928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        else
2938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_err->u1_cur_pic_type = PIC_TYPE_UNKNOWN;
2948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(ps_err->u1_pic_aud_i == PIC_TYPE_I)
2968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
2978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_err->u1_cur_pic_type = PIC_TYPE_I;
2988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_err->u1_pic_aud_i = PIC_TYPE_UNKNOWN;
2998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
3008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(ps_cur_slice->u1_nal_unit_type == IDR_SLICE_NAL)
3028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
3038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(ps_err->u1_err_flag)
3048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ih264d_reset_ref_bufs(ps_dec->ps_dpb_mgr);
3058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_err->u1_err_flag = ACCEPT_ALL_PICS;
3068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
3078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
3088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(ps_dec->u1_init_dec_flag && ps_dec->s_prev_seq_params.u1_eoseq_pending)
3108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
3118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* Reset the decoder picture buffers */
3128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        WORD32 j;
3138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        for(j = 0; j < MAX_DISP_BUFS_NEW; j++)
3148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
3158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ih264_buf_mgr_release((buf_mgr_t *)ps_dec->pv_pic_buf_mgr,
3178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                  j,
3188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                  BUF_MGR_REF);
3198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ih264_buf_mgr_release((buf_mgr_t *)ps_dec->pv_mv_buf_mgr,
3208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                  ps_dec->au1_pic_buf_id_mv_buf_id_map[j],
3218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                  BUF_MGR_REF);
3228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ih264_buf_mgr_release((buf_mgr_t *)ps_dec->pv_pic_buf_mgr,
3238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                  j,
3248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                  BUF_MGR_IO);
3258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
3268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* reset the decoder structure parameters related to buffer handling */
3288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->u1_second_field = 0;
3298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->i4_cur_display_seq = 0;
3308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /********************************************************************/
3328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* indicate in the decoder output i4_status that some frames are being */
3338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* dropped, so that it resets timestamp and wait for a new sequence */
3348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /********************************************************************/
3358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->s_prev_seq_params.u1_eoseq_pending = 0;
3378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
3388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ret = ih264d_init_pic(ps_dec, u2_frame_num, i4_poc, ps_pps);
3398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(ret != OK)
3408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        return ret;
3418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->pv_parse_tu_coeff_data = ps_dec->pv_pic_tu_coeff_data;
3438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->pv_proc_tu_coeff_data  = ps_dec->pv_pic_tu_coeff_data;
3448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->ps_nmb_info = ps_dec->ps_frm_mb_info;
3458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(ps_dec->u1_separate_parse)
3468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
3478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD16 pic_wd = ps_dec->u4_width_at_init;
3488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD16 pic_ht = ps_dec->u4_height_at_init;
3498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD32 num_mbs;
3508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3518ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        if((NULL != ps_dec->ps_cur_sps) && (1 == (ps_dec->ps_cur_sps->u1_is_valid)))
3528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
3538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pic_wd = ps_dec->u2_pic_wd;
3548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pic_ht = ps_dec->u2_pic_ht;
3558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
3568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        num_mbs = (pic_wd * pic_ht) >> 8;
3578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(ps_dec->pu1_dec_mb_map)
3598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
3608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            memset((void *)ps_dec->pu1_dec_mb_map, 0, num_mbs);
3618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
3628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(ps_dec->pu1_recon_mb_map)
3648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
3658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            memset((void *)ps_dec->pu1_recon_mb_map, 0, num_mbs);
3678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
3688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(ps_dec->pu2_slice_num_map)
3708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
3718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            memset((void *)ps_dec->pu2_slice_num_map, 0,
3728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                   (num_mbs * sizeof(UWORD16)));
3738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
3748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
3768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3778ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    ps_dec->ps_parse_cur_slice = &(ps_dec->ps_dec_slice_buf[0]);
3788ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    ps_dec->ps_decode_cur_slice = &(ps_dec->ps_dec_slice_buf[0]);
3798ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    ps_dec->ps_computebs_cur_slice = &(ps_dec->ps_dec_slice_buf[0]);
3808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Initialize all the HP toolsets to zero */
3828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->s_high_profile.u1_scaling_present = 0;
3838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->s_high_profile.u1_transform8x8_present = 0;
3848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Get Next Free Picture */
3868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(1 == ps_dec->u4_share_disp_buf)
3878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
3888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD32 i;
3898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* Free any buffer that is in the queue to be freed */
3908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        for(i = 0; i < MAX_DISP_BUFS_NEW; i++)
3918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
3928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(0 == ps_dec->u4_disp_buf_to_be_freed[i])
3938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                continue;
3948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ih264_buf_mgr_release((buf_mgr_t *)ps_dec->pv_pic_buf_mgr, i,
3958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            BUF_MGR_IO);
3968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->u4_disp_buf_to_be_freed[i] = 0;
3978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->u4_disp_buf_mapping[i] = 0;
3988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
4008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
4018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(!(u1_field_pic_flag && 0 != ps_dec->u1_top_bottom_decoded)) //ps_dec->u1_second_field))
4028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
4038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pic_buffer_t *ps_cur_pic;
4048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        WORD32 cur_pic_buf_id, cur_mv_buf_id;
4058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        col_mv_buf_t *ps_col_mv;
4068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        while(1)
4078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
4088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_cur_pic = (pic_buffer_t *)ih264_buf_mgr_get_next_free(
4098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            (buf_mgr_t *)ps_dec->pv_pic_buf_mgr,
4108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            &cur_pic_buf_id);
4118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(ps_cur_pic == NULL)
4128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
4138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ps_dec->i4_error_code = ERROR_UNAVAIL_PICBUF_T;
4148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                return ERROR_UNAVAIL_PICBUF_T;
4158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
4168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(0 == ps_dec->u4_disp_buf_mapping[cur_pic_buf_id])
4178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
4188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                break;
4198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
4208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
4228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_col_mv = (col_mv_buf_t *)ih264_buf_mgr_get_next_free((buf_mgr_t *)ps_dec->pv_mv_buf_mgr,
4238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                               &cur_mv_buf_id);
4248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(ps_col_mv == NULL)
4258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
4268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->i4_error_code = ERROR_UNAVAIL_MVBUF_T;
4278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            return ERROR_UNAVAIL_MVBUF_T;
4288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
4298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->ps_cur_pic = ps_cur_pic;
4318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->u1_pic_buf_id = cur_pic_buf_id;
4328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_cur_pic->u4_ts = ps_dec->u4_ts;
4338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_cur_pic->u1_mv_buf_id = cur_mv_buf_id;
4368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->au1_pic_buf_id_mv_buf_id_map[cur_pic_buf_id] = cur_mv_buf_id;
4378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_cur_pic->pu1_col_zero_flag = (UWORD8 *)ps_col_mv->pv_col_zero_flag;
4398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_cur_pic->ps_mv = (mv_pred_t *)ps_col_mv->pv_mv;
4408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->au1_pic_buf_ref_flag[cur_pic_buf_id] = 0;
4418ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        if(ps_dec->u1_first_slice_in_stream)
4428ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        {
4438ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            /*make first entry of list0 point to cur pic,so that if first Islice is in error, ref pic struct will have valid entries*/
4448ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            ps_dec->ps_ref_pic_buf_lx[0] = ps_dec->ps_dpb_mgr->ps_init_dpb[0];
4458ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            *(ps_dec->ps_dpb_mgr->ps_init_dpb[0][0]) = *ps_cur_pic;
4468ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        }
4478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(!ps_dec->ps_cur_pic)
4498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
4508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            WORD32 j;
451086dd8ea90eaf4ead8b4927e777b1c8a19bd23a9Martin Storsjo            H264_DEC_DEBUG_PRINT("------- Display Buffers Reset --------\n");
4528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            for(j = 0; j < MAX_DISP_BUFS_NEW; j++)
4538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
4548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ih264_buf_mgr_release((buf_mgr_t *)ps_dec->pv_pic_buf_mgr,
4568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      j,
4578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      BUF_MGR_REF);
4588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ih264_buf_mgr_release((buf_mgr_t *)ps_dec->pv_mv_buf_mgr,
4598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      ps_dec->au1_pic_buf_id_mv_buf_id_map[j],
4608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      BUF_MGR_REF);
4618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ih264_buf_mgr_release((buf_mgr_t *)ps_dec->pv_pic_buf_mgr,
4628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      j,
4638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      BUF_MGR_IO);
4648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
4658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->i4_cur_display_seq = 0;
4678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->i4_prev_max_display_seq = 0;
4688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->i4_max_poc = 0;
4698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_cur_pic = (pic_buffer_t *)ih264_buf_mgr_get_next_free(
4718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            (buf_mgr_t *)ps_dec->pv_pic_buf_mgr,
4728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            &cur_pic_buf_id);
4738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(ps_cur_pic == NULL)
4748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
4758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ps_dec->i4_error_code = ERROR_UNAVAIL_PICBUF_T;
4768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                return ERROR_UNAVAIL_PICBUF_T;
4778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
4788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_col_mv = (col_mv_buf_t *)ih264_buf_mgr_get_next_free((buf_mgr_t *)ps_dec->pv_mv_buf_mgr,
4808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                                   &cur_mv_buf_id);
4818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(ps_col_mv == NULL)
4828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
4838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ps_dec->i4_error_code = ERROR_UNAVAIL_MVBUF_T;
4848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                return ERROR_UNAVAIL_MVBUF_T;
4858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
4868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->ps_cur_pic = ps_cur_pic;
4888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->u1_pic_buf_id = cur_pic_buf_id;
4898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_cur_pic->u4_ts = ps_dec->u4_ts;
4908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->apv_buf_id_pic_buf_map[cur_pic_buf_id] = (void *)ps_cur_pic;
4918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_cur_pic->u1_mv_buf_id = cur_mv_buf_id;
4938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->au1_pic_buf_id_mv_buf_id_map[cur_pic_buf_id] = cur_mv_buf_id;
4948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_cur_pic->pu1_col_zero_flag = (UWORD8 *)ps_col_mv->pv_col_zero_flag;
4968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_cur_pic->ps_mv = (mv_pred_t *)ps_col_mv->pv_mv;
4978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->au1_pic_buf_ref_flag[cur_pic_buf_id] = 0;
4988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
5008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->ps_cur_pic->u1_picturetype = u1_field_pic_flag;
5028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->ps_cur_pic->u4_pack_slc_typ = SKIP_NONE;
5038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        H264_DEC_DEBUG_PRINT("got a buffer\n");
5048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
5058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else
5068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
5078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        H264_DEC_DEBUG_PRINT("did not get a buffer\n");
5088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
5098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->u4_pic_buf_got = 1;
5118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->ps_cur_pic->i4_poc = i4_poc;
5138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->ps_cur_pic->i4_frame_num = u2_frame_num;
5148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->ps_cur_pic->i4_pic_num = u2_frame_num;
5158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->ps_cur_pic->i4_top_field_order_cnt = ps_pps->i4_top_field_order_cnt;
5168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->ps_cur_pic->i4_bottom_field_order_cnt =
5178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    ps_pps->i4_bottom_field_order_cnt;
5188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->ps_cur_pic->i4_avg_poc = ps_pps->i4_avg_poc;
5198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->ps_cur_pic->u4_time_stamp = ps_dec->u4_pts;
5208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->s_cur_pic = *(ps_dec->ps_cur_pic);
5228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(u1_field_pic_flag && u1_bottom_field_flag)
5238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
5248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        WORD32 i4_temp_poc;
5258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        WORD32 i4_top_field_order_poc, i4_bot_field_order_poc;
5268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* Point to odd lines, since it's bottom field */
5278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->s_cur_pic.pu1_buf1 += ps_dec->s_cur_pic.u2_frm_wd_y;
5288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->s_cur_pic.pu1_buf2 += ps_dec->s_cur_pic.u2_frm_wd_uv;
5298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->s_cur_pic.pu1_buf3 += ps_dec->s_cur_pic.u2_frm_wd_uv;
5308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->s_cur_pic.ps_mv +=
5318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        ((ps_dec->u2_pic_ht * ps_dec->u2_pic_wd) >> 5);
5328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->s_cur_pic.pu1_col_zero_flag += ((ps_dec->u2_pic_ht
5338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        * ps_dec->u2_pic_wd) >> 5);
5348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->ps_cur_pic->u1_picturetype |= BOT_FLD;
5358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i4_top_field_order_poc = ps_dec->ps_cur_pic->i4_top_field_order_cnt;
5368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i4_bot_field_order_poc = ps_dec->ps_cur_pic->i4_bottom_field_order_cnt;
5378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i4_temp_poc = MIN(i4_top_field_order_poc,
5388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                 i4_bot_field_order_poc);
5398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->ps_cur_pic->i4_avg_poc = i4_temp_poc;
5408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
5418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_cur_slice->u1_mbaff_frame_flag = ps_seq->u1_mb_aff_flag
5438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    && (!u1_field_pic_flag);
5448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->ps_cur_pic->u1_picturetype |= (ps_cur_slice->u1_mbaff_frame_flag
5468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    << 2);
5478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->ps_cur_mb_row = ps_dec->ps_nbr_mb_row; //[0];
5498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->ps_cur_mb_row++; //Increment by 1 ,so that left mb will always be valid
5508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->ps_top_mb_row =
5518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    ps_dec->ps_nbr_mb_row
5528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                    + ((ps_dec->u2_frm_wd_in_mbs + 1)
5538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                    << (1
5548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                                    - ps_dec->ps_cur_sps->u1_frame_mbs_only_flag));
5558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->ps_top_mb_row++; //Increment by 1 ,so that left mb will always be valid
5568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->pu1_y = ps_dec->pu1_y_scratch[0];
5588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->pu1_u = ps_dec->pu1_u_scratch[0];
5598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->pu1_v = ps_dec->pu1_v_scratch[0];
5608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->u1_yuv_scratch_idx = 0;
5618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* CHANGED CODE */
5628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->ps_mv_cur = ps_dec->s_cur_pic.ps_mv;
5638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->ps_mv_top = ps_dec->ps_mv_top_p[0];
5648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* CHANGED CODE */
5658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->u1_mv_top_p = 0;
5668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->u1_mb_idx = 0;
5678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* CHANGED CODE */
5688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->ps_mv_left = ps_dec->s_cur_pic.ps_mv;
5698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->pu1_yleft = 0;
5708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->pu1_uleft = 0;
5718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->pu1_vleft = 0;
5728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->u1_not_wait_rec = 2;
5738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->u2_total_mbs_coded = 0;
5748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->i4_submb_ofst = -(SUB_BLK_SIZE);
5758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->u4_pred_info_idx = 0;
5768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->u4_pred_info_pkd_idx = 0;
5778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->u4_dma_buf_idx = 0;
5788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->ps_mv = ps_dec->s_cur_pic.ps_mv;
5798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->ps_mv_bank_cur = ps_dec->s_cur_pic.ps_mv;
5808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->pu1_col_zero_flag = ps_dec->s_cur_pic.pu1_col_zero_flag;
5818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->ps_part = ps_dec->ps_parse_part_params;
5828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->i2_prev_slice_mbx = -1;
5838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->i2_prev_slice_mby = 0;
5848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->u2_mv_2mb[0] = 0;
5858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->u2_mv_2mb[1] = 0;
5868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->u1_last_pic_not_decoded = 0;
5878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->u2_cur_slice_num = 0;
5898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->u2_cur_slice_num_dec_thread = 0;
5908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->u2_cur_slice_num_bs = 0;
5918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->u4_intra_pred_line_ofst = 0;
5928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->pu1_cur_y_intra_pred_line = ps_dec->pu1_y_intra_pred_line;
5938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->pu1_cur_u_intra_pred_line = ps_dec->pu1_u_intra_pred_line;
5948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->pu1_cur_v_intra_pred_line = ps_dec->pu1_v_intra_pred_line;
5958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->pu1_cur_y_intra_pred_line_base = ps_dec->pu1_y_intra_pred_line;
5978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->pu1_cur_u_intra_pred_line_base = ps_dec->pu1_u_intra_pred_line;
5988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->pu1_cur_v_intra_pred_line_base = ps_dec->pu1_v_intra_pred_line;
5998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->pu1_prev_y_intra_pred_line = ps_dec->pu1_y_intra_pred_line
6058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    + (ps_dec->u2_frm_wd_in_mbs * MB_SIZE);
6068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->pu1_prev_u_intra_pred_line = ps_dec->pu1_u_intra_pred_line
6088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    + ps_dec->u2_frm_wd_in_mbs * BLK8x8SIZE * YUV420SP_FACTOR;
6098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->pu1_prev_v_intra_pred_line = ps_dec->pu1_v_intra_pred_line
6108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    + ps_dec->u2_frm_wd_in_mbs * BLK8x8SIZE;
6118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->ps_deblk_mbn = ps_dec->ps_deblk_pic;
6138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->ps_deblk_mbn_curr = ps_dec->ps_deblk_mbn;
6148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->ps_deblk_mbn_prev = ps_dec->ps_deblk_mbn + ps_dec->u1_recon_mb_grp;
6158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Initialize The Function Pointer Depending Upon the Entropy and MbAff Flag */
6168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
6178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(ps_cur_slice->u1_mbaff_frame_flag)
6188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
6198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->pf_compute_bs = ih264d_compute_bs_mbaff;
6208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->pf_mvpred = ih264d_mvpred_mbaff;
6218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
6228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        else
6238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
6248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->pf_compute_bs = ih264d_compute_bs_non_mbaff;
6258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->u1_cur_mb_fld_dec_flag = ps_cur_slice->u1_field_pic_flag;
6268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
6278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
6288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Set up the Parameter for DMA transfer */
6298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
6308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD8 u1_field_pic_flag = ps_dec->ps_cur_slice->u1_field_pic_flag;
6318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD8 u1_mbaff = ps_cur_slice->u1_mbaff_frame_flag;
6338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD8 uc_lastmbs = (((ps_dec->u2_pic_wd) >> 4)
6358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        % (ps_dec->u1_recon_mb_grp >> u1_mbaff));
6368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD16 ui16_lastmbs_widthY =
6378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        (uc_lastmbs ? (uc_lastmbs << 4) : ((ps_dec->u1_recon_mb_grp
6388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        >> u1_mbaff) << 4));
6398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD16 ui16_lastmbs_widthUV =
6408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        uc_lastmbs ? (uc_lastmbs << 3) : ((ps_dec->u1_recon_mb_grp
6418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        >> u1_mbaff) << 3);
6428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->s_tran_addrecon.pu1_dest_y = ps_dec->s_cur_pic.pu1_buf1;
6448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->s_tran_addrecon.pu1_dest_u = ps_dec->s_cur_pic.pu1_buf2;
6458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->s_tran_addrecon.pu1_dest_v = ps_dec->s_cur_pic.pu1_buf3;
6468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->s_tran_addrecon.u2_frm_wd_y = ps_dec->u2_frm_wd_y
6488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        << u1_field_pic_flag;
6498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->s_tran_addrecon.u2_frm_wd_uv = ps_dec->u2_frm_wd_uv
6508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        << u1_field_pic_flag;
6518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(u1_field_pic_flag)
6538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
6548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ui16_lastmbs_widthY += ps_dec->u2_frm_wd_y;
6558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ui16_lastmbs_widthUV += ps_dec->u2_frm_wd_uv;
6568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
6578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* Normal Increment of Pointer */
6598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->s_tran_addrecon.u4_inc_y[0] = ((ps_dec->u1_recon_mb_grp << 4)
6608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        >> u1_mbaff);
6618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->s_tran_addrecon.u4_inc_uv[0] = ((ps_dec->u1_recon_mb_grp << 4)
6628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        >> u1_mbaff);
6638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* End of Row Increment */
6658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->s_tran_addrecon.u4_inc_y[1] = (ui16_lastmbs_widthY
6668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        + (PAD_LEN_Y_H << 1)
6678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        + ps_dec->s_tran_addrecon.u2_frm_wd_y
6688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        * ((15 << u1_mbaff) + u1_mbaff));
6698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->s_tran_addrecon.u4_inc_uv[1] = (ui16_lastmbs_widthUV
6708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        + (PAD_LEN_UV_H << 2)
6718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        + ps_dec->s_tran_addrecon.u2_frm_wd_uv
6728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        * ((15 << u1_mbaff) + u1_mbaff));
6738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* Assign picture numbers to each frame/field  */
6758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* only once per picture.                      */
6768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ih264d_assign_pic_num(ps_dec);
6778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->s_tran_addrecon.u2_mv_top_left_inc = (ps_dec->u1_recon_mb_grp
6788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        << 2) - 1 - (u1_mbaff << 2);
6798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->s_tran_addrecon.u2_mv_left_inc = ((ps_dec->u1_recon_mb_grp
6808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        >> u1_mbaff) - 1) << (4 + u1_mbaff);
6818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
6828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /**********************************************************************/
6838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* High profile related initialization at pictrue level               */
6848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /**********************************************************************/
6858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(ps_seq->u1_profile_idc == HIGH_PROFILE_IDC)
6868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
6878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if((ps_seq->i4_seq_scaling_matrix_present_flag)
6888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        || (ps_pps->i4_pic_scaling_matrix_present_flag))
6898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
6908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ih264d_form_scaling_matrix_picture(ps_seq, ps_pps, ps_dec);
6918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->s_high_profile.u1_scaling_present = 1;
6928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
6938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        else
6948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
6958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ih264d_form_default_scaling_matrix(ps_dec);
6968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
6978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(ps_pps->i4_transform_8x8_mode_flag)
6998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
7008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->s_high_profile.u1_transform8x8_present = 1;
7018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
7028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
7038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else
7048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
7058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ih264d_form_default_scaling_matrix(ps_dec);
7068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
7078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* required while reading the transform_size_8x8 u4_flag */
7098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->s_high_profile.u1_direct_8x8_inference_flag =
7108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    ps_seq->u1_direct_8x8_inference_flag;
7118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->s_high_profile.s_cavlc_ctxt = ps_dec->s_cavlc_ctxt;
7128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7138ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    ps_dec->i1_recon_in_thread3_flag = 1;
7148ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    ps_dec->ps_frame_buf_ip_recon = &ps_dec->s_tran_addrecon;
7158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(ps_dec->u1_separate_parse)
7168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
7178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        memcpy(&ps_dec->s_tran_addrecon_parse, &ps_dec->s_tran_addrecon,
7188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S               sizeof(tfr_ctxt_t));
7198ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        if(ps_dec->u4_num_cores >= 3 && ps_dec->i1_recon_in_thread3_flag)
7208ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        {
7218ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            memcpy(&ps_dec->s_tran_iprecon, &ps_dec->s_tran_addrecon,
7228ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                   sizeof(tfr_ctxt_t));
7238ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            ps_dec->ps_frame_buf_ip_recon = &ps_dec->s_tran_iprecon;
7248ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        }
7258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
7268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7278ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
7288ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    ih264d_init_deblk_tfr_ctxt(ps_dec,&(ps_dec->s_pad_mgr), &(ps_dec->s_tran_addrecon),
7298ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                               ps_dec->u2_frm_wd_in_mbs, 0);
7308ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
7318ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    ps_dec->ps_cur_deblk_mb = ps_dec->ps_deblk_pic;
7328ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    ps_dec->u4_cur_deblk_mb_num = 0;
7338ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
7348ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    ps_dec->u4_deblk_mb_x = 0;
7358ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    ps_dec->u4_deblk_mb_y = 0;
7368ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
7378ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
7388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    H264_MUTEX_UNLOCK(&ps_dec->process_disp_mutex);
7398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return OK;
7408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
7418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*!
7438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S **************************************************************************
7448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \if Function name :  ih264d_deblock_display \endif
7458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
7468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \brief            :  The function callls the deblocking routine and manages
7478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S :  the Recon buffers and displays .
7488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \return           :  Nothing
7498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
7508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S **************************************************************************
7518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */
7528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SWORD32 ih264d_end_of_pic_dispbuf_mgr(dec_struct_t * ps_dec)
7538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
7548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    dec_slice_params_t *ps_cur_slice = ps_dec->ps_cur_slice;
7558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 u1_num_of_users = 0;
7568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 ret;
7578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    H264_MUTEX_LOCK(&ps_dec->process_disp_mutex);
7598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(1)
7608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
7618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
7638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ih264d_delete_nonref_nondisplay_pics(ps_dec->ps_dpb_mgr);
7648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(ps_cur_slice->u1_mmco_equalto5
7658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            || (ps_cur_slice->u1_nal_unit_type == IDR_SLICE_NAL))
7668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
7678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ps_dec->ps_cur_pic->i4_poc = 0;
7688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if(ps_dec->u2_total_mbs_coded
7698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                == (ps_dec->ps_cur_sps->u2_max_mb_addr + 1))
7708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    ih264d_reset_ref_bufs(ps_dec->ps_dpb_mgr);
7718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ih264d_release_display_bufs(ps_dec);
7728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
7738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(ps_dec->u4_num_reorder_frames_at_init != 0)
7748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
7758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ret = ih264d_assign_display_seq(ps_dec);
7768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if(ret != OK)
7778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    return ret;
7788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
7798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
7808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(ps_cur_slice->u1_nal_ref_idc)
7828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
7838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* Mark pic buf as needed for reference */
7848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ih264_buf_mgr_set_status((buf_mgr_t *)ps_dec->pv_pic_buf_mgr,
7858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                     ps_dec->u1_pic_buf_id,
7868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                     BUF_MGR_REF);
7878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* Mark mv buf as needed for reference */
7888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ih264_buf_mgr_set_status((buf_mgr_t *)ps_dec->pv_mv_buf_mgr,
7898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                     ps_dec->au1_pic_buf_id_mv_buf_id_map[ps_dec->u1_pic_buf_id],
7908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                     BUF_MGR_REF);
7918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->au1_pic_buf_ref_flag[ps_dec->u1_pic_buf_id] = 1;
7928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
7938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* 420 consumer */
7958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* Increment the number of users by 1 for display based upon */
7968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*the SEEK KEY FRAME control sent to decoder                 */
7978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(((0 == ps_dec->u1_last_pic_not_decoded)
7988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        && (0
7998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        == (ps_dec->ps_cur_pic->u4_pack_slc_typ
8008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                        & ps_dec->u4_skip_frm_mask)))
8018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        || (ps_cur_slice->u1_nal_unit_type == IDR_SLICE_NAL))
8028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
8038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* Mark pic buf as needed for display */
8048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ih264_buf_mgr_set_status((buf_mgr_t *)ps_dec->pv_pic_buf_mgr,
8058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                     ps_dec->u1_pic_buf_id,
8068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                     BUF_MGR_IO);
8078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
8088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
8098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
8108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(!ps_cur_slice->u1_field_pic_flag
8118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        || ((TOP_FIELD_ONLY | BOT_FIELD_ONLY)
8128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        != ps_dec->u1_top_bottom_decoded))
8138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
8148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pic_buffer_t *ps_cur_pic = ps_dec->ps_cur_pic;
8158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_cur_pic->u2_disp_width = ps_dec->u2_disp_width;
8168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_cur_pic->u2_disp_height = ps_dec->u2_disp_height >> 1;
8178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
8188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_cur_pic->u2_crop_offset_y = ps_dec->u2_crop_offset_y;
8198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_cur_pic->u2_crop_offset_uv = ps_dec->u2_crop_offset_uv;
8208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_cur_pic->u1_pic_type = 0;
8218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
8228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ret = ih264d_insert_pic_in_display_list(
8238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            ps_dec->ps_dpb_mgr,
8248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            ps_dec->u1_pic_buf_id,
8258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            ps_dec->i4_prev_max_display_seq
8268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            + ps_dec->ps_cur_pic->i4_poc,
8278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            ps_dec->ps_cur_pic->i4_frame_num);
8288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(ret != OK)
8298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                return ret;
8308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
8318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
8328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ivd_video_decode_op_t * ps_dec_output =
8338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                (ivd_video_decode_op_t *)ps_dec->pv_dec_out;
8348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
8358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ps_dec_output->u4_frame_decoded_flag = 1;
8368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
8378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(ps_dec->au1_pic_buf_ref_flag[ps_dec->u1_pic_buf_id] == 0)
8388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
8398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ih264_buf_mgr_release((buf_mgr_t *)ps_dec->pv_mv_buf_mgr,
8408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      ps_dec->au1_pic_buf_id_mv_buf_id_map[ps_dec->u1_pic_buf_id],
8418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      BUF_MGR_REF);
8428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ps_dec->au1_pic_buf_ref_flag[ps_dec->u1_pic_buf_id] = 0;
8438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
8448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
8458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
8468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        else
8478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
8488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            H264_DEC_DEBUG_PRINT("pic not inserted display %d %d\n",
8498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                 ps_cur_slice->u1_field_pic_flag,
8508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                 ps_dec->u1_second_field);
8518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
8528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
8538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(!ps_cur_slice->u1_field_pic_flag
8548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        || ((TOP_FIELD_ONLY | BOT_FIELD_ONLY)
8558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        == ps_dec->u1_top_bottom_decoded))
8568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
8578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(ps_dec->u4_num_reorder_frames_at_init == 0)
8588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
8598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ret = ih264d_assign_display_seq(ps_dec);
8608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if(ret != OK)
8618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    return ret;
8628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
8638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
8648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
8658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
8668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    H264_MUTEX_UNLOCK(&ps_dec->process_disp_mutex);
8678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
8688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return OK;
8698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
8708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
8718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_err_pic_dispbuf_mgr(dec_struct_t *ps_dec)
8728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
8738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    dec_slice_params_t *ps_cur_slice = ps_dec->ps_cur_slice;
8748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ivd_video_decode_op_t * ps_dec_output =
8758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    (ivd_video_decode_op_t *)ps_dec->pv_dec_out;
8768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
8778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ih264_buf_mgr_release((buf_mgr_t *)ps_dec->pv_pic_buf_mgr,
8788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                          ps_dec->u1_pic_buf_id,
8798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                          BUF_MGR_REF);
8808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ih264_buf_mgr_release((buf_mgr_t *)ps_dec->pv_mv_buf_mgr,
8818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                          ps_dec->au1_pic_buf_id_mv_buf_id_map[ps_dec->u1_pic_buf_id],
8828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                          BUF_MGR_REF);
8838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ih264_buf_mgr_release((buf_mgr_t *)ps_dec->pv_pic_buf_mgr,
8848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                          ps_dec->u1_pic_buf_id,
8858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                          BUF_MGR_IO);
8868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
8878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
8888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_deblock_picture(void *ptr)
8898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
8908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    dec_struct_t *ps_dec = (dec_struct_t *)ptr;
8918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
8928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
8938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*Deblock picture only if all the mb's in the frame have been decoded*/
8948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(ps_dec->u1_pic_decode_done == 1)
8958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
8968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(ps_dec->ps_cur_slice->u1_mbaff_frame_flag
8978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            || ps_dec->ps_cur_slice->u1_field_pic_flag)
8988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
8998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ps_dec->p_DeblockPicture[ps_dec->ps_cur_slice->u1_mbaff_frame_flag](
9008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                ps_dec);
9018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
9028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            else
9038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
9048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
9058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
9068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ih264d_deblock_picture_progressive(ps_dec);
9078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
9088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
9098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
9108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
9118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
9128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
9138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
9148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*!
9158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S **************************************************************************
9168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \if Function name :  ih264d_deblock_display \endif
9178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
9188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \brief            :  The function callls the deblocking routine and manages
9198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S :  the Recon buffers and displays .
9208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \return           :  Nothing
9218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
9228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S **************************************************************************
9238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */
9248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SWORD32 ih264d_deblock_display(dec_struct_t *ps_dec)
9258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
9268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 ret;
9278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Call deblocking */
9288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ih264d_deblock_picture(ps_dec);
9298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
9308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ret = ih264d_end_of_pic_dispbuf_mgr(ps_dec);
9318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(ret != OK)
9328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        return ret;
9338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
9348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return OK;
9358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
9368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
9378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*
9388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *!
9398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S **************************************************************************
9408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \if Function name : EndofPoc \endif
9418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
9428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \brief
9438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    EndofPoc Processing
9448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
9458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \return
9468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    0 on Success and Error code otherwise
9478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S **************************************************************************
9488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */
9498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
9508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SWORD32 ih264d_end_of_pic(dec_struct_t *ps_dec,
9518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                       UWORD8 u1_is_idr_slice,
9528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                       UWORD16 u2_frame_num)
9538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
9548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    dec_slice_params_t *ps_cur_slice = ps_dec->ps_cur_slice;
9558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 ret;
9568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
9578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->u1_first_pb_nal_in_pic = 1;
9588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->u2_mbx = 0xffff;
9598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->u2_mby = 0;
9608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
9618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        dec_err_status_t * ps_err = ps_dec->ps_dec_err_status;
9628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(ps_err->u1_err_flag & REJECT_CUR_PIC)
9638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
9648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ih264d_err_pic_dispbuf_mgr(ps_dec);
9659f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S            return ERROR_NEW_FRAME_EXPECTED;
9668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
9678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
9688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
9698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    H264_MUTEX_LOCK(&ps_dec->process_disp_mutex);
9708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ret = ih264d_end_of_pic_processing(ps_dec);
9718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(ret != OK)
9728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        return ret;
9738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->u2_total_mbs_coded = 0;
9748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*--------------------------------------------------------------------*/
9758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* ih264d_decode_pic_order_cnt - calculate the Pic Order Cnt                    */
9768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Needed to detect end of picture                                    */
9778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*--------------------------------------------------------------------*/
9788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
9798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pocstruct_t *ps_prev_poc = &ps_dec->s_prev_pic_poc;
9808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pocstruct_t *ps_cur_poc = &ps_dec->s_cur_pic_poc;
9818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if((0 == u1_is_idr_slice) && ps_cur_slice->u1_nal_ref_idc)
9828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->u2_prev_ref_frame_num = ps_cur_slice->u2_frame_num;
9838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
9848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(u1_is_idr_slice || ps_cur_slice->u1_mmco_equalto5)
9858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->u2_prev_ref_frame_num = 0;
9868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
9878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(ps_dec->ps_cur_sps->u1_gaps_in_frame_num_value_allowed_flag)
9888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
9898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ret = ih264d_decode_gaps_in_frame_num(ps_dec, u2_frame_num);
9908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(ret != OK)
9918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                return ret;
9928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
9938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
9948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_prev_poc->i4_prev_frame_num_ofst = ps_cur_poc->i4_prev_frame_num_ofst;
9958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_prev_poc->u2_frame_num = ps_cur_poc->u2_frame_num;
9968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_prev_poc->u1_mmco_equalto5 = ps_cur_slice->u1_mmco_equalto5;
9978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(ps_cur_slice->u1_nal_ref_idc)
9988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
9998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_prev_poc->i4_pic_order_cnt_lsb = ps_cur_poc->i4_pic_order_cnt_lsb;
10008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_prev_poc->i4_pic_order_cnt_msb = ps_cur_poc->i4_pic_order_cnt_msb;
10018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_prev_poc->i4_delta_pic_order_cnt_bottom =
10028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            ps_cur_poc->i4_delta_pic_order_cnt_bottom;
10038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_prev_poc->i4_delta_pic_order_cnt[0] =
10048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            ps_cur_poc->i4_delta_pic_order_cnt[0];
10058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_prev_poc->i4_delta_pic_order_cnt[1] =
10068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            ps_cur_poc->i4_delta_pic_order_cnt[1];
10078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_prev_poc->u1_bot_field = ps_cur_poc->u1_bot_field;
10088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
10098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
10109f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S
10119f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S    H264_MUTEX_UNLOCK(&ps_dec->process_disp_mutex);
10128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return OK;
10148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
10158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*!
10178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S **************************************************************************
10188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \if Function name : DecodeSlice \endif
10198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
10208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \brief
10218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    Parses a slice
10228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
10238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \return
10248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    0 on Success and Error code otherwise
10258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S **************************************************************************
10268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */
10278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SWORD32 ih264d_parse_decode_slice(UWORD8 u1_is_idr_slice,
10298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                 UWORD8 u1_nal_ref_idc,
10308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                 dec_struct_t *ps_dec /* Decoder parameters */
10318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                 )
10328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
10338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    dec_bit_stream_t * ps_bitstrm = ps_dec->ps_bitstrm;
10348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    dec_pic_params_t *ps_pps;
10358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    dec_seq_params_t *ps_seq;
10368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    dec_slice_params_t *ps_cur_slice = ps_dec->ps_cur_slice;
10378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    pocstruct_t s_tmp_poc;
10388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 i_delta_poc[2];
10398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 i4_poc = 0;
10408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD16 u2_first_mb_in_slice, u2_frame_num;
10418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 u1_field_pic_flag, u1_redundant_pic_cnt = 0, u1_slice_type;
10428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_idr_pic_id = 0;
10438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 u1_bottom_field_flag, u1_pic_order_cnt_type;
10448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 u1_nal_unit_type;
10468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 *pu4_bitstrm_buf = ps_bitstrm->pu4_buffer;
10478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 *pu4_bitstrm_ofst = &ps_bitstrm->u4_ofst;
10488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD8 i1_is_end_of_poc;
10498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10508ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    WORD32 ret, end_of_frame;
10518ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    WORD32 prev_slice_err, num_mb_skipped;
10528ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    UWORD8 u1_mbaff;
10538ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    pocstruct_t *ps_cur_poc;
10548ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
10558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_temp;
10568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 i_temp;
10578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_call_end_of_pic = 0;
10588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* read FirstMbInSlice  and slice type*/
10608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->ps_dpb_cmds->u1_dpb_commands_read_slc = 0;
10618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u2_first_mb_in_slice = ih264d_uev(pu4_bitstrm_ofst,
10628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                     pu4_bitstrm_buf);
10638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(u2_first_mb_in_slice
10648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    > (ps_dec->u2_frm_ht_in_mbs * ps_dec->u2_frm_wd_in_mbs))
10658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
10668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        return ERROR_CORRUPTED_SLICE;
10688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
10698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*we currently don not support ASO*/
10718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(((u2_first_mb_in_slice << ps_cur_slice->u1_mbaff_frame_flag)
10728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    <= ps_dec->u2_cur_mb_addr) && (ps_dec->u2_cur_mb_addr != 0)
10738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    && (ps_dec->u4_first_slice_in_pic != 0))
10748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
10758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        return ERROR_CORRUPTED_SLICE;
10768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
10778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    COPYTHECONTEXT("SH: first_mb_in_slice",u2_first_mb_in_slice);
10798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_temp = ih264d_uev(pu4_bitstrm_ofst, pu4_bitstrm_buf);
10818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(u4_temp > 9)
10838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        return ERROR_INV_SLC_TYPE_T;
10848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u1_slice_type = u4_temp;
10868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    COPYTHECONTEXT("SH: slice_type",(u1_slice_type));
10878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->u1_sl_typ_5_9 = 0;
10888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Find Out the Slice Type is 5 to 9 or not then Set the Flag   */
10898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* u1_sl_typ_5_9 = 1 .Which tells that all the slices in the Pic*/
10908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* will be of same type of current                            */
10918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(u1_slice_type > 4)
10928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
10938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        u1_slice_type -= 5;
10948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->u1_sl_typ_5_9 = 1;
10958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
10968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
10988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD32 skip;
10998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if((ps_dec->i4_app_skip_mode == IVD_SKIP_PB)
11018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        || (ps_dec->i4_dec_skip_mode == IVD_SKIP_PB))
11028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
11038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            UWORD32 u4_bit_stream_offset = 0;
11048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(ps_dec->u1_nal_unit_type == IDR_SLICE_NAL)
11068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
11078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                skip = 0;
11088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ps_dec->i4_dec_skip_mode = IVD_SKIP_NONE;
11108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
11118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            else if((I_SLICE == u1_slice_type)
11128ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                            && (1 >= ps_dec->ps_cur_sps->u1_num_ref_frames))
11138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
11148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                skip = 0;
11158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ps_dec->i4_dec_skip_mode = IVD_SKIP_NONE;
11178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
11188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            else
11198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
11208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                skip = 1;
11218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
11228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* If one frame worth of data is already skipped, do not skip the next one */
11248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if((0 == u2_first_mb_in_slice) && (1 == ps_dec->u4_prev_nal_skipped))
11258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
11268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                skip = 0;
11278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
11288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(skip)
11308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
11318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ps_dec->u4_prev_nal_skipped = 1;
11328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ps_dec->i4_dec_skip_mode = IVD_SKIP_PB;
11338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                return 0;
11348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
11358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            else
11368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
11378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                /* If the previous NAL was skipped, then
11388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                 do not process that buffer in this call.
11398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                 Return to app and process it in the next call.
11408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                 This is necessary to handle cases where I/IDR is not complete in
11418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                 the current buffer and application intends to fill the remaining part of the bitstream
11428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                 later. This ensures we process only frame worth of data in every call */
11438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if(1 == ps_dec->u4_prev_nal_skipped)
11448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
11458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    ps_dec->u4_return_to_app = 1;
11468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    return 0;
11478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
11488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
11498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
11508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
11528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_temp = ih264d_uev(pu4_bitstrm_ofst, pu4_bitstrm_buf);
11548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(u4_temp & MASK_ERR_PIC_SET_ID)
11558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        return ERROR_INV_SPS_PPS_T;
11568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* discard slice if pic param is invalid */
11578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    COPYTHECONTEXT("SH: pic_parameter_set_id", u4_temp);
11588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_pps = &ps_dec->ps_pps[u4_temp];
11598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(FALSE == ps_pps->u1_is_valid)
11608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
11618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        return ERROR_INV_SPS_PPS_T;
11628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
11638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_seq = ps_pps->ps_sps;
11648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(!ps_seq)
11658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        return ERROR_INV_SPS_PPS_T;
11668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(FALSE == ps_seq->u1_is_valid)
11678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        return ERROR_INV_SPS_PPS_T;
11688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Get the frame num */
11708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u2_frame_num = ih264d_get_bits_h264(ps_bitstrm,
11718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                         ps_seq->u1_bits_in_frm_num);
11728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S//    H264_DEC_DEBUG_PRINT("FRAME %d First MB in slice: %d\n", u2_frame_num, u2_first_mb_in_slice);
11738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    COPYTHECONTEXT("SH: frame_num", u2_frame_num);
11758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S//    H264_DEC_DEBUG_PRINT("Second field: %d frame num: %d prv_frame_num: %d \n", ps_dec->u1_second_field, u2_frame_num, ps_dec->u2_prv_frame_num);
11768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Get the field related flags  */
11788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(!ps_seq->u1_frame_mbs_only_flag)
11798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
11808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        u1_field_pic_flag = ih264d_get_bit_h264(ps_bitstrm);
11828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        COPYTHECONTEXT("SH: field_pic_flag", u1_field_pic_flag);
11838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        u1_bottom_field_flag = 0;
11848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(u1_field_pic_flag)
11868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
11878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->pu1_inv_scan = (UWORD8 *)gau1_ih264d_inv_scan_fld;
11888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u1_bottom_field_flag = ih264d_get_bit_h264(ps_bitstrm);
11898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            COPYTHECONTEXT("SH: bottom_field_flag", u1_bottom_field_flag);
11908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
11928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        else
11938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
11948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->pu1_inv_scan = (UWORD8 *)gau1_ih264d_inv_scan;
11958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
11968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
11978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else
11988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
11998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        u1_field_pic_flag = 0;
12008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        u1_bottom_field_flag = 0;
12018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
12028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->pu1_inv_scan = (UWORD8 *)gau1_ih264d_inv_scan;
12038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
12048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
12058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u1_nal_unit_type = SLICE_NAL;
12068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(u1_is_idr_slice)
12078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
12088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(0 == u1_field_pic_flag)
12098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
12108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->u1_top_bottom_decoded = TOP_FIELD_ONLY | BOT_FIELD_ONLY;
12118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
12128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        u1_nal_unit_type = IDR_SLICE_NAL;
12138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        u4_idr_pic_id = ih264d_uev(pu4_bitstrm_ofst,
12148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                   pu4_bitstrm_buf);
12158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(u4_idr_pic_id > 65535)
12168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            return ERROR_INV_SPS_PPS_T;
12178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        COPYTHECONTEXT("SH:  ", u4_idr_pic_id);
12188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
12198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
12208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* read delta pic order count information*/
12218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    i_delta_poc[0] = i_delta_poc[1] = 0;
12228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_tmp_poc.i4_pic_order_cnt_lsb = 0;
12238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_tmp_poc.i4_delta_pic_order_cnt_bottom = 0;
12248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u1_pic_order_cnt_type = ps_seq->u1_pic_order_cnt_type;
12258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(u1_pic_order_cnt_type == 0)
12268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
12278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i_temp = ih264d_get_bits_h264(
12288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        ps_bitstrm,
12298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        ps_seq->u1_log2_max_pic_order_cnt_lsb_minus);
12308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(i_temp < 0 || i_temp >= ps_seq->i4_max_pic_order_cntLsb)
12318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            return ERROR_INV_SPS_PPS_T;
12328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_tmp_poc.i4_pic_order_cnt_lsb = i_temp;
12338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        COPYTHECONTEXT("SH: pic_order_cnt_lsb", s_tmp_poc.i4_pic_order_cnt_lsb);
12348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
12358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if((ps_pps->u1_pic_order_present_flag == 1) && (!u1_field_pic_flag))
12368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
12378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            s_tmp_poc.i4_delta_pic_order_cnt_bottom = ih264d_sev(
12388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            pu4_bitstrm_ofst, pu4_bitstrm_buf);
12398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            //if(s_tmp_poc.i4_delta_pic_order_cnt_bottom > ps_seq->i4_max_pic_order_cntLsb)
12408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            COPYTHECONTEXT("SH: delta_pic_order_cnt_bottom",
12418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            s_tmp_poc.i4_delta_pic_order_cnt_bottom);
12428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
12438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
12448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
12458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_tmp_poc.i4_delta_pic_order_cnt[0] = 0;
12468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_tmp_poc.i4_delta_pic_order_cnt[1] = 0;
12478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(u1_pic_order_cnt_type == 1
12488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    && (!ps_seq->u1_delta_pic_order_always_zero_flag))
12498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
12508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_tmp_poc.i4_delta_pic_order_cnt[0] = ih264d_sev(pu4_bitstrm_ofst,
12518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                         pu4_bitstrm_buf);
12528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        COPYTHECONTEXT("SH: delta_pic_order_cnt[0]",
12538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        s_tmp_poc.i4_delta_pic_order_cnt[0]);
12548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
12558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(ps_pps->u1_pic_order_present_flag && !u1_field_pic_flag)
12568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
12578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            s_tmp_poc.i4_delta_pic_order_cnt[1] = ih264d_sev(
12588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            pu4_bitstrm_ofst, pu4_bitstrm_buf);
12598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            COPYTHECONTEXT("SH: delta_pic_order_cnt[1]",
12608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            s_tmp_poc.i4_delta_pic_order_cnt[1]);
12618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
12628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
12638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
12648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(ps_pps->u1_redundant_pic_cnt_present_flag)
12658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
12668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        u4_temp = ih264d_uev(pu4_bitstrm_ofst, pu4_bitstrm_buf);
12678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(u4_temp > MAX_REDUNDANT_PIC_CNT)
12688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            return ERROR_INV_SPS_PPS_T;
12698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        u1_redundant_pic_cnt = u4_temp;
12708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        COPYTHECONTEXT("SH: redundant_pic_cnt", u1_redundant_pic_cnt);
12718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
12728ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
12738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*--------------------------------------------------------------------*/
12748ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    /* Check if the slice is part of new picture                          */
12758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*--------------------------------------------------------------------*/
12768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    i1_is_end_of_poc = 0;
12778ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    if(!ps_dec->u1_first_slice_in_stream)
12788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
12798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i1_is_end_of_poc = ih264d_is_end_of_pic(u2_frame_num, u1_nal_ref_idc,
12808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            &s_tmp_poc, &ps_dec->s_cur_pic_poc,
12818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            ps_cur_slice, u1_pic_order_cnt_type,
12828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            u1_nal_unit_type, u4_idr_pic_id,
12838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            u1_field_pic_flag,
12848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            u1_bottom_field_flag);
12858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
12869f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S        /* since we support only Full frame decode, every new process should
12879f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S         * process a new pic
12889f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S         */
12899f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S        if((ps_dec->u4_first_slice_in_pic == 2) && (i1_is_end_of_poc == 0))
12909f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S        {
12919f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S            /* if it is the first slice is process call ,it should be a new frame. If it is not
12929f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S             * reject current pic and dont add it to dpb
12939f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S             */
12949f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S            ps_dec->ps_dec_err_status->u1_err_flag |= REJECT_CUR_PIC;
12959f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S            i1_is_end_of_poc = 1;
12969f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S        }
12979f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S        else
12989f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S        {
12999f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S            /* reset REJECT_CUR_PIC */
13009f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S            ps_dec->ps_dec_err_status->u1_err_flag &= MASK_REJECT_CUR_PIC;
13019f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S        }
13028ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    }
13038ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
13048ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    /*--------------------------------------------------------------------*/
13058ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    /* Check for error in slice and parse the missing/corrupted MB's      */
13068ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    /* as skip-MB's in an inserted P-slice                                */
13078ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    /*--------------------------------------------------------------------*/
13088ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    u1_mbaff = ps_seq->u1_mb_aff_flag && (!u1_field_pic_flag);
13098ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    prev_slice_err = 0;
13108ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
13118ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    if(i1_is_end_of_poc || ps_dec->u1_first_slice_in_stream)
13128ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    {
13138ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        if(u2_frame_num != ps_dec->u2_prv_frame_num
13148ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen               && ps_dec->u1_top_bottom_decoded != 0
13158ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                   && ps_dec->u1_top_bottom_decoded
13168ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                       != (TOP_FIELD_ONLY | BOT_FIELD_ONLY))
13178ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        {
13189f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S            ps_dec->u1_dangling_field = 1;
13198ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            if(ps_dec->u4_first_slice_in_pic)
13208ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            {
13218ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                // first slice - dangling field
13228ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                prev_slice_err = 1;
13238ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            }
13248ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            else
13258ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            {
13268ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                // last slice - dangling field
13278ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                prev_slice_err = 2;
13288ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            }
13298ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
13308ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            if(ps_dec->u1_top_bottom_decoded ==TOP_FIELD_ONLY)
13318ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                ps_cur_slice->u1_bottom_field_flag = 1;
13328ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            else
13338ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                ps_cur_slice->u1_bottom_field_flag = 0;
13348ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
13358ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            num_mb_skipped = (ps_dec->u2_frm_ht_in_mbs * ps_dec->u2_frm_wd_in_mbs)
13368ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                    - ps_dec->u2_total_mbs_coded;
13378ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            ps_cur_poc = &ps_dec->s_cur_pic_poc;
13388ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
13398ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            u1_is_idr_slice = ps_cur_slice->u1_nal_unit_type == IDR_SLICE_NAL;
13408ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        }
13419f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S        else if(ps_dec->u4_first_slice_in_pic == 2)
13428ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        {
13438ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            if(u2_first_mb_in_slice > 0)
13448ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            {
13458ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                // first slice - missing/header corruption
13468ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                prev_slice_err = 1;
13478ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                num_mb_skipped = u2_first_mb_in_slice << u1_mbaff;
13488ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                ps_cur_poc = &s_tmp_poc;
13498ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
13508ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                // initializing slice parameters
13518ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                ps_cur_slice->u4_idr_pic_id = u4_idr_pic_id;
13528ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                ps_cur_slice->u1_field_pic_flag = u1_field_pic_flag;
13538ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                ps_cur_slice->u1_bottom_field_flag = u1_bottom_field_flag;
13548ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                ps_cur_slice->i4_pic_order_cnt_lsb =
13558ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                        s_tmp_poc.i4_pic_order_cnt_lsb;
13568ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                ps_cur_slice->u1_nal_unit_type = u1_nal_unit_type;
13578ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                ps_cur_slice->u1_redundant_pic_cnt = u1_redundant_pic_cnt;
13588ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                ps_cur_slice->u1_nal_ref_idc = u1_nal_ref_idc;
13598ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                ps_cur_slice->u1_pic_order_cnt_type = u1_pic_order_cnt_type;
13608ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            }
13618ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        }
13628ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        else
13638ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        {
13649f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S
13659f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S            if(ps_dec->u4_first_slice_in_pic)
13669f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S            {
13679f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S                /* if valid slice header is not decoded do start of pic processing
13689f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S                 * since in the current process call, frame num is not updated in the slice structure yet
13699f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S                 * ih264d_is_end_of_pic is checked with valid frame num of previous process call,
13709f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S                 * although i1_is_end_of_poc is set there could be  more slices in the frame,
13719f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S                 * so conceal only till cur slice */
13729f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S                prev_slice_err = 1;
13739f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S                num_mb_skipped = u2_first_mb_in_slice << u1_mbaff;
13749f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S            }
13759f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S            else
13769f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S            {
13779f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S                /* since i1_is_end_of_poc is set ,means new frame num is encountered. so conceal the current frame
13789f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S                 * completely */
13799f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S                prev_slice_err = 2;
13809f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S                num_mb_skipped = (ps_dec->u2_frm_ht_in_mbs * ps_dec->u2_frm_wd_in_mbs)
13819f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S                        - ps_dec->u2_total_mbs_coded;
13829f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S            }
13838ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            ps_cur_poc = &s_tmp_poc;
13848ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        }
13858ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    }
13868ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    else
13878ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    {
13888ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        if((u2_first_mb_in_slice << u1_mbaff) > ps_dec->u2_total_mbs_coded)
13898ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        {
13908ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            // previous slice - missing/corruption
13918ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            prev_slice_err = 2;
13928ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            num_mb_skipped = (u2_first_mb_in_slice << u1_mbaff)
13938ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                    - ps_dec->u2_total_mbs_coded;
13948ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            ps_cur_poc = &s_tmp_poc;
13958ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        }
13968ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        else if((u2_first_mb_in_slice << u1_mbaff) < ps_dec->u2_total_mbs_coded)
13978ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        {
13988ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            return ERROR_CORRUPTED_SLICE;
13998ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        }
14008ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    }
14018ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
14028ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    if(prev_slice_err)
14038ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    {
14049f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S        ret = ih264d_mark_err_slice_skip(ps_dec, num_mb_skipped, u1_is_idr_slice, u2_frame_num, ps_cur_poc, prev_slice_err);
14059f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S
14069f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S        if(ps_dec->u1_dangling_field == 1)
14079f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S        {
14089f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S            ps_dec->u1_second_field = 1 - ps_dec->u1_second_field;
14099f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S            ps_cur_slice->u1_bottom_field_flag = u1_bottom_field_flag;
14109f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S            ps_dec->u2_prv_frame_num = u2_frame_num;
14119f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S            ps_dec->u1_first_slice_in_stream = 0;
14129f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S            return ERROR_DANGLING_FIELD_IN_PIC;
14139f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S        }
14149f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S
14159f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S        if(prev_slice_err == 2)
14169f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S        {
14179f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S            ps_dec->u1_first_slice_in_stream = 0;
14189f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S            return ERROR_INCOMPLETE_FRAME;
14199f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S        }
14208ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
14219f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S        if(ps_dec->u2_total_mbs_coded
14229f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S                >= ps_dec->u2_frm_ht_in_mbs * ps_dec->u2_frm_wd_in_mbs)
14238ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        {
14249f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S            /* return if all MBs in frame are parsed*/
14259f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S            ps_dec->u1_first_slice_in_stream = 0;
14268ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            return ERROR_IN_LAST_SLICE_OF_PIC;
14278ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        }
14289f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S
14299f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S        if(ps_dec->ps_dec_err_status->u1_err_flag & REJECT_CUR_PIC)
14309f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S        {
14319f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S            ih264d_err_pic_dispbuf_mgr(ps_dec);
14329f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S            return ERROR_NEW_FRAME_EXPECTED;
14339f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S        }
14349f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S
14359f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S        if(ret != OK)
14369f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S            return ret;
14379f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S
14388ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        i1_is_end_of_poc = 0;
14398ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    }
14408ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
14418ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    if (ps_dec->u4_first_slice_in_pic == 0)
14428ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        ps_dec->ps_parse_cur_slice++;
14438ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
14448ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    ps_dec->u1_slice_header_done = 0;
14458ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
14468ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    /*--------------------------------------------------------------------*/
14478ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    /* If the slice is part of new picture, do End of Pic processing.     */
14488ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    /*--------------------------------------------------------------------*/
14498ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    if(!ps_dec->u1_first_slice_in_stream)
14508ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    {
14518ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        UWORD8 uc_mbs_exceed = 0;
14528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
14538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(ps_dec->u2_total_mbs_coded
14548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        == (ps_dec->ps_cur_sps->u2_max_mb_addr + 1))
14558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
14568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /*u2_total_mbs_coded is forced  to u2_max_mb_addr+ 1 at the end of decode ,so
14578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S             ,if it is first slice in pic dont consider u2_total_mbs_coded to detect new picture */
14588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(ps_dec->u4_first_slice_in_pic == 0)
14598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                uc_mbs_exceed = 1;
14608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
14618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
14628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(i1_is_end_of_poc || uc_mbs_exceed)
14638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
14648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
14658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(1 == ps_dec->u1_last_pic_not_decoded)
14668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
14678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ret = ih264d_end_of_pic_dispbuf_mgr(ps_dec);
14688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
14698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if(ret != OK)
14708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    return ret;
14718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
14728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ret = ih264d_end_of_pic(ps_dec, u1_is_idr_slice, u2_frame_num);
14738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if(ret != OK)
14748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    return ret;
14758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#if WIN32
14768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                H264_DEC_DEBUG_PRINT(" ------ PIC SKIPPED ------\n");
14778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#endif
14788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                return RET_LAST_SKIP;
14798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
14808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            else
14818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
14828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ret = ih264d_end_of_pic(ps_dec, u1_is_idr_slice, u2_frame_num);
14838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if(ret != OK)
14848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    return ret;
14858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
14868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
14878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
14888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
14898ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
14908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(u1_field_pic_flag)
14918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
14928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->u2_prv_frame_num = u2_frame_num;
14938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
14948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
14958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(ps_cur_slice->u1_mmco_equalto5)
14968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
14978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        WORD32 i4_temp_poc;
14988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        WORD32 i4_top_field_order_poc, i4_bot_field_order_poc;
14998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
15008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(!ps_cur_slice->u1_field_pic_flag) // or a complementary field pair
15018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
15028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            i4_top_field_order_poc = ps_dec->ps_cur_pic->i4_top_field_order_cnt;
15038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            i4_bot_field_order_poc =
15048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            ps_dec->ps_cur_pic->i4_bottom_field_order_cnt;
15058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            i4_temp_poc = MIN(i4_top_field_order_poc,
15068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                     i4_bot_field_order_poc);
15078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
15088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        else if(!ps_cur_slice->u1_bottom_field_flag)
15098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            i4_temp_poc = ps_dec->ps_cur_pic->i4_top_field_order_cnt;
15108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        else
15118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            i4_temp_poc = ps_dec->ps_cur_pic->i4_bottom_field_order_cnt;
15128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
15138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->ps_cur_pic->i4_top_field_order_cnt = i4_temp_poc
15148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        - ps_dec->ps_cur_pic->i4_top_field_order_cnt;
15158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->ps_cur_pic->i4_bottom_field_order_cnt = i4_temp_poc
15168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        - ps_dec->ps_cur_pic->i4_bottom_field_order_cnt;
15178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->ps_cur_pic->i4_poc = i4_temp_poc;
15188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->ps_cur_pic->i4_avg_poc = i4_temp_poc;
15198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
15209f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S    if(ps_dec->u4_first_slice_in_pic == 2)
15218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
15228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ret = ih264d_decode_pic_order_cnt(u1_is_idr_slice, u2_frame_num,
15238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          &ps_dec->s_prev_pic_poc,
15248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          &s_tmp_poc, ps_cur_slice, ps_pps,
15258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          u1_nal_ref_idc,
15268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          u1_bottom_field_flag,
15278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          u1_field_pic_flag, &i4_poc);
15288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(ret != OK)
15298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            return ret;
15308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* Display seq no calculations */
15318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(i4_poc >= ps_dec->i4_max_poc)
15328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->i4_max_poc = i4_poc;
15338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* IDR Picture or POC wrap around */
15348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(i4_poc == 0)
15358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
15368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->i4_prev_max_display_seq = ps_dec->i4_prev_max_display_seq
15378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            + ps_dec->i4_max_poc
15388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            + ps_dec->u1_max_dec_frame_buffering + 1;
15398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->i4_max_poc = 0;
15408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
15418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
15428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
15438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*--------------------------------------------------------------------*/
15448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Copy the values read from the bitstream to the slice header and then*/
15458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* If the slice is first slice in picture, then do Start of Picture   */
15468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* processing.                                                        */
15478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*--------------------------------------------------------------------*/
15488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_cur_slice->i4_delta_pic_order_cnt[0] = i_delta_poc[0];
15498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_cur_slice->i4_delta_pic_order_cnt[1] = i_delta_poc[1];
15508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_cur_slice->u4_idr_pic_id = u4_idr_pic_id;
15518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_cur_slice->u2_first_mb_in_slice = u2_first_mb_in_slice;
15528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_cur_slice->u1_field_pic_flag = u1_field_pic_flag;
15538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_cur_slice->u1_bottom_field_flag = u1_bottom_field_flag;
15548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_cur_slice->u1_slice_type = u1_slice_type;
15558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_cur_slice->i4_pic_order_cnt_lsb = s_tmp_poc.i4_pic_order_cnt_lsb;
15568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
15578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_cur_slice->u1_nal_unit_type = u1_nal_unit_type;
15588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_cur_slice->u1_redundant_pic_cnt = u1_redundant_pic_cnt;
15598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_cur_slice->u1_nal_ref_idc = u1_nal_ref_idc;
15608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_cur_slice->u1_pic_order_cnt_type = u1_pic_order_cnt_type;
15618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
15628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(ps_seq->u1_frame_mbs_only_flag)
15638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_cur_slice->u1_direct_8x8_inference_flag =
15648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        ps_seq->u1_direct_8x8_inference_flag;
15658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else
15668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_cur_slice->u1_direct_8x8_inference_flag = 1;
15678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
15688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(u1_slice_type == B_SLICE)
15698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
15708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_cur_slice->u1_direct_spatial_mv_pred_flag = ih264d_get_bit_h264(
15718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        ps_bitstrm);
15728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        COPYTHECONTEXT("SH: direct_spatial_mv_pred_flag",
15738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        ps_cur_slice->u1_direct_spatial_mv_pred_flag);
15748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
15758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(ps_cur_slice->u1_direct_spatial_mv_pred_flag)
15768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_cur_slice->pf_decodeDirect = ih264d_decode_spatial_direct;
15778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        else
15788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_cur_slice->pf_decodeDirect = ih264d_decode_temporal_direct;
15798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(!((ps_pps->ps_sps->u1_mb_aff_flag) && (!u1_field_pic_flag)))
15808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->pf_mvpred = ih264d_mvpred_nonmbaffB;
15818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
15828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else
15838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
15848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(!((ps_pps->ps_sps->u1_mb_aff_flag) && (!u1_field_pic_flag)))
15858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->pf_mvpred = ih264d_mvpred_nonmbaff;
15868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
15878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
15889f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S    if(ps_dec->u4_first_slice_in_pic == 2)
15898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
15909f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S        if(u2_first_mb_in_slice == 0)
15919f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S        {
15929f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S            ret = ih264d_start_of_pic(ps_dec, i4_poc, &s_tmp_poc, u2_frame_num, ps_pps);
15939f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S            if(ret != OK)
15949f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S                return ret;
15959f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S        }
15968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
15978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->u4_output_present = 0;
15988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
15998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
16008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ih264d_get_next_display_field(ps_dec,
16018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          ps_dec->ps_out_buffer,
16028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          &(ps_dec->s_disp_op));
16038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* If error code is non-zero then there is no buffer available for display,
16048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S             hence avoid format conversion */
16058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(0 != ps_dec->s_disp_op.u4_error_code)
16078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
16088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ps_dec->u4_fmt_conv_cur_row = ps_dec->s_disp_frame_info.u4_y_ht;
16098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
16108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            else
16118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ps_dec->u4_output_present = 1;
16128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
16138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(ps_dec->u1_separate_parse == 1)
16148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
16158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(ps_dec->u4_dec_thread_created == 0)
16168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
16178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ithread_create(ps_dec->pv_dec_thread_handle, NULL,
16188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                               (void *)ih264d_decode_picture_thread,
16198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                               (void *)ps_dec);
16208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ps_dec->u4_dec_thread_created = 1;
16228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
16238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16248ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            if((ps_dec->u4_num_cores == 3) &&
16258ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                            ((ps_dec->u4_app_disable_deblk_frm == 0) || ps_dec->i1_recon_in_thread3_flag)
16268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            && (ps_dec->u4_bs_deblk_thread_created == 0))
16278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
16288ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                ps_dec->u4_start_recon_deblk = 0;
16298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ithread_create(ps_dec->pv_bs_deblk_thread_handle, NULL,
16308ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                               (void *)ih264d_recon_deblk_thread,
16318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                               (void *)ps_dec);
16328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ps_dec->u4_bs_deblk_thread_created = 1;
16338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
16348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
16358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
16378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* INITIALIZATION of fn ptrs for MC and formMbPartInfo functions */
16398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
16408ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        UWORD8 uc_nofield_nombaff;
16418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        uc_nofield_nombaff = ((ps_dec->ps_cur_slice->u1_field_pic_flag == 0)
16458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        && (ps_dec->ps_cur_slice->u1_mbaff_frame_flag == 0)
16468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        && (u1_slice_type != B_SLICE)
16478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        && (ps_dec->ps_cur_pps->u1_wted_pred_flag == 0));
16488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* Initialise MC and formMbPartInfo fn ptrs one time based on profile_idc */
16508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(uc_nofield_nombaff)
16528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
16538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->p_form_mb_part_info = ih264d_form_mb_part_info_bp;
16548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->p_motion_compensate = ih264d_motion_compensate_bp;
16558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
16568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        else
16578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
16588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->p_form_mb_part_info = ih264d_form_mb_part_info_mp;
16598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->p_motion_compensate = ih264d_motion_compensate_mp;
16608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
16618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
16648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*
16668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S     * Decide whether to decode the current picture or not
16678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S     */
16688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
16698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        dec_err_status_t * ps_err = ps_dec->ps_dec_err_status;
16708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(ps_err->u4_frm_sei_sync == u2_frame_num)
16718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
16728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_err->u1_err_flag = ACCEPT_ALL_PICS;
16738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_err->u4_frm_sei_sync = SYNC_FRM_DEFAULT;
16748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
16758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_err->u4_cur_frm = u2_frame_num;
16768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
16778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Decision for decoding if the picture is to be skipped */
16798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
16808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        WORD32 i4_skip_b_pic, i4_skip_p_pic;
16818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i4_skip_b_pic = (ps_dec->u4_skip_frm_mask & B_SLC_BIT)
16838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        && (B_SLICE == u1_slice_type) && (0 == u1_nal_ref_idc);
16848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i4_skip_p_pic = (ps_dec->u4_skip_frm_mask & P_SLC_BIT)
16868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        && (P_SLICE == u1_slice_type) && (0 == u1_nal_ref_idc);
16878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /**************************************************************/
16898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* Skip the B picture if skip mask is set for B picture and   */
16908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* Current B picture is a non reference B picture or there is */
16918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* no user for reference B picture                            */
16928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /**************************************************************/
16938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(i4_skip_b_pic)
16948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
16958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->ps_cur_pic->u4_pack_slc_typ |= B_SLC_BIT;
16968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* Don't decode the picture in SKIP-B mode if that picture is B */
16978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* and also it is not to be used as a reference picture         */
16988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->u1_last_pic_not_decoded = 1;
16998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            return OK;
17018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
17028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /**************************************************************/
17038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* Skip the P picture if skip mask is set for P picture and   */
17048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* Current P picture is a non reference P picture or there is */
17058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* no user for reference P picture                            */
17068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /**************************************************************/
17078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(i4_skip_p_pic)
17088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
17098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->ps_cur_pic->u4_pack_slc_typ |= P_SLC_BIT;
17108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* Don't decode the picture in SKIP-P mode if that picture is P */
17118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* and also it is not to be used as a reference picture         */
17128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->u1_last_pic_not_decoded = 1;
17138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            return OK;
17158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
17168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
17178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
17198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD16 u2_mb_x, u2_mb_y;
17208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->i4_submb_ofst = ((u2_first_mb_in_slice
17228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        << ps_cur_slice->u1_mbaff_frame_flag) * SUB_BLK_SIZE)
17238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        - SUB_BLK_SIZE;
17248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(u2_first_mb_in_slice)
17258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
17268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            UWORD8 u1_mb_aff;
17278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            UWORD8 u1_field_pic;
17288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            UWORD16 u2_frm_wd_in_mbs;
17298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u2_frm_wd_in_mbs = ps_seq->u2_frm_wd_in_mbs;
17308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u1_mb_aff = ps_cur_slice->u1_mbaff_frame_flag;
17318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u1_field_pic = ps_cur_slice->u1_field_pic_flag;
17328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
17348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                UWORD32 x_offset;
17358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                UWORD32 y_offset;
17368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                UWORD32 u4_frame_stride;
17378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                tfr_ctxt_t *ps_trns_addr; // = &ps_dec->s_tran_addrecon_parse;
17388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if(ps_dec->u1_separate_parse)
17408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
17418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    ps_trns_addr = &ps_dec->s_tran_addrecon_parse;
17428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
17438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                else
17448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
17458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    ps_trns_addr = &ps_dec->s_tran_addrecon;
17468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
17478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                u2_mb_x = MOD(u2_first_mb_in_slice, u2_frm_wd_in_mbs);
17488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                u2_mb_y = DIV(u2_first_mb_in_slice, u2_frm_wd_in_mbs);
17498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                u2_mb_y <<= u1_mb_aff;
17518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if((u2_mb_x > u2_frm_wd_in_mbs - 1)
17538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                || (u2_mb_y > ps_dec->u2_frm_ht_in_mbs - 1))
17548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
17558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    return ERROR_CORRUPTED_SLICE;
17568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
17578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                u4_frame_stride = ps_dec->u2_frm_wd_y << u1_field_pic;
17598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                x_offset = u2_mb_x << 4;
17608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                y_offset = (u2_mb_y * u4_frame_stride) << 4;
17618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ps_trns_addr->pu1_dest_y = ps_dec->s_cur_pic.pu1_buf1 + x_offset
17638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                + y_offset;
17648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                u4_frame_stride = ps_dec->u2_frm_wd_uv << u1_field_pic;
17668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                x_offset >>= 1;
17678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                y_offset = (u2_mb_y * u4_frame_stride) << 3;
17688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                x_offset *= YUV420SP_FACTOR;
17708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ps_trns_addr->pu1_dest_u = ps_dec->s_cur_pic.pu1_buf2 + x_offset
17728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                + y_offset;
17738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ps_trns_addr->pu1_dest_v = ps_dec->s_cur_pic.pu1_buf3 + x_offset
17748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                + y_offset;
17758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ps_trns_addr->pu1_mb_y = ps_trns_addr->pu1_dest_y;
17778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ps_trns_addr->pu1_mb_u = ps_trns_addr->pu1_dest_u;
17788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ps_trns_addr->pu1_mb_v = ps_trns_addr->pu1_dest_v;
17798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                // assign the deblock structure pointers to start of slice
17828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if(ps_dec->u1_separate_parse == 1)
17838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
17848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    ps_dec->ps_deblk_mbn = ps_dec->ps_deblk_pic
17858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                    + (u2_first_mb_in_slice << u1_mb_aff);
17868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
17878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                else
17888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
17898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        ps_dec->ps_deblk_mbn = ps_dec->ps_deblk_pic
17908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        + (u2_first_mb_in_slice << u1_mb_aff);
17918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
17928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ps_dec->u2_cur_mb_addr = (u2_first_mb_in_slice << u1_mb_aff);
17948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ps_dec->ps_mv_cur = ps_dec->s_cur_pic.ps_mv
17968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                + ((u2_first_mb_in_slice << u1_mb_aff) << 4);
17978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
17988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
17998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        else
18008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
18018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            tfr_ctxt_t *ps_trns_addr;
18028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
18038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(ps_dec->u1_separate_parse)
18048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
18058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ps_trns_addr = &ps_dec->s_tran_addrecon_parse;
18068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
18078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            else
18088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
18098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ps_trns_addr = &ps_dec->s_tran_addrecon;
18108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
18118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
18128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u2_mb_x = 0xffff;
18138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u2_mb_y = 0;
18148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            // assign the deblock structure pointers to start of slice
18158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->u2_cur_mb_addr = 0;
18168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->ps_deblk_mbn = ps_dec->ps_deblk_pic;
18178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->ps_mv_cur = ps_dec->s_cur_pic.ps_mv;
18188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_trns_addr->pu1_dest_y = ps_dec->s_cur_pic.pu1_buf1;
18198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_trns_addr->pu1_dest_u = ps_dec->s_cur_pic.pu1_buf2;
18208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_trns_addr->pu1_dest_v = ps_dec->s_cur_pic.pu1_buf3;
18218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
18228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_trns_addr->pu1_mb_y = ps_trns_addr->pu1_dest_y;
18238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_trns_addr->pu1_mb_u = ps_trns_addr->pu1_dest_u;
18248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_trns_addr->pu1_mb_v = ps_trns_addr->pu1_dest_v;
18258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
18268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
18278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
18288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->ps_part = ps_dec->ps_parse_part_params;
18298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
18308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->u2_mbx =
18318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        (MOD(u2_first_mb_in_slice - 1, ps_seq->u2_frm_wd_in_mbs));
18328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->u2_mby =
18338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        (DIV(u2_first_mb_in_slice - 1, ps_seq->u2_frm_wd_in_mbs));
18348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->u2_mby <<= ps_cur_slice->u1_mbaff_frame_flag;
18358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->i2_prev_slice_mbx = ps_dec->u2_mbx;
18368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->i2_prev_slice_mby = ps_dec->u2_mby;
18378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
18388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
18398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* RBSP stop bit is used for CABAC decoding*/
18408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_bitstrm->u4_max_ofst += ps_dec->ps_cur_pps->u1_entropy_coding_mode;
18418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
18428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->u1_B = (u1_slice_type == B_SLICE);
18438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->u4_next_mb_skip = 0;
18448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
18458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->ps_parse_cur_slice->u4_first_mb_in_slice =
18468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    ps_dec->ps_cur_slice->u2_first_mb_in_slice;
18478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->ps_parse_cur_slice->slice_type =
18488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    ps_dec->ps_cur_slice->u1_slice_type;
18498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
18508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
18518ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    ps_dec->u4_start_recon_deblk = 1;
18528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
18538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        WORD32 num_entries;
18548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        WORD32 size;
18558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD8 *pu1_buf;
18568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
18578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        num_entries = MIN(MAX_FRAMES, ps_dec->u4_num_ref_frames_at_init);
18588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        num_entries = 2 * ((2 * num_entries) + 1);
18598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
18608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        size = num_entries * sizeof(void *);
18618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        size += PAD_MAP_IDX_POC * sizeof(void *);
18628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
18638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_buf = (UWORD8 *)ps_dec->pv_map_ref_idx_to_poc_buf;
18648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_buf += size * ps_dec->u2_cur_slice_num;
18658ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        ps_dec->ps_parse_cur_slice->ppv_map_ref_idx_to_poc = ( void *)pu1_buf;
18668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
18678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
18688ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    if(ps_dec->u1_separate_parse)
18698ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    {
18708ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        ps_dec->ps_parse_cur_slice->pv_tu_coeff_data_start = ps_dec->pv_parse_tu_coeff_data;
18718ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    }
18728ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    else
18738ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    {
18748ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        ps_dec->pv_proc_tu_coeff_data = ps_dec->pv_parse_tu_coeff_data;
18758ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    }
18768ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
18778ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    ps_dec->pu4_wt_ofsts = ps_dec->pu4_wts_ofsts_mat;
18788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(u1_slice_type == I_SLICE)
18798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
18808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->ps_cur_pic->u4_pack_slc_typ |= I_SLC_BIT;
18818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
18828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ret = ih264d_parse_islice(ps_dec, u2_first_mb_in_slice);
18838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
18848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(ps_dec->i4_pic_type != B_SLICE && ps_dec->i4_pic_type != P_SLICE)
18858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->i4_pic_type = I_SLICE;
18868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
18878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
18888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else if(u1_slice_type == P_SLICE)
18898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
18908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->ps_cur_pic->u4_pack_slc_typ |= P_SLC_BIT;
18918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ret = ih264d_parse_pslice(ps_dec, u2_first_mb_in_slice);
18928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->u1_pr_sl_type = u1_slice_type;
18938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(ps_dec->i4_pic_type != B_SLICE)
18948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->i4_pic_type = P_SLICE;
18958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
18968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else if(u1_slice_type == B_SLICE)
18978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
18988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->ps_cur_pic->u4_pack_slc_typ |= B_SLC_BIT;
18998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ret = ih264d_parse_bslice(ps_dec, u2_first_mb_in_slice);
19008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->u1_pr_sl_type = u1_slice_type;
19018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->i4_pic_type = B_SLICE;
19028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
19038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else
19048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        return ERROR_INV_SLC_TYPE_T;
19058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
19068ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    if(ps_dec->u1_slice_header_done)
19078ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    {
19089f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S        /* set to zero to indicate a valid slice has been decoded */
19099f0dcba9b4f792aedf37b6ecdceae46d36b93068Hamsalekha S        /* first slice header successfully decoded */
19108ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        ps_dec->u4_first_slice_in_pic = 0;
19118ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        ps_dec->u1_first_slice_in_stream = 0;
19128ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    }
19138ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
19148ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    if(ret != OK)
19158ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        return ret;
19168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
19178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->u2_cur_slice_num++;
19188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* storing last Mb X and MbY of the slice */
19198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->i2_prev_slice_mbx = ps_dec->u2_mbx;
19208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->i2_prev_slice_mby = ps_dec->u2_mby;
19218ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
19228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* End of Picture detection */
19238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
19248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(ps_dec->u2_total_mbs_coded >= (ps_seq->u2_max_mb_addr + 1))
19258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
19268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->u1_pic_decode_done = 1;
19278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
19288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
19298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
19308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
19318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        dec_err_status_t * ps_err = ps_dec->ps_dec_err_status;
19328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if((ps_err->u1_err_flag & REJECT_PB_PICS)
19338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        && (ps_err->u1_cur_pic_type == PIC_TYPE_I))
19348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
19358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_err->u1_err_flag = ACCEPT_ALL_PICS;
19368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
19378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
19388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
19398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    PRINT_BIN_BIT_RATIO(ps_dec)
19408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
19418ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    return ret;
19428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
19438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1944