/******************************************************************************
*
* 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
 *  ihevc_structs.h
 *
 * @brief
 *  Structure definitions used in the code
 *
 * @author
 *  Ittiam
 *
 * @par List of Functions:
 *
 * @remarks
 *  None
 *
 *******************************************************************************
 */

#ifndef _IHEVC_STRUCTS_H_
#define _IHEVC_STRUCTS_H_

/**
 * Picture buffer
 */
typedef struct
{
    UWORD8 *pu1_luma;
    UWORD8 *pu1_chroma;

    WORD32 i4_abs_poc;
    WORD32 i4_poc_lsb;
    /** Used to store display Timestamp for current buffer */
    WORD32 u4_ts;
    UWORD8 u1_used_as_ref;

    UWORD8 u1_free_delay_cnt;

    /**
     * buffer ID from buffer manager
     */
    UWORD8 u1_buf_id;

}pic_buf_t;


/**
 * Reference List
 */
typedef struct
{
    void *pv_pic_buf;

    void *pv_mv_buf;

    UWORD8 u1_used_as_ref;

}ref_list_t;


/**
 * SAO
 */
typedef struct
{
    /**
     * sao_type_idx_luma
     */
    UWORD32      b3_y_type_idx   : 3;

    /**
     * luma SaoOffsetVal[1]
     */
    WORD32      b4_y_offset_1   : 4;

    /**
     * luma SaoOffsetVal[2]
     */
    WORD32      b4_y_offset_2   : 4;

    /**
     * luma SaoOffsetVal[3]
     */
    WORD32      b4_y_offset_3   : 4;

    /**
     * luma SaoOffsetVal[4]
     */
    WORD32      b4_y_offset_4   : 4;

    /**
     * luma sao_band_position
     */
    UWORD32      b5_y_band_pos   : 5;

    WORD32                      : 0;

    /**
     * sao_type_idx_chroma
     */
    UWORD32      b3_cb_type_idx  : 3;

    /**
     * chroma SaoOffsetVal[1]
     */
    WORD32      b4_cb_offset_1  : 4;

    /**
     * chroma SaoOffsetVal[2]
     */
    WORD32      b4_cb_offset_2  : 4;

    /**
     * chroma SaoOffsetVal[3]
     */
    WORD32      b4_cb_offset_3  : 4;

    /**
     * chroma SaoOffsetVal[4]
     */
    WORD32      b4_cb_offset_4  : 4;

    /**
     * cb sao_band_position
     */
    UWORD32      b5_cb_band_pos  : 5;

    WORD32                      : 0;

    /**
     * sao_type_idx_chroma
     */
    UWORD32      b3_cr_type_idx  : 3;

    /**
     * chroma SaoOffsetVal[1]
     */
    WORD32      b4_cr_offset_1  : 4;

    /**
     * chroma SaoOffsetVal[2]
     */
    WORD32      b4_cr_offset_2  : 4;

    /**
     * chroma SaoOffsetVal[3]
     */
    WORD32      b4_cr_offset_3  : 4;

    /**
     * chroma SaoOffsetVal[4]
     */
    WORD32      b4_cr_offset_4  : 4;

    /**
     * cr sao_band_position
     */
    UWORD32      b5_cr_band_pos  : 5;

    WORD32                      : 0;

}sao_t;

/**
 * SAO
 */
typedef struct
{
    /**
     * sao_type_idx_luma
     */
    UWORD32      b3_y_type_idx   : 3;

    /**
     * luma SaoOffsetVal[1]
     */
    WORD32      b8_y_offset_1   : 8;

    /**
     * luma SaoOffsetVal[2]
     */
    WORD32      b8_y_offset_2   : 8;

    /**
     * luma SaoOffsetVal[3]
     */
    WORD32      b8_y_offset_3   : 8;

    /**
     * luma SaoOffsetVal[4]
     */
    WORD32      b8_y_offset_4   : 8;

    /**
     * luma sao_band_position
     */
    UWORD32      b5_y_band_pos   : 5;

    WORD32                      : 0;

    /**
     * sao_type_idx_chroma
     */
    UWORD32      b3_cb_type_idx  : 3;

    /**
     * chroma SaoOffsetVal[1]
     */
    WORD32      b8_cb_offset_1  : 8;

    /**
     * chroma SaoOffsetVal[2]
     */
    WORD32      b8_cb_offset_2  : 8;

    /**
     * chroma SaoOffsetVal[3]
     */
    WORD32      b8_cb_offset_3  : 8;

    /**
     * chroma SaoOffsetVal[4]
     */
    WORD32      b8_cb_offset_4  : 8;

    /**
     * cb sao_band_position
     */
    UWORD32      b5_cb_band_pos  : 5;

    WORD32                      : 0;

    /**
     * sao_type_idx_chroma
     */
    UWORD32      b3_cr_type_idx  : 3;

    /**
     * chroma SaoOffsetVal[1]
     */
    WORD32      b8_cr_offset_1  : 8;

    /**
     * chroma SaoOffsetVal[2]
     */
    WORD32      b8_cr_offset_2  : 8;

    /**
     * chroma SaoOffsetVal[3]
     */
    WORD32      b8_cr_offset_3  : 8;

    /**
     * chroma SaoOffsetVal[4]
     */
    WORD32      b8_cr_offset_4  : 8;

    /**
     * cr sao_band_position
     */
    UWORD32      b5_cr_band_pos  : 5;

    WORD32                      : 0;

}sao_10bd_t;

/**
 * Motion vector
 */
typedef struct
{
    /**
     * Horizontal Motion Vector
     */
    WORD16 i2_mvx;

    /**
     * Vertical Motion Vector
     */
    WORD16 i2_mvy;
}mv_t;

/*****************************************************************************/
/* Following results in packed 48 bit structure. If mv_t included            */
/*  ref_pic_buf_id, then 8 bits will be wasted for each mv for aligning.     */
/*  Also using mv_t as elements directly instead of a pointer to l0 and l1   */
/*  mvs. Since pointer takes 4 bytes and MV itself is 4 bytes. It does not   */
/*  really help using pointers.                                              */
/*****************************************************************************/

/**
 * PU Motion Vector info
 */
typedef struct
{
    /**
     *  L0 Motion Vector
     */
    mv_t s_l0_mv;

    /**
     *  L1 Motion Vector
     */
    mv_t s_l1_mv;

    /**
     *  L0 Ref index
     */
    WORD8   i1_l0_ref_idx;

    /**
     *  L1 Ref index
     */
    WORD8   i1_l1_ref_idx;

    /**
     *  L0 Ref Pic Buf ID
     */
    WORD8 i1_l0_ref_pic_buf_id;

    /**
     *  L1 Ref Pic Buf ID
     */
    WORD8 i1_l1_ref_pic_buf_id;

}pu_mv_t;

/**
 * PU information
 */
typedef struct
{

    /**
     *  PU motion vectors
     */
    pu_mv_t     mv;

    /**
     *  PU X position in terms of min PU (4x4) units
     */
    UWORD32     b4_pos_x        : 4;

    /**
     *  PU Y position in terms of min PU (4x4) units
     */
    UWORD32     b4_pos_y        : 4;

    /**
     *  PU width in pixels = (b4_wd + 1) << 2
     */
    UWORD32     b4_wd           : 4;

    /**
     *  PU height in pixels = (b4_ht + 1) << 2
     */
    UWORD32     b4_ht           : 4;

    /**
     *  Intra or Inter flag for each partition - 0 or 1
     */
    UWORD32     b1_intra_flag   : 1;


    /**
     *  PRED_L0, PRED_L1, PRED_BI - Initialized in parsing only for MVP case
     */
    UWORD32     b2_pred_mode    : 2;


/**
     *  Merge flag for each partition - 0 or 1
     */
    UWORD32     b1_merge_flag   : 1;

    /**
     *  Merge index for each partition - 0 to 4
     */
    UWORD32     b3_merge_idx    : 3;

    /*************************************************************************/
    /* Following two flags can be overloaded with b3_merge_idx if there      */
    /* is need for additional bits                                           */
    /*************************************************************************/

    /**
     *  If merge is zero, following gives presence of mvd for L0 MV
     */
    UWORD32     b1_l0_mvp_idx   : 1;

    /**
     *  If merge is zero, following gives presence of mvd for L1 MV
     */
    UWORD32     b1_l1_mvp_idx   : 1;

    /**
     * Partition mode - Needed during MV merge stage
     * Note: Part mode can be derived using pu_wd, pu_ht and minCB size
     * If there is a need for bits, the following can be removed at the cost
     * of more control code in MV Merge
     */
    UWORD32      b3_part_mode    : 3;

    /**
     * Partition index - Needed during MV merge stage
     */
    UWORD32      b2_part_idx     : 2;


}pu_t;

/**
 * TU information
 */
