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


/**
 * Buffering Period SEI parameters Info
 */
typedef struct
{
    /**
     * specifies SPS Id active for the coded picture assosiated
     * with the bp message.
     */
    UWORD8  u1_bp_seq_parameter_set_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 u4_cpb_delay_offset;

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

    /**
     * concatanation flag
     */
    UWORD8 u1_concatenation_flag;

    /**
     * delata cbp removal delay
     */
    UWORD32 u4_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[MAX_CPB_CNT];

    /**
     * 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[MAX_CPB_CNT];

    /**
     * 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[MAX_CPB_CNT];

    /**
     * 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[MAX_CPB_CNT];

    /**
     * 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[MAX_CPB_CNT];

    /**
     * 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[MAX_CPB_CNT];

    /**
     * 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[MAX_CPB_CNT];

    /**
     * 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[MAX_CPB_CNT];

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

    UWORD32 u4_source_scan_type;

    /**
     * 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
     */
    UWORD8 u1_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 au4_num_nalus_in_du_minus1[4320 / MIN_CTB_SIZE];

    /**
     * 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 au4_du_cpb_removal_delay_increment_minus1[4320 / MIN_CTB_SIZE];

}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 Mastering Display Colour Volume SEI
 */
typedef struct
{
    /**
     * Array to store the display_primaries_x values
     */
    UWORD16 au2_display_primaries_x[3];

    /**
     * Array to store the display_primaries_y values
     */
    UWORD16 au2_display_primaries_y[3];

    /**
     * Variable to store the white point x value
     */
    UWORD16 u2_white_point_x;

    /**
     * Variable to store the white point y value
     */
    UWORD16 u2_white_point_y;

    /**
     * Variable to store the max display mastering luminance value
     */
    UWORD32 u4_max_display_mastering_luminance;

    /**
     * Variable to store the min display mastering luminance value
     */
    UWORD32 u4_min_display_mastering_luminance;

}mastering_dis_col_vol_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];

    UWORD32 au4_layer_sps_idx[64];

}active_parameter_set_sei_param_t;

/**
 * Structure to hold SEI Hash values
 */
typedef struct
{
    /*
     * SEI Hash values for each color component
     */
    UWORD8 au1_sei_hash[3][16];

}hash_sei_param_t;

/**
 * Structure to hold user data registered SEI param Info
 */
typedef struct
{
    /**
     * Contains country code by Annex A of Recommendation ITU-T T.35
     */
    UWORD8 u1_itu_t_t35_country_code;

    /**
     * Contains country code by Annex B of Recommendation ITU-T T.35
     */
    UWORD8 u1_itu_t_t35_country_code_extension_byte;

    /**
     * Contains data registered as specified in Recommendation ITU-T T.35
     */
    UWORD8 u1_itu_t_t35_payload_byte[MAX_USERDATA_PAYLOAD];

    /**
     * Valid payload size present in this buffer
     */
    WORD32 i4_valid_payload_size;

    /**
     * Total payload size incase payloadSize > IHEVCD_MAX_USERDATA_PAYLOAD
     */
    WORD32 i4_payload_size;
}user_data_registered_itu_t_t35_t;

/**
 * Structure to hold time code SEI param info
 */
typedef struct
{
    /**
     * Number of sets of clock timestamp syntax elements present for the current picture
     */
    UWORD8 u1_num_clock_ts;

    /**
     * Indicates presenc of associated set of clock timestamps
     */
    UWORD8 au1_clock_timestamp_flag[MAX_NUM_CLOCK_TS];

    /**
     * Used in calculating clockTimestamp[i]
     */
    UWORD8 au1_units_field_based_flag[MAX_NUM_CLOCK_TS];

    /**
     * Specifies the method of dropping values of the n_frames[i] syntax element
     */
    UWORD8 au1_counting_type[MAX_NUM_CLOCK_TS];

    /**
     * Specifies that the n_frames[i] syntax element is followed by seconds_value[i],
     * minutes_value[i] and hours_value[i]
     */
    UWORD8 au1_full_timestamp_flag[MAX_NUM_CLOCK_TS];

    /**
     * Indicates the discontinuity in clockTimestamp
     */
    UWORD8 au1_discontinuity_flag[MAX_NUM_CLOCK_TS];

    /**
     * Specifies the skipping of one or more values of n_frames[i]
     */
    UWORD8 au1_cnt_dropped_flag[MAX_NUM_CLOCK_TS];

    /**
     * Specifies the value of nFrames used to compute clockTimestamp[i]
     */
    UWORD16 au2_n_frames[MAX_NUM_CLOCK_TS];

    /**
     * Specifies the presence of seconds_value[i] and minutes_flag[i]
     */
    UWORD8 au1_seconds_flag[MAX_NUM_CLOCK_TS];

    /**
     * Specifies the presence of minutes_value[i] and hours_flag[i]
     */
    UWORD8 au1_minutes_flag[MAX_NUM_CLOCK_TS];

    /**
     * Specifies the presence of hours_value[i]
     */
    UWORD8 au1_hours_flag[MAX_NUM_CLOCK_TS];

    /**
     * Specifies the value of sS used to compute clockTimestamp[i]
     */
    UWORD8 au1_seconds_value[MAX_NUM_CLOCK_TS];

    /**
     * Specifies the value of mM used to compute clockTimestamp[i]
     */
    UWORD8 au1_minutes_value[MAX_NUM_CLOCK_TS];

    /**
     * Specifies the value of hH used to compute clockTimestamp[i]
     */
    UWORD8 au1_hours_value[MAX_NUM_CLOCK_TS];

    /**
     * Specifies the length in bits of the time_offset_value[i]
     */
    UWORD8 au1_time_offset_length[MAX_NUM_CLOCK_TS];

    /**
     * pecifies the value of tOffset used to compute clockTimestamp[i]
     */
    UWORD8 au1_time_offset_value[MAX_NUM_CLOCK_TS];

}time_code_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;

    WORD8 i1_active_parameter_set;

    WORD8 i4_sei_mastering_disp_colour_vol_params_present_flags;

    /* Enable/Disable SEI Hash on the Decoded picture & Hash type */
    /* < 3 : Checksum, 2 : CRC, 1 : MD5, 0 : disable >            */
    /* Other values are not supported                             */
    WORD8 i1_decoded_pic_hash_sei_flag;

    /* number of user data e.g. CC data, BAR data, AFD data etc */
    WORD32 i4_sei_user_data_cnt;

    WORD8 i1_user_data_registered_present_flag;

    WORD8 i1_time_code_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;

    hash_sei_param_t    s_hash_sei_params;

    mastering_dis_col_vol_sei_params_t s_mastering_dis_col_vol_sei_params;

    user_data_registered_itu_t_t35_t as_user_data_registered_itu_t_t35[USER_DATA_MAX];

    time_code_t s_time_code;
} sei_params_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[MAX_CPB_CNT];
    /**
     * 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[MAX_CPB_CNT];

    /**
     * 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[MAX_CPB_CNT];

    /**
     * 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[MAX_CPB_CNT];

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

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


    // See IV_FLD_TYPE_T for all field types
    UWORD32 e4_fld_type;

    sei_params_t s_sei_params;

    WORD32 i4_vui_present;

    vui_t s_vui;

}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;


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


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