/******************************************************************************
*
* Copyright (C) 2012 Ittiam Systems Pvt Ltd, Bangalore
*
* 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.
*
******************************************************************************/

/**
 *******************************************************************************
 * @file
 *  ihevcd_structs.h
 *
 * @brief
 *  Structure definitions used in the decoder
 *
 * @author
 *  Harish
 *
 * @par List of Functions:
 *
 * @remarks
 *  None
 *
 *******************************************************************************
 */

#ifndef _IHEVCD_STRUCTS_H_
#define _IHEVCD_STRUCTS_H_
typedef enum
{
    INIT_DONE, HEADER_DONE, FIRST_FRAME_DONE,
}CODEC_STATE_T;



typedef struct _codec_t codec_t;

/** Structure to hold format conversion context */
typedef struct
{
    /** Current row for which format conversion should be done */
    WORD32 i4_cur_row;

    /** Number of rows for which format conversion should be done */
    WORD32 i4_num_rows;
}fmt_conv_t;

/**
 * Bitstream structure
 */
typedef struct
{
    /**
     * Bitstream buffer base pointer
     */
    UWORD8 *pu1_buf_base;

    /**
     * Bitstream bit offset in current word. Value between 0 and 31
     */
    UWORD32 u4_bit_ofst;

    /**
     * Current bitstream buffer pointer
     */
    UWORD32 *pu4_buf;

    /**
     * Current word
     */
    UWORD32 u4_cur_word;

    /**
     * Next word
     */
    UWORD32 u4_nxt_word;

    /**
     * Max address for bitstream
     */
    UWORD8 *pu1_buf_max;
}bitstrm_t;

/**
******************************************************************************
 *  @brief      Cabac context for decoder
******************************************************************************
 */
typedef struct cab_ctxt
{
    /*********************************************************************/
    /*  CABAC ENGINE related fields                                      */
    /*********************************************************************/
    /** cabac interval range  R */
    UWORD32  u4_range;

    /** cabac interval offset O  */
    UWORD32  u4_ofst;

    /*********************************************************************/
    /*  CABAC context models                                             */
    /*********************************************************************/
    /** All Context models stored in pscked form pState[bits6-1] | MPS[bit0] */
    UWORD8  au1_ctxt_models[IHEVC_CAB_CTXT_END];

    /** Context models memorized after decoding 2nd CTB in a row to be used
     * during entropy sync cases
     */
    UWORD8 au1_ctxt_models_sync[IHEVC_CAB_CTXT_END];

}cab_ctxt_t;

typedef enum
{
    CMD_PROCESS,
    CMD_FMTCONV,
}JOBQ_CMD_T;

/**
 * Structure to represent a processing job entry
 */
typedef struct
{
    /**
     * Command
     * Currently: PROCESS, FMTCONV are the only two jobs
     */
    WORD32 i4_cmd;
    /**
     * CTB x of the starting CTB
     */
    WORD16 i2_ctb_x;

    /**
     * CTB y of the starting CTB
     */

    WORD16 i2_ctb_y;

    /**
     * Number of CTBs that need to be processed in this job
     */
    WORD16 i2_ctb_cnt;

    /**
     *  Slice index for the current CTB
     */
    WORD16 i2_slice_idx;

    /**
     * TU coefficient data offset for the current job
     */
    WORD32 i4_tu_coeff_data_ofst;
}proc_job_t;
/**
 * Structure to represent a MV Bank buffer
 */
typedef struct
{
    /**
     *  Pointer to hold PU index for each CTB in a picture
     */
    UWORD32 *pu4_pic_pu_idx;

    /**
     * Pointer to hold pu_t for each PU in a picture
     */
    pu_t *ps_pic_pu;

    /**
     * Pointer to hold PU map for each CTB in a picture
     */
    UWORD8 *pu1_pic_pu_map;

    /**
     * Pointer to hold the Slice map
     */
    UWORD16 *pu1_pic_slice_map;

    /**
     * Absolute POC for the current MV Bank
     */
    WORD32 i4_abs_poc;

    /**
     * Absolute POCs of reference List 0 for all slices in the frame from which this frame is reconstructed
     */
    WORD32 ai4_l0_collocated_poc[MAX_SLICE_SEGMENTS_IN_FRAME][MAX_DPB_SIZE];

    /**
     * Flag to indicate Long Term reference for POCs of reference List 0 for all slices in the frame from which this frame is reconstructed
     */
    WORD8 ai1_l0_collocated_poc_lt[MAX_SLICE_SEGMENTS_IN_FRAME][MAX_DPB_SIZE];

    /**
     * Absolute POCs of reference List 1 for all slices in the frame from which this frame is reconstructed
     */
    WORD32 ai4_l1_collocated_poc[MAX_SLICE_SEGMENTS_IN_FRAME][MAX_DPB_SIZE];
    /**
     * Flag to indicate Long Term reference for POCs of reference List 1 for all slices in the frame from which this frame is reconstructed
     */
    WORD8 ai1_l1_collocated_poc_lt[MAX_SLICE_SEGMENTS_IN_FRAME][MAX_DPB_SIZE];

}mv_buf_t;

typedef struct
{
    /**
     * Pointer to current PPS
     */
    pps_t *ps_pps;

    /**
     * Pointer to current SPS
     */
    sps_t *ps_sps;

    /**
     * Pointer to current slice header structure
     */
    slice_header_t *ps_slice_hdr;

    /**
     * CTB's x position within a picture in raster scan in CTB units
     */
    WORD32 i4_ctb_x;

    /**
     * CTB's y position within a picture in raster scan in CTB units
     */

    WORD32 i4_ctb_y;

    /**
     * Current PU structure - set to CTB pu_t pointer at the start of CTB processing and incremented
     * for every TU
     */
    pu_t *ps_pu;

    /**
     * Pointer to frame level pu_t for the current frame being parsed
     * where MVs and Intra pred modes will be updated
     */
    pu_t *ps_pic_pu;

    /**
     * Store the current tile's information. This is needed for the computation of mvs.
     */
    tile_t *ps_tile;

    /**
     * Points to an array of PU indices which is used to identify
     * start index of pu_t in ps_pic_pu and also to identify number of
     * PUs in the current CTB by subtracting current idx from next CTB's
     * PU idx
     */
    UWORD32 *pu4_pic_pu_idx;

    /** PU Index map per CTB. The indices in this map are w.r.t picture pu array and not
     * w.r.t CTB pu array.
     * This will be used during mv prediction and since neighbours will have different CTB pu map
     * it will be easier if they all have indices w.r.t picture level PU array rather than CTB level
     * PU array.
     * pu1_pic_pu_map is map w.r.t CTB's pu_t array
     */
    UWORD32 *pu4_pic_pu_idx_map;

    /**
      * Pointer to pu_map for the current frame being parsed
      * where MVs and Intra pred modes will be updated
      */
    UWORD8 *pu1_pic_pu_map;

    /**
     *  PU count in current CTB
     */
    WORD32 i4_ctb_pu_cnt;

    /**
     *  PU count in current CTB
     */
    WORD32 i4_ctb_start_pu_idx;

    /**
     *  Top availability for current CTB level
     */
    UWORD8 u1_top_ctb_avail;

    /**
     *  Top right availability for current CTB level
     */
    UWORD8 u1_top_rt_ctb_avail;
    /**
     *  Top left availability for current CTB level
     */
    UWORD8 u1_top_lt_ctb_avail;
    /**
     *  left availability for current CTB level
     */
    UWORD8 u1_left_ctb_avail;

}mv_ctxt_t;