typedef struct
{
    /**
     *  TU X position in terms of min TU (4x4) units
     */
    UWORD32      b4_pos_x            : 4;

    /**
     *  TU Y position in terms of min TU (4x4) units
     */
    UWORD32     b4_pos_y            : 4;


    /*************************************************************************/
    /* Luma TU size (width or height) = 1 << (b3_size + 2)                   */
    /*   i.e. 0 : 4, 1 : 8, 2: 16, 3: 32, 4: 64                              */
    /* Note: Though 64 x 64 TU is not possible, this size is supported to    */
    /* signal SKIP CUs or PCM CUs etc where transform is not called          */
    /* Chroma width will be half of luma except for 4x4 luma                 */
    /*************************************************************************/
    /**
     * Luma TU size (width or height)
     */
    UWORD32     b3_size             : 3; //To be changed.

    /*************************************************************************/
    /* Chroma present : For 4x4 Luma TUs only the fourth one contains Cb     */
    /* Cr info. For the first three TUs in 8x8 (for 4x4 luma) this will      */
    /* be zero. For all the other cases this will be 1                       */
    /*************************************************************************/

    /**
     * 4x4 Luma TUs only the fourth one contains cb,cr
     * TODO: Check if this is really needed, cb_cbf and cr_cbf should be enough
     */

    /**
     *  Y CBF
     */
    UWORD32      b1_y_cbf            : 1;

    /**
     *  Cb CBF
     */
    UWORD32      b1_cb_cbf           : 1;


    /**
     *  Cr CBF
     */
    UWORD32     b1_cr_cbf           : 1;


    /**
     *  Flag to indicate if it is the first TU in a CU
     */
    UWORD32     b1_first_tu_in_cu       : 1;

    /**
     *  Transform quant bypass flag
     */
    UWORD32     b1_transquant_bypass  : 1;

    /**
     *  Y Qp
     */
    //UWORD32     b6_qp               : 6; // BUG_FIX related to nighbour QP's in case of negative QP for HBD.
    WORD32     b7_qp               : 7;


    /**
     *  Luma Intra Mode 0 - 34
     */
    UWORD32    b6_luma_intra_mode      : 6;

    /*************************************************************************/
    /* Chroma Intra Mode Index 0 - 4: Actual mode (0, 1, 10, 26, 34, X) to be*/
    /* derived using luma_intra_mode and the following                       */
    /*************************************************************************/
    /**
     * Chroma Intra Mode Index 0 - 4
     */
    UWORD32    b3_chroma_intra_mode_idx    : 3;

}tu_t;

/**
 * CU information
 */
typedef struct
{

    /**
     *  CU X position in terms of min CU (8x8) units
     */
    UWORD32 b3_cu_pos_x :3;

    /**
     *  CU Y position in terms of min CU (8x8) units
     */
    UWORD32 b3_cu_pos_y :3;

    /**
     *  CU size in terms of min CU (8x8) units
     */
    UWORD32 b4_cu_size :4;

    /**
     *  transquant bypass flag ; 0 for this encoder
     */
    UWORD32 b1_tq_bypass_flag :1;

    /**
     *  CU skip flag
     */
    UWORD32 b1_skip_flag :1;

    /**
     *  intra / inter CU flag
     */
    UWORD32 b1_pred_mode_flag :1;

    /**
     *  indicates partition information for CU
     *  For intra 0 : for 2Nx2N / 1 for NxN iff CU=minCBsize
     *  For inter 0 : @sa PART_SIZE_E
     */
    UWORD32 b3_part_mode :3;

    /**
     *  0 for this encoder
     */
    UWORD32 b1_pcm_flag :1;

    /**
     *  only applicable for intra cu
     */
    UWORD32 b3_chroma_intra_pred_mode :3;

    /**
     * only applicable for intra cu
     */
    UWORD32 b1_prev_intra_luma_pred_flag0 :1;

    /**
     * only applicable for intra cu and pred_mode=NxN
     */
    UWORD32 b1_prev_intra_luma_pred_flag1 :1;

    /**
     * only applicable for intra cu and pred_mode=NxN
     */
    UWORD32 b1_prev_intra_luma_pred_flag2 :1;

    /**
     * only applicable for intra cu and pred_mode=NxN
     */
    UWORD32 b1_prev_intra_luma_pred_flag3 :1;

    /**
     *  only applicable for luma intra cu
     */
    UWORD32 b2_mpm_idx0 :2;

    /**
     *  only applicable for intra cu and pred_mode=NxN
     */
    UWORD32 b2_mpm_idx1 :2;

    /**
     *  only applicable for intra cu and pred_mode=NxN
     */
    UWORD32 b2_mpm_idx2 :2;

    /**
     *  only applicable for intra cu and pred_mode=NxN
     */
    UWORD32 b2_mpm_idx3 :2;

    /**
     *  only applicable for intra cu
     */
    UWORD32 b5_rem_intra_pred_mode0 :5;

    /**
     *  only applicable for intra cu and pred_mode=NxN
     */
    UWORD32 b5_rem_intra_pred_mode1 :5;

    /**
     *  only applicable for intra cu and pred_mode=NxN
     */
    UWORD32 b5_rem_intra_pred_mode2 :5;

    /**
     *  only applicable for intra cu and pred_mode=NxN
     */
    UWORD32 b5_rem_intra_pred_mode3 :5;

    /**
     *  no residue flag for cu
     */
    UWORD32 b1_no_residual_syntax_flag :1;

}cu_t;

/*****************************************************************************/
/* Since the following data will be accessed linearly (no random access      */
/*  is needed for this) there is no need to store a frame level offset for   */
/*  each CTB's TU data. Only a pointer to this is stored in CTB's structure  */
/*****************************************************************************/

typedef struct
{
    /*************************************************************************/
    /* Number of TUs filled in as_tu                                         */
    /* Having the first entry as 32 bit data, helps in keeping each of       */
    /* the structures aligned to 32 bits at CTB level                        */
    /*************************************************************************/
    /**
     * Number of TUs filled in as_tu
     */
    WORD32 i4_tu_cnt;

    /**
     *  Array to map each min TU unit to a corresponding entry in as_tu
     */
    UWORD8 au1_tu_map[MAX_TU_IN_CTB];

    /*************************************************************************/
    /* TU level information                                                  */
    /* Though the allocation for as_pu as done to handle worst case data,    */
    /* only valid number of TUs will be filled in the following array.       */
    /* Next CTB starts after the valid as_tu entries                         */
    /*************************************************************************/
    /**
     *  TU level information
     */
    tu_t as_tu[MAX_TU_IN_CTB];

}ctb_tu_list_t;

/*****************************************************************************/
/* Info from last TU row of CTB is stored in a row level neighbour buffer    */
/* , which will be used for Boundary Strength computation                    */
/*****************************************************************************/
/**
 *  CTB neighbor info
 */
typedef struct
{
    /**
     *  Slice index of the ctb
     */
    UWORD16 u2_slice_idx;

    /*************************************************************************/
    /* CBF of bottom TU row (replicated in 4 pixel boundary)                 */
    /* MSB contains CBF of first TU in the last row and LSB contains CBF     */
    /* of last TU in the last row                                            */
    /*************************************************************************/
    /**
     * CBF of bottom TU row
     */
    UWORD16 u2_packed_cbf;

    /*************************************************************************/
    /* QP of bottom TU row (replicated at 8 pixel boundary (Since QP can     */
    /* not change at less than min CU granularity)                           */
    /*************************************************************************/
    /**
     * QP of bottom TU row
     */
    UWORD8 au1_qp[MAX_CU_IN_CTB_ROW];

}ctb_top_ny_info_t;

/**
 *  CTB level info
 */
