/******************************************************************************
 *
 * Copyright (C) 2015 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at:
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 *****************************************************************************
 * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
*/
#ifndef _IH264D_STRUCTS_H_
#define _IH264D_STRUCTS_H_

#include "ih264_typedefs.h"
#include "ih264_macros.h"
#include "ih264_platform_macros.h"
#include "iv.h"
#include "ivd.h"

#include "ih264d_transfer_address.h"
#include "ih264d_defs.h"
#include "ih264d_defs.h"
#include "ih264d_bitstrm.h"
#include "ih264d_debug.h"
#include "ih264d_dpb_manager.h"
/* includes for CABAC */
#include "ih264d_cabac.h"
#include "ih264d_dpb_manager.h"

#include "ih264d_vui.h"
#include "ih264d_sei.h"
#include "iv.h"
#include "ivd.h"

#include "ih264_weighted_pred.h"
#include "ih264_trans_quant_itrans_iquant.h"
#include "ih264_inter_pred_filters.h"
#include "ih264_mem_fns.h"
#include "ih264_padding.h"
#include "ih264_intra_pred_filters.h"
#include "ih264_deblk_edge_filters.h"





/** Number of Mb's whoose syntax will be read */
/************************************************************/
/* MB_GROUP should be a multiple of 2                       */
/************************************************************/
#define PARSE_MB_GROUP_4            4

/* MV_SCRATCH_BUFS assumed to be pow(2) */
#define MV_SCRATCH_BUFS             4

#define TOP_FIELD_ONLY      0x02
#define BOT_FIELD_ONLY      0x01

#define MAX_REF_BUF_SIZE       (3776*2*2)

struct _DecStruct;
struct _DecMbInfo;

typedef enum
{
    MB_TYPE_SI_SLICE = 0,
    MB_TYPE_I_SLICE = 3,
    MB_SKIP_FLAG_P_SLICE = 11,
    MB_TYPE_P_SLICE = 14,
    SUB_MB_TYPE_P_SLICE = 21,
    MB_SKIP_FLAG_B_SLICE = 24,
    MB_TYPE_B_SLICE = 27,
    SUB_MB_TYPE_B_SLICE = 36,
    MVD_X = 40,
    MVD_Y = 47,
    REF_IDX = 54,
    MB_QP_DELTA = 60,
    INTRA_CHROMA_PRED_MODE = 64,
    PREV_INTRA4X4_PRED_MODE_FLAG = 68,
    REM_INTRA4X4_PRED_MODE = 69,
    MB_FIELD_DECODING_FLAG = 70,
    CBP_LUMA = 73,
    CBP_CHROMA = 77,
    CBF = 85,
    SIGNIFICANT_COEFF_FLAG_FRAME = 105,
    SIGNIFICANT_COEFF_FLAG_FLD = 277,
    LAST_SIGNIFICANT_COEFF_FLAG_FRAME = 166,
    LAST_SIGNIFICANT_COEFF_FLAG_FLD = 338,
    COEFF_ABS_LEVEL_MINUS1 = 227,

    /* High profile related Syntax element CABAC offsets */
    TRANSFORM_SIZE_8X8_FLAG = 399,
    SIGNIFICANT_COEFF_FLAG_8X8_FRAME = 402,
    LAST_SIGNIFICANT_COEFF_FLAG_8X8_FRAME = 417,
    COEFF_ABS_LEVEL_MINUS1_8X8 = 426,
    SIGNIFICANT_COEFF_FLAG_8X8_FIELD = 436,
    LAST_SIGNIFICANT_COEFF_FLAG_8X8_FIELD = 451

} cabac_table_num_t;

typedef enum
{
    SIG_COEFF_CTXT_CAT_0_OFFSET = 0,
    SIG_COEFF_CTXT_CAT_1_OFFSET = 15,
    SIG_COEFF_CTXT_CAT_2_OFFSET = 29,
    SIG_COEFF_CTXT_CAT_3_OFFSET = 44,
    SIG_COEFF_CTXT_CAT_4_OFFSET = 47,
    SIG_COEFF_CTXT_CAT_5_OFFSET = 0,
    COEFF_ABS_LEVEL_CAT_0_OFFSET = 0,
    COEFF_ABS_LEVEL_CAT_1_OFFSET = 10,
    COEFF_ABS_LEVEL_CAT_2_OFFSET = 20,
    COEFF_ABS_LEVEL_CAT_3_OFFSET = 30,
    COEFF_ABS_LEVEL_CAT_4_OFFSET = 39,
    COEFF_ABS_LEVEL_CAT_5_OFFSET = 0
} cabac_blk_cat_offset_t;

/** Structure for the MV bank */
typedef struct _mv_pred_t
{
    WORD16 i2_mv[4]; /** 0- mvFwdX, 1- mvFwdY, 2- mvBwdX, 3- mvBwdY */
    WORD8 i1_ref_frame[2];

    UWORD8 u1_col_ref_pic_idx; /** Idx into the pic buff array */
    UWORD8 u1_pic_type; /** Idx into the pic buff array */

} mv_pred_t;

typedef struct
{
    WORD32 i4_mv_indices[16];
    WORD8 i1_submb_num[16];
    WORD8 i1_partitionsize[16];
    WORD8 i1_num_partitions;
    WORD8 u1_vert_mv_scale;
    UWORD8 u1_col_zeroflag_change;
} directmv_t;

typedef struct pic_buffer_t
{
    /**Different components of the picture */
    UWORD8 *pu1_buf1;
    UWORD8 *pu1_buf2;
    UWORD8 *pu1_buf3;
    UWORD16 u2_disp_width; /** Width of the display luma frame in pixels */
    UWORD16 u2_disp_height; /** Height of the display luma frame in pixels */
    UWORD32 u4_time_stamp; /** Time at which frame has to be displayed */
    UWORD16 u2_frm_wd_y; /** Width of the luma frame in pixels */
    UWORD16 u2_frm_wd_uv; /** Width of the chroma frame */
    UWORD16 u2_frm_ht_y; /** Height of the luma frame in pixels */
    UWORD16 u2_frm_ht_uv; /** Height of the chroma frame */
    /* Upto this is resembling the structure IH264DEC_DispUnit */

    /* If any member is to be added, add below this            */

    /* u4_ofst from start of picture buffer to display position for Y buffer  */
    UWORD16 u2_crop_offset_y;

    /* u4_ofst from start of picture buffer to display position for UV buffer */
    UWORD16 u2_crop_offset_uv;

    UWORD8 u1_is_short; /** (1: short 0: long) term ref pic */
    UWORD8 u1_pic_type; /** frame / field / complementary field pair */
    UWORD8 u1_pic_buf_id; /** Idx into the picBufAPI array */
    UWORD8 u1_mv_buf_id;
    WORD32 i4_seq;
    UWORD8 *pu1_col_zero_flag;
    mv_pred_t *ps_mv; /** Pointer to the MV bank array */
    WORD32 i4_poc; /** POC */
    WORD32 i4_pic_num;
    WORD32 i4_frame_num;
    WORD32 i4_top_field_order_cnt; /** TopPOC */
    WORD32 i4_bottom_field_order_cnt; /** BottomPOC */
    WORD32 i4_avg_poc; /** minPOC */
    UWORD8 u1_picturetype; /*Same as u1_pic_type..u1_pic_type gets overwritten whereas
     this doesnot get overwritten ...stores the pictype of
     frame/complementary field pair/ mbaff */
    UWORD8 u1_long_term_frm_idx;
    UWORD8 u1_long_term_pic_num;
    UWORD32 u4_pack_slc_typ; /* It will contain information about types of slices */

    /* ! */
    UWORD32 u4_ts;
    UWORD8 u1_pic_struct;/* Refer to SEI table D-1 */

} pic_buffer_t;

typedef struct
{
    void *u4_add[4];
} neighbouradd_t;

typedef struct
{
    const UWORD8 *pu1_inv_scan;
    void *pv_table[6];
} cavlc_cntxt_t;