typedef struct
{
    /**
     * Pointer to current PPS
     */
    pps_t *ps_pps;

    /**
     * Pointer to current SPS
     */
    sps_t *ps_sps;

    /*
     * Pointer to codec context
     */
    codec_t *ps_codec;

    /**
     * Index of the current Tile being parsed
     */
    tile_t *ps_tile;

    /**
     * Pointer to the current slice header
     */
    slice_header_t *ps_slice_hdr;

    /**
     *  TU count in current CTB
     */
    WORD32 i4_ctb_tu_cnt;

    /**
     * CTB's x position within a picture in raster scan in CTB units
     */
    WORD32 i4_ctb_x;

    /**
     * CTB's y position within a picture in raster scan in CTB units
     */

    WORD32 i4_ctb_y;

    /**
     * CTB's x position within a Tile in raster scan in CTB units
     */
    WORD32 i4_ctb_tile_x;

    /**
     * CTB's y position within a Tile in raster scan in CTB units
     */

    WORD32 i4_ctb_tile_y;

    /**
     * CTB's x position within a Slice in raster scan in CTB units
     */
    WORD32 i4_ctb_slice_x;

    /**
     * CTB's y position within a Slice in raster scan in CTB units
     */

    WORD32 i4_ctb_slice_y;

    /* Two bits per edge.
    Stored in format. BS[15] | BS[14] | .. |BS[0]*/
    UWORD32 *pu4_pic_vert_bs;

    /**
     * Horizontal Boundary strength
     */

    /* Two bits per edge.
    Stored in format. BS[15] | BS[14] | .. |BS[0]*/
    UWORD32 *pu4_pic_horz_bs;

    /**
     * Flags to indicate if QP is constant through out a CTB - 1 bit for each CTB
     * The bits are packed from LSB to MSB
     * To get the flag corresponding to CTB with (ctb_x, ctb_y), use
     *      pu4_qp_const_in_ctb[(ctb_x + pic_wd_in_ctb * ctb_y) >> 3] & (1 << ((ctb_x + pic_wd_in_ctb * ctb_y) & 7))
     */
    UWORD8 *pu1_pic_qp_const_in_ctb;

    /**
     *  Qp array stored for each 8x8 pixels
     */
    UWORD8  *pu1_pic_qp;

    /**
     * Current TU structure - set to CTB tu_t pointer at the start of CTB processing and incremented
     * for every TU
     */
    tu_t *ps_tu;

    /**
     * Points to an array of TU indices which is used to identify
     * start index of tu_t in ps_pic_tu and also to identify number of
     * TUs in the current CTB by subtracting current idx from next CTB's
     * TU idx
     */
    UWORD32 *pu4_pic_tu_idx;

    /**
     * Points to an array of PU indices which is used to identify
     * start index of pu_t in ps_pic_pu and also to identify number of
     * PUs in the current CTB by subtracting current idx from next CTB's
     * PU idx
     */
    UWORD32 *pu4_pic_pu_idx;

    /**
     * Current PU structure - set to CTB pu_t pointer at the start of CTB processing and incremented
     * for every TU
     */
    pu_t *ps_pu;

    /**
     * Pointer to frame level pu_t for the current frame being parsed
     * where MVs and Intra pred modes will be updated
     */
    pu_t *ps_pic_pu;

    /** PU Index map per CTB. The indices in this map are w.r.t picture pu array and not
     * w.r.t CTB pu array.
     * This will be used during mv prediction and since neighbours will have different CTB pu map
     * it will be easier if they all have indices w.r.t picture level PU array rather than CTB level
     * PU array.
     * pu1_pic_pu_map is map w.r.t CTB's pu_t array
     */
    UWORD32 *pu4_pic_pu_idx_map;

    /**
     * Variable to store the next ctb count to compute pu idx
     */
    WORD32 i4_next_pu_ctb_cnt;

    /**
     * Variable to store the next ctb count to compute tu idx
     */
    WORD32 i4_next_tu_ctb_cnt;
    /**
     * Points to the array of slice indices which is used to identify the slice
     *  to which each CTB in a frame belongs.
     */
    UWORD16 *pu1_slice_idx;
}bs_ctxt_t;

typedef struct
{
    /**
     * Pointer to current PPS
     */
    pps_t *ps_pps;

    /**
     * Pointer to current SPS
     */
    sps_t *ps_sps;

    /*
     * Pointer to codec context
     */
    codec_t *ps_codec;

    /**
     * Pointer to current slice header structure
     */
    slice_header_t *ps_slice_hdr;

    /**
     * Pointer to the structure that contains BS and QP frame level arrays
     */
    bs_ctxt_t s_bs_ctxt;

    /**
     * CTB's x position within a picture in raster scan in CTB units
     */
    WORD32 i4_ctb_x;

    /**
     * CTB's y position within a picture in raster scan in CTB units
     */

    WORD32 i4_ctb_y;

    /**
     * Current pictures loop filter flag map at 8x8 level
     */
    UWORD8 *pu1_pic_no_loop_filter_flag;

    /**
     * Current CTB's no_loop_filter_flags
     * each element corresponds to one row - including the left CTB's last 8x8
     */
    UWORD16 au2_ctb_no_loop_filter_flag[9];

    /*
     * Pointer to 0th luma pixel in current pic
     */
    UWORD8 *pu1_cur_pic_luma;

    /*
     * Pointer to 0th chroma pixel in current pic
     */
    UWORD8 *pu1_cur_pic_chroma;

    /* Points to the array of slice indices which is used to identify the slice
    *  to which each CTB in a frame belongs.
    */
    UWORD16 *pu1_slice_idx;

    /* Specifies if the chroma format is yuv420sp_vu */
    WORD32 is_chroma_yuv420sp_vu;

}deblk_ctxt_t;