typedef struct _ctb_t
{
    /*************************************************************************/
    /* Tile boundary can be detected by looking at tile start x and tile     */
    /* start y.  And based on the tile, slice and frame boundary the         */
    /* following will be initialized.                                        */
    /*************************************************************************/
    /**
     *  Pointer to left CTB
     */
    /*  If not available, this will be set to NULL   */
    struct _ctb_t *ps_ctb_left;

    /**
     *  Pointer to top-left CTB
     */
    /* If not available, this will be set to NULL   */
    ctb_top_ny_info_t *ps_ctb_ny_topleft;

    /**
     *  Pointer to top CTB
     */
    /* If not available, this will be set to NULL  */
    ctb_top_ny_info_t *ps_ctb_ny_top;

    /**
     *  Pointer to top-right CTB
     */
    /* If not available, this will be set to NULL */
    ctb_top_ny_info_t *ps_ctb_ny_topright;

    /*************************************************************************/
    /* Pointer to PU data.                                                   */
    /* This points to a MV Bank stored at frame level. Though this           */
    /* pointer can be derived by reading offset at frame level, it is        */
    /* stored here for faster access. Can be removed if storage of CTB       */
    /* structure is critical                                                 */
    /*************************************************************************/
    /**
     * Pointer to PU data
     */
    pu_t *ps_pu;

    /*************************************************************************/
    /* Pointer to a PU map stored at frame level,                            */
    /* Though this pointer can be derived by multiplying CTB adress with     */
    /* number of minTUs in a CTB, it is stored here for faster access.       */
    /* Can be removed if storage of CTB structure is critical                */
    /*************************************************************************/
    /**
     * Pointer to a PU map stored at frame level
     */
    UWORD8 *pu1_pu_map;

    /**
     *  Number of TUs filled in as_tu
     */
    /*************************************************************************/
    /* Having the first entry as 32 bit data, helps in keeping each of       */
    /* the structures aligned to 32 bits at CTB level                        */
    /*************************************************************************/
    WORD32 i4_tu_cnt;

    /**
     *  Array to map each min TU unit to a corresponding entry in as_tu
     */
    UWORD8 *pu1_tu_map;

    /**
     *  TU level information
     */
    /*************************************************************************/
    /* Though the allocation for as_pu as done to handle worst case data,    */
    /* only valid number of TUs will be filled in the following array.       */
    /* Next CTB starts after the valid as_tu entries                         */
    /*************************************************************************/
    tu_t *ps_tu;

    /**
     *  Pointer to transform coeff data
     */
    /*************************************************************************/
    /* Following format is repeated for every coded TU                       */
    /* Luma Block                                                            */
    /* num_coeffs      : 16 bits                                             */
    /* zero_cols       : 8 bits ( 1 bit per 4 columns)                       */
    /* sig_coeff_map   : ((TU Size * TU Size) + 31) >> 5 number of WORD32s   */
    /* coeff_data      : Non zero coefficients                               */
    /* Cb Block (only for last TU in 4x4 case else for every luma TU)        */
    /* num_coeffs      : 16 bits                                             */
    /* zero_cols       : 8 bits ( 1 bit per 4 columns)                       */
    /* sig_coeff_map   : ((TU Size * TU Size) + 31) >> 5 number of WORD32s   */
    /* coeff_data      : Non zero coefficients                               */
    /* Cr Block (only for last TU in 4x4 case else for every luma TU)        */
    /* num_coeffs      : 16 bits                                             */
    /* zero_cols       : 8 bits ( 1 bit per 4 columns)                       */
    /* sig_coeff_map   : ((TU Size * TU Size) + 31) >> 5 number of WORD32s   */
    /* coeff_data      : Non zero coefficients                               */
    /*************************************************************************/
    void            *pv_coeff_data;

    /**
     *  Slice to which the CTB belongs to
     */
    WORD32 i4_slice_idx;

    /**
     *  CTB column position
     */
    WORD32 i4_pos_x;

    /**
     *  CTB row position
     */
    WORD32 i4_pos_y;

    /**
     *  Number of PUs filled in ps_pu
     */
    WORD32 i4_pu_cnt;

    /**
     *  Index of current PU being processed in ps_pu
     */
    /*  Scratch variable set to 0 at the start of any PU processing function */
    WORD32 i4_pu_idx;

    /**
     * Vertical Boundary strength
     */
    /* Two bits per edge.
    Stored in format. BS[15] | BS[14] | .. |BS[0]*/
    UWORD32 *pu4_vert_bs;

    /**
     * Horizontal Boundary strength
     */

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

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

    /**
     *  Pointer to current frame's pu_t array
     */
    pu_t *ps_frm_pu;

    /**
     * Pointer to current frame's pu_t index array, which stores starting index
     * of pu_t for every CTB
     */
    UWORD32 *pu4_frm_pu_idx;

    /**
     *  Pointer to current frame's pu map array
     */
    UWORD8 *pu1_frm_pu_map;

    /*************************************************************************/
    /* Need to add encoder specific elements for identifying the order of    */
    /* coding for CU, TU and PU if any                                       */
    /*************************************************************************/
}ctb_t;

/*****************************************************************************/
/* The following can be used to typecast coefficient data that is stored     */
/*  per subblock. Note that though i2_level is shown as an array that        */
/*  holds 16 coefficients, only the first few entries will be valid. Next    */
/*  subblocks data starts after the valid number of coefficients. Number     */
/*  of non-zero coefficients will be derived using number of non-zero bits   */
/*  in sig coeff map                                                         */
/*****************************************************************************/
/**
 * Structure to hold coefficient info for a 4x4 subblock
 */
typedef struct
{
    /**
     * sub block position
     */
    UWORD16 u2_subblk_pos;

    /**
     * significant coefficient map
     */
    UWORD16 u2_sig_coeff_map;

    /**
     * holds 16 coefficients
     */
    WORD16  ai2_level[SUBBLK_COEFF_CNT];
}tu_sblk_coeff_data_t;



/*************************************************************************/
/* The following describes how each of the CU cases are handled          */
/*************************************************************************/

/*************************************************************************/
/* For SKIP CU                                                           */
/* One Inter PU with appropriate MV                                      */
/* One TU which says Y, Cb and Cr CBF is zero with size equal to CB size */
/*************************************************************************/

/*************************************************************************/
/* For Inter CU                                                          */
/* M Inter PU with appropriate MVs (M between 1 to 4)                    */
/* N TU (N is number of TU in CU)                                        */
/*************************************************************************/

/*************************************************************************/
/* For Intra CU                                                          */
/* N TU (N is number of TU in CU)                                        */
/* N Intra PU with appropriate pred modes for luma and chroma            */
/*************************************************************************/

/*************************************************************************/
/* For Intra PCM CU                                                      */
/* One TU which says transquant bypass is 1  with size equal to CB size  */
/* 1 Intra PU with pcm flag set to 1(which ensures no intra pred is done)*/
/*************************************************************************/

/*************************************************************************/
/* For a CU where cu_transquant_bypass_flag is 1                         */
/* One TU which says transquant bypass is 1  with size equal to CB size  */
/* N Intra/Inter PUs                                                     */
/*************************************************************************/

/*************************************************************************/
/* For a CU where no_residual_syntax_flag is 1                           */
/* One TU which says Y, Cb, Cr CBF is 0  with size equal to CB size      */
/* N Inter PUs                                                           */
/*************************************************************************/


/**
 * Structure giving information about the tile
 */
typedef struct
{
    /* X position of the tile in the current frame in CTB units */
    UWORD8 u1_pos_x;

    /* Y position of the tile in the current frame in CTB units */
    UWORD8 u1_pos_y;

    /* Tile width in CTB units */
    UWORD16 u2_wd;

    /* Tile height in CTB units */
    UWORD16 u2_ht;

}tile_t;

/**
 * Structure to hold Profile tier level info for a given layer
 */

typedef struct
{
    /**
     *  NAL unit type
     */
    WORD8 i1_nal_unit_type;

    /**
     *  NAL temporal id
     */
    WORD8 i1_nuh_temporal_id;
}nal_header_t;

/**
 * Structure to hold Profile tier level info for a given layer
 */

typedef struct
{
    /**
     *  profile_space
     */
    WORD8 i1_profile_space;

    /**
     *  tier_flag
     */
    WORD8 i1_tier_flag;

    /**
     *  profile_idc
     */
    WORD8 i1_profile_idc;

    /**
     *  profile_compatibility_flag[]
     */
    WORD8 ai1_profile_compatibility_flag[MAX_PROFILE_COMPATBLTY];

    /**
     * progressive_source_flag
     */
    WORD8 i1_general_progressive_source_flag;

    /**
     * interlaced_source_flag
     */
    WORD8 i1_general_interlaced_source_flag;

    /**
     * non_packed_constraint_flag
     */
    WORD8 i1_general_non_packed_constraint_flag;

    /**
     * frame_only_constraint_flag
     */
    WORD8 i1_frame_only_constraint_flag;

    /**
     * general_max_12bit_constraint_flag
     */
    WORD8 i1_general_max_12bit_constraint_flag;

    /**
     * general_max_10bit_constraint_flag
     */
    WORD8 i1_general_max_10bit_constraint_flag;

    /**
     * general_max_8bit_constraint_flag
     */
    WORD8 i1_general_max_8bit_constraint_flag;

    /**
     * general_max_422chroma_constraint_flag
     */
    WORD8 i1_general_max_422chroma_constraint_flag;

    /**
     * general_max_420chroma_constraint_flag
     */
    WORD8 i1_general_max_420chroma_constraint_flag;

    /**
     * general_max_monochrome_constraint_flag
     */
    WORD8 i1_general_max_monochrome_constraint_flag;

    /**
     * general_intra_constraint_flag
     */
    WORD8 i1_general_intra_constraint_flag;

    /**
     * general_one_picture_only_constraint_flag
     */
    WORD8 i1_general_one_picture_only_constraint_flag;

    /**
     * general_lower_bit_rate_constraint_flag
     */
    WORD8 i1_general_lower_bit_rate_constraint_flag;

    /**
     *  level_idc
     */
    UWORD8 u1_level_idc;
}profile_tier_lvl_t;

/**
 * Structure to hold Profile tier level info for all layers
 */
typedef struct
{
    /**
     *  Profile and tier information for general
     */
    profile_tier_lvl_t s_ptl_gen;

    /**
     *  sub_layer_profile_present_flag[]
     */
    WORD8 ai1_sub_layer_profile_present_flag[VPS_MAX_SUB_LAYERS - 1];

    /**
     *  sub_layer_level_present_flag[]
     */
    WORD8 ai1_sub_layer_level_present_flag[VPS_MAX_SUB_LAYERS - 1];

    /**
     *  Profile and tier information for sub layers
     */
    profile_tier_lvl_t as_ptl_sub[VPS_MAX_SUB_LAYERS - 1];

}profile_tier_lvl_info_t;

/**
 * Structure to hold short term reference picture set info
 */