/**
 ************************************************************************
 * \file ih264d_structs.h
 *
 * \brief
 *    Structures used in the H.264 decoder
 *
 * \date
 *    18/11/2002
 *
 * \author  Sriram Sethuraman
 *
 ************************************************************************
 */

/**
 * Structure to represent a MV Bank buffer and col flag
 */
typedef struct
{
    /**
     *  Pointer to buffer that holds col flag.
     */
    void *pv_col_zero_flag;

    /**
     * Pointer to buffer that holds mv_pred
     */
    void *pv_mv;

 }col_mv_buf_t;


typedef struct
{
    UWORD8 u1_dydx; /** 4*dy + dx for Y comp / 8*dy + dx for UV comp */
    UWORD8 u1_is_bi_direct; /** 1: is bi-direct 0: forward / backward only   */
    UWORD8 u1_wght_pred_type; /** 0-default 1-singleWeighted 2-BiWeighted      */
    WORD8 i1_mb_partwidth; /** Width of MB partition                        */
    WORD8 i1_mb_partheight; /** Height of MB partition                       */
    WORD8 i1_mc_wd; /** Number of bytes in a DMA stride              */
    WORD8 i1_dma_ht; /** Number of strides                            */

    WORD8 i1_pod_ht; /** Flag specifying height of pad on demand      */
    /** 0 (No pod) -ve(Top pod) +ve(Bottom pod)      */
    UWORD16 u2_dst_stride; /** Stride value of the destination              */
    UWORD16 u2_u1_ref_buf_wd; /** Width of the ref buffer                      */
    UWORD16 u2_frm_wd;
    UWORD16 u2_dummy;

    UWORD8 *u1_pi1_wt_ofst_rec_v; /** Pointer to packed weight and u4_ofst          */
    UWORD8 *pu1_rec_y_u; /** MB partition address in row buffer           */
    UWORD8 *pu1_dma_dest_addr; /** Destination address for DMA transfer         */
    UWORD8 *pu1_y_ref;
    UWORD8 *pu1_u_ref;
    UWORD8 *pu1_v_ref;

    UWORD8 *pu1_pred;
    UWORD8 *pu1_pred_u;
    UWORD8 *pu1_pred_v;
    UWORD8 u1_dma_wd_y;
    UWORD8 u1_dma_ht_y;
    UWORD8 u1_dma_wd_uv;
    UWORD8 u1_dma_ht_uv;
} pred_info_t;

typedef struct
{
    UWORD32 *pu4_wt_offst;
    WORD16 i2_mv[2];

    /***************************************************/
    /*packing information  i1_size_pos_info             */
    /* bit 1:0 -> X position in terms of  (4x4) units   */
    /* bit 3:2 -> Y position in terms of  (4x4) units   */
    /* bit 5:4 -> PU width 0:4,1:8,2:16                 */
    /* bit 7:6 -> PU height 0:4,1:8,2:16                */
     /***************************************************/
    WORD8 i1_size_pos_info;

    /***************************************************/
    /*packing information ref idx info                 */
    /* bit 5:0 ->ref_idx                              */
    /* bit 6:7   -> 0:l0,1:l1,2:bipred                  */
     /***************************************************/
    WORD8 i1_ref_idx_info;

    WORD8 i1_buf_id;


    UWORD8 u1_pic_type; /** frame /top field/bottom field/mbaff / complementary field pair */

}pred_info_pkd_t;
/*! Sequence level parameters */

typedef struct
{
    UWORD8 u1_seq_parameter_set_id; /** id for the seq par set 0-31 */
    UWORD8 u1_is_valid; /** is Seq Param set valid */

    UWORD16 u2_frm_wd_in_mbs; /** Frame width expressed in MB units */
    UWORD16 u2_frm_ht_in_mbs; /** Frame height expressed in MB units */

    /* Following are derived from the above two */
    UWORD16 u2_fld_ht_in_mbs; /** Field height expressed in MB units */
    UWORD16 u2_max_mb_addr; /** Total number of macroblocks in a coded picture */
    UWORD16 u2_total_num_of_mbs; /** Total number of macroblocks in a coded picture */
    UWORD32 u4_fld_ht; /** field height */
    UWORD32 u4_cwidth; /** chroma width */
    UWORD32 u4_chr_frm_ht; /** chroma height */
    UWORD32 u4_chr_fld_ht; /** chroma field height */
    UWORD8 u1_mb_aff_flag; /** 0 - no mb_aff; 1 - uses mb_aff */

    UWORD8 u1_profile_idc; /** profile value */
    UWORD8 u1_level_idc; /** level value */

    /* high profile related syntax elements   */
    WORD32 i4_chroma_format_idc;
    WORD32 i4_bit_depth_luma_minus8;
    WORD32 i4_bit_depth_chroma_minus8;
    WORD32 i4_qpprime_y_zero_transform_bypass_flag;
    WORD32 i4_seq_scaling_matrix_present_flag;
    UWORD8 u1_seq_scaling_list_present_flag[8];
    UWORD8 u1_use_default_scaling_matrix_flag[8];
    WORD16 i2_scalinglist4x4[6][16];
    WORD16 i2_scalinglist8x8[2][64];
    UWORD8 u1_more_than_one_slice_group_allowed_flag;
    UWORD8 u1_arbitrary_slice_order_allowed_flag;
    UWORD8 u1_redundant_slices_allowed_flag;
    UWORD8 u1_bits_in_frm_num; /** Number of bits in frame num */
    UWORD16 u2_u4_max_pic_num_minus1; /** Maximum frame num minus 1 */
    UWORD8 u1_pic_order_cnt_type; /** 0 - 2 indicates the method to code picture order count */
    UWORD8 u1_log2_max_pic_order_cnt_lsb_minus;
    WORD32 i4_max_pic_order_cntLsb;
    UWORD8 u1_num_ref_frames_in_pic_order_cnt_cycle;
    UWORD8 u1_delta_pic_order_always_zero_flag;
    WORD32 i4_ofst_for_non_ref_pic;
    WORD32 i4_ofst_for_top_to_bottom_field;
    WORD32 i4_ofst_for_ref_frame[MAX_NUM_REF_FRAMES_OFFSET];
    UWORD8 u1_num_ref_frames;
    UWORD8 u1_gaps_in_frame_num_value_allowed_flag;
    UWORD8 u1_frame_mbs_only_flag; /** 1 - frame only; 0 - field/frame pic */
    UWORD8 u1_direct_8x8_inference_flag;
    UWORD8 u1_vui_parameters_present_flag;
    vui_t s_vui;
} dec_seq_params_t;

typedef struct
{
    UWORD16 u2_frm_wd_in_mbs; /** Frame width expressed in MB units    */
    UWORD16 u2_frm_ht_in_mbs; /** Frame height expressed in MB units   */
    UWORD8 u1_frame_mbs_only_flag; /** 1 - frame only; 0 - field/frame pic  */
    UWORD8 u1_profile_idc; /** profile value                        */
    UWORD8 u1_level_idc; /** level value                          */
    UWORD8 u1_direct_8x8_inference_flag;
    UWORD8 u1_eoseq_pending;
} prev_seq_params_t;