typedef struct
{
    /**
     * Pointer to current PPS
     */
    pps_t *ps_pps;

    /**
     * Pointer to current SPS
     */
    sps_t *ps_sps;

    /* Pointer to codec context
     *
     */
    codec_t *ps_codec;

    /**
     * Pointer to base slice header structure
     */
    slice_header_t *ps_slice_hdr_base;

    /**
     * Pointer to current slice header structure
     */
    slice_header_t *ps_slice_hdr;

    /**
     * Pointer to current tile structure
     */
    tile_t *ps_tile;
    /**
     * CTB's x position within a picture in raster scan in CTB units
     */
    WORD32 i4_ctb_x;

    /**
     * CTB's y position within a picture in raster scan in CTB units
     */

    WORD32 i4_ctb_y;

    /**
     * Current pictures loop filter flag map at 8x8 level
     */
    UWORD8 *pu1_pic_no_loop_filter_flag;

    /*
     * Pointer to 0th luma pixel in current pic
     */
    UWORD8 *pu1_cur_pic_luma;

    /*
     * Pointer to 0th chroma pixel in current pic
     */
    UWORD8 *pu1_cur_pic_chroma;

    /**
     * Pointer to frame level sao_t for the current frame being parsed
     */
    sao_t *ps_pic_sao;

    /**
     * Temporary buffer needed during SAO processing
     */
    UWORD8 *pu1_tmp_buf_luma;

    /**
     * Temporary buffer needed during SAO processing
     */
    UWORD8 *pu1_tmp_buf_chroma;

    /**
     * Left column of luma pixels - used by SAO
     */
    UWORD8 *pu1_sao_src_left_luma;

    /**
     * Top row of luma pixels - used by SAO
     */
    UWORD8 *pu1_sao_src_top_luma;

    /**
     * Left column of chroma pixels(interleaved) - used by SAO
     */
    UWORD8 *pu1_sao_src_left_chroma;

    /**
     * Top row of chroma pixels(interleaved) - used by SAO
     */
    UWORD8 *pu1_sao_src_top_chroma;

    /**
     * Top-left luma pixel - used by SAO (for the top CTB row)
     */
    UWORD8 *pu1_sao_src_luma_top_left_ctb;

    /**
     * Top-left chroma pixel(interleaved) - used by SAO (for the top CTB row)
     */
    UWORD8 *pu1_sao_src_chroma_top_left_ctb;

    /**
     * Top-left luma pixel - used by SAO (for the current  CTB row)
     */
    UWORD8 *pu1_sao_src_top_left_luma_curr_ctb;

    /**
     * Top-left chroma pixel(interleaved) - used by SAO (for the current CTB row)
     */
    UWORD8 *pu1_sao_src_top_left_chroma_curr_ctb;

    /**
     * Top-right luma pixel - used by SAO (for the top CTB row)
     */
    UWORD8 *pu1_sao_src_top_left_luma_top_right;

    /**
     * Top-right chroma pixel(interleaved) - used by SAO (for the top CTB row)
     */
    UWORD8 *pu1_sao_src_top_left_chroma_top_right;

    /**
     * Bottom-left luma pixel - used by SAO
     */
    UWORD8 u1_sao_src_top_left_luma_bot_left;
    /**
     *  Pointer to array that stores bottom left luma pixel per row(interleaved) - used by SAO
     */
    UWORD8 *pu1_sao_src_top_left_luma_bot_left;

    /**
     * Bottom left chroma pixel(interleaved) - used by SAO
     */
    UWORD8 au1_sao_src_top_left_chroma_bot_left[2];
    /**
     *  Pointer to array that stores bottom left chroma pixel per row(interleaved) - used by SAO
     */
    UWORD8 *pu1_sao_src_top_left_chroma_bot_left;

    /*
     * Slice counter in a picture.
     */
    UWORD32 i4_cur_slice_idx;
    /**
     * Points to the array of slice indices which is used to identify the slice
     *  to which each CTB in a frame belongs.
     */
    UWORD16 *pu1_slice_idx;
    /**
     * Points to the array of tile indices which is used to identify the slice
     *  to which each CTB in a frame belongs.
     */
    UWORD16 *pu1_tile_idx;

    /* Specifies if the chroma format is yuv420sp_vu */
    WORD32 is_chroma_yuv420sp_vu;

}sao_ctxt_t;

typedef struct
{
    /** Log2 CU's size */
    WORD32 i4_log2_cb_size;

    /** CU's x position */
    WORD32 i4_pos_x;

    /** CU's y position */
    WORD32 i4_pos_y;
    /**
     * Transquant Bypass enable flag at CU level - To be replicated at TU level
     */
    WORD32 i4_cu_transquant_bypass;
    /**
     * Prediction mode
     */
    WORD32 i4_pred_mode;

    /**
     * Partition mode
     */
    WORD32 i4_part_mode;

    /**
     * Intra luma pred mode for current CU. In case of PART2Nx2N
     * the first value is replicated to avoid checks later
     */
    WORD32 ai4_intra_luma_pred_mode[4];

    /**
     * Previous intra luma pred flag used for intra pred mode computation
     */
    WORD32 ai4_prev_intra_luma_pred_flag[4];

    /**
     * mpm index used in intra prediction mode computation
     */
    WORD32 ai4_mpm_idx[4];
    /**
     * Remaining intra pred mode
     */
    WORD32 ai4_rem_intra_luma_pred_mode[4];
    /**
     * Chroma pred mode index to be used to compute intra pred mode for chroma
     */
    WORD32 i4_intra_chroma_pred_mode_idx;
    /**
     * Maximum transform depth
     */
    WORD32 i4_max_trafo_depth;

    /**
     *  Luma CBF for current TU
     */
    UWORD8 i1_cbf_luma;

    /**
     * Cb CBF
     */
    UWORD8 ai1_cbf_cb[MAX_TRAFO_DEPTH];

    /**
     * Cr CBF
     */
    UWORD8 ai1_cbf_cr[MAX_TRAFO_DEPTH];

    /**
     * Intra split flag
     */
    WORD32 i4_intra_split_flag;

    /**
     * Current QP
     */
    WORD32 i4_qp;

    /**
     * Number of TUs in CU parsed before a change in QP is signaled
     */
    WORD32 i4_tu_cnt;

    /**
     * Cu QP delta
     */
    WORD32 i4_cu_qp_delta;

}parse_cu_t;
/**
 * Structure contains few common state variables such as CTB positions, current SPS, PPS ids etc which are to be
 * used in the parsing thread. By keeping it a different structure it is being explicitly signalled that these
 * variables are specific to Parsing threads context and other threads should not update these elements
 */