typedef struct
{
    /**
     *  delta_poc_s0_minus1[ i ] and delta_poc_s1_minus1[ i ]
     */
    WORD16 ai2_delta_poc[MAX_DPB_SIZE];

    /**
     *  inter_ref_pic_set_prediction_flag
     */
    WORD8 i1_inter_ref_pic_set_prediction_flag;

    /**
     *  num_negative_pics
     */
    WORD8 i1_num_neg_pics;

    /**
     *  num_positive_pics
     */
    WORD8 i1_num_pos_pics;

    /**
     *  used_by_curr_pic_s0_flag[ i ] and used_by_curr_pic_s1_flag[i]
     */
    WORD8 ai1_used[MAX_DPB_SIZE];

    /**
     *  Ref Idc
     */
    WORD8 ai1_ref_idc[MAX_DPB_SIZE];

    /**
     *  Sum of positive and negative pics for each refence
     */
    WORD8 i1_num_delta_pocs;

    /**
     *  Number of ref_idc
     */
    WORD8 i1_num_ref_idc;
}stref_picset_t;

/**
 * Structure to hold weighted prediction info such as weights and offsets
 */
typedef struct
{
    /** luma_log2_weight_denom */
    WORD8 i1_luma_log2_weight_denom;

    /** delta_chroma_log2_weight_denom */
    WORD8 i1_chroma_log2_weight_denom;


    /** luma_weight_l0_flag[ i ] */
    WORD8 i1_luma_weight_l0_flag[MAX_DPB_SIZE];

    /** chroma_weight_l0_flag[ i ] */
    WORD8 i1_chroma_weight_l0_flag[MAX_DPB_SIZE];

    /** delta_luma_weight_l0[ i ] */
    WORD16 i2_luma_weight_l0[MAX_DPB_SIZE];

    /** luma_offset_l0[ i ] */
    WORD16 i2_luma_offset_l0[MAX_DPB_SIZE];

    /** delta_chroma_weight_l0[ i ][ j ] */
    WORD16 i2_chroma_weight_l0_cb[MAX_DPB_SIZE];

    /** delta_chroma_offset_l0[ i ][ j ] */
    WORD16 i2_chroma_offset_l0_cb[MAX_DPB_SIZE];

    /** delta_chroma_weight_l0[ i ][ j ] */
    WORD16 i2_chroma_weight_l0_cr[MAX_DPB_SIZE];

    /** delta_chroma_offset_l0[ i ][ j ] */
    WORD16 i2_chroma_offset_l0_cr[MAX_DPB_SIZE];

    /** luma_weight_l1_flag[ i ] */
    WORD8 i1_luma_weight_l1_flag[MAX_DPB_SIZE];

    /** chroma_weight_l1_flag[ i ] */
    WORD8 i1_chroma_weight_l1_flag[MAX_DPB_SIZE];

    /** delta_luma_weight_l1[ i ] */
    WORD16 i2_luma_weight_l1[MAX_DPB_SIZE];

    /** luma_offset_l1[ i ] */
    WORD16 i2_luma_offset_l1[MAX_DPB_SIZE];

    /** delta_chroma_weight_l1[ i ][ j ] */
    WORD16 i2_chroma_weight_l1_cb[MAX_DPB_SIZE];

    /** delta_chroma_offset_l1[ i ][ j ] */
    WORD16 i2_chroma_offset_l1_cb[MAX_DPB_SIZE];

    /** delta_chroma_weight_l1[ i ][ j ] */
    WORD16 i2_chroma_weight_l1_cr[MAX_DPB_SIZE];

    /** delta_chroma_offset_l1[ i ][ j ] */
    WORD16 i2_chroma_offset_l1_cr[MAX_DPB_SIZE];

}pred_wt_ofst_t;


/**
 * Structure to hold Reference picture list modification info
 */
typedef struct
{
    /* ref_pic_list_modification_flag_l0 */
    WORD8 i1_ref_pic_list_modification_flag_l0;

    /* list_entry_l0[ i ] */
    WORD8 i1_list_entry_l0[16];

    /* ref_pic_list_modification_flag_l1 */
    WORD8 i1_ref_pic_list_modification_flag_l1;

    /* list_entry_l1[ i ] */
    WORD8 i1_list_entry_l1[16];

    /* Reference POC values for L0,L1 */
    WORD32 i4_ref_poc_l0[16];
    WORD32 i4_ref_poc_l1[16];
}rplm_t;


/**
 * Structure to hold VPS info
 */
typedef struct
{
    /**
     *  video_parameter_set_id
     */
    WORD8 i1_vps_id;

    /**
     *  vps_temporal_id_nesting_flag
     */
    WORD8 i1_vps_temporal_id_nesting_flag;
    /**
     * sub_layer_ordering_info_present_flag
     */
    WORD8 i1_sub_layer_ordering_info_present_flag;
    /**
     *  vps_max_sub_layers_minus1
     */
    WORD8 i1_vps_max_sub_layers;

    /**
     *  vps_max_dec_pic_buffering
     */
    WORD8 ai1_vps_max_dec_pic_buffering[VPS_MAX_SUB_LAYERS];

    /**
     *  vps_max_num_reorder_pics
     */
    WORD8 ai1_vps_max_num_reorder_pics[VPS_MAX_SUB_LAYERS];

    /**
     *  vps_max_latency_increase
     */
    WORD8 ai1_vps_max_latency_increase[VPS_MAX_SUB_LAYERS];

    /**
     *  vps_num_hrd_parameters
     */
    WORD8 i1_vps_num_hrd_parameters;

    /**
     * vps_max_nuh_reserved_zero_layer_id
     */
    WORD8 i1_vps_max_nuh_reserved_zero_layer_id;

    /**
     * vps_num_op_sets
     */
    WORD8 i1_vps_num_op_sets;

    /**
     * layer_id_included_flag
     */
    //WORD8 ai1_layer_id_included_flag[2][MAX_NUH_LAYERS];
    /**
     *  Profile, Tier and Level info
     */
    profile_tier_lvl_info_t s_ptl;

    /**
     * bit_rate_info_present_flag[i]
     */
    WORD8 ai1_bit_rate_info_present_flag[VPS_MAX_SUB_LAYERS];


    /**
     * pic_rate_info_present_flag[i]
     */
    WORD8 ai1_pic_rate_info_present_flag[VPS_MAX_SUB_LAYERS];

    /**
     * avg_bit_rate[i]
     */
    UWORD16 au2_avg_bit_rate[VPS_MAX_SUB_LAYERS];
    /**
     * max_bit_rate[i]
     */
    UWORD16 au2_max_bit_rate[VPS_MAX_SUB_LAYERS];
    /**
     * constant_pic_rate_idc[i]
     */
    WORD8 ai1_constant_pic_rate_idc[VPS_MAX_SUB_LAYERS];
    /**
     * avg_pic_rate[i]
     */
    UWORD16 au2_avg_pic_rate[VPS_MAX_SUB_LAYERS];
}vps_t;

/**
 * Sub-layer HRD parameters Info
 */
typedef struct
{
    /**
    *  (together with bit_rate_scale) specifies the
    *  maximum input bit rate for the i-th CPB
    */
    UWORD32 au4_bit_rate_value_minus1[32];
    /**
    *  together with cpb_size_scale to specify the
    *  CPB size when the CPB operates at the access unit level.
    */
    UWORD32 au4_cpb_size_value_minus1[32];

    /**
    * together with cpb_size_du_scale to specify the CPB size
    * when the CPB operates at sub-picture level
    */
    UWORD32 au4_cpb_size_du_value_minus1[32];

    /**
    * specifies the maximum input bit rate for the i-th CPB when the CPB
    * operates at the sub-picture level. bit_rate_du_value_minus1[ i ]
    * shall be in the range of 0 to 2^32 - 2
    */
    UWORD32 au4_bit_rate_du_value_minus1[32];

    /**
    * if 1, specifies that the HSS operates in a constant bit rate (CBR) mode
    * if 0, specifies that the HSS operates in a intermittent bit rate (CBR) mode
    */
    UWORD8  au1_cbr_flag[32];

}sub_lyr_hrd_params_t;

/**
 * HRD parameters Info
 */
typedef struct
{

    /**
    *   Indicates the presence of the
    *   num_units_in_ticks, time_scale flag
    */
    UWORD8 u1_timing_info_present_flag;

    /**
    *   Number of units that
    *   correspond to one increment of the
    *   clock. Indicates the  resolution
    */
    UWORD32 u4_num_units_in_tick;

    /**
    *   The number of time units that pass in one second
    */
    UWORD32 u4_time_scale;

    /**
    * Nal- hrd parameters flag
    */
    UWORD8 u1_nal_hrd_parameters_present_flag;

    /**
    * VCL- hrd parameters flag
    */
    UWORD8 u1_vcl_hrd_parameters_present_flag;

    /**
    * Indicates the presence of NAL-HRD params or VCL_HRD params
    * in the bitstream
    */
    UWORD8 u1_cpbdpb_delays_present_flag;

    /**
    * specifies that sub-picture level CPB removal delay parameters are
    * present in picture timing SEI messages
    */
    UWORD8 u1_sub_pic_cpb_params_present_flag;

    /**
    * specify the clock sub-tick
    * (the minimum interval of time that can be represented in the coded data when sub_pic_cpb_params_present_flag is equal to 1)
    */
    UWORD8 u1_tick_divisor_minus2;

    /**
    * specifies the length, in bits for the du cpb delay syntax in pt_sei
    */
    UWORD8 u1_du_cpb_removal_delay_increment_length_minus1;

    /**
    * Indicates presence of sub_pic_cpb_params in pic timing sei
    */
    UWORD8 u1_sub_pic_cpb_params_in_pic_timing_sei_flag;

    /**
    * specifies the length, in bits, of the pic_dpb_output_du_delay syntax
    * element in the picture timing SEI message and the
    * pic_spt_dpb_output_du_delay syntax element in the decoding unit
    * information SEI message
     */
    UWORD8 u1_dpb_output_delay_du_length_minus1;

    /**
    * (together with bit_rate_value_minus1) specifies the
    * maximum input bit rate of the i-th CPB
    */
    UWORD32 u4_bit_rate_scale;

    /**
    * (together with cpb_size_du_value_minus1) specfies
    * CPB size of the i-th CPB when the CPB operates
    * at the access unit level
    */
    UWORD32 u4_cpb_size_scale;

    /**
    * (together with cpb_size_du_value_minus1) specfies
    * CPB size of the i-th CPB when the CPB operates
    * at the sub-picture level
    */
    UWORD32 u4_cpb_size_du_scale;


    /**
    * specifies the length, in bits for initial cpb delay (nal/vcl)sysntax in bp sei
    */
    UWORD8  u1_initial_cpb_removal_delay_length_minus1;

    /**
    * specifies the length, in bits for the au cpb delay syntax in pt_sei
    */
    UWORD8  u1_au_cpb_removal_delay_length_minus1;

    /**
    * specifies the length, in bits, of the pic_dpb_output_delay syntax element in the pt SEI message
    */
    UWORD8  u1_dpb_output_delay_length_minus1;

    /**
    * if 1, , for the highest temporal sub-layers, the temporal distance between the HRD output times
    *  of consecutive pictures in output order is constrained refer to Table E-6
    */
    UWORD8 au1_fixed_pic_rate_general_flag[6];

    UWORD8 au1_fixed_pic_rate_within_cvs_flag[6];

    /**
    * if 1, , for the highest temporal sub-layers, the temporal distance (in clock ticks) between the
    * element units that specify HRD output times of consecutive pictures in output order is constrained
    * refer to Table E-6
    */
    UWORD8 au1_elemental_duration_in_tc_minus1[6];

    /**
    * specifies the HRD operational mode
    */
    UWORD8 au1_low_delay_hrd_flag[6];

    /**
    * 1 specifies the number of alternative CPB specifications in the
    * bitstream of the cvs when HighestTid is equal to i
    */
    UWORD8 au1_cpb_cnt_minus1[6];


    /**
    *  VUI level Sub-layer HRD parameters
    */
    sub_lyr_hrd_params_t as_sub_layer_hrd_params[6];

}hrd_params_t;


/**
 * Structure to hold VUI parameters Info
 */
typedef struct
{
    /**
    *  indicates the presence of aspect_ratio
    */
    UWORD8 u1_aspect_ratio_info_present_flag;

    /**
    *  specifies the aspect ratio of the luma samples
    */
    UWORD8 u1_aspect_ratio_idc;

    /**
    *  width of the luma samples. user dependent
    */
    UWORD16 u2_sar_width;

    /**
    *  hieght of the luma samples. user dependent
    */
    UWORD16 u2_sar_height;

    /**
    * if 1, specifies that the overscan_appropriate_flag is present
    * if 0, the preferred display method for the video signal is unspecified
    */
    UWORD8 u1_overscan_info_present_flag;

    /**
    * if 1,indicates that the cropped decoded pictures output
    * are suitable for display using overscan
    */
    UWORD8 u1_overscan_appropriate_flag;

    /**
    * if 1 specifies that video_format, video_full_range_flag and
    * colour_description_present_flag are present
    */
    UWORD8 u1_video_signal_type_present_flag;

    /**
    *
    */
    UWORD8 u1_video_format;

    /**
    * indicates the black level and range of the luma and chroma signals
    */
    UWORD8 u1_video_full_range_flag;

    /**
    * if 1,to 1 specifies that colour_primaries, transfer_characteristics
    * and matrix_coefficients are present
    */
    UWORD8 u1_colour_description_present_flag;

    /**
    * indicates the chromaticity coordinates of the source primaries
    */
    UWORD8 u1_colour_primaries;

    /**
    * indicates the opto-electronic transfer characteristic of the source picture
    */
    UWORD8 u1_transfer_characteristics;

    /**
    * the matrix coefficients used in deriving luma and chroma signals
    * from the green, blue, and red primaries
    */
    UWORD8 u1_matrix_coefficients;

    /**
    * if 1, specifies that chroma_sample_loc_type_top_field and
    * chroma_sample_loc_type_bottom_field are present
    */
    UWORD8 u1_chroma_loc_info_present_flag;

    /**
    * location of chroma samples
    */
    UWORD8 u1_chroma_sample_loc_type_top_field;

    UWORD8 u1_chroma_sample_loc_type_bottom_field;

    /**
    * if 1, indicates that the value of all decoded chroma samples is
    * equal to 1 << ( BitDepthC - 1 )
    */
    UWORD8 u1_neutral_chroma_indication_flag;

    /**
    *  1 indicates that the coded video sequence conveys pictures that represent fields
    *  0 indicates the pictures that represents field
    */
    UWORD8 u1_field_seq_flag;

    /**
    * specifies that picture timing SEI messages are present for every picture
    */
    UWORD8 u1_frame_field_info_present_flag;

    /**
    * 1 indicates that the default display window parameters follow next in the VUI
    */
    UWORD8 u1_default_display_window_flag;

    /**
    * specify the samples of the pictures in the coded video sequence
    * that are within the default display window,
    * in terms of a rectangular region specified in picture coordinates for display
    */
    UWORD32 u4_def_disp_win_left_offset;

    UWORD32 u4_def_disp_win_right_offset;

    UWORD32 u4_def_disp_win_top_offset;

    UWORD32 u4_def_disp_win_bottom_offset;

    /**
    *  to 1 specifies that the syntax structure hrd_parameters is present in the vui_parameters syntax structue
    */
    UWORD8 u1_vui_hrd_parameters_present_flag;

    /**
    *  VUI level HRD parameters
    */
    hrd_params_t s_vui_hrd_parameters;

    /**
    *   Indicates the presence of the
    *   num_units_in_ticks, time_scale flag
    */
    UWORD8 u1_vui_timing_info_present_flag;

    /**
    *   Number of units that
    *   correspond to one increment of the
    *   clock. Indicates the  resolution
    */
    UWORD32 u4_vui_num_units_in_tick;

    /**
    *   The number of time units that pass in one second
    */
    UWORD32 u4_vui_time_scale;
    /**
    * if 1, indicates that the POC for each picture in the coded video sequence (cvs) (not the first picture), in decoding order,
    * is proportional to the output time of the picture relative to that of the first picture in the cvs
    */
    UWORD8 u1_poc_proportional_to_timing_flag;

    /**
    * num_ticks_poc_diff_one_minus1 plus 1 specifies the number of clock ticks
    * corresponding to a difference of poc values equal to 1
    */
    UWORD8 u1_num_ticks_poc_diff_one_minus1;

    /**
    * 1, specifies that the following cvs bitstream restriction parameters are present
    */
    UWORD8 u1_bitstream_restriction_flag;

    /**
    *  if 1, indicates that each pps that is active in the cvs has
    *  the same value of the tile syntax elements
    */
    UWORD8 u1_tiles_fixed_structure_flag;

    /**
    * if 0, indicates that no pel outside the pic boundaries and
    * no sub-pels derived using pels outside the pic boundaries is used for inter prediction
    */
    UWORD8 u1_motion_vectors_over_pic_boundaries_flag;

    /**
    * if 1, indicates
    * all P/B slices belonging to the same pic have an identical refpic list0,
    * all B slices that belong to the same picture have an identical refpic list1.
    */
    UWORD8 u1_restricted_ref_pic_lists_flag;

    /**
    *   min_spatial_segmentation_idc, when not equal to 0, establishes a bound on the maximum possible size of distinct
    *   coded spatial segmentation regions in the pictures of the CVS. When min_spatial_segmentation_idc is not present, it is
    *   inferred to be equal to 0. The value of min_spatial_segmentation_idc shall be in the range of 0 to 4095, inclusive.
    *
    *   can be used by a decoder to calculate the maximum number of luma samples to be processed by one processing thread
    *
    *   If tiles=0 and entropy_sync=0 then
    *       no slice shall exceed ( 4 * PicSizeInSamplesY ) / minSpatialSegmentationTimes4 luma samples
    *
    *   If tiles=1 and entropy_sync=0 then
    *       no tile shall exceed ( 4 * PicSizeInSamplesY ) / minSpatialSegmentationTimes4 luma samples
    *
    *   If tiles=0 and entropy_sync=1 then
    *       ( 2 * pic_height_in_luma_samples + pic_width_in_luma_samples ) * CtbSizeY
    *               <= ( 4 * PicSizeInSamplesY ) / minSpatialSegmentationTimes4
    */
    UWORD32 u4_min_spatial_segmentation_idc;
    /**
    * Indicates a number of bytes not exceeded by the sum of the sizes of the VCL NAL units
    * associated with any coded picture
    */
    UWORD8 u1_max_bytes_per_pic_denom;

    /**
    *  Indicates an upper bound for the number of bits of coding_unit() data
    */
    UWORD8 u1_max_bits_per_mincu_denom;

    /**
    * Indicate the maximum absolute value of a decoded horizontal MV component
    * in quarter-pel luma units
    */
    UWORD8 u1_log2_max_mv_length_horizontal;

    /**
    * Indicate the maximum absolute value of a decoded vertical MV component
    * in quarter-pel luma units
    */
    UWORD8 u1_log2_max_mv_length_vertical;


}vui_t;


/**
 * Structure to hold SPS info
 */
typedef struct
{
    /**
     * pic_width_in_luma_samples
     */
    WORD16 i2_pic_width_in_luma_samples;

    /**
     *  pic_height_in_luma_samples
     */
    WORD16 i2_pic_height_in_luma_samples;

    /**
     *  pic_crop_left_offset
     */
    WORD16 i2_pic_crop_left_offset;

    /**
     *  pic_crop_right_offset
     */
    WORD16 i2_pic_crop_right_offset;

    /**
     *  pic_crop_top_offset
     */
    WORD16 i2_pic_crop_top_offset;

    /**
     *  pic_crop_bottom_offset
     */
    WORD16 i2_pic_crop_bottom_offset;

    /**
     *  seq_parameter_set_id
     */
    WORD8 i1_sps_id;

    /**
     *  video_parameter_set_id
     */
    WORD8 i1_vps_id;

    /**
     *  sps_max_sub_layers_minus1
     */
    WORD8 i1_sps_max_sub_layers;

    /**
     *  chroma_format_idc
     */
    WORD8 i1_chroma_format_idc;

    /**
     * Bit depth of luma samples
     */
    WORD8 i1_bit_depth_luma_minus8;

    /**
     * Bit depth of chrma samples
     */
    WORD8 i1_bit_depth_chroma_minus8;

    /* separate_colour_plane_flag */
    WORD8 i1_separate_colour_plane_flag;

    /**
     *  pic_cropping_flag
     */
    WORD8 i1_pic_cropping_flag;

    /**
     *  pcm_enabled_flag
     */
    WORD8 i1_pcm_enabled_flag;

    /**
     *  pcm_sample_bit_depth_luma
     */
    WORD8 i1_pcm_sample_bit_depth_luma;

    /**
     *  pcm_sample_bit_depth_chroma
     */
    WORD8 i1_pcm_sample_bit_depth_chroma;

    /**
     *  log2_max_pic_order_cnt_lsb_minus4
     */
    WORD8 i1_log2_max_pic_order_cnt_lsb;
    /**
     * sps_sub_layer_ordering_info_present_flag
     */
    WORD8 i1_sps_sub_layer_ordering_info_present_flag;
    /**
     *  sps_max_dec_pic_buffering
     */
    WORD8 ai1_sps_max_dec_pic_buffering[SPS_MAX_SUB_LAYERS];

    /**
     *  sps_max_num_reorder_pics
     */
    WORD8 ai1_sps_max_num_reorder_pics[SPS_MAX_SUB_LAYERS];

    /**
     *  sps_max_latency_increase
     */
    WORD8 ai1_sps_max_latency_increase[SPS_MAX_SUB_LAYERS];

    /**
     *  log2_min_coding_block_size_minus3
     */
    WORD8 i1_log2_min_coding_block_size;

    /**
     *  log2_diff_max_min_coding_block_size
     */
    WORD8 i1_log2_diff_max_min_coding_block_size;

    /**
     *  log2_min_transform_block_size_minus2
     */
    WORD8 i1_log2_min_transform_block_size;

    /**
     *  log2_diff_max_min_transform_block_size
     */
    WORD8 i1_log2_diff_max_min_transform_block_size;

    /**
     *  log2_min_pcm_coding_block_size_minus3
     */
    WORD8 i1_log2_min_pcm_coding_block_size;

    /**
     *  log2_diff_max_min_pcm_coding_block_size
     */
    WORD8 i1_log2_diff_max_min_pcm_coding_block_size;

    /**
     *  max_transform_hierarchy_depth_inter
     */
    WORD8 i1_max_transform_hierarchy_depth_inter;

    /**
     *  max_transform_hierarchy_depth_intra
     */
    WORD8 i1_max_transform_hierarchy_depth_intra;

    /**
     *  scaling_list_enable_flag
     */
    WORD8 i1_scaling_list_enable_flag;

    /**
     *  sps_scaling_list_data_present_flag
     */
    WORD8 i1_sps_scaling_list_data_present_flag;

    /**
     *  amp_enabled_flag
     */
    WORD8 i1_amp_enabled_flag;

    /**
     *  sample_adaptive_offset_enabled_flag
     */
    WORD8 i1_sample_adaptive_offset_enabled_flag;

    /**
     *  pcm_loop_filter_disable_flag
     */
    WORD8 i1_pcm_loop_filter_disable_flag;

    /**
     *  sps_temporal_id_nesting_flag
     */
    WORD8 i1_sps_temporal_id_nesting_flag;

    /**
     *  num_short_term_ref_pic_sets
     */
    WORD8 i1_num_short_term_ref_pic_sets;

    /**
     *  long_term_ref_pics_present_flag
     */
    WORD8 i1_long_term_ref_pics_present_flag;

    /**
     *  num_long_term_ref_pics_sps
     */
    WORD8 i1_num_long_term_ref_pics_sps;

    /**
     *  lt_ref_pic_poc_lsb_sps[]
     */
    WORD8 ai1_lt_ref_pic_poc_lsb_sps[MAX_LTREF_PICS_SPS];

    /**
     *  used_by_curr_pic_lt_sps_flag[]
     */
    WORD8 ai1_used_by_curr_pic_lt_sps_flag[MAX_LTREF_PICS_SPS];

    /**
     *  sps_temporal_mvp_enable_flag
     */
    WORD8 i1_sps_temporal_mvp_enable_flag;

    /**
     * strong_intra_smoothing_enable_flag
     */
    WORD8 i1_strong_intra_smoothing_enable_flag;

    /**
     *  vui_parameters_present_flag
     */
    WORD8 i1_vui_parameters_present_flag;

    /**
     * vui parameters Structure info
     */
    vui_t s_vui_parameters;

    /**
     *  Log2(CTB Size) in luma units
     */

    WORD8 i1_log2_ctb_size;

    /**
     * Maximum transform block size
     */
    WORD8 i1_log2_max_transform_block_size;

    /**
     *  Picture width in CTB units
     */

    WORD16 i2_pic_wd_in_ctb;

    /**
     *  Picture height in CTB units
     */

    WORD16 i2_pic_ht_in_ctb;

    /**
     * Picture width in min CB units
     */

    WORD16 i2_pic_wd_in_min_cb;

    /**
     *  Picture height in min CB units
     */

    WORD16 i2_pic_ht_in_min_cb;

    /**
     *  Picture size in CTB units
     */
    WORD32 i4_pic_size_in_ctb;

    /**
     *  Profile, Tier and Level info
     */

    profile_tier_lvl_info_t s_ptl;

    /**
     *  Short term reference pic set
     */
    stref_picset_t as_stref_picset[MAX_STREF_PICS_SPS];

    /**
     *  Pointer to scaling matrix
     */
    /*************************************************************************/
    /* Contanis the matrice in the following order in a 1D buffer            */
    /* Intra 4 x 4 Y, 4 x 4 U, 4 x 4 V                                       */
    /* Inter 4 x 4 Y, 4 x 4 U, 4 x 4 V                                       */
    /* Intra 8 x 8 Y, 8 x 8 U, 8 x 8 V                                       */
    /* Inter 8 x 8 Y, 8 x 8 U, 8 x 8 V                                       */
    /* Intra 16x16 Y, 16x16 U, 16x16 V                                       */
    /* Inter 16x16 Y, 16x16 U, 16x16 V                                       */
    /* Intra 32x32 Y                                                         */
    /* Inter 32x32 Y                                                         */
    /*************************************************************************/
    WORD16 *pi2_scaling_mat;


    /*
     * Flag indicating if the SPS is parsed
     */
    WORD8 i1_sps_valid;

}sps_t;

/**
 * Structure to hold PPS info
 */