/** Picture level parameters */
typedef struct
{
    dec_seq_params_t *ps_sps; /** applicable seq. parameter set */

    /* High profile related syntax elements */
    WORD32 i4_transform_8x8_mode_flag;
    WORD32 i4_pic_scaling_matrix_present_flag;
    UWORD8 u1_pic_scaling_list_present_flag[8];
    UWORD8 u1_pic_use_default_scaling_matrix_flag[8];
    WORD16 i2_pic_scalinglist4x4[6][16];
    WORD16 i2_pic_scalinglist8x8[2][64];
    WORD8 i1_second_chroma_qp_index_offset;

    UWORD32 u4_slice_group_change_rate;
    UWORD8 *pu1_slice_groupmb_map; /** MB map with slice membership labels */
    UWORD8 u1_pic_parameter_set_id; /** id for the picture par set 0-255*/
    UWORD8 u1_entropy_coding_mode; /** Entropy coding : 0-VLC; 1 - CABAC */
    UWORD8 u1_num_slice_groups; /** Number of slice groups */
    UWORD8 u1_pic_init_qp; /** Initial QPY for the picture {-26,25}*/
    WORD8 i1_chroma_qp_index_offset; /** Chroma QP u4_ofst w.r.t QPY {-12,12} */
    UWORD8 u1_dblk_filter_parms_flag; /** Slice layer has deblocking filter parameters */
    UWORD8 u1_constrained_intra_pred_flag; /** Constrained intra prediction u4_flag */
    UWORD8 u1_redundant_pic_cnt_present_flag; /** Redundant_pic_cnt is in slices using this PPS */
    UWORD8 u1_pic_order_present_flag; /** Pic order present u4_flag */
    UWORD8 u1_num_ref_idx_lx_active[2]; /** Maximum reference picture index in the reference list 0 : range [1 - 15] */
    UWORD8 u1_wted_pred_flag;
    UWORD8 u1_wted_bipred_idc;
    UWORD8 u1_pic_init_qs;
    UWORD8 u1_deblocking_filter_parameters_present_flag;
    UWORD8 u1_vui_pic_parameters_flag;
    UWORD8 u1_mb_slice_group_map_type;
    UWORD8 u1_slice_group_change_direction_flag;
    UWORD8 u1_frame_cropping_flag;
    UWORD8 u1_frame_cropping_rect_left_ofst;
    UWORD8 u1_frame_cropping_rect_right_ofst;
    UWORD8 u1_frame_cropping_rect_top_ofst;
    UWORD8 u1_frame_cropping_rect_bottom_ofst;
    void * pv_codec_handle; /* For Error Handling */
    WORD32 i4_top_field_order_cnt;
    WORD32 i4_bottom_field_order_cnt;
    WORD32 i4_avg_poc;
    UWORD8 u1_is_valid; /** is Pic Param set valid */
} dec_pic_params_t;

/** Picture Order Count Paramsters */
typedef struct
{
    WORD32 i4_pic_order_cnt_lsb;
    WORD32 i4_pic_order_cnt_msb;
    WORD32 i4_delta_pic_order_cnt_bottom;
    WORD32 i4_delta_pic_order_cnt[2];
    WORD32 i4_prev_frame_num_ofst;
    UWORD8 u1_mmco_equalto5;
    UWORD8 u1_bot_field;
    UWORD16 u2_frame_num;
    WORD32 i4_top_field_order_count;
    WORD32 i4_bottom_field_order_count;
} pocstruct_t;

/*****************************************************************************/
/* parse_mb_pers_info contains necessary mb info data required persistently  */
/* in the form of top and left neighbours.                                   */
/*****************************************************************************/
typedef struct
{
    void *u4_pic_addrress[4]; /* picture address for BS calc */
    WORD8 pi1_intrapredmodes[4]; /* calc Intra pred modes */
    UWORD8 pu1_nnz_y[4];
    UWORD8 pu1_nnz_uv[4];
    UWORD8 u1_mb_fld;
    UWORD8 u1_mb_type;
    UWORD16 u2_luma_csbp; /* Luma csbp used for BS calc */
    UWORD8 u1_tran_form8x8;
} mb_neigbour_params_t;

/* This info is required for decoding purposes except Deblockng */
typedef struct _DecMbInfo
{
    UWORD8 u1_mb_type; /** macroblock type: I/P/B/SI/SP */
    UWORD8 u1_chroma_pred_mode;
    UWORD8 u1_cbp;
    UWORD8 u1_mb_mc_mode; /** 16x16, 2 16x8, 2 8x16, 4 8x8 */
    UWORD8 u1_topmb; /** top Mb u4_flag */
    UWORD8 u1_mb_ngbr_availablity;
    UWORD8 u1_end_of_slice;
    UWORD8 u1_mb_field_decodingflag;
    UWORD8 u1_topleft_mb_fld;
    UWORD8 u1_topleft_mbtype;
    WORD8 i1_offset;
    UWORD8 u1_Mux;
    UWORD8 u1_qp_div6;
    UWORD8 u1_qp_rem6;
    UWORD8 u1_qpc_div6;
    UWORD8 u1_qpcr_div6;
    UWORD8 u1_qpc_rem6;
    UWORD8 u1_qpcr_rem6;
    UWORD8 u1_tran_form8x8;
    UWORD8 u1_num_pred_parts;
    UWORD8 u1_yuv_dc_block_flag;
    UWORD16 u2_top_right_avail_mask;
    UWORD16 u2_top_left_avail_mask;
    UWORD16 u2_luma_csbp; /** Coded 4x4 Sub Block Pattern */
    UWORD16 u2_chroma_csbp; /** Coded 4x4 Sub Block Pattern */
    UWORD16 u2_mbx;
    UWORD16 u2_mby;
    UWORD16 u2_mask[2];

    UWORD32 u4_pred_info_pkd_idx;

    mb_neigbour_params_t *ps_left_mb;
    mb_neigbour_params_t *ps_top_mb;
    mb_neigbour_params_t *ps_top_right_mb;
    mb_neigbour_params_t *ps_curmb;
} dec_mb_info_t;


/** Slice level parameters */
typedef struct
{
    dec_pic_params_t *ps_pps; /** PPS used */
    WORD32 i4_delta_pic_order_cnt[2];
    WORD32 i4_poc; /** Pic order cnt of picture to which slice belongs*/
    UWORD32 u4_idr_pic_id; /** IDR pic ID */
    UWORD16 u2_first_mb_in_slice; /** Address of first MB in slice*/
    UWORD16 u2_frame_num; /** Frame number from prev IDR pic */

    UWORD8 u1_mbaff_frame_flag; /** Mb adaptive frame field u4_flag */
    UWORD8 u1_field_pic_flag; /** Field picture or not */
    UWORD8 u1_bottom_field_flag; /** If slice belongs to bot field pic */
    UWORD8 u1_slice_type; /** I/P/B/SI/SP */
    WORD32 i4_pic_order_cnt_lsb; /** Picture Order Count */
    UWORD8 u1_slice_qp; /** Add slice_qp_delta to pic_init_QP */
    UWORD8 u1_disable_dblk_filter_idc; /** 0-dblk all edges; 1 - suppress; 2 - suppress only edges */
    WORD8 i1_slice_alpha_c0_offset; /** dblk: alpha and C0 table u4_ofst {-12,12}*/
    WORD8 i1_slice_beta_offset; /** dblk: beta table u4_ofst {-12, 12}*/
    UWORD8 u1_sp_for_switch_flag;
    UWORD8 u1_no_output_of_prior_pics_flag;
    UWORD8 u1_long_term_reference_flag;
    UWORD8 u1_num_ref_idx_lx_active[2];
    UWORD8 u1_cabac_init_idc; /** cabac_init_idc */
    UWORD8 u1_num_ref_idx_active_override_flag;
    UWORD8 u1_direct_spatial_mv_pred_flag;
    WORD32 (*pf_decodeDirect)(struct _DecStruct *ps_dec,
                              UWORD8 u1_wd_x,
                              dec_mb_info_t *ps_cur_mb_info,
                              UWORD8 u1_mb_num);
    UWORD8 u1_redundant_pic_cnt;
    WORD8 i1_slice_qs_delta;
    UWORD8 u1_nal_ref_idc; /** NAL ref idc of the Slice NAL unit */
    UWORD8 u1_nal_unit_type; /** NAL unit type of the Slice NAL */
    UWORD8 u1_direct_8x8_inference_flag;
    UWORD8 u1_mmco_equalto5; /** any of the MMCO command equal to 5 */
    UWORD8 u1_pic_order_cnt_type;
    pocstruct_t s_POC;
    /* DataStructures required for weighted prediction */
    UWORD16 u2_log2Y_crwd; /** Packed luma and chroma log2_weight_denom */
    /* [list0/list1]:[ref pics index]:[0-Y 1-Cb 2-Cr] [weight/u4_ofst],
     weights and offsets are signed numbers, since they are packed, it is defined
     unsigned. LSB byte : weight and MSB byte: u4_ofst */
    UWORD32 u4_wt_ofst_lx[2][MAX_REF_BUFS][3];
    void * pv_codec_handle; /* For Error Handling */

    /*  This is used when reordering is done in Forward or    */
    /*  backward lists. This is because reordering can point  */
    /*  to any valid entry in initial list irrespective of    */
    /*  num_ref_idx_active which could be overwritten using   */
    /*  ref_idx_reorder_flag                                  */
    UWORD8 u1_initial_list_size[2];
    UWORD32 u4_mbs_in_slice;
} dec_slice_params_t;