typedef struct
{
    /**
     * CTB's x position within a picture in raster scan in CTB units
     */
    WORD32 i4_ctb_x;

    /**
     * CTB's y position within a picture in raster scan in CTB units
     */

    WORD32 i4_ctb_y;

    /**
     * CTB's x position within a Tile in raster scan in CTB units
     */
    WORD32 i4_ctb_tile_x;

    /**
     * CTB's y position within a Tile in raster scan in CTB units
     */

    WORD32 i4_ctb_tile_y;

    /**
     * CTB's x position within a Slice in raster scan in CTB units
     */
    WORD32 i4_ctb_slice_x;

    /**
     * CTB's y position within a Slice in raster scan in CTB units
     */

    WORD32 i4_ctb_slice_y;

    /**
     * Index of the current Tile being parsed
     */
    tile_t *ps_tile;

    /**
     * Current slice idx - Used in multi-core cases to ensure slice header is
     * preserved till the last CB of the slice is decoded
     */
    WORD32 i4_cur_slice_idx;
    /**
     * Current slice idx - Used in multi-core cases to ensure slice header is
     * preserved till the last CB of the slice is decoded
     */
    WORD32 i4_cur_independent_slice_idx;

    /**
     * Current slice idx - Used in multi-core cases to ensure slice header is
     * preserved till the last CB of the slice is decoded
     */
    WORD32 i4_cur_tile_idx;

    /**
     * Pointer to current PPS
     */
    pps_t *ps_pps;

    /**
     * Pointer to current SPS
     */
    sps_t *ps_sps;

    /**
     * Signal that pic_init is called first time
     */
    WORD32 i4_first_pic_init;

    /**
     * Flag to indicate if CU QP delta is coded.
     * By default it is set to 0 at the beginning of coding quad tree
     */
    WORD32 i4_is_cu_qp_delta_coded;

    /**
     * CU Qp delta
     * By default it is set to 0 at the beginning of coding quad tree
     */
    WORD32 i4_cu_qp_delta;

    /**
     * Bitstream structure
     */
    bitstrm_t s_bitstrm;

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

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

    /**
     * Current TU structure - set to CTB tu_t pointer at the start of CTB parsing and incremented
     * for every TU
     */
    tu_t *ps_tu;

    /**
     * Current ctb's TU map
     */
    UWORD8 *pu1_tu_map;

    /**
     * Current PU structure - set to CTB pu_t pointer at the start of CTB parsing and incremented
     * for every TU
     */
    pu_t *ps_pu;

    /**
     * Points to the array of slice indices which is used to identify the independent slice
     *  to which each CTB in a frame belongs.
     */
    UWORD16 *pu1_slice_idx;

    /**
     * Current PU index in a frame
     */
    WORD32 i4_pic_pu_idx;

    /**
     * Current TU index in a frame
     */
    WORD32 i4_pic_tu_idx;

    /**
     * Current PU structure - set to CTB pu_map pointer at the start of CTB parsing
     */
    UWORD8 *pu1_pu_map;

    /**
     * Current QP
     */
    WORD32 u4_qp;

    /**
     * Current Group's QP
     */
    WORD32 u4_qpg;

    /**
     * Number of PCM blocks in current CTB - Needed only during parsing
     * If needed during recon then move it to ctb_t
     */
    WORD32 i4_ctb_num_pcm_blks;

    /**
     * PCM flag for the current CU
     */
    WORD32 i4_cu_pcm_flag;

    /**
     * CU related information to be used to populate tu_t and pu_t during
     * pred unit and transform tree parsing.
     */
    parse_cu_t s_cu;

    /**
     * Pointer to pu_map for the current frame being parsed
     */
    UWORD8 *pu1_pic_pu_map;

    /**
     * Pointer to frame level pu_t for the current frame being parsed
     * where MVs and Intra pred modes will be updated
     */
    pu_t *ps_pic_pu;

    /**
     * Pointer to tu_map for the current frame being parsed
     */
    UWORD8 *pu1_pic_tu_map;

    /**
     * Pointer to frame level tu_t for the current frame being parsed
     * where transform unit related info will be updated
     */
    tu_t *ps_pic_tu;

    /**
     * Points to an array of TU indices which is used to identify
     * start index of tu_t in ps_pic_tu and also to identify number of
     * TUs in the current CTB by subtracting current idx from next CTB's
     * TU idx
     */
    UWORD32 *pu4_pic_tu_idx;

    /**
     * Points to an array of PU indices which is used to identify
     * start index of pu_t in ps_pic_pu and also to identify number of
     * PUs in the current CTB by subtracting current idx from next CTB's
     * PU idx
     */
    UWORD32 *pu4_pic_pu_idx;


    /**
     * Current pictures intra mode map at 8x8 level
     */
    UWORD8 *pu1_pic_intra_flag;

    /**
     * Current pictures loop filter flag map at 8x8 level
     */
    UWORD8 *pu1_pic_no_loop_filter_flag;

    /**
     * Array to hold one row (top) of skip_flag flag stored at (8x8) level
     * 1 bit per (8x8)
     * read and written as a UWORD32
     * LSB gives skip_flag for 0th 8x8 and MSB gives skip_flag for 31st 8x8 and so on
     * This is independent of CTB size or minCU size
     * Packed format requires extra calculations in extracting required bits but makes it easier
     * to store skip data for larger sizes such as 32 x 32 where 4 bits need to be set instead of
     * 4 bytes or for 64 x 64 where 8 bits need to be set instead of 8 bytes.
     */
    UWORD32 *pu4_skip_cu_top;

    /**
     * Array to hold one 64 pixel column (left) of skip_flag flag stored at (8x8) level
     * 1 bit per (8x8)
     * read and written as a UWORD32
     * LSB gives skip_flag for 0th 8x8 and MSB gives skip for 31st 8x8 and so on
     * This is independent of CTB size and allocated to store data for 64 pixels, of
     * this only first ctb_size number of bits (starting from MSB) will have valid data
     * This is also independent of min CU size and data is stored at 8x8 level.
     * Since only 8 bits are needed to represent left 64 pixels at 8x8 level, this is not an array
     */
    UWORD32 u4_skip_cu_left;

    /**
     * Array to hold one row (top) of coding_tree_depth stored at (8x8) level
     * 2 bits per (8x8) pixels
     * read and written as a WORD32
     * 2 LSBits give coding_tree_depth for 0th 8x8 and 2 MSBits give coding_tree_depth for 15th 8x8 and so on
     * This is independent of CTB size or minCU size
     */
    UWORD32 *pu4_ct_depth_top;

    /**
     * Array to hold one 64 pixel column (left) of coding_tree_depth stored at (8x8) level
     * 2 bits per (8x8) pixels
     * read and written as a WORD32
     * 2 LSBits give coding_tree_depth for 0th 8x8 and 2 MSBits give coding_tree_depth for 15th 8x8 and so on
     * This is independent of CTB size and allocated to store data for 64 pixels, of
     * this only first ctb_size * 2 number of bits (starting from MSB) will have valid data
     * This is also independent of min CU size and data is stored at 8x8 level.
     * Since only 16 bits are needed to represent left 64 pixels at 8x8 level, this is not an array
     */
    UWORD32 u4_ct_depth_left;

    /**
     * Array to hold top (one row) luma_intra_pred_mode stored at (4x4) level for a CTB
     * 8 bits per (4x4) pixels
     * read and written as a UWORD8
     * This is independent of CTB size or minCU size
     * This is independent of CTB size and allocated to store data for 64 pixels i.e. 64 bits is the size
     * Note this data is used only within a CTB, There is no inter CTB dependencies for this
     */
    UWORD8 *pu1_luma_intra_pred_mode_top;

    /**
     * Array to hold  left (one column) luma_intra_pred_mode stored at (4x4) level for a CTB
     * 8 bits per (4x4) pixels
     * read and written as a UWORD8
     * This is independent of CTB size and allocated to store data for 64 pixels i.e. 64 bits is the size
     * This is also independent of min CU size and data is stored at 8x8 level.
     * This is used for prediction of next CTB within a row in a slice or tile
     */
    UWORD8 *pu1_luma_intra_pred_mode_left;


    /**
     * Pointer to base of Video parameter set structure array
     */
    vps_t *ps_vps_base;

    /**
     * Pointer to base of Sequence parameter set structure array
     */
    sps_t *ps_sps_base;

    /**
     * Pointer to base of Picture parameter set structure array
     */
    pps_t *ps_pps_base;

    /**
     * Pointer to base of slice header structure array
     */
    slice_header_t *ps_slice_hdr_base;

    /**
     * Pointer to current slice header structure
     */
    slice_header_t *ps_slice_hdr;


    /**
     * Error code during parse stage
     */
    WORD32 i4_error_code;

    /**
     * Void pointer to process job context
     */
    void *pv_proc_jobq;

    /* Cabac context */
    cab_ctxt_t s_cabac;

    /* Current Coding tree depth */
    WORD32 i4_ct_depth;

    /** Flag to signal end of frame */
    WORD32 i4_end_of_frame;

    /**
     * Index of the next CTB parsed
     */
    WORD32 i4_next_ctb_indx;

    /**
     * Pointer to the structure that contains BS and QP frame level arrays
     */
    bs_ctxt_t s_bs_ctxt;

    /**
     * Pointer to the structure that contains deblock context
     */
    deblk_ctxt_t s_deblk_ctxt;

    /**
     * Pointer to the structure that contains sao context
     */
    sao_ctxt_t s_sao_ctxt;

    /**
     * QP Array for the current CTB
     * Used in QP prediction
     */
    WORD8 ai1_8x8_cu_qp[MAX_CU_IN_CTB];


    /**
     * Pointer to frame level sao_t for the current frame being parsed
     */
    sao_t *ps_pic_sao;

    /**
     * Abs POC count of the frame
     */
    WORD32 i4_abs_pic_order_cnt;

    /**
     * Pointer points to mv_buffer of current frame
     */
    mv_buf_t *ps_cur_mv_buf;

    /**
     * Variable to store the next ctb count to compute pu idx
     */
    WORD32 i4_next_pu_ctb_cnt;

    /**
     * Variable to store the next ctb count to compute tu idx
     */
    WORD32 i4_next_tu_ctb_cnt;


}parse_ctxt_t;