typedef struct
{
    /**
     *  Pointer to scaling matrix
     */
    /*************************************************************************/
    /* Contanis the matrice in the following order in a 1D buffer            */
    /* Intra 4 x 4 Y, 4 x 4 U, 4 x 4 V                                       */
    /* Inter 4 x 4 Y, 4 x 4 U, 4 x 4 V                                       */
    /* Intra 8 x 8 Y, 8 x 8 U, 8 x 8 V                                       */
    /* Inter 8 x 8 Y, 8 x 8 U, 8 x 8 V                                       */
    /* Intra 16x16 Y, 16x16 U, 16x16 V                                       */
    /* Inter 16x16 Y, 16x16 U, 16x16 V                                       */
    /* Intra 32x32 Y                                                         */
    /* Inter 32x32 Y                                                         */
    /*************************************************************************/
    WORD16 *pi2_scaling_mat;

    /**
     *  Pointer to an array containing tile info such as position, width, height
     *  of each tile
     */

    /* column_width_minus1[ i ] and row_height_minus1[ i ] */
    tile_t *ps_tile;

    /**
     *  pic_parameter_set_id
     */
    WORD8 i1_pps_id;

    /**
     *  seq_parameter_set_id
     */
    WORD8 i1_sps_id;

    /**
     *  sign_data_hiding_flag
     */
    WORD8 i1_sign_data_hiding_flag;

    /**
     *  cabac_init_present_flag
     */
    WORD8 i1_cabac_init_present_flag;

    /**
     *  num_ref_idx_l0_default_active_minus1
     */
    WORD8 i1_num_ref_idx_l0_default_active;

    /**
     * num_ref_idx_l1_default_active_minus1
     */
    WORD8 i1_num_ref_idx_l1_default_active;

    /**
     *  pic_init_qp_minus26
     */
    WORD8 i1_pic_init_qp;

    /**
     *  constrained_intra_pred_flag
     */
    WORD8 i1_constrained_intra_pred_flag;

    /**
     *  transform_skip_enabled_flag
     */
    WORD8 i1_transform_skip_enabled_flag;

    /**
     *  cu_qp_delta_enabled_flag
     */
    WORD8 i1_cu_qp_delta_enabled_flag;

    /**
     * diff_cu_qp_delta_depth
     */
    WORD8 i1_diff_cu_qp_delta_depth;

    /**
     *  pic_cb_qp_offset
     */
    WORD8 i1_pic_cb_qp_offset;

    /**
     *  pic_cr_qp_offset
     */
    WORD8 i1_pic_cr_qp_offset;

    /**
     *  pic_slice_level_chroma_qp_offsets_present_flag
     */
    WORD8 i1_pic_slice_level_chroma_qp_offsets_present_flag;

    /**
     *  weighted_pred_flag
     */
    WORD8 i1_weighted_pred_flag;

    /**
     *  weighted_bipred_flag
     */
    WORD8 i1_weighted_bipred_flag;

    /**
     *  output_flag_present_flag
     */
    WORD8 i1_output_flag_present_flag;

    /**
     *  transquant_bypass_enable_flag
     */
    WORD8 i1_transquant_bypass_enable_flag;

    /**
     *  dependent_slice_enabled_flag
     */
    WORD8 i1_dependent_slice_enabled_flag;

    /**
     *  tiles_enabled_flag
     */
    WORD8 i1_tiles_enabled_flag;

    /**
     *  entropy_coding_sync_enabled_flag
     */
    WORD8 i1_entropy_coding_sync_enabled_flag;

    /**
     * entropy_slice_enabled_flag
     */
    WORD8 i1_entropy_slice_enabled_flag;

    /**
     *  num_tile_columns_minus1
     */
    WORD8 i1_num_tile_columns;

    /**
     *  num_tile_rows_minus1
     */
    WORD8 i1_num_tile_rows;

    /**
     *  uniform_spacing_flag
     */
    WORD8 i1_uniform_spacing_flag;

    /**
     *  loop_filter_across_tiles_enabled_flag
     */
    WORD8 i1_loop_filter_across_tiles_enabled_flag;

    /**
     *  loop_filter_across_slices_enabled_flag
     */
    WORD8 i1_loop_filter_across_slices_enabled_flag;

    /**
     *  deblocking_filter_control_present_flag
     */
    WORD8 i1_deblocking_filter_control_present_flag;

    /**
     *  deblocking_filter_override_enabled_flag
     */
    WORD8 i1_deblocking_filter_override_enabled_flag;

    /**
     *  pic_disable_deblocking_filter_flag
     */
    WORD8 i1_pic_disable_deblocking_filter_flag;

    /**
     *  beta_offset_div2
     */
    WORD8 i1_beta_offset_div2;

    /**
     *  tc_offset_div2
     */
    WORD8 i1_tc_offset_div2;

    /**
     *  pps_scaling_list_data_present_flag
     */
    WORD8 i1_pps_scaling_list_data_present_flag;

    /**
     * lists_modification_present_flag
     */
    WORD8 i1_lists_modification_present_flag;

    /**
     * num_extra_slice_header_bits
     */
    WORD8 i1_num_extra_slice_header_bits;

    /**
     *  log2_parallel_merge_level_minus2
     */
    WORD8 i1_log2_parallel_merge_level;

    /**
     *  slice_header_extension_present_flag
     */
    WORD8 i1_slice_header_extension_present_flag;

    /**
     *  slice_extension_present_flag
     */
    WORD8 i1_slice_extension_present_flag;

    /**
     *  scaling_list_dc_coef_minus8
     */
    /*************************************************************************/
    /* DC value of the scaling list                                          */
    /* Only 16 x 16 and 32 x 32 scaling lists have valid entries.            */
    /* Entries stored for all sizes for uniformity.                          */
    /* Remaining will be initialized to default values if used               */
    /*************************************************************************/
    UWORD8 au1_scaling_list_dc_coef[TOTAL_SCALE_MAT_COUNT];

    /**
     * Log2MinCuQpDeltaSize
     */
    WORD8 i1_log2_min_cu_qp_delta_size;


    /*
     * Flag indicating if the PPS is parsed
     */
    WORD8 i1_pps_valid;

}pps_t;



/**
 * Buffering Period SEI parameters Info
 */
typedef struct
{
    /**
    * specifies SPS Id active for the coded picture assosiated
    * with the bp message.
    */
    UWORD8  u1_sps_id;

    /**
    * Derived from Hrd parameters
    */
    UWORD8  u1_sub_pic_cpb_params_present_flag;

    /**
    * specifies the presence of the initial_alt_cpb_removal_delay[ i ]
    * and initial_alt_cpb_removal_offset[ i ] syntax elements
    */
    UWORD8  u1_rap_cpb_params_present_flag;

    /**
    * cbp removal delay used in buffering period SEI
    */
    UWORD32 cpb_delay_offset;

    /**
    * dbp removal delay used in buffering period SEI
    */
    UWORD32 dpb_delay_offset;

    /**
    * concatanation flag
    */
    UWORD8 concatenation_flag;

    /**
    * delata cbp removal delay
    */
    UWORD32 au_cpb_removal_delay_delta_minus1;

    /**
    * specify the default initial CPB removal delays, respectively,
    * for the CPB when the NAL HRD parameters are in use
    */
    UWORD32 au4_nal_initial_cpb_removal_delay[32];

    /**
    * specify the alternate initial CPB removal delays, respectively,
    * for the CPB when the NAL HRD parameters are in use
    */
    UWORD32 au4_nal_initial_alt_cpb_removal_delay[32];

    /**
    * specify the initial CPB removal delay offset, respectively,
    * for the CPB when the NAL HRD parameters are in use
    */
    UWORD32 au4_nal_initial_cpb_removal_delay_offset[32];

    /**
    * specify the alternate initial CPB removal delays offsets, respectively,
    * for the CPB when the NAL HRD parameters are in use
    */
    UWORD32 au4_nal_initial_alt_cpb_removal_delay_offset[32];

    /**
    * specify the default initial CPB removal delays, respectively,
    * for the CPB when the VCL HRD parameters are in use
    */
    UWORD32 au4_vcl_initial_cpb_removal_delay[32];

    /**
    * specify the initial alt CPB removal delays , respectively,
    * for the CPB when the VCL HRD parameters are in use
    */
    UWORD32 au4_vcl_initial_alt_cpb_removal_delay[32];

    /**
    * specify the initial CPB removal delay offset, respectively,
    * for the CPB when the VCL HRD parameters are in use
    */
    UWORD32 au4_vcl_initial_cpb_removal_delay_offset[32];

    /**
    * specify the alternate initial CPB removal delays offsets, respectively,
    * for the CPB when the VCL HRD parameters are in use
    */
    UWORD32 au4_vcl_initial_alt_cpb_removal_delay_offset[32];

    /**
    *  Inital CPB removal delay
    */
    UWORD32 u4_initial_cpb_removal_delay_length;

    /**
    *  CPB cnt for corr. sublayer
    */
    UWORD32 u4_cpb_cnt;


    /**
    * VBV buffer size used in buffering period SEI
    */
    UWORD32 u4_buffer_size_sei;

    /**
    * Encoder buffer fullness  used in buffering period SEI
    */
    UWORD32 u4_dbf_sei;

    /**
    * target bitrate used in buffering period SEI
    */
    UWORD32 u4_target_bit_rate_sei;




}buf_period_sei_params_t;


/**
 * Picture Timing SEI parameters Info
 */