typedef struct
{
    UWORD8 u1_mb_type; /* Bit representations, X- reserved */
    /** |Field/Frame|X|X|X|X|Bslice u4_flag|PRED_NON_16x16 u4_flag |Intra Mbflag| */
    UWORD8 u1_mb_qp;
    UWORD8 u1_deblocking_mode; /** dblk: Mode [ NO / NO TOP / NO LEFT] filter */
    WORD8 i1_slice_alpha_c0_offset; /** dblk: alpha and C0 table u4_ofst {-12,12}*/
    WORD8 i1_slice_beta_offset; /** dblk: beta table u4_ofst {-12, 12}*/
    UWORD8 u1_single_call;
    UWORD8 u1_topmb_qp;
    UWORD8 u1_left_mb_qp;
    UWORD32 u4_bs_table[10]; /* Boundary strength */

} deblk_mb_t;

typedef struct
{
    UWORD8 u1_mb_type;
    UWORD8 u1_mb_qp;
} deblkmb_neighbour_t;

#define MAX_MV_RESIDUAL_INFO_PER_MB    32
#define MAX_REFIDX_INFO_PER_MB         4
#define PART_NOT_DIRECT                0
#define PART_DIRECT_8x8                1
#define PART_DIRECT_16x16              2
typedef struct
{
    UWORD8 u1_is_direct;
    UWORD8 u1_pred_mode;
    UWORD8 u1_sub_mb_num;
    UWORD8 u1_partheight;
    UWORD8 u1_partwidth;
} parse_part_params_t;

typedef struct
{
    UWORD8 u1_isI_mb;
    UWORD8 u1_num_part;
    UWORD32 *pu4_wt_offst[MAX_REFIDX_INFO_PER_MB];
    WORD8 i1_ref_idx[2][MAX_REFIDX_INFO_PER_MB];
    UWORD8 u1_col_info[MAX_REFIDX_INFO_PER_MB];
} parse_pmbarams_t;

typedef struct
{
    UWORD8 u1_vert_pad_top; /* flip-flop u4_flag remembering pad area (Vert) */
    UWORD8 u1_vert_pad_bot; /* flip-flop u4_flag remembering pad area (Vert) */
    UWORD8 u1_horz_pad; /* flip-flop u4_flag remembering pad area (Vert) */
    UWORD8 u1_pad_len_y_v; /* vertical pad amount for luma               */
    UWORD8 u1_pad_len_cr_v; /* vertical pad amount for chroma             */
} pad_mgr_t;


#define ACCEPT_ALL_PICS   (0x00)
#define REJECT_CUR_PIC    (0x01)
#define REJECT_PB_PICS    (0x02)

#define MASK_REJECT_CUR_PIC (0xFE)
#define MASK_REJECT_PB_PICS (0xFD)

#define PIC_TYPE_UNKNOWN  (0xFF)
#define PIC_TYPE_I        (0x00)
#define SYNC_FRM_DEFAULT  (0xFFFFFFFF)
#define INIT_FRAME        (0xFFFFFF)

typedef struct dec_err_status_t
{
    UWORD8 u1_cur_pic_type;
    UWORD8 u1_pic_aud_i;
    UWORD8 u1_err_flag;
    UWORD32 u4_frm_sei_sync;
    UWORD32 u4_cur_frm;
} dec_err_status_t;

/**************************************************************************/
/* Structure holds information about all high profile toolsets            */
/**************************************************************************/
typedef struct
{
    /*****************************************/
    /* variables required for scaling        */
    /*****************************************/
    UWORD8 u1_scaling_present;
    WORD16 *pi2_scale_mat[8];

    /*************************************************/
    /* scaling matrices for frame macroblocks after  */
    /* inverse scanning                              */
    /*************************************************/
    WORD16 i2_scalinglist4x4[6][16];
    WORD16 i2_scalinglist8x8[2][64];


    /*****************************************/
    /* variables required for transform8x8   */
    /*****************************************/
    UWORD8 u1_transform8x8_present;
    UWORD8 u1_direct_8x8_inference_flag;
    /* temporary variable to get noSubMbPartSizeLessThan8x8Flag from ih264d_parse_bmb_non_direct_cavlc */
    UWORD8 u1_no_submb_part_size_lt8x8_flag;

    /* needed for inverse scanning */
    cavlc_cntxt_t s_cavlc_ctxt;

    /* contexts for the CABAC related parsing */
    bin_ctxt_model_t *ps_transform8x8_flag;
    bin_ctxt_model_t *ps_sigcoeff_8x8_frame;
    bin_ctxt_model_t *ps_last_sigcoeff_8x8_frame;
    bin_ctxt_model_t *ps_coeff_abs_levelminus1;
    bin_ctxt_model_t *ps_sigcoeff_8x8_field;
    bin_ctxt_model_t *ps_last_sigcoeff_8x8_field;

/* variables required for intra8x8 */

/* variables required for handling different Qp for Cb and Cr */

} high_profile_tools_t;

typedef struct
{
    UWORD32 u4_num_bufs; /* Number of buffers in each display frame. 2 for 420SP and 3 for 420P and so on */
    void *buf[3]; /* Pointers to each of the components */
    UWORD32 u4_bufsize[3];
    UWORD32 u4_ofst[3];
} disp_buf_t;
typedef struct _dec_slice_struct
{
    volatile UWORD32 u4_first_mb_in_slice;
    volatile UWORD32 slice_type;
    volatile UWORD16 u2_log2Y_crwd;
    volatile void **ppv_map_ref_idx_to_poc;
    volatile void *pv_tu_coeff_data_start;
} dec_slice_struct_t;

/**
 * Structure to hold coefficient info for a 4x4 transform
 */
typedef struct
{
    /**
     * significant coefficient map
     */
    UWORD16 u2_sig_coeff_map;

    /**
     * holds coefficients
     */
    WORD16  ai2_level[16];
}tu_sblk4x4_coeff_data_t;

/**
 * Structure to hold coefficient info for a 8x8 transform
 */
typedef struct
{

    /**
     * significant coefficient map
     */
    UWORD32 au4_sig_coeff_map[2];

    /**
     * holds coefficients
     */
    WORD16  ai2_level[64];
}tu_blk8x8_coeff_data_t;