/**
 * Pixel processing thread context
 */

typedef struct
{
    /* Pointer to codec context
     *
     */
    codec_t *ps_codec;

    /**
     * CTB's x position within a picture in raster scan in CTB units
     */
    WORD32 i4_ctb_x;

    /**
     * CTB's y position within a picture in raster scan in CTB units
     */

    WORD32 i4_ctb_y;

    /**
     * CTB's x position within a Tile in raster scan in CTB units
     */
    WORD32 i4_ctb_tile_x;

    /**
     * CTB's y position within a Tile in raster scan in CTB units
     */

    WORD32 i4_ctb_tile_y;

    /**
     * CTB's x position within a Slice in raster scan in CTB units
     */
    WORD32 i4_ctb_slice_x;

    /**
     * CTB's y position within a Slice in raster scan in CTB units
     */

    WORD32 i4_ctb_slice_y;

    /**
     * Current tile being processed
     */
    tile_t *ps_tile;

    /**
     * Current slice idx - Used in multi-core cases to store slice index for
     * each ctb for sao filtering.
     */
    WORD32 i4_cur_slice_idx;

    /**
     * Current tile idx - Used in multi-core cases to store tile index for
     * each ctb for sao filtering.
     */
    WORD32 i4_cur_tile_idx;
    /**
     * Pointer to current PPS
     */
    pps_t *ps_pps;

    /**
     * Pointer to current SPS
     */
    sps_t *ps_sps;

    /**
     * Pointer to current slice header structure
     */
    slice_header_t *ps_slice_hdr;

    /**
     * Error code during parse stage
     */
    WORD32 i4_error_code;

    /**
     * Signal that pic_init is called first time
     */
    WORD32 i4_first_pic_init;

    /**
     * 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_tu_coeff_data;

    /**
     * Current TU structure - set to CTB tu_t pointer at the start of CTB processing and incremented
     * for every TU
     */
    tu_t *ps_tu;

    /**
     * Current ctb's TU map
     */
    UWORD8 *pu1_tu_map;

    /**
     * Current PU structure - set to CTB pu_t pointer at the start of CTB processing and incremented
     * for every TU
     */
    pu_t *ps_pu;

    /**
     * Points to an array of TU indices which is used to identify
     * start index of tu_t in ps_pic_tu and also to identify number of
     * TUs in the current CTB by subtracting current idx from next CTB's
     * TU idx
     */
    UWORD32 *pu4_pic_tu_idx;

    /**
     * Points to an array of PU indices which is used to identify
     * start index of pu_t in ps_pic_pu and also to identify number of
     * PUs in the current CTB by subtracting current idx from next CTB's
     * PU idx
     */
    UWORD32 *pu4_pic_pu_idx;

    /**
     * Pointer to tu_map for the current frame being parsed
     */
    UWORD8 *pu1_pic_tu_map;

    /**
      * Pointer to pu_map for the current frame being parsed
      * where MVs and Intra pred modes will be updated
      */
    UWORD8 *pu1_pic_pu_map;

    /**
     * Pointer to frame level pu_t for the current frame being parsed
     * where MVs and Intra pred modes will be updated
     */
    pu_t *ps_pic_pu;

    /** PU Index map per CTB. The indices in this map are w.r.t picture pu array and not
     * w.r.t CTB pu array.
     * This will be used during mv prediction and since neighbours will have different CTB pu map
     * it will be easier if they all have indices w.r.t picture level PU array rather than CTB level
     * PU array.
     * pu1_pic_pu_map is map w.r.t CTB's pu_t array
     */
    UWORD32 *pu4_pic_pu_idx_map;

    /**
     * PU Index of top 4x4 neighbors stored for an entire row
     */
    UWORD32 *pu4_pic_pu_idx_top;

    /**
     * PU Index of left 4x4 neighbors stored for 64 pixels
     */
    UWORD32 *pu4_pic_pu_idx_left;

    /**
     * Holds top left PU index at CTB level - top left gets overwritten
     * by left CTB while updating top array. Before updating top at CTB
     * level required top-left index is backed up in the following
     */
    UWORD32 u4_ctb_top_left_pu_idx;

    /**
     * Pointer to frame level tu_t for the current frame being parsed
     * where transform unit related info will be updated
     */
    tu_t *ps_pic_tu;


    /**
    * Current PU structure - set to CTB pu_map pointer at the start of CTB parsing
    */
    UWORD8 *pu1_pu_map;

    /** Current MV Bank's buffer ID */
    WORD32 i4_cur_mv_bank_buf_id;

    /**
     * Current pictures intra mode map at 8x8 level
     */
    UWORD8 *pu1_pic_intra_flag;

    /**
     * Current pictures loop filter flag map at 8x8 level
     */
    UWORD8 *pu1_pic_no_loop_filter_flag;

    /**
     * Void pointer to process job context
     */

    void *pv_proc_jobq;

    /**
     * Number of CTBs to be processed in the current Job
     */
    WORD32 i4_ctb_cnt;
    /**
     * ID for the current context - Used for debugging
     */
    WORD32 i4_id;

    /**
     * Flag to indicate if parsing status has to be checked
     * Needed when parsing and processing are done in different threads
     */
    WORD32 i4_check_parse_status;

    /**
     * Flag to indicate if processing status of top row CTBs has to be checked
     * Needed when processing of different rows is done in different threads
     */
    WORD32 i4_check_proc_status;

    /**
     * Holds Intra dequantization matrices
     */
    WORD16 *api2_dequant_intra_matrix[4];

    /**
     * Holds Inter dequantization matrices
     */
    WORD16 *api2_dequant_inter_matrix[4];


    /**
     * Temporary buffer 1 - Used as a scratch in inter_pred_ctb()
     */
    WORD16 *pi2_inter_pred_tmp_buf1;

    /**
     * Temporary buffer 2 - Used as a scratch in inter_pred_ctb()
     */
    WORD16 *pi2_inter_pred_tmp_buf2;

    /**
     * Temporary buffer 3 - Used as a scratch in inter_pred_ctb()
     */
    WORD16 *pi2_inter_pred_tmp_buf3;

    /**
     * The above temporary buffers' stride
     */
    WORD32 i4_inter_pred_tmp_buf_strd;
    /**
     * Picture stride
     * Used as prediction stride, destination stride while computing inverse transform
     */
    WORD32 i4_pic_strd;

    /**
     * Picture qp offset for U
     */
    WORD8 i1_pic_cb_qp_offset;

    /**
     * Slice qp offset for U
     */
    WORD32 i1_slice_cb_qp_offset;

    /**
     * Picture qp offset for V
     */
    WORD8 i1_pic_cr_qp_offset;

    /**
     * Slice qp offset for V
     */
    WORD32 i1_slice_cr_qp_offset;

    /** Pointer to current picture buffer structure */
    pic_buf_t *ps_cur_pic;

    /** Current pic_buf's picture buffer id */
    WORD32 i4_cur_pic_buf_id;

    /** Pointer to 0th luma pixel in current pic */
    UWORD8 *pu1_cur_pic_luma;

    /** Pointer to 0th chroma pixel in current pic */
    UWORD8 *pu1_cur_pic_chroma;

    /** Intermediate buffer to be used during inverse transform */
    WORD16 *pi2_itrans_intrmd_buf;

    /** Buffer to hold output of inverse scan */
    WORD16 *pi2_invscan_out;

    /**
     *  Top availability for current CTB level
     */
    UWORD8 u1_top_ctb_avail;

    /**
     *  Top right availability for current CTB level
     */
    UWORD8 u1_top_rt_ctb_avail;
    /**
     *  Top left availability for current CTB level
     */
    UWORD8 u1_top_lt_ctb_avail;
    /**
     *  left availability for current CTB level
     */
    UWORD8 u1_left_ctb_avail;
    /**
     *  TU count in current CTB
     */
    WORD32 i4_ctb_tu_cnt;

    /**
     *  Recon pointer to current CTB luma
     */
    UWORD8 *pu1_cur_ctb_luma;
    /**
     *  Recon pointer to current CTB chroma
     */
    UWORD8 *pu1_cur_ctb_chroma;

    /**
     *  PU count in current CTB
     */
    WORD32 i4_ctb_pu_cnt;

    /**
     *  PU count in current CTB
     */
    WORD32 i4_ctb_start_pu_idx;

    /* Pointer to a structure describing output display buffer */
    ivd_out_bufdesc_t *ps_out_buffer;

    /** Flag to indicate if ps_proc was intialized at least once in a frame.
     * This is needed to handle cases where a core starts to handle format conversion jobs directly
     */
    WORD32 i4_init_done;

    /**
     * Pointer to the structure that contains BS and QP frame level arrays
     */
    bs_ctxt_t s_bs_ctxt;

    /**
     * Pointer to the structure that contains deblock context
     */
    deblk_ctxt_t s_deblk_ctxt;

    /**
     * Pointer to the structure that contains sao context
     */
    sao_ctxt_t s_sao_ctxt;

    /**
     * Points to the array of slice indices which is used to identify the independent
     * slice to which each CTB in a frame belongs.
     */
    UWORD16 *pu1_slice_idx;

    /**
     * Points to the array of slice indices which is used to identify the slice
     *  to which each CTB in a frame belongs.
     */
    UWORD16 *pu1_tile_idx;
    /**
     * Variable to store the next ctb count to compute pu idx
     */
    WORD32 i4_next_pu_ctb_cnt;

    /**
     * Variable to store the next ctb count to compute tu idx
     */
    WORD32 i4_next_tu_ctb_cnt;
    /**
     * Number of ctb's to process in one loop
     */
    WORD32 i4_nctb;
}process_ctxt_t;

typedef void (*pf_inter_pred)(void *,
                              void *,
                              WORD32,
                              WORD32,
                              WORD8 *,
                              WORD32,
                              WORD32);


typedef void (*pf_intra_pred)(UWORD8 *pu1_ref,
                              WORD32 src_strd,
                              UWORD8 *pu1_dst,
                              WORD32 dst_strd,
                              WORD32 nt,
                              WORD32 mode);

typedef void (*pf_itrans_recon)(WORD16 *pi2_src,
                                WORD16 *pi2_tmp,
                                UWORD8 *pu1_pred,
                                UWORD8 *pu1_dst,
                                WORD32 src_strd,
                                WORD32 pred_strd,
                                WORD32 dst_strd,
                                WORD32 zero_cols,
                                WORD32 zero_rows);

typedef void (*pf_recon)(WORD16 *pi2_src,
                         UWORD8 *pu1_pred,
                         UWORD8 *pu1_dst,
                         WORD32 src_strd,
                         WORD32 pred_strd,
                         WORD32 dst_strd,
                         WORD32 zero_cols);

typedef void (*pf_itrans_recon_dc)(UWORD8 *pu1_pred,
                                   UWORD8 *pu1_dst,
                                   WORD32 pred_strd,
                                   WORD32 dst_strd,
                                   WORD32 log2_trans_size,
                                   WORD16 i2_coeff_value);


typedef void (*pf_sao_luma)(UWORD8 *,
                            WORD32,
                            UWORD8 *,
                            UWORD8 *,
                            UWORD8 *,
                            UWORD8 *,
                            UWORD8 *,
                            UWORD8 *,
                            WORD8 *,
                            WORD32,
                            WORD32);

typedef void (*pf_sao_chroma)(UWORD8 *,
                              WORD32,
                              UWORD8 *,
                              UWORD8 *,
                              UWORD8 *,
                              UWORD8 *,
                              UWORD8 *,
                              UWORD8 *,
                              WORD8 *,
                              WORD8 *,
                              WORD32,
                              WORD32);

/**
 * Codec context
 */

struct _codec_t
{
    /**
     * Max width the codec can support
     */
    WORD32 i4_max_wd;

    /**
     * Max height the codec can support
     */
    WORD32 i4_max_ht;

    /**
     * Width : pic_width_in_luma_samples
     */
    WORD32 i4_wd;

    /**
     * Height : pic_height_in_luma_samples
     */
    WORD32 i4_ht;

    /**
     * Display width after cropping
     */
    WORD32 i4_disp_wd;

    /**
     * Display height after cropping
     */
    WORD32 i4_disp_ht;

    /**
     * Display stride
     */
    WORD32 i4_disp_strd;

    /*
     * In case stream width/height is greater than max_wd/max_ht used during init,
     * it is stored in the following and in order to decode the current stream
     * decoder has to be recreated with these dimensions.
     */
    /**
     * Stream width if it is greater than i4_max_wd
     */
    WORD32 i4_new_max_wd;

    /**
     * Stream height if it is greater than i4_max_ht
     */
    WORD32 i4_new_max_ht;

    /**
     * Stride of reference buffers.
     * For shared mode even display buffer will use the same stride
     */
    WORD32 i4_strd;

    /**
     * Level specified during init
     */
    WORD32 i4_init_level;

    /**
     * number of reference frames specified during init
     */
    WORD32 i4_init_num_ref;

    /**
     * number of reorder frames specified during init
     */
    WORD32 i4_init_num_reorder;

    /**
     * Number of extra display buffers allocated by application
     */
    WORD32 i4_init_num_extra_disp_buf;

    /**
     * Number of cores to be used
     */
    WORD32 i4_num_cores;

    /**
     * RASL output flag
     */
    WORD32 i4_rasl_output_flag;

    /**
     * This flag is set if the next picture received is a CRA and has to be treated as a first pic in the video sequence
     * For example, it is set, if an EOS (end of stream) NAL is received
     */
    WORD32 i4_cra_as_first_pic;

    /**
     * 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
     * 0 : Disable SAO
     * 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;

    /**
     * Total number of display buffers to be used
     * In case of shared mode, this will be number of reference frames
     */
    WORD32 i4_num_disp_bufs;

    /**
     * Flag to enable shared display buffer mode
     */
    WORD32 i4_share_disp_buf;

    /**
     * Chroma format of display buffers.
     In shared mode only 420SP_UV and 420SP_VU are supported
     */
    IV_COLOR_FORMAT_T e_chroma_fmt;

    /**
     * Chroma format of reference buffers.
     * In non-shared mode it will be 420SP_UV
     * In shared mode only 420SP_UV and 420SP_VU are supported
     */
    IV_COLOR_FORMAT_T e_ref_chroma_fmt;

    /**
     * Frame skip mode
     */
    IVD_FRAME_SKIP_MODE_T e_pic_skip_mode;

    /**
     * Display or decode order dump of output
     */
    IVD_DISPLAY_FRAME_OUT_MODE_T e_pic_out_order;

    /**
     * Coding type of the picture that is decoded
     */
    IV_PICTURE_CODING_TYPE_T e_dec_pic_type;

    /**
     * Flag to signal if a frame was decoded in this call
     */
    WORD32 i4_pic_decoded;

    /**
     * Flag to signal if picture data is present in the current input bitstream
     */
    WORD32 i4_pic_present;

    /**
     * Flag to disable deblocking of a frame
     */
    WORD32 i4_disable_deblk_pic;

    /**
     * Flag to disable sao of a frame
     */
    WORD32 i4_disable_sao_pic;

    /**
     * Flag to use full pel MC
     */
    WORD32 i4_fullpel_inter_pred;
    /**
     * Flush mode
     */
    WORD32 i4_flush_mode;

    /**
     * Decode header mode
     */
    WORD32 i4_header_mode;

    /**
     * Header in slice mode
     */
    WORD32 i4_header_in_slice_mode;

    /**
     * Flag to signal sps done
     */
    WORD32 i4_sps_done;

    /**
     * Flag to signal pps done
     */
    WORD32 i4_pps_done;

    /**
     * To signal successful completion of init
     */
    WORD32 i4_init_done;

    /**
     * To signal that at least one picture was decoded
     */
    WORD32 i4_first_pic_done;

    /**
     * To signal error in slice
     */
    WORD32 i4_slice_error;

    /**
     * Reset flag - Codec is reset if this flag is set
     */
    WORD32 i4_reset_flag;

    /**
     * Number of pictures decoded till now
     */
    UWORD32 u4_pic_cnt;

    /**
     * Number of pictures displayed till now
     */
    UWORD32 u4_disp_cnt;

    /**
     * Current error code
     */
    WORD32 i4_error_code;

    /**
     * Pointer to input bitstream. This is incremented everytime a NAL is processed
     */
    UWORD8 *pu1_inp_bitsbuf;

    /**
     * Offset to first byte after the start code in current NAL
     */
    WORD32 i4_nal_ofst;

    /**
     * Length of the NAL unit including the emulation bytes
     */
    WORD32 i4_nal_len;

    /**
     * Number of emulation prevention bytes present in the current NAL
     */
    WORD32 i4_num_emln_bytes;

    /**
     * Number of bytes remaining in the input bitstream
     */
    /**
     * Decremented everytime a NAL is processed
     */
    WORD32 i4_bytes_remaining;

    /**
     * Pointer to bitstream after emulation prevention
     */
    UWORD8 *pu1_bitsbuf;

