/******************************************************************************
*
* 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
     */
    //UWORD32      b1_chroma_present   : 1;

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

    /**
     *  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];
}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_ebf_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_ */