/** Aggregating structure that is globally available */
typedef struct _DecStruct
{

    /* Add below all other static memory allocations and pointers to items
     that are dynamically allocated once per session */
    dec_bit_stream_t *ps_bitstrm;
    dec_seq_params_t *ps_cur_sps;
    dec_pic_params_t *ps_cur_pps;
    dec_slice_params_t *ps_cur_slice;

    dec_pic_params_t *ps_pps;
    dec_seq_params_t *ps_sps;
    const UWORD16 *pu2_quant_scale_y;
    const UWORD16 *pu2_quant_scale_u;
    const UWORD16 *pu2_quant_scale_v;
    UWORD16 u2_mbx;
    UWORD16 u2_mby;

    UWORD16 u2_frm_wd_y; /** Width for luma buff */
    UWORD16 u2_frm_ht_y; /** Height for luma buff */
    UWORD16 u2_frm_wd_uv; /** Width for chroma buff */
    UWORD16 u2_frm_ht_uv; /** Height for chroma buff */
    UWORD16 u2_frm_wd_in_mbs; /** Frame width expressed in MB units */
    UWORD16 u2_frm_ht_in_mbs; /** Frame height expressed in MB units */
    WORD32 i4_submb_ofst; /** Offset in subMbs from the top left edge */
    /* Pointer to colocated Zero frame Image, will be used in B_DIRECT mode */
    /* colZeroFlag | // 0th bit
     field_flag  | // 1st bit
     XX          | // 2:3 bit don't cares
     subMbMode   | // 4:5 bit
     MbMode      | // 6:7 bit */

    UWORD8 *pu1_col_zero_flag;

    UWORD16 u2_pic_wd; /** Width of the picture being decoded */
    UWORD16 u2_pic_ht; /** Height of the picture being decoded */

    UWORD8 u1_first_slice_in_stream;
    UWORD8 u1_mb_ngbr_availablity;
    UWORD8 u1_ref_idxl0_active_minus1;
    UWORD8 u1_qp;
    UWORD8 u1_qp_y_div6;
    UWORD8 u1_qp_u_div6;
    UWORD8 u1_qp_y_rem6;
    UWORD8 u1_qp_u_rem6;

    /*********************************/
    /* configurable mb-group numbers */
    /* very critical to the decoder  */
    /*********************************/
    /************************************************************/
    /* MB_GROUP should be a multiple of 2                       */
    /************************************************************/
    UWORD8 u1_recon_mb_grp;
    UWORD8 u1_recon_mb_grp_pair;
    /* Variables to handle Cabac */
    decoding_envirnoment_t s_cab_dec_env; /* < Structure for decoding_envirnoment_t */
    /* These things need to be updated at each MbLevel */
    WORD8 i1_next_ctxt_idx; /* < next Ctxt Index */
    UWORD8 u1_currB_type;
    WORD8 i1_prev_mb_qp_delta; /* Prev MbQpDelta */
    UWORD8 u1_nal_unit_type;

    ctxt_inc_mb_info_t *p_ctxt_inc_mb_map; /* Pointer to ctxt_inc_mb_info_t map */
    ctxt_inc_mb_info_t *p_left_ctxt_mb_info; /* Pointer to left ctxt_inc_mb_info_t */
    ctxt_inc_mb_info_t *p_top_ctxt_mb_info; /* Pointer to top ctxt_inc_mb_info_t */
    ctxt_inc_mb_info_t *ps_curr_ctxt_mb_info; /* Pointer to current ctxt_inc_mb_info_t */
    ctxt_inc_mb_info_t *ps_def_ctxt_mb_info; /* Pointer to default ctxt_inc_mb_info_t */

    /* mv contexts for mv decoding using cabac */
    //UWORD8   u1_top_mv_ctxt_inc[4][4];
    /* Dimensions for u1_left_mv_ctxt_inc_arr is [2][4][4] for Mbaff case */
    UWORD8 u1_left_mv_ctxt_inc_arr[2][4][4];
    UWORD8 (*pu1_left_mv_ctxt_inc)[4];

    UWORD8 u1_sub_mb_num;
    UWORD8 u1_B; /** if B slice u1_B = 1 else 0 */
    WORD16 i2_only_backwarddma_info_idx;
    mv_pred_t *ps_mv; /** Pointer to the MV bank array */
    mv_pred_t *ps_mv_bank_cur; /** Pointer to the MV bank array */
    mv_pred_t s_default_mv_pred; /** Structure containing the default values
     for MV predictor */

    pred_info_t *ps_pred; /** Stores info to cfg MC */
    pred_info_t *ps_pred_start;

    UWORD32 u4_pred_info_idx;
    pred_info_pkd_t *ps_pred_pkd;
    pred_info_pkd_t *ps_pred_pkd_start;
    UWORD32 u4_pred_info_pkd_idx;
    UWORD8 *pu1_ref_buff; /** Destination buffer for DMAs */
    UWORD32 u4_dma_buf_idx;

    UWORD8 *pu1_y;
    UWORD8 *pu1_u;
    UWORD8 *pu1_v;

    WORD16 *pi2_y_coeff;
    UWORD8 *pu1_inv_scan;

    /**
     * Pointer frame level TU subblock coeff data
     */
    void *pv_pic_tu_coeff_data;

    /**
     * Pointer to TU subblock coeff data and number of subblocks and scan idx
     * Incremented each time a coded subblock is processed
     *
     */
    void *pv_parse_tu_coeff_data;
    void *pv_prev_mb_parse_tu_coeff_data;

    void *pv_proc_tu_coeff_data;

    WORD16 *pi2_coeff_data;

    cavlc_cntxt_t s_cavlc_ctxt;

    UWORD32 u4_n_leftY[2];
    UWORD32 u4_n_left_cr[2];
    UWORD32 u4_n_left_temp_y;

    UWORD8 pu1_left_nnz_y[4];
    UWORD8 pu1_left_nnz_uv[4];
    UWORD32 u4_n_left_temp_uv;
    /***************************************************************************/
    /*          Base pointer to all the cabac contexts                         */
    /***************************************************************************/
    bin_ctxt_model_t *p_cabac_ctxt_table_t;

    /***************************************************************************/
    /* cabac context pointers for every SE mapped into in p_cabac_ctxt_table_t */
    /***************************************************************************/
    bin_ctxt_model_t *p_mb_type_t;
    bin_ctxt_model_t *p_mb_skip_flag_t;
    bin_ctxt_model_t *p_sub_mb_type_t;
    bin_ctxt_model_t *p_mvd_x_t;
    bin_ctxt_model_t *p_mvd_y_t;
    bin_ctxt_model_t *p_ref_idx_t;
    bin_ctxt_model_t *p_mb_qp_delta_t;
    bin_ctxt_model_t *p_intra_chroma_pred_mode_t;
    bin_ctxt_model_t *p_prev_intra4x4_pred_mode_flag_t;
    bin_ctxt_model_t *p_rem_intra4x4_pred_mode_t;
    bin_ctxt_model_t *p_mb_field_dec_flag_t;
    bin_ctxt_model_t *p_cbp_luma_t;
    bin_ctxt_model_t *p_cbp_chroma_t;
    bin_ctxt_model_t *p_cbf_t[NUM_CTX_CAT];
    bin_ctxt_model_t *p_significant_coeff_flag_t[NUM_CTX_CAT];
    bin_ctxt_model_t *p_coeff_abs_level_minus1_t[NUM_CTX_CAT];

    UWORD32 u4_num_pmbair; /** MB pair number */
    mv_pred_t *ps_mv_left; /** Pointer to left motion vector bank */
    mv_pred_t *ps_mv_top_left; /** Pointer to top left motion vector bank */
    mv_pred_t *ps_mv_top_right; /** Pointer to top right motion vector bank */

    UWORD8 *pu1_left_yuv_dc_csbp;


    deblkmb_neighbour_t deblk_left_mb[2];
    deblkmb_neighbour_t *ps_deblk_top_mb;
    neighbouradd_t (*ps_left_mvpred_addr)[2]; /* Left MvPred Address Ping Pong*/

    /***************************************************************************/
    /*       Ref_idx contexts  are stored in the following way                 */
    /*  Array Idx 0,1 for reference indices in Forward direction               */
    /*  Array Idx 2,3 for reference indices in backward direction              */
    /***************************************************************************/

    /* Dimensions for u1_left_ref_ctxt_inc_arr is [2][4] for Mbaff:Top and Bot */
    WORD8 i1_left_ref_idx_ctx_inc_arr[2][4];
    WORD8 *pi1_left_ref_idx_ctxt_inc;

    /*************************************************************************/
    /*               Arrangnment of DC CSBP                                  */
    /*        bits:  b7  b6  b5  b4  b3  b2  b1  b0                          */
    /*        CSBP:   x   x   x   x   x  Vdc Udc Ydc                         */
    /*************************************************************************/
    /*************************************************************************/
    /*  Points either to u1_yuv_dc_csbp_topmb or  u1_yuv_dc_csbp_bot_mb     */
    /*************************************************************************/
    UWORD8 u1_yuv_dc_csbp_topmb;
    UWORD8 u1_yuv_dc_csbp_bot_mb;

    /* DMA SETUP */
    tfr_ctxt_t s_tran_addrecon_parse;
    tfr_ctxt_t s_tran_addrecon;
    tfr_ctxt_t s_tran_iprecon;
    tfr_ctxt_t *ps_frame_buf_ip_recon;
    WORD8 i1_recon_in_thread3_flag;

    /* slice Header Simplification */
    UWORD8 u1_pr_sl_type;
    WORD32 i4_frametype;
    UWORD32 u4_app_disp_width;
    WORD32 i4_error_code;
    UWORD32 u4_bitoffset;

    /* Variables added to handle field pics */

    UWORD8 u1_second_field;
    WORD32 i4_pic_type;
    WORD32 i4_content_type;
    WORD32 i4_decode_header;
    WORD32 i4_header_decoded;
    UWORD32 u4_total_frames_decoded;

    ctxt_inc_mb_info_t *ps_left_mb_ctxt_info; /* structure containing the left MB's
     context info, incase of Mbaff */
    pocstruct_t s_prev_pic_poc;
    pocstruct_t s_cur_pic_poc;
    WORD32 i4_cur_display_seq;
    WORD32 i4_prev_max_display_seq;
    WORD32 i4_max_poc;
    deblk_mb_t *ps_cur_deblk_mb;

    /* Pointers to local scratch buffers */
    deblk_mb_t *ps_deblk_pic;

    /* Pointers to Picture Buffers (Given by BufAPI Lib) */
    struct pic_buffer_t *ps_cur_pic; /** Pointer to Current picture buffer */

    /* Scratch Picture Buffers (Given by BufAPI Lib) */
    struct pic_buffer_t s_cur_pic;

    /* Current Slice related information */
    volatile UWORD16 u2_cur_slice_num;
    volatile UWORD16 u2_cur_slice_num_dec_thread;

    /* Variables needed for Buffer API handling */
    UWORD8 u1_nal_buf_id;
    UWORD8 u1_pic_buf_id;
    UWORD8 u1_pic_bufs;

    WORD16 *pi2_pred1; //[441];  /** Temp predictor buffer for MC */
    /* Pointer to refernce Pic buffers list, 0:fwd, 1:bwd */
    pic_buffer_t **ps_ref_pic_buf_lx[2];
    /* refIdx to POC mapping */
    void **ppv_map_ref_idx_to_poc;
    void **ppv_map_ref_idx_to_poc_base;
    UWORD32 *pu4_wts_ofsts_mat;
    UWORD32 *pu4_wt_ofsts;
    UWORD32 *pu4_mbaff_wt_mat;
    /* Function pointers to read Params common to CAVLC and CABAC */
    WORD32 (*pf_parse_inter_mb)(struct _DecStruct * ps_dec,
                                dec_mb_info_t * ps_cur_mb_info,
                                UWORD8 u1_mb_num,
                                UWORD8 u1_num_mbsNby2);
    WORD32 (*pf_mvpred_ref_tfr_nby2mb)(struct _DecStruct * ps_dec,
                                     UWORD8 u1_num_mbs,
                                     UWORD8 u1_num_mbsNby2);

    WORD32 (*pf_parse_inter_slice)(struct _DecStruct * ps_dec,
                                   dec_slice_params_t * ps_slice,
                                   UWORD16 u2_first_mb_in_slice);

    UWORD32 (*pf_get_mb_info)(struct _DecStruct * ps_dec,
                              const UWORD16 u2_cur_mb_address,
                              dec_mb_info_t * ps_cur_mb_info,
                              UWORD32 u4_mbskip_run);

    /* Variables for Decode Buffer Management */
    dpb_manager_t *ps_dpb_mgr;
    dpb_commands_t *ps_dpb_cmds;
    dpb_commands_t s_dpb_cmds_scratch;

    /* Variables Required for N MB design */
    dec_mb_info_t *ps_nmb_info;

    UWORD8 *pu1_y_intra_pred_line;
    UWORD8 *pu1_u_intra_pred_line;
    UWORD8 *pu1_v_intra_pred_line;

    UWORD8 *pu1_cur_y_intra_pred_line;
    UWORD8 *pu1_cur_u_intra_pred_line;
    UWORD8 *pu1_cur_v_intra_pred_line;

    UWORD8 *pu1_cur_y_intra_pred_line_base;
    UWORD8 *pu1_cur_u_intra_pred_line_base;
    UWORD8 *pu1_cur_v_intra_pred_line_base;

    UWORD8 *pu1_prev_y_intra_pred_line;
    UWORD8 *pu1_prev_u_intra_pred_line;
    UWORD8 *pu1_prev_v_intra_pred_line;

    UWORD32 u4_intra_pred_line_ofst;

    UWORD8 u1_res_changed;

    mv_pred_t *ps_mv_cur; /** pointer to current motion vector bank */
    mv_pred_t *ps_mv_top; /** pointer to top motion vector bank */
    mv_pred_t *ps_mv_top_right2;/** Pointer to top right motion vector bank */
    mv_pred_t *ps_mv_p[2]; /** Scratch ping motion vector bank */
    mv_pred_t *ps_mv_top_p[MV_SCRATCH_BUFS]; /** Scratch top pong motion vector bank */
    UWORD8 u1_mv_top_p;

    deblk_mb_t *ps_deblk_mbn;

    UWORD8 *pu1_temp_mc_buffer;

    struct _sei *ps_sei;
    UWORD8 u1_pic_struct_copy;
    /* Variables required for cropping */
    UWORD16 u2_disp_width;
    UWORD16 u2_disp_height;
    UWORD16 u2_crop_offset_y;
    UWORD16 u2_crop_offset_uv;

    /* Variable required to get presentation time stamp through application */
    UWORD32 u4_pts;

    /* Variables used for gaps in frame number */
    UWORD16 u2_prev_ref_frame_num;

    UWORD8 u1_mb_idx;
    struct pic_buffer_t *ps_col_pic;
    void (*pf_parse_mvdirect)(struct _DecStruct*,
                           struct pic_buffer_t*,
                           directmv_t*,
                           UWORD8,
                           WORD32,
                           dec_mb_info_t *);
    void *pv_dec_out;
    void *pv_dec_in;
    void *pv_scratch_sps_pps; /*used temeporarily store sps/ spps while parsing*/

    /* state pointers to mb and partition information */
    parse_pmbarams_t *ps_parse_mb_data;
    parse_part_params_t *ps_parse_part_params;

    /* scratch pointers to mb and partition information */
    parse_part_params_t *ps_part;

    UWORD8 u1_max_dec_frame_buffering;
    pad_mgr_t s_pad_mgr;
    UWORD8 (*pf_mvpred)(struct _DecStruct *ps_dec,
                        struct _DecMbInfo *ps_cur_mb_info,
                        mv_pred_t *ps_mv_pred,
                        mv_pred_t *ps_mv_nmb,
                        mv_pred_t *ps_mv_ntop,
                        UWORD8 u1_sub_mb_num,
                        UWORD8 uc_mb_part_width,
                        UWORD8 uc_lxstart,
                        UWORD8 uc_lxend,
                        UWORD8 u1_mb_mc_mode);
    void (*pf_compute_bs)(struct _DecStruct * ps_dec,
                         struct _DecMbInfo * ps_cur_mb_info,
                         const UWORD16 u2_mbxn_mb);
    UWORD8 u1_init_dec_flag;
    prev_seq_params_t s_prev_seq_params;
    UWORD8 u1_cur_mb_fld_dec_flag; /* current Mb fld or Frm */

    UWORD8 u1_topleft_mb_fld;
    UWORD8 u1_topleft_mbtype;
    UWORD8 u1_topleft_mb_fld_bot;
    UWORD8 u1_topleft_mbtype_bot;
    WORD16 i2_prev_slice_mbx;
    WORD16 i2_prev_slice_mby;
    UWORD16 u2_top_left_mask;
    UWORD16 u2_top_right_mask;
    dec_err_status_t * ps_dec_err_status;
    /* Ensure pi1_left_pred_mode is aligned to 4 byte boundary,
    by declaring this after a pointer or an integer */
    WORD8 pi1_left_pred_mode[8];

    UWORD8 u1_mb_idx_mv;
    UWORD16 u2_mv_2mb[2];
    UWORD32 u4_skip_frm_mask;

    /* variable for finding the no.of mbs decoded in the current picture */
    UWORD16 u2_total_mbs_coded;
    /* member added for supporting fragmented annex - B */
//  frg_annex_read_t s_frag_annex_read;
    /* added for vui_t, sei support*/
    WORD32 i4_vui_frame_rate;
    /* To Store the value of ref_idx_active for previous slice */
    /* useful in error handling                                */
    UWORD8 u1_num_ref_idx_lx_active_prev;
    /* Flag added to come out of process call in annex-b if&if frame is decoded */
    /* presence of access unit delimters and pps and sps                        */
    UWORD8 u1_frame_decoded_flag;

    /* To keep track of whether the last picture was decoded or not */
    /* in case of skip mode set by the application                  */
    UWORD8 u1_last_pic_not_decoded;

    WORD32 e_dec_status;
    UWORD32 u4_num_fld_in_frm;

    /* Function pointer for 4x4 residual cavlc parsing based on total coeff */
    WORD32 (*pf_cavlc_4x4res_block[3])(UWORD32 u4_isdc,
                                    UWORD32 u4_total_coeff_trail_one, /**TotalCoefficients<<16+trailingones*/
                                    dec_bit_stream_t *ps_bitstrm);

    /* Function pointer array for interpolate functions in called from motion compensattion module */
    void (*p_mc_interpolate_x_y[16][3])(UWORD8*,
                                        UWORD8*,
                                        UWORD8*,
                                        UWORD8,
                                        UWORD16,
                                        UWORD16,
                                        UWORD8);

    /**************************************************************************/
    /* Function pointer for 4x4 totalcoeff, trlone and residual cavlc parsing */
    /* based on u4_n (neigbourinng nnz average)                               */
    /* These point to two functions depending on (u4_n > 7) and (u4_n <= 7)   */
    /**************************************************************************/
    WORD32 (*pf_cavlc_parse4x4coeff[2])(WORD16 *pi2_coeff_block,
                                        UWORD32 u4_isdc, /* is it a DC block */
                                        WORD32 u4_n,
                                        struct _DecStruct *ps_dec, /** Decoder Parameters */
                                        UWORD32 *pu4_total_coeff);

    /**************************************************************************/
    /* Function pointer for luma 8x8block cavlc parsing based on top and left */
    /* neigbour availability.                                                 */
    /**************************************************************************/
    WORD32 (*pf_cavlc_parse_8x8block[4])(WORD16 *pi2_coeff_block,
                                         UWORD32 u4_sub_block_strd,
                                         UWORD32 u4_isdc,
                                         struct _DecStruct *ps_dec,
                                         UWORD8 *pu1_top_nnz,
                                         UWORD8 *pu1_left_nnz,
                                         UWORD8 u1_tran_form8x8,
                                         UWORD8 u1_mb_field_decodingflag,
                                         UWORD32 *pu4_csbp);

    /**************************************************************************/
    /* Ping pong top and current rows of mb neigbour_params                   */
    /**************************************************************************/
    mb_neigbour_params_t *ps_nbr_mb_row;
    mb_neigbour_params_t *ps_cur_mb_row;
    mb_neigbour_params_t *ps_top_mb_row;

    /**************************************************************************/
    /* Function pointer for 16x16 and non16x16 Bs1 calculations depending on   */
    /* P and B slice.                                                          */
    /***************************************************************************/
    void (*pf_fill_bs1[2][2])(mv_pred_t *ps_cur_mv_pred,
                              mv_pred_t *ps_top_mv_pred,
                              void **ppv_map_ref_idx_to_poc,
                              UWORD32 *pu4_bs_table, /* pointer to the BsTable array */
                              mv_pred_t *ps_leftmost_mv_pred,
                              neighbouradd_t *ps_left_addr,
                              void **u4_pic_addrress,
                              WORD32 i4_ver_mvlimit);

    void (*pf_fill_bs_xtra_left_edge[2])(UWORD32 *pu4_bs, /* Base pointer of BS table */
                                         WORD32 u4_left_mb_t_csbp, /* left mbpair's top csbp   */
                                         WORD32 u4_left_mb_b_csbp, /* left mbpair's bottom csbp*/
                                         WORD32 u4_cur_mb_csbp, /* csbp of current mb */
                                         UWORD32 u4_cur_mb_bot /* is top or bottom mb */

                                         );
    /* Function pointer array for BP and MP functions for MC*/
    void (*p_motion_compensate)(struct _DecStruct * ps_dec,
                               dec_mb_info_t *ps_cur_mb_info);


    void (*p_mc_dec_thread)(struct _DecStruct * ps_dec, dec_mb_info_t *ps_cur_mb_info);

    /* Function pointer array for BP and MP functions for formMbPartInfo*/

    WORD32 (*p_form_mb_part_info)(pred_info_pkd_t *ps_pred_pkd,
                                struct _DecStruct * ps_dec,
                                     UWORD16 u2_mb_x,
                                     UWORD16 u2_mb_y,
                                     WORD32 mb_index,
                                     dec_mb_info_t *ps_cur_mb_info);

    WORD32 (*p_form_mb_part_info_thread)(pred_info_pkd_t *ps_pred_pkd,
                                struct _DecStruct * ps_dec,
                                     UWORD16 u2_mb_x,
                                     UWORD16 u2_mb_y,
                                     WORD32 mb_index,
                                     dec_mb_info_t *ps_cur_mb_info);


    /* Required for cabac mbaff bottom mb */
    UWORD32 u4_next_mb_skip;

    void (*p_DeblockPicture[2])(struct _DecStruct *);

    /* ! */
    UWORD32 u4_ts;
    UWORD8 u1_flushfrm;

    /* Output format sent by the application */
    UWORD8 u1_chroma_format;
    UWORD8 u1_pic_decode_done;
    UWORD8 u1_slice_header_done;
    WORD32 init_done;

    /******************************************/
    /* For the high profile related variables */
    /******************************************/
    high_profile_tools_t s_high_profile;
    /* CBCR */
    UWORD8 u1_qp_v_div6;
    UWORD8 u1_qp_v_rem6;
    /*
     * TO help solve the dangling field case.
     * Check for the previous frame number and the current frame number.
     */
    UWORD16 u2_prv_frame_num;
    UWORD8 u1_top_bottom_decoded;
    UWORD8 u1_dangling_field;

    IVD_DISPLAY_FRAME_OUT_MODE_T                e_frm_out_mode;

    UWORD8 *pu1_bits_buf_static;
    UWORD8 *pu1_bits_buf_dynamic;

    UWORD32 u4_static_bits_buf_size;
    UWORD32 u4_dynamic_bits_buf_size;

    UWORD32 u4_num_disp_bufs_requested;
    WORD32 i4_display_delay;
    UWORD32 u4_slice_start_code_found;

    UWORD32 u4_nmb_deblk;
    UWORD32 u4_use_intrapred_line_copy;
    UWORD32 u4_num_mbs_prev_nmb;
    UWORD32 u4_num_mbs_cur_nmb;
    UWORD32 u4_app_deblk_disable_level;
    UWORD32 u4_app_disable_deblk_frm;
    WORD32 i4_app_skip_mode;
    WORD32 i4_mv_frac_mask;

    disp_buf_t disp_bufs[MAX_DISP_BUFS_NEW];
    UWORD32 u4_disp_buf_mapping[MAX_DISP_BUFS_NEW];
    UWORD32 u4_disp_buf_to_be_freed[MAX_DISP_BUFS_NEW];
    UWORD32 u4_share_disp_buf;
    UWORD32 u4_num_disp_bufs;
    UWORD32 u4_prev_nal_skipped;
    UWORD32 u4_return_to_app;
    WORD32 i4_dec_skip_mode;

    UWORD32 u4_bs_deblk_thread_created;
    volatile UWORD32 u4_start_recon_deblk;
    void *pv_bs_deblk_thread_handle;

    UWORD32 u4_cur_bs_mb_num;
    UWORD32 u4_bs_cur_slice_num_mbs;
    UWORD32 u4_cur_deblk_mb_num;
    UWORD32 u4_sps_cnt_in_process;
    volatile UWORD16 u2_cur_slice_num_bs;

    UWORD32 u4_deblk_mb_x;
    UWORD32 u4_deblk_mb_y;



    iv_yuv_buf_t s_disp_frame_info;
    UWORD32 u4_fmt_conv_num_rows;
    UWORD32 u4_fmt_conv_cur_row;
    ivd_out_bufdesc_t *ps_out_buffer;
    ivd_get_display_frame_op_t s_disp_op;
    UWORD32 u4_output_present;

    volatile UWORD16 cur_dec_mb_num;
    volatile UWORD16 cur_recon_mb_num;
    volatile UWORD16 u2_cur_mb_addr;
    WORD16 i2_dec_thread_mb_y;
    WORD16 i2_recon_thread_mb_y;

    UWORD8 u1_separate_parse;
    UWORD32 u4_dec_thread_created;
    void *pv_dec_thread_handle;
    volatile UWORD8 *pu1_dec_mb_map;
    volatile UWORD8 *pu1_recon_mb_map;
    volatile UWORD16 *pu2_slice_num_map;
    dec_slice_struct_t *ps_dec_slice_buf;
    void *pv_map_ref_idx_to_poc_buf;
    dec_mb_info_t *ps_frm_mb_info;
    volatile dec_slice_struct_t * volatile ps_parse_cur_slice;
    volatile dec_slice_struct_t * volatile ps_decode_cur_slice;
    volatile dec_slice_struct_t * volatile ps_computebs_cur_slice;
    UWORD32 u4_cur_slice_decode_done;
    UWORD32 u4_extra_mem_used;

    /* 2 first slice not parsed , 1 :first slice parsed , 0 :first valid slice header parsed*/
    UWORD32 u4_first_slice_in_pic;
    UWORD32 u4_num_cores;
    IVD_ARCH_T e_processor_arch;
    IVD_SOC_T e_processor_soc;

    /**
     * Pictures that are are degraded
     * 0 : No degrade
     * 1 : Only on non-reference frames
     * 2 : Use interval specified by u4_nondegrade_interval
     * 3 : All non-key frames
     * 4 : All frames
     */
    WORD32 i4_degrade_pics;

    /**
     * Interval for pictures which are completely decoded without any degradation
     */
    WORD32 i4_nondegrade_interval;

    /**
     * bit position (lsb is zero): Type of degradation
     * 1 : Disable deblocking
     * 2 : Faster inter prediction filters
     * 3 : Fastest inter prediction filters
     */
    WORD32 i4_degrade_type;

    /** Degrade pic count, Used to maintain the interval between non-degraded pics
     *
     */
    WORD32 i4_degrade_pic_cnt;

    UWORD32 u4_pic_buf_got;

    /**
     * Col flag and mv pred buffer manager
     */
    void *pv_mv_buf_mgr;

    /**
     * Picture buffer manager
     */
    void *pv_pic_buf_mgr;

    /**
     * Display buffer manager
     */
    void *pv_disp_buf_mgr;

    void *apv_buf_id_pic_buf_map[MAX_DISP_BUFS_NEW];

    UWORD8 au1_pic_buf_id_mv_buf_id_map[MAX_DISP_BUFS_NEW];

    UWORD8 au1_pic_buf_ref_flag[MAX_DISP_BUFS_NEW];

    struct pic_buffer_t *ps_pic_buf_base;

    UWORD8 *pu1_ref_buff_base;
    col_mv_buf_t *ps_col_mv_base;
    void *(*pf_aligned_alloc)(void *pv_mem_ctxt, WORD32 alignment, WORD32 size);
    void (*pf_aligned_free)(void *pv_mem_ctxt, void *pv_buf);
    void *pv_mem_ctxt;

    UWORD8 *pu1_pic_buf_base;
    UWORD8 *pu1_mv_bank_buf_base;
    UWORD8 *pu1_init_dpb_base;

    ih264_default_weighted_pred_ft *pf_default_weighted_pred_luma;

    ih264_default_weighted_pred_ft *pf_default_weighted_pred_chroma;

    ih264_weighted_pred_ft *pf_weighted_pred_luma;

    ih264_weighted_pred_ft *pf_weighted_pred_chroma;

    ih264_weighted_bi_pred_ft *pf_weighted_bi_pred_luma;

    ih264_weighted_bi_pred_ft *pf_weighted_bi_pred_chroma;

    ih264_pad *pf_pad_top;
    ih264_pad *pf_pad_bottom;
    ih264_pad *pf_pad_left_luma;
    ih264_pad *pf_pad_left_chroma;
    ih264_pad *pf_pad_right_luma;
    ih264_pad *pf_pad_right_chroma;

    ih264_inter_pred_chroma_ft *pf_inter_pred_chroma;

    ih264_inter_pred_luma_ft *apf_inter_pred_luma[16];

    ih264_intra_pred_luma_ft *apf_intra_pred_luma_16x16[4];

    ih264_intra_pred_luma_ft *apf_intra_pred_luma_8x8[9];

    ih264_intra_pred_luma_ft *apf_intra_pred_luma_4x4[9];

    ih264_intra_pred_ref_filtering_ft *pf_intra_pred_ref_filtering;

    ih264_intra_pred_chroma_ft *apf_intra_pred_chroma[4];

    ih264_iquant_itrans_recon_ft *pf_iquant_itrans_recon_luma_4x4;

    ih264_iquant_itrans_recon_ft *pf_iquant_itrans_recon_luma_4x4_dc;

    ih264_iquant_itrans_recon_ft *pf_iquant_itrans_recon_luma_8x8;

    ih264_iquant_itrans_recon_ft *pf_iquant_itrans_recon_luma_8x8_dc;

    ih264_iquant_itrans_recon_chroma_ft *pf_iquant_itrans_recon_chroma_4x4;

    ih264_iquant_itrans_recon_chroma_ft *pf_iquant_itrans_recon_chroma_4x4_dc;

    ih264_ihadamard_scaling_ft *pf_ihadamard_scaling_4x4;

    /**
     * deblock vertical luma edge with blocking strength 4
     */
    ih264_deblk_edge_bs4_ft *pf_deblk_luma_vert_bs4;

    /**
     * deblock vertical luma edge with blocking strength less than 4
     */
    ih264_deblk_edge_bslt4_ft *pf_deblk_luma_vert_bslt4;

    /**
     * deblock vertical luma edge with blocking strength 4 for mbaff
     */
    ih264_deblk_edge_bs4_ft *pf_deblk_luma_vert_bs4_mbaff;

    /**
     * deblock vertical luma edge with blocking strength less than 4 for mbaff
     */
    ih264_deblk_edge_bslt4_ft *pf_deblk_luma_vert_bslt4_mbaff;

    /**
     * deblock vertical chroma edge with blocking strength 4
     */
    ih264_deblk_chroma_edge_bs4_ft *pf_deblk_chroma_vert_bs4;

    /**
     * deblock vertical chroma edge with blocking strength less than 4
     */
    ih264_deblk_chroma_edge_bslt4_ft *pf_deblk_chroma_vert_bslt4;

    /**
     * deblock vertical chroma edge with blocking strength 4 for mbaff
     */
    ih264_deblk_chroma_edge_bs4_ft *pf_deblk_chroma_vert_bs4_mbaff;

    /**
     * deblock vertical chroma edge with blocking strength less than 4 for mbaff
     */
    ih264_deblk_chroma_edge_bslt4_ft *pf_deblk_chroma_vert_bslt4_mbaff;

    /**
     * deblock horizontal luma edge with blocking strength 4
     */
    ih264_deblk_edge_bs4_ft *pf_deblk_luma_horz_bs4;

    /**
     * deblock horizontal luma edge with blocking strength less than 4
     */
    ih264_deblk_edge_bslt4_ft *pf_deblk_luma_horz_bslt4;

    /**
     * deblock horizontal chroma edge with blocking strength 4
     */
    ih264_deblk_chroma_edge_bs4_ft *pf_deblk_chroma_horz_bs4;

    /**
     * deblock horizontal chroma edge with blocking strength less than 4
     */
    ih264_deblk_chroma_edge_bslt4_ft *pf_deblk_chroma_horz_bslt4;


} dec_struct_t;

#endif /* _H264_DEC_STRUCTS_H */