    /**
     * Size of intermediate bitstream buffer
     */
    UWORD32 u4_bitsbuf_size;

    /**
     * Pointer to hold TU data for a set of CTBs or a picture
     */
    void *pv_tu_data;
    /**
     * Holds mem records passed during init.
     * This will be used to return the mem records during retrieve call
     */
    iv_mem_rec_t *ps_mem_rec_backup;

    /**
     * Process Job queue buffer base
     */
    void *pv_proc_jobq_buf;

    /**
     * Process Job Queue mem tab size
     */
    WORD32 i4_proc_jobq_buf_size;

    /** Parse status: one byte per CTB */
    UWORD8 *pu1_parse_map;

    /** Process status: one byte per CTB */
    UWORD8 *pu1_proc_map;
    /**
     * Current pictures intra mode map at 8x8 level
     */
    UWORD8 *pu1_pic_intra_flag;
    /**
     * Current pictures loop filter flag map at 8x8 level
     */
    UWORD8 *pu1_pic_no_loop_filter_flag;
    /**
     * MV Bank buffer manager
     */
    void *pv_mv_buf_mgr;

    /**
     * Pointer to MV Buf structure array
     */
    void *ps_mv_buf;

    /** Holds the number of mv_buf_t structures allocated */
    WORD32 i4_max_dpb_size;

    /**
     * Base address for Motion Vector bank buffer
     */
    void *pv_mv_bank_buf_base;

    /**
     * MV Bank size allocated
     */
    WORD32 i4_total_mv_bank_size;

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

    /**
     * Pointer to Pic Buf structure array
     */
    void *ps_pic_buf;

    /**
     * Base address for Picture buffer
     */
    void *pv_pic_buf_base;

    /**
     * Total pic buffer size allocated
     */
    WORD32 i4_total_pic_buf_size;

    /**
     * Remaining pic buffer size - used for shared mode with 420p support
     */
    WORD32 i4_remaining_pic_buf_size;

    /**
     * Current chroma buffer base - used for shared mode with 420p output
     */
    UWORD8 *pu1_cur_chroma_ref_buf;

    /**
     * Picture buffer manager
     */
    void *pv_disp_buf_mgr;

    /**
     * Current display buffer's buffer ID
     */
    WORD32 i4_disp_buf_id;

    /**
     * Current display buffer
     */
    pic_buf_t *ps_disp_buf;

    /**
     * Pointer to dpb manager structure
     */
    void *pv_dpb_mgr;

    /**
     * Scaling matrices for each PPS
     */
    WORD16 *pi2_scaling_mat;

    /**
     * Array containing Tile information for each PPS
     */
    tile_t *ps_tile;

    /**
     * Timestamp associated with the current display output
     */
    UWORD32 u4_ts;

    /**
     * Pointer to base of Video parameter set structure array
     */
    vps_t *ps_vps_base;

    /**
     * Pointer to base of Sequence parameter set structure array
     */
    sps_t *ps_sps_base;

    /**
     * Pointer to base of Picture parameter set structure array
     */
    pps_t *ps_pps_base;

    /**
     * Pointer to base of slice header structure array
     */
    slice_header_t *ps_slice_hdr_base;
    /**
     * Pointer to base of entry point offsets in a frame
     */
    WORD32 *pi4_entry_ofst;

    /**
     * Current offset in pi4_entry_ofst
     */
    WORD32 i4_cur_entry_ofst;

    /**
     *  Parsing context
     */
    parse_ctxt_t s_parse;

    /**
     * Processing context - One for each processing thread
     */
    process_ctxt_t as_process[MAX_PROCESS_THREADS];

    /**
     * Thread handle for each of the processing threads
     */
    void *apv_process_thread_handle[MAX_PROCESS_THREADS];

    /**
     * Thread created flag for each of the processing threads
     */
    WORD32 ai4_process_thread_created[MAX_PROCESS_THREADS];

    /**
     * Void pointer to process job context
     */
    void *pv_proc_jobq;

    /* Number of CTBs processed together for better instruction cache handling */
    WORD32 i4_proc_nctb;

    /**
     * Previous POC lsb
     */
    WORD32 i4_prev_poc_lsb;

    /**
     * Previous POC msb
     */
    WORD32 i4_prev_poc_msb;

    /**
     * Max POC lsb that has arrived till now
     */
    WORD32 i4_max_prev_poc_lsb;

    /** Context for format conversion */
    fmt_conv_t s_fmt_conv;

    /** Pointer to a structure describing output display buffer */
    ivd_out_bufdesc_t *ps_out_buffer;
    /**
     * Variable to store the next ctb count to compute pu idx
     */
    WORD32 i4_next_pu_ctb_cnt;

    /**
     * Variable to store the next ctb count to compute tu idx
     */
    WORD32 i4_next_tu_ctb_cnt;

    /**  Active SPS id - mainly to be used during codec initializations in shared mode */
    WORD32 i4_sps_id;

    /**  Number of ctbs to be decoded in one process call */
    UWORD32 u4_nctb;

    /** Flag to enable scheduling of format conversion jobs ahead of processing jobs */
    UWORD32 u4_enable_fmt_conv_ahead;

    /** Mask used to change MVs to full pel when configured to run in reduced complexity mode */
    WORD32 i4_mv_frac_mask;
    /**  Funtion pointers for inter_pred leaf level functions */
    pf_inter_pred apf_inter_pred[22];

    /**  Funtion pointers for inter_pred_luma leaf level functions */
    pf_intra_pred apf_intra_pred_luma[11];

    /**  Funtion pointers for inter_pred_chroma leaf level functions */
    pf_intra_pred apf_intra_pred_chroma[11];

    /**  Funtion pointers for itrans_recon leaf level functions */
    pf_itrans_recon apf_itrans_recon[8];

    /**  Funtion pointers for recon leaf level functions */
    pf_recon apf_recon[8];

    /**  Funtion pointers for itrans_recon_dc leaf level functions */
    pf_itrans_recon_dc apf_itrans_recon_dc[2];

    /**  Funtion pointers for sao_luma leaf level functions */
    pf_sao_luma apf_sao_luma[4];

    /**  Funtion pointers for sao_chroma leaf level functions */
    pf_sao_chroma apf_sao_chroma[4];

    /**  Funtion pointers for all the leaf level functions */
    func_selector_t s_func_selector;
    /**  Processor architecture */
    IVD_ARCH_T e_processor_arch;
    /**  Processor soc */
    IVD_SOC_T e_processor_soc;

    /** Display buffer array - for shared mode */
    ivd_out_bufdesc_t s_disp_buffer[IVD_VIDDEC_MAX_IO_BUFFERS];

    /** Number of active display buffers - for shared mode */
    WORD32  i4_share_disp_buf_cnt;
};

#endif /* _IHEVCD_STRUCTS_H_ */