typedef struct
{
    /**
    * derived from vui parameters
    */
    UWORD8 u1_frame_field_info_present_flag;

    /**
    * indicates whether a picture should be displayed as a
    * frame or as one or more fields
    */
    UWORD32 u4_pic_struct;

    UWORD8  u1_num_clk_ticks;

    /**
    * indicates whether a scan-type of the pic should be interpreted
    * as progressive or interlaced
    */
    UWORD8 u1_progressive_source_idc;

    /**
    * if 1, indicates if the current pic is a duplicte pic in output order
    */
    UWORD8 u1_duplicate_flag;

    /**
    * specifies the number clock ticks between the nominal CPB removal time
    * au associated with the pt SEI message and
    * the preceding au in decoding order that contained a bp SEI message
    */
    UWORD32 u4_au_cpb_removal_delay_minus1;

    /**
    * compute the DPB output time of the picture
    */
    UWORD32 u4_pic_dpb_output_delay;

    UWORD32 u4_pic_dpb_output_du_delay;

    /**
    * specifies the number of decoding units in the access unit
    * the picture timing SEI message is associated with
    */
    UWORD32 u4_num_decoding_units_minus1;

    /**
    * if 1 specifies that the du_common_cpb_removal_delay_increment_minus1 is present
    */
    UWORD32 u4_du_common_cpb_removal_delay_flag;

    /**
    * specifies the duration, in units of clock sub-ticks,
    * between the nominal CPB removal times of any two consecutive decoding units
    * in decoding order in the access unit associated with the pt_SEI message
    */
    UWORD32 u4_du_common_cpb_removal_delay_increment_minus1; //same as u4_du_cpb_removal_delay_increment_minus1

    /**
    * specifies the number of NAL units in the decoding unit of the access unit
    * the picture timing SEI message is associated with.
    * range from 0 to (pic size in ctby - 1)
    */
    UWORD32 u4_num_nalus_in_du_minus1;

    /**
    * specifies the duration, in units of clock sub-ticks,
    * between the nominal CPB removal times of the ( i + 1 )-th decoding unit and the i-th decoding unit,
    * in decoding order, in the access unit associated with the pt_SEI message
    */
    UWORD32 u4_du_cpb_removal_delay_increment_minus1;


}pic_timing_sei_params_t;

/**
 * Structure to hold Recovery point SEI parameters Info
 */
typedef struct
{
    /**
    * specifies the recovery point of output pictures in output order
    */
    WORD32 i4_recovery_poc_cnt;

    UWORD8 u1_exact_match_flag;

    /**
    * indicates the presence or absence of a broken link in the NAL unit
    * stream at the location of the recovery point SEI message
    */

    UWORD8 u1_broken_link_flag;

}recovery_point_sei_params_t;
/**
 * Structure to hold active parameter parameter set SEI parameters Info
 */
typedef struct
{
    /*
    * active vps id
    */

    UWORD8 u1_active_video_parameter_set_id;

    /*
    * default set to zero.
    */
    UWORD8 u1_self_contained_cvs_flag;

    UWORD8 u1_no_parameter_set_update_flag;

    UWORD8 u1_num_sps_ids_minus1;

    /*
    * active sps id
    */
    UWORD8 au1_active_seq_parameter_set_id[15];

}active_parameter_set_sei_param_t;

/**
 * Structure to hold SEI parameters Info
 */
typedef struct
{

    WORD8 i1_sei_parameters_present_flag;

    WORD8 i1_aud_present_flag;

    WORD8 i1_buf_period_params_present_flag;

    WORD8 i1_pic_timing_params_present_flag;

    WORD8 i1_recovery_point_params_present_flag;

    buf_period_sei_params_t  s_buf_period_sei_params;

    pic_timing_sei_params_t  s_pic_timing_sei_params;

    recovery_point_sei_params_t s_recovery_point_params;

    active_parameter_set_sei_param_t s_active_parameter_set_sei_params;


} sei_params_t;



/**
 * Structure to hold slice header info
 */
typedef struct
{
    /**
     *  entry_point_offset[ i ]
     */
    WORD32 *pi4_entry_point_offset;

    /**
     *  poc_lsb_lt[ i ]
     */
    WORD32 ai4_poc_lsb_lt[MAX_DPB_SIZE];

    /**
     *  slice_header_extension_length
     */
    WORD16 i2_slice_header_extension_length;

    /**
     *  slice_address
     */
    WORD16 i2_slice_address;

    /**
     *  first_slice_in_pic_flag
     */
    WORD8 i1_first_slice_in_pic_flag;

    /* PPS id */
    WORD8 i1_pps_id;
    /**
     *  no_output_of_prior_pics_flag
     */
    WORD8 i1_no_output_of_prior_pics_flag;

    /**
     *  dependent_slice_flag
     */
    WORD8 i1_dependent_slice_flag;

    /**
     *  slice_type
     */
    WORD8 i1_slice_type;

    /**
     *  pic_output_flag
     */
    WORD8 i1_pic_output_flag;

    /**
     *  colour_plane_id
     */
    WORD8 i1_colour_plane_id;

    /**
     *  pic_order_cnt_lsb
     */
    WORD32 i4_pic_order_cnt_lsb;

    /**
     *  absolute pic_order_cnt
     */
    WORD32 i4_abs_pic_order_cnt;

    /**
     *  short_term_ref_pic_set_sps_flag
     */
    WORD8 i1_short_term_ref_pic_set_sps_flag;

    /**
     *  short_term_ref_pic_set_idx
     */
    WORD8 i1_short_term_ref_pic_set_idx;

    /**
     *  num_long_term_sps
     */
    WORD8 i1_num_long_term_sps;

    /**
     *  num_long_term_pics
     */
    WORD8 i1_num_long_term_pics;

    /**
     *  lt_idx_sps[ i ]
     */
    WORD8 ai1_lt_idx_sps[MAX_DPB_SIZE];

    /**
     *  used_by_curr_pic_lt_flag[ i ]
     */
    WORD8 ai1_used_by_curr_pic_lt_flag[MAX_DPB_SIZE];

    /**
     *  delta_poc_msb_present_flag[ i ]
     */
    WORD8 ai1_delta_poc_msb_present_flag[MAX_DPB_SIZE];

    /**
     *  delta_poc_msb_cycle_lt[ i ]
     */
    WORD8 ai1_delta_poc_msb_cycle_lt[MAX_DPB_SIZE];

    /**
     *  slice_sao_luma_flag
     */
    WORD8 i1_slice_sao_luma_flag;

    /**
     *  slice_sao_chroma_flag
     */
    WORD8 i1_slice_sao_chroma_flag;

    /**
     *  slice_temporal_mvp_enable_flag
     */
    WORD8 i1_slice_temporal_mvp_enable_flag;

    /**
     *  num_ref_idx_active_override_flag
     */
    WORD8 i1_num_ref_idx_active_override_flag;

    /**
     *  num_ref_idx_l0_active_minus1
     */
    WORD8 i1_num_ref_idx_l0_active;

    /**
     *  num_ref_idx_l1_active_minus1
     */
    WORD8 i1_num_ref_idx_l1_active;

    /**
     *  mvd_l1_zero_flag
     */
    WORD8 i1_mvd_l1_zero_flag;

    /**
     *  cabac_init_flag
     */
    WORD8 i1_cabac_init_flag;

    /**
     *  collocated_from_l0_flag
     */
    WORD8 i1_collocated_from_l0_flag;

    /**
     *  collocated_ref_idx
     */
    WORD8 i1_collocated_ref_idx;

    /**
     * five_minus_max_num_merge_cand
     */
    WORD8 i1_max_num_merge_cand;

    /**
     *  slice_qp_delta
     */
    WORD8 i1_slice_qp_delta;

    /**
     *  slice_cb_qp_offset
     */
    WORD8 i1_slice_cb_qp_offset;

    /**
     *  slice_cr_qp_offset
     */
    WORD8 i1_slice_cr_qp_offset;

    /**
     *  deblocking_filter_override_flag
     */
    WORD8 i1_deblocking_filter_override_flag;

    /**
     *  slice_disable_deblocking_filter_flag
     */
    WORD8 i1_slice_disable_deblocking_filter_flag;

    /**
     *  beta_offset_div2
     */
    WORD8 i1_beta_offset_div2;

    /**
     *  tc_offset_div2
     */
    WORD8 i1_tc_offset_div2;

    /**
     *  slice_loop_filter_across_slices_enabled_flag
     */
    WORD8 i1_slice_loop_filter_across_slices_enabled_flag;

    /**
     *  NUmber of entry point offsets
     */
    WORD32 i4_num_entry_point_offsets;

    /**
     *  offset_len_minus1
     */
    WORD8 i1_offset_len;

    /**
     *  Entry point offsets
     */
    WORD32 *pu4_entry_point_offset;

    /**
     * Short term reference picture set
     */
    stref_picset_t s_stref_picset;

    /**
     *  Weight and offset info for Weighted prediction
     */
    pred_wt_ofst_t s_wt_ofst;

    /**
     *  Reference prediction list modification
     */
    rplm_t s_rplm;

    /**
     *  First CTB' X pos : slice_address % i2_pic_wd_in_ctb
     */
    WORD16 i2_ctb_x;

    /**
     *  First CTB' Y pos : slice_address / i2_pic_wd_in_ctb
     */
    WORD16 i2_ctb_y;

    /**
     * L0 Reference pic lists
     */
    ref_list_t as_ref_pic_list0[MAX_DPB_SIZE];

    /**
     * L1 Reference pic lists
     */
    ref_list_t as_ref_pic_list1[MAX_DPB_SIZE];

    /**
     * NAL unit type of the slice
     */
    WORD8 i1_nal_unit_type;

    /**
     * Low delay check flag
     */
    WORD8 i1_low_delay_flag;

    /**
     * The last independent slice's start ctb_x
     * If the current slice is independent, it is the same as the current CTBs ctb_x
     */
    WORD16 i2_independent_ctb_x;

    /**
     * The last independent slice's start ctb_y
     * If the current slice is independent, it is the same as the current CTBs ctb_y
     */
    WORD16 i2_independent_ctb_y;


    UWORD8 u1_parse_data_init_done;

    /**
     * Temporal ID in NAL header
     */
    WORD32 u4_nuh_temporal_id;
}slice_header_t;








#endif /* _IHEVC_STRUCTS_H_ */
