Home | History | Annotate | Download | only in common
      1 /******************************************************************************
      2 *
      3 * Copyright (C) 2012 Ittiam Systems Pvt Ltd, Bangalore
      4 *
      5 * Licensed under the Apache License, Version 2.0 (the "License");
      6 * you may not use this file except in compliance with the License.
      7 * You may obtain a copy of the License at:
      8 *
      9 * http://www.apache.org/licenses/LICENSE-2.0
     10 *
     11 * Unless required by applicable law or agreed to in writing, software
     12 * distributed under the License is distributed on an "AS IS" BASIS,
     13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14 * See the License for the specific language governing permissions and
     15 * limitations under the License.
     16 *
     17 ******************************************************************************/
     18 
     19 /**
     20  *******************************************************************************
     21  * @file
     22  *  ihevc_structs.h
     23  *
     24  * @brief
     25  *  Structure definitions used in the code
     26  *
     27  * @author
     28  *  Ittiam
     29  *
     30  * @par List of Functions:
     31  *
     32  * @remarks
     33  *  None
     34  *
     35  *******************************************************************************
     36  */
     37 
     38 #ifndef _IHEVC_STRUCTS_H_
     39 #define _IHEVC_STRUCTS_H_
     40 
     41 
     42 /**
     43  * Buffering Period SEI parameters Info
     44  */
     45 typedef struct
     46 {
     47     /**
     48      * specifies SPS Id active for the coded picture assosiated
     49      * with the bp message.
     50      */
     51     UWORD8  u1_bp_seq_parameter_set_id;
     52 
     53     /**
     54      * Derived from Hrd parameters
     55      */
     56     UWORD8  u1_sub_pic_cpb_params_present_flag;
     57 
     58     /**
     59      * specifies the presence of the initial_alt_cpb_removal_delay[ i ]
     60      * and initial_alt_cpb_removal_offset[ i ] syntax elements
     61      */
     62     UWORD8  u1_rap_cpb_params_present_flag;
     63 
     64     /**
     65      * cbp removal delay used in buffering period SEI
     66      */
     67     UWORD32 u4_cpb_delay_offset;
     68 
     69     /**
     70      * dbp removal delay used in buffering period SEI
     71      */
     72     UWORD32 u4_dpb_delay_offset;
     73 
     74     /**
     75      * concatanation flag
     76      */
     77     UWORD8 u1_concatenation_flag;
     78 
     79     /**
     80      * delata cbp removal delay
     81      */
     82     UWORD32 u4_au_cpb_removal_delay_delta_minus1;
     83 
     84     /**
     85      * specify the default initial CPB removal delays, respectively,
     86      * for the CPB when the NAL HRD parameters are in use
     87      */
     88     UWORD32 au4_nal_initial_cpb_removal_delay[MAX_CPB_CNT];
     89 
     90     /**
     91      * specify the alternate initial CPB removal delays, respectively,
     92      * for the CPB when the NAL HRD parameters are in use
     93      */
     94     UWORD32 au4_nal_initial_alt_cpb_removal_delay[MAX_CPB_CNT];
     95 
     96     /**
     97      * specify the initial CPB removal delay offset, respectively,
     98      * for the CPB when the NAL HRD parameters are in use
     99      */
    100     UWORD32 au4_nal_initial_cpb_removal_delay_offset[MAX_CPB_CNT];
    101 
    102     /**
    103      * specify the alternate initial CPB removal delays offsets, respectively,
    104      * for the CPB when the NAL HRD parameters are in use
    105      */
    106     UWORD32 au4_nal_initial_alt_cpb_removal_delay_offset[MAX_CPB_CNT];
    107 
    108     /**
    109      * specify the default initial CPB removal delays, respectively,
    110      * for the CPB when the VCL HRD parameters are in use
    111      */
    112     UWORD32 au4_vcl_initial_cpb_removal_delay[MAX_CPB_CNT];
    113 
    114     /**
    115      * specify the initial alt CPB removal delays , respectively,
    116      * for the CPB when the VCL HRD parameters are in use
    117      */
    118     UWORD32 au4_vcl_initial_alt_cpb_removal_delay[MAX_CPB_CNT];
    119 
    120     /**
    121      * specify the initial CPB removal delay offset, respectively,
    122      * for the CPB when the VCL HRD parameters are in use
    123      */
    124     UWORD32 au4_vcl_initial_cpb_removal_delay_offset[MAX_CPB_CNT];
    125 
    126     /**
    127      * specify the alternate initial CPB removal delays offsets, respectively,
    128      * for the CPB when the VCL HRD parameters are in use
    129      */
    130     UWORD32 au4_vcl_initial_alt_cpb_removal_delay_offset[MAX_CPB_CNT];
    131 
    132     /**
    133      * Inital CPB removal delay
    134      */
    135     UWORD32 u4_initial_cpb_removal_delay_length;
    136 
    137     /**
    138      * CPB cnt for corr. sublayer
    139      */
    140     UWORD32 u4_cpb_cnt;
    141 
    142 
    143     /**
    144      * VBV buffer size used in buffering period SEI
    145      */
    146     UWORD32 u4_buffer_size_sei;
    147 
    148     /**
    149      * Encoder buffer fullness  used in buffering period SEI
    150      */
    151     UWORD32 u4_dbf_sei;
    152 
    153     /**
    154      * target bitrate used in buffering period SEI
    155      */
    156     UWORD32 u4_target_bit_rate_sei;
    157 
    158 }buf_period_sei_params_t;
    159 
    160 
    161 /**
    162  * Picture Timing SEI parameters Info
    163  */
    164 typedef struct
    165 {
    166     /**
    167      * derived from vui parameters
    168      */
    169     UWORD8 u1_frame_field_info_present_flag;
    170 
    171     /**
    172      * indicates whether a picture should be displayed as a
    173      * frame or as one or more fields
    174      */
    175     UWORD32 u4_pic_struct;
    176 
    177     UWORD32 u4_source_scan_type;
    178 
    179     /**
    180      * if 1, indicates if the current pic is a duplicte pic in output order
    181      */
    182     UWORD8 u1_duplicate_flag;
    183 
    184     /**
    185      * specifies the number clock ticks between the nominal CPB removal time
    186      * au associated with the pt SEI message and
    187      * the preceding au in decoding order that contained a bp SEI message
    188      */
    189     UWORD32 u4_au_cpb_removal_delay_minus1;
    190 
    191     /**
    192      * compute the DPB output time of the picture
    193      */
    194     UWORD32 u4_pic_dpb_output_delay;
    195 
    196     UWORD32 u4_pic_dpb_output_du_delay;
    197 
    198     /**
    199      * specifies the number of decoding units in the access unit
    200      * the picture timing SEI message is associated with
    201      */
    202     UWORD32 u4_num_decoding_units_minus1;
    203 
    204     /**
    205      * if 1 specifies that the du_common_cpb_removal_delay_increment_minus1 is present
    206      */
    207     UWORD8 u1_du_common_cpb_removal_delay_flag;
    208 
    209     /**
    210      * specifies the duration, in units of clock sub-ticks,
    211      * between the nominal CPB removal times of any two consecutive decoding units
    212      * in decoding order in the access unit associated with the pt_SEI message
    213      */
    214     UWORD32 u4_du_common_cpb_removal_delay_increment_minus1; //same as u4_du_cpb_removal_delay_increment_minus1
    215 
    216     /**
    217      * specifies the number of NAL units in the decoding unit of the access unit
    218      * the picture timing SEI message is associated with.
    219      * range from 0 to (pic size in ctby - 1)
    220      */
    221     UWORD32 au4_num_nalus_in_du_minus1[4320 / MIN_CTB_SIZE];
    222 
    223     /**
    224      * specifies the duration, in units of clock sub-ticks,
    225      * between the nominal CPB removal times of the ( i + 1 )-th decoding unit and the i-th decoding unit,
    226      * in decoding order, in the access unit associated with the pt_SEI message
    227      */
    228     UWORD32 au4_du_cpb_removal_delay_increment_minus1[4320 / MIN_CTB_SIZE];
    229 
    230 }pic_timing_sei_params_t;
    231 
    232 /**
    233  * Structure to hold Recovery point SEI parameters Info
    234  */
    235 typedef struct
    236 {
    237     /**
    238      * specifies the recovery point of output pictures in output order
    239      */
    240     WORD32 i4_recovery_poc_cnt;
    241 
    242     UWORD8 u1_exact_match_flag;
    243 
    244     /**
    245      * indicates the presence or absence of a broken link in the NAL unit
    246      * stream at the location of the recovery point SEI message
    247      */
    248 
    249     UWORD8 u1_broken_link_flag;
    250 
    251 }recovery_point_sei_params_t;
    252 
    253 /**
    254  * Structure to hold Mastering Display Colour Volume SEI
    255  */
    256 typedef struct
    257 {
    258     /**
    259      * Array to store the display_primaries_x values
    260      */
    261     UWORD16 au2_display_primaries_x[3];
    262 
    263     /**
    264      * Array to store the display_primaries_y values
    265      */
    266     UWORD16 au2_display_primaries_y[3];
    267 
    268     /**
    269      * Variable to store the white point x value
    270      */
    271     UWORD16 u2_white_point_x;
    272 
    273     /**
    274      * Variable to store the white point y value
    275      */
    276     UWORD16 u2_white_point_y;
    277 
    278     /**
    279      * Variable to store the max display mastering luminance value
    280      */
    281     UWORD32 u4_max_display_mastering_luminance;
    282 
    283     /**
    284      * Variable to store the min display mastering luminance value
    285      */
    286     UWORD32 u4_min_display_mastering_luminance;
    287 
    288 }mastering_dis_col_vol_sei_params_t;
    289 
    290 /**
    291  * Structure to hold active parameter parameter set SEI parameters Info
    292  */
    293 typedef struct
    294 {
    295     /*
    296     * active vps id
    297     */
    298 
    299     UWORD8 u1_active_video_parameter_set_id;
    300 
    301     /*
    302      * default set to zero.
    303      */
    304     UWORD8 u1_self_contained_cvs_flag;
    305 
    306     UWORD8 u1_no_parameter_set_update_flag;
    307 
    308     UWORD8 u1_num_sps_ids_minus1;
    309 
    310     /*
    311      * active sps id
    312      */
    313     UWORD8 au1_active_seq_parameter_set_id[15];
    314 
    315     UWORD32 au4_layer_sps_idx[64];
    316 
    317 }active_parameter_set_sei_param_t;
    318 
    319 /**
    320  * Structure to hold SEI Hash values
    321  */
    322 typedef struct
    323 {
    324     /*
    325      * SEI Hash values for each color component
    326      */
    327     UWORD8 au1_sei_hash[3][16];
    328 
    329 }hash_sei_param_t;
    330 
    331 /**
    332  * Structure to hold user data registered SEI param Info
    333  */
    334 typedef struct
    335 {
    336     /**
    337      * Contains country code by Annex A of Recommendation ITU-T T.35
    338      */
    339     UWORD8 u1_itu_t_t35_country_code;
    340 
    341     /**
    342      * Contains country code by Annex B of Recommendation ITU-T T.35
    343      */
    344     UWORD8 u1_itu_t_t35_country_code_extension_byte;
    345 
    346     /**
    347      * Contains data registered as specified in Recommendation ITU-T T.35
    348      */
    349     UWORD8 u1_itu_t_t35_payload_byte[MAX_USERDATA_PAYLOAD];
    350 
    351     /**
    352      * Valid payload size present in this buffer
    353      */
    354     WORD32 i4_valid_payload_size;
    355 
    356     /**
    357      * Total payload size incase payloadSize > IHEVCD_MAX_USERDATA_PAYLOAD
    358      */
    359     WORD32 i4_payload_size;
    360 }user_data_registered_itu_t_t35_t;
    361 
    362 /**
    363  * Structure to hold time code SEI param info
    364  */
    365 typedef struct
    366 {
    367     /**
    368      * Number of sets of clock timestamp syntax elements present for the current picture
    369      */
    370     UWORD8 u1_num_clock_ts;
    371 
    372     /**
    373      * Indicates presenc of associated set of clock timestamps
    374      */
    375     UWORD8 au1_clock_timestamp_flag[MAX_NUM_CLOCK_TS];
    376 
    377     /**
    378      * Used in calculating clockTimestamp[i]
    379      */
    380     UWORD8 au1_units_field_based_flag[MAX_NUM_CLOCK_TS];
    381 
    382     /**
    383      * Specifies the method of dropping values of the n_frames[i] syntax element
    384      */
    385     UWORD8 au1_counting_type[MAX_NUM_CLOCK_TS];
    386 
    387     /**
    388      * Specifies that the n_frames[i] syntax element is followed by seconds_value[i],
    389      * minutes_value[i] and hours_value[i]
    390      */
    391     UWORD8 au1_full_timestamp_flag[MAX_NUM_CLOCK_TS];
    392 
    393     /**
    394      * Indicates the discontinuity in clockTimestamp
    395      */
    396     UWORD8 au1_discontinuity_flag[MAX_NUM_CLOCK_TS];
    397 
    398     /**
    399      * Specifies the skipping of one or more values of n_frames[i]
    400      */
    401     UWORD8 au1_cnt_dropped_flag[MAX_NUM_CLOCK_TS];
    402 
    403     /**
    404      * Specifies the value of nFrames used to compute clockTimestamp[i]
    405      */
    406     UWORD16 au2_n_frames[MAX_NUM_CLOCK_TS];
    407 
    408     /**
    409      * Specifies the presence of seconds_value[i] and minutes_flag[i]
    410      */
    411     UWORD8 au1_seconds_flag[MAX_NUM_CLOCK_TS];
    412 
    413     /**
    414      * Specifies the presence of minutes_value[i] and hours_flag[i]
    415      */
    416     UWORD8 au1_minutes_flag[MAX_NUM_CLOCK_TS];
    417 
    418     /**
    419      * Specifies the presence of hours_value[i]
    420      */
    421     UWORD8 au1_hours_flag[MAX_NUM_CLOCK_TS];
    422 
    423     /**
    424      * Specifies the value of sS used to compute clockTimestamp[i]
    425      */
    426     UWORD8 au1_seconds_value[MAX_NUM_CLOCK_TS];
    427 
    428     /**
    429      * Specifies the value of mM used to compute clockTimestamp[i]
    430      */
    431     UWORD8 au1_minutes_value[MAX_NUM_CLOCK_TS];
    432 
    433     /**
    434      * Specifies the value of hH used to compute clockTimestamp[i]
    435      */
    436     UWORD8 au1_hours_value[MAX_NUM_CLOCK_TS];
    437 
    438     /**
    439      * Specifies the length in bits of the time_offset_value[i]
    440      */
    441     UWORD8 au1_time_offset_length[MAX_NUM_CLOCK_TS];
    442 
    443     /**
    444      * pecifies the value of tOffset used to compute clockTimestamp[i]
    445      */
    446     UWORD8 au1_time_offset_value[MAX_NUM_CLOCK_TS];
    447 
    448 }time_code_t;
    449 
    450 
    451 /**
    452  * Structure to hold SEI parameters Info
    453  */
    454 typedef struct
    455 {
    456 
    457     WORD8 i1_sei_parameters_present_flag;
    458 
    459     WORD8 i1_aud_present_flag;
    460 
    461     WORD8 i1_buf_period_params_present_flag;
    462 
    463     WORD8 i1_pic_timing_params_present_flag;
    464 
    465     WORD8 i1_recovery_point_params_present_flag;
    466 
    467     WORD8 i1_active_parameter_set;
    468 
    469     WORD8 i4_sei_mastering_disp_colour_vol_params_present_flags;
    470 
    471     /* Enable/Disable SEI Hash on the Decoded picture & Hash type */
    472     /* < 3 : Checksum, 2 : CRC, 1 : MD5, 0 : disable >            */
    473     /* Other values are not supported                             */
    474     WORD8 i1_decoded_pic_hash_sei_flag;
    475 
    476     /* number of user data e.g. CC data, BAR data, AFD data etc */
    477     WORD32 i4_sei_user_data_cnt;
    478 
    479     WORD8 i1_user_data_registered_present_flag;
    480 
    481     WORD8 i1_time_code_present_flag;
    482 
    483     buf_period_sei_params_t  s_buf_period_sei_params;
    484 
    485     pic_timing_sei_params_t  s_pic_timing_sei_params;
    486 
    487     recovery_point_sei_params_t s_recovery_point_params;
    488 
    489     active_parameter_set_sei_param_t s_active_parameter_set_sei_params;
    490 
    491     hash_sei_param_t    s_hash_sei_params;
    492 
    493     mastering_dis_col_vol_sei_params_t s_mastering_dis_col_vol_sei_params;
    494 
    495     user_data_registered_itu_t_t35_t as_user_data_registered_itu_t_t35[USER_DATA_MAX];
    496 
    497     time_code_t s_time_code;
    498 } sei_params_t;
    499 
    500 
    501 /**
    502  * Sub-layer HRD parameters Info
    503  */
    504 typedef struct
    505 {
    506     /**
    507      * (together with bit_rate_scale) specifies the
    508      * maximum input bit rate for the i-th CPB
    509      */
    510     UWORD32 au4_bit_rate_value_minus1[MAX_CPB_CNT];
    511     /**
    512      * together with cpb_size_scale to specify the
    513      * CPB size when the CPB operates at the access unit level.
    514      */
    515     UWORD32 au4_cpb_size_value_minus1[MAX_CPB_CNT];
    516 
    517     /**
    518      * together with cpb_size_du_scale to specify the CPB size
    519      * when the CPB operates at sub-picture level
    520      */
    521     UWORD32 au4_cpb_size_du_value_minus1[MAX_CPB_CNT];
    522 
    523     /**
    524      * specifies the maximum input bit rate for the i-th CPB when the CPB
    525      * operates at the sub-picture level. bit_rate_du_value_minus1[ i ]
    526      * shall be in the range of 0 to 2^32 - 2
    527      */
    528     UWORD32 au4_bit_rate_du_value_minus1[MAX_CPB_CNT];
    529 
    530     /**
    531      * if 1, specifies that the HSS operates in a constant bit rate (CBR) mode
    532      * if 0, specifies that the HSS operates in a intermittent bit rate (CBR) mode
    533      */
    534     UWORD8  au1_cbr_flag[32];
    535 
    536 }sub_lyr_hrd_params_t;
    537 
    538 /**
    539  * HRD parameters Info
    540  */
    541 typedef struct
    542 {
    543     /**
    544      * Indicates the presence of the
    545      * num_units_in_ticks, time_scale flag
    546      */
    547     UWORD8 u1_timing_info_present_flag;
    548 
    549     /**
    550      * Number of units that
    551      * correspond to one increment of the
    552      * clock. Indicates the  resolution
    553      */
    554     UWORD32 u4_num_units_in_tick;
    555 
    556     /**
    557      * The number of time units that pass in one second
    558      */
    559     UWORD32 u4_time_scale;
    560 
    561     /**
    562      * Nal- hrd parameters flag
    563      */
    564     UWORD8 u1_nal_hrd_parameters_present_flag;
    565 
    566     /**
    567      * VCL- hrd parameters flag
    568      */
    569     UWORD8 u1_vcl_hrd_parameters_present_flag;
    570 
    571     /**
    572      * Indicates the presence of NAL-HRD params or VCL_HRD params
    573      * in the bitstream
    574      */
    575     UWORD8 u1_cpbdpb_delays_present_flag;
    576 
    577     /**
    578      * specifies that sub-picture level CPB removal delay parameters are
    579      * present in picture timing SEI messages
    580      */
    581     UWORD8 u1_sub_pic_cpb_params_present_flag;
    582 
    583     /**
    584      * specify the clock sub-tick
    585      * (the minimum interval of time that can be represented in the coded data when sub_pic_cpb_params_present_flag is equal to 1)
    586      */
    587     UWORD8 u1_tick_divisor_minus2;
    588 
    589     /**
    590      * specifies the length, in bits for the du cpb delay syntax in pt_sei
    591      */
    592     UWORD8 u1_du_cpb_removal_delay_increment_length_minus1;
    593 
    594     /**
    595      * Indicates presence of sub_pic_cpb_params in pic timing sei
    596      */
    597     UWORD8 u1_sub_pic_cpb_params_in_pic_timing_sei_flag;
    598 
    599     /**
    600      * specifies the length, in bits, of the pic_dpb_output_du_delay syntax
    601      * element in the picture timing SEI message and the
    602      * pic_spt_dpb_output_du_delay syntax element in the decoding unit
    603      * information SEI message
    604      */
    605     UWORD8 u1_dpb_output_delay_du_length_minus1;
    606 
    607     /**
    608      * (together with bit_rate_value_minus1) specifies the
    609      * maximum input bit rate of the i-th CPB
    610      */
    611     UWORD32 u4_bit_rate_scale;
    612 
    613     /**
    614      * (together with cpb_size_du_value_minus1) specfies
    615      * CPB size of the i-th CPB when the CPB operates
    616      * at the access unit level
    617      */
    618     UWORD32 u4_cpb_size_scale;
    619 
    620     /**
    621      * (together with cpb_size_du_value_minus1) specfies
    622      * CPB size of the i-th CPB when the CPB operates
    623      * at the sub-picture level
    624      */
    625     UWORD32 u4_cpb_size_du_scale;
    626 
    627 
    628     /**
    629      * specifies the length, in bits for initial cpb delay (nal/vcl)sysntax in bp sei
    630      */
    631     UWORD8  u1_initial_cpb_removal_delay_length_minus1;
    632 
    633     /**
    634      * specifies the length, in bits for the au cpb delay syntax in pt_sei
    635      */
    636     UWORD8  u1_au_cpb_removal_delay_length_minus1;
    637 
    638     /**
    639      * specifies the length, in bits, of the pic_dpb_output_delay syntax element in the pt SEI message
    640      */
    641     UWORD8  u1_dpb_output_delay_length_minus1;
    642 
    643     /**
    644      * if 1, , for the highest temporal sub-layers, the temporal distance between the HRD output times
    645      * of consecutive pictures in output order is constrained refer to Table E-6
    646      */
    647     UWORD8 au1_fixed_pic_rate_general_flag[VPS_MAX_SUB_LAYERS];
    648 
    649     UWORD8 au1_fixed_pic_rate_within_cvs_flag[VPS_MAX_SUB_LAYERS];
    650 
    651     /**
    652      * if 1, , for the highest temporal sub-layers, the temporal distance (in clock ticks) between the
    653      * element units that specify HRD output times of consecutive pictures in output order is constrained
    654      * refer to Table E-6
    655      */
    656     UWORD8 au1_elemental_duration_in_tc_minus1[VPS_MAX_SUB_LAYERS];
    657 
    658     /**
    659      * specifies the HRD operational mode
    660      */
    661     UWORD8 au1_low_delay_hrd_flag[VPS_MAX_SUB_LAYERS];
    662 
    663     /**
    664      * 1 specifies the number of alternative CPB specifications in the
    665      * bitstream of the cvs when HighestTid is equal to i
    666      */
    667     UWORD8 au1_cpb_cnt_minus1[VPS_MAX_SUB_LAYERS];
    668 
    669 
    670     /**
    671      * VUI level Sub-layer HRD parameters
    672      */
    673     sub_lyr_hrd_params_t as_sub_layer_hrd_params[VPS_MAX_SUB_LAYERS];
    674 
    675 }hrd_params_t;
    676 
    677 /**
    678  * Structure to hold VUI parameters Info
    679  */
    680 typedef struct
    681 {
    682     /**
    683      * indicates the presence of aspect_ratio
    684      */
    685     UWORD8 u1_aspect_ratio_info_present_flag;
    686 
    687     /**
    688      * specifies the aspect ratio of the luma samples
    689      */
    690     UWORD8 u1_aspect_ratio_idc;
    691 
    692     /**
    693      *  width of the luma samples. user dependent
    694      */
    695     UWORD16 u2_sar_width;
    696 
    697     /**
    698      *  hieght of the luma samples. user dependent
    699      */
    700     UWORD16 u2_sar_height;
    701 
    702     /**
    703      * if 1, specifies that the overscan_appropriate_flag is present
    704      * if 0, the preferred display method for the video signal is unspecified
    705      */
    706     UWORD8 u1_overscan_info_present_flag;
    707 
    708     /**
    709      * if 1,indicates that the cropped decoded pictures output
    710      * are suitable for display using overscan
    711      */
    712     UWORD8 u1_overscan_appropriate_flag;
    713 
    714     /**
    715      * if 1 specifies that video_format, video_full_range_flag and
    716      * colour_description_present_flag are present
    717      */
    718     UWORD8 u1_video_signal_type_present_flag;
    719 
    720     /**
    721      *
    722      */
    723     UWORD8 u1_video_format;
    724 
    725     /**
    726      * indicates the black level and range of the luma and chroma signals
    727      */
    728     UWORD8 u1_video_full_range_flag;
    729 
    730     /**
    731      * if 1,to 1 specifies that colour_primaries, transfer_characteristics
    732      * and matrix_coefficients are present
    733      */
    734     UWORD8 u1_colour_description_present_flag;
    735 
    736     /**
    737      * indicates the chromaticity coordinates of the source primaries
    738      */
    739     UWORD8 u1_colour_primaries;
    740 
    741     /**
    742      * indicates the opto-electronic transfer characteristic of the source picture
    743      */
    744     UWORD8 u1_transfer_characteristics;
    745 
    746     /**
    747      * the matrix coefficients used in deriving luma and chroma signals
    748      * from the green, blue, and red primaries
    749      */
    750     UWORD8 u1_matrix_coefficients;
    751 
    752     /**
    753      * if 1, specifies that chroma_sample_loc_type_top_field and
    754      * chroma_sample_loc_type_bottom_field are present
    755      */
    756     UWORD8 u1_chroma_loc_info_present_flag;
    757 
    758     /**
    759      * location of chroma samples
    760      */
    761     UWORD8 u1_chroma_sample_loc_type_top_field;
    762 
    763     UWORD8 u1_chroma_sample_loc_type_bottom_field;
    764 
    765     /**
    766      * if 1, indicates that the value of all decoded chroma samples is
    767      * equal to 1 << ( BitDepthC - 1 )
    768      */
    769     UWORD8 u1_neutral_chroma_indication_flag;
    770 
    771     /**
    772      * 1 indicates that the coded video sequence conveys pictures that represent fields
    773      * 0 indicates the pictures that represents field
    774      */
    775     UWORD8 u1_field_seq_flag;
    776 
    777     /**
    778      * specifies that picture timing SEI messages are present for every picture
    779      */
    780     UWORD8 u1_frame_field_info_present_flag;
    781 
    782     /**
    783      * 1 indicates that the default display window parameters follow next in the VUI
    784      */
    785     UWORD8 u1_default_display_window_flag;
    786 
    787     /**
    788      * specify the samples of the pictures in the coded video sequence
    789      * that are within the default display window,
    790      * in terms of a rectangular region specified in picture coordinates for display
    791      */
    792     UWORD32 u4_def_disp_win_left_offset;
    793 
    794     UWORD32 u4_def_disp_win_right_offset;
    795 
    796     UWORD32 u4_def_disp_win_top_offset;
    797 
    798     UWORD32 u4_def_disp_win_bottom_offset;
    799 
    800     /**
    801      * to 1 specifies that the syntax structure hrd_parameters is present in the vui_parameters syntax structue
    802      */
    803     UWORD8 u1_vui_hrd_parameters_present_flag;
    804 
    805     /**
    806      * VUI level HRD parameters
    807      */
    808     hrd_params_t s_vui_hrd_parameters;
    809 
    810     /**
    811      * Indicates the presence of the
    812      * num_units_in_ticks, time_scale flag
    813      */
    814     UWORD8 u1_vui_timing_info_present_flag;
    815 
    816     /**
    817      * Number of units that
    818      * correspond to one increment of the
    819      * clock. Indicates the  resolution
    820      */
    821     UWORD32 u4_vui_num_units_in_tick;
    822 
    823     /**
    824      * The number of time units that pass in one second
    825      */
    826     UWORD32 u4_vui_time_scale;
    827     /**
    828      * if 1, indicates that the POC for each picture in the coded video sequence (cvs) (not the first picture), in decoding order,
    829      * is proportional to the output time of the picture relative to that of the first picture in the cvs
    830      */
    831     UWORD8 u1_poc_proportional_to_timing_flag;
    832 
    833     /**
    834      * num_ticks_poc_diff_one_minus1 plus 1 specifies the number of clock ticks
    835      * corresponding to a difference of poc values equal to 1
    836      */
    837     UWORD8 u1_num_ticks_poc_diff_one_minus1;
    838 
    839     /**
    840      * 1, specifies that the following cvs bitstream restriction parameters are present
    841      */
    842     UWORD8 u1_bitstream_restriction_flag;
    843 
    844     /**
    845      *  if 1, indicates that each pps that is active in the cvs has
    846      *  the same value of the tile syntax elements
    847      */
    848     UWORD8 u1_tiles_fixed_structure_flag;
    849 
    850     /**
    851      * if 0, indicates that no pel outside the pic boundaries and
    852      * no sub-pels derived using pels outside the pic boundaries is used for inter prediction
    853      */
    854     UWORD8 u1_motion_vectors_over_pic_boundaries_flag;
    855 
    856     /**
    857      * if 1, indicates
    858      * all P/B slices belonging to the same pic have an identical refpic list0,
    859      * all B slices that belong to the same picture have an identical refpic list1.
    860      */
    861     UWORD8 u1_restricted_ref_pic_lists_flag;
    862 
    863     /**
    864      * min_spatial_segmentation_idc, when not equal to 0, establishes a bound on the maximum possible size of distinct
    865      * coded spatial segmentation regions in the pictures of the CVS. When min_spatial_segmentation_idc is not present, it is
    866      * inferred to be equal to 0. The value of min_spatial_segmentation_idc shall be in the range of 0 to 4095, inclusive.
    867      *
    868      * can be used by a decoder to calculate the maximum number of luma samples to be processed by one processing thread
    869      *
    870      * If tiles=0 and entropy_sync=0 then
    871      *     no slice shall exceed ( 4 * PicSizeInSamplesY ) / minSpatialSegmentationTimes4 luma samples
    872      *
    873      * If tiles=1 and entropy_sync=0 then
    874      *     no tile shall exceed ( 4 * PicSizeInSamplesY ) / minSpatialSegmentationTimes4 luma samples
    875      *
    876      * If tiles=0 and entropy_sync=1 then
    877      *     ( 2 * pic_height_in_luma_samples + pic_width_in_luma_samples ) * CtbSizeY
    878      *             <= ( 4 * PicSizeInSamplesY ) / minSpatialSegmentationTimes4
    879      */
    880     UWORD32 u4_min_spatial_segmentation_idc;
    881     /**
    882      * Indicates a number of bytes not exceeded by the sum of the sizes of the VCL NAL units
    883      * associated with any coded picture
    884      */
    885     UWORD8 u1_max_bytes_per_pic_denom;
    886 
    887     /**
    888      * Indicates an upper bound for the number of bits of coding_unit() data
    889      */
    890     UWORD8 u1_max_bits_per_mincu_denom;
    891 
    892     /**
    893      * Indicate the maximum absolute value of a decoded horizontal MV component
    894      * in quarter-pel luma units
    895      */
    896     UWORD8 u1_log2_max_mv_length_horizontal;
    897 
    898     /**
    899      * Indicate the maximum absolute value of a decoded vertical MV component
    900      * in quarter-pel luma units
    901      */
    902     UWORD8 u1_log2_max_mv_length_vertical;
    903 }vui_t;
    904 
    905 /**
    906  * Picture buffer
    907  */
    908 typedef struct
    909 {
    910     UWORD8 *pu1_luma;
    911     UWORD8 *pu1_chroma;
    912 
    913     WORD32 i4_abs_poc;
    914     WORD32 i4_poc_lsb;
    915     /** Used to store display Timestamp for current buffer */
    916     WORD32 u4_ts;
    917     UWORD8 u1_used_as_ref;
    918 
    919     UWORD8 u1_free_delay_cnt;
    920 
    921     /**
    922      * buffer ID from buffer manager
    923      */
    924     UWORD8 u1_buf_id;
    925 
    926 
    927     // See IV_FLD_TYPE_T for all field types
    928     UWORD32 e4_fld_type;
    929 
    930     sei_params_t s_sei_params;
    931 
    932     WORD32 i4_vui_present;
    933 
    934     vui_t s_vui;
    935 
    936 }pic_buf_t;
    937 
    938 
    939 /**
    940  * Reference List
    941  */
    942 typedef struct
    943 {
    944     void *pv_pic_buf;
    945 
    946     void *pv_mv_buf;
    947 
    948     UWORD8 u1_used_as_ref;
    949 
    950 }ref_list_t;
    951 
    952 
    953 /**
    954  * SAO
    955  */
    956 typedef struct
    957 {
    958     /**
    959      * sao_type_idx_luma
    960      */
    961     UWORD32      b3_y_type_idx   : 3;
    962 
    963     /**
    964      * luma SaoOffsetVal[1]
    965      */
    966     WORD32      b4_y_offset_1   : 4;
    967 
    968     /**
    969      * luma SaoOffsetVal[2]
    970      */
    971     WORD32      b4_y_offset_2   : 4;
    972 
    973     /**
    974      * luma SaoOffsetVal[3]
    975      */
    976     WORD32      b4_y_offset_3   : 4;
    977 
    978     /**
    979      * luma SaoOffsetVal[4]
    980      */
    981     WORD32      b4_y_offset_4   : 4;
    982 
    983     /**
    984      * luma sao_band_position
    985      */
    986     UWORD32      b5_y_band_pos   : 5;
    987 
    988     WORD32                      : 0;
    989 
    990     /**
    991      * sao_type_idx_chroma
    992      */
    993     UWORD32      b3_cb_type_idx  : 3;
    994 
    995     /**
    996      * chroma SaoOffsetVal[1]
    997      */
    998     WORD32      b4_cb_offset_1  : 4;
    999 
   1000     /**
   1001      * chroma SaoOffsetVal[2]
   1002      */
   1003     WORD32      b4_cb_offset_2  : 4;
   1004 
   1005     /**
   1006      * chroma SaoOffsetVal[3]
   1007      */
   1008     WORD32      b4_cb_offset_3  : 4;
   1009 
   1010     /**
   1011      * chroma SaoOffsetVal[4]
   1012      */
   1013     WORD32      b4_cb_offset_4  : 4;
   1014 
   1015     /**
   1016      * cb sao_band_position
   1017      */
   1018     UWORD32      b5_cb_band_pos  : 5;
   1019 
   1020     WORD32                      : 0;
   1021 
   1022     /**
   1023      * sao_type_idx_chroma
   1024      */
   1025     UWORD32      b3_cr_type_idx  : 3;
   1026 
   1027     /**
   1028      * chroma SaoOffsetVal[1]
   1029      */
   1030     WORD32      b4_cr_offset_1  : 4;
   1031 
   1032     /**
   1033      * chroma SaoOffsetVal[2]
   1034      */
   1035     WORD32      b4_cr_offset_2  : 4;
   1036 
   1037     /**
   1038      * chroma SaoOffsetVal[3]
   1039      */
   1040     WORD32      b4_cr_offset_3  : 4;
   1041 
   1042     /**
   1043      * chroma SaoOffsetVal[4]
   1044      */
   1045     WORD32      b4_cr_offset_4  : 4;
   1046 
   1047     /**
   1048      * cr sao_band_position
   1049      */
   1050     UWORD32      b5_cr_band_pos  : 5;
   1051 
   1052     WORD32                      : 0;
   1053 
   1054 }sao_t;
   1055 
   1056 /**
   1057  * SAO
   1058  */
   1059 typedef struct
   1060 {
   1061     /**
   1062      * sao_type_idx_luma
   1063      */
   1064     UWORD32      b3_y_type_idx   : 3;
   1065 
   1066     /**
   1067      * luma SaoOffsetVal[1]
   1068      */
   1069     WORD32      b8_y_offset_1   : 8;
   1070 
   1071     /**
   1072      * luma SaoOffsetVal[2]
   1073      */
   1074     WORD32      b8_y_offset_2   : 8;
   1075 
   1076     /**
   1077      * luma SaoOffsetVal[3]
   1078      */
   1079     WORD32      b8_y_offset_3   : 8;
   1080 
   1081     /**
   1082      * luma SaoOffsetVal[4]
   1083      */
   1084     WORD32      b8_y_offset_4   : 8;
   1085 
   1086     /**
   1087      * luma sao_band_position
   1088      */
   1089     UWORD32      b5_y_band_pos   : 5;
   1090 
   1091     WORD32                      : 0;
   1092 
   1093     /**
   1094      * sao_type_idx_chroma
   1095      */
   1096     UWORD32      b3_cb_type_idx  : 3;
   1097 
   1098     /**
   1099      * chroma SaoOffsetVal[1]
   1100      */
   1101     WORD32      b8_cb_offset_1  : 8;
   1102 
   1103     /**
   1104      * chroma SaoOffsetVal[2]
   1105      */
   1106     WORD32      b8_cb_offset_2  : 8;
   1107 
   1108     /**
   1109      * chroma SaoOffsetVal[3]
   1110      */
   1111     WORD32      b8_cb_offset_3  : 8;
   1112 
   1113     /**
   1114      * chroma SaoOffsetVal[4]
   1115      */
   1116     WORD32      b8_cb_offset_4  : 8;
   1117 
   1118     /**
   1119      * cb sao_band_position
   1120      */
   1121     UWORD32      b5_cb_band_pos  : 5;
   1122 
   1123     WORD32                      : 0;
   1124 
   1125     /**
   1126      * sao_type_idx_chroma
   1127      */
   1128     UWORD32      b3_cr_type_idx  : 3;
   1129 
   1130     /**
   1131      * chroma SaoOffsetVal[1]
   1132      */
   1133     WORD32      b8_cr_offset_1  : 8;
   1134 
   1135     /**
   1136      * chroma SaoOffsetVal[2]
   1137      */
   1138     WORD32      b8_cr_offset_2  : 8;
   1139 
   1140     /**
   1141      * chroma SaoOffsetVal[3]
   1142      */
   1143     WORD32      b8_cr_offset_3  : 8;
   1144 
   1145     /**
   1146      * chroma SaoOffsetVal[4]
   1147      */
   1148     WORD32      b8_cr_offset_4  : 8;
   1149 
   1150     /**
   1151      * cr sao_band_position
   1152      */
   1153     UWORD32      b5_cr_band_pos  : 5;
   1154 
   1155     WORD32                      : 0;
   1156 
   1157 }sao_10bd_t;
   1158 
   1159 /**
   1160  * Motion vector
   1161  */
   1162 typedef struct
   1163 {
   1164     /**
   1165      * Horizontal Motion Vector
   1166      */
   1167     WORD16 i2_mvx;
   1168 
   1169     /**
   1170      * Vertical Motion Vector
   1171      */
   1172     WORD16 i2_mvy;
   1173 }mv_t;
   1174 
   1175 /*****************************************************************************/
   1176 /* Following results in packed 48 bit structure. If mv_t included            */
   1177 /*  ref_pic_buf_id, then 8 bits will be wasted for each mv for aligning.     */
   1178 /*  Also using mv_t as elements directly instead of a pointer to l0 and l1   */
   1179 /*  mvs. Since pointer takes 4 bytes and MV itself is 4 bytes. It does not   */
   1180 /*  really help using pointers.                                              */
   1181 /*****************************************************************************/
   1182 
   1183 /**
   1184  * PU Motion Vector info
   1185  */
   1186 typedef struct
   1187 {
   1188     /**
   1189      *  L0 Motion Vector
   1190      */
   1191     mv_t s_l0_mv;
   1192 
   1193     /**
   1194      *  L1 Motion Vector
   1195      */
   1196     mv_t s_l1_mv;
   1197 
   1198     /**
   1199      *  L0 Ref index
   1200      */
   1201     WORD8   i1_l0_ref_idx;
   1202 
   1203     /**
   1204      *  L1 Ref index
   1205      */
   1206     WORD8   i1_l1_ref_idx;
   1207 
   1208     /**
   1209      *  L0 Ref Pic Buf ID
   1210      */
   1211     WORD8 i1_l0_ref_pic_buf_id;
   1212 
   1213     /**
   1214      *  L1 Ref Pic Buf ID
   1215      */
   1216     WORD8 i1_l1_ref_pic_buf_id;
   1217 
   1218 }pu_mv_t;
   1219 
   1220 /**
   1221  * PU information
   1222  */
   1223 typedef struct
   1224 {
   1225 
   1226     /**
   1227      *  PU motion vectors
   1228      */
   1229     pu_mv_t     mv;
   1230 
   1231     /**
   1232      *  PU X position in terms of min PU (4x4) units
   1233      */
   1234     UWORD32     b4_pos_x        : 4;
   1235 
   1236     /**
   1237      *  PU Y position in terms of min PU (4x4) units
   1238      */
   1239     UWORD32     b4_pos_y        : 4;
   1240 
   1241     /**
   1242      *  PU width in pixels = (b4_wd + 1) << 2
   1243      */
   1244     UWORD32     b4_wd           : 4;
   1245 
   1246     /**
   1247      *  PU height in pixels = (b4_ht + 1) << 2
   1248      */
   1249     UWORD32     b4_ht           : 4;
   1250 
   1251     /**
   1252      *  Intra or Inter flag for each partition - 0 or 1
   1253      */
   1254     UWORD32     b1_intra_flag   : 1;
   1255 
   1256 
   1257     /**
   1258      *  PRED_L0, PRED_L1, PRED_BI - Initialized in parsing only for MVP case
   1259      */
   1260     UWORD32     b2_pred_mode    : 2;
   1261 
   1262 
   1263     /**
   1264      *  Merge flag for each partition - 0 or 1
   1265      */
   1266     UWORD32     b1_merge_flag   : 1;
   1267 
   1268     /**
   1269      *  Merge index for each partition - 0 to 4
   1270      */
   1271     UWORD32     b3_merge_idx    : 3;
   1272 
   1273     /*************************************************************************/
   1274     /* Following two flags can be overloaded with b3_merge_idx if there      */
   1275     /* is need for additional bits                                           */
   1276     /*************************************************************************/
   1277 
   1278     /**
   1279      *  If merge is zero, following gives presence of mvd for L0 MV
   1280      */
   1281     UWORD32     b1_l0_mvp_idx   : 1;
   1282 
   1283     /**
   1284      *  If merge is zero, following gives presence of mvd for L1 MV
   1285      */
   1286     UWORD32     b1_l1_mvp_idx   : 1;
   1287 
   1288     /**
   1289      * Partition mode - Needed during MV merge stage
   1290      * Note: Part mode can be derived using pu_wd, pu_ht and minCB size
   1291      * If there is a need for bits, the following can be removed at the cost
   1292      * of more control code in MV Merge
   1293      */
   1294     UWORD32      b3_part_mode    : 3;
   1295 
   1296     /**
   1297      * Partition index - Needed during MV merge stage
   1298      */
   1299     UWORD32      b2_part_idx     : 2;
   1300 
   1301 }pu_t;
   1302 
   1303 /**
   1304  * TU information
   1305  */
   1306 typedef struct
   1307 {
   1308     /**
   1309      *  TU X position in terms of min TU (4x4) units
   1310      */
   1311     UWORD32      b4_pos_x            : 4;
   1312 
   1313     /**
   1314      *  TU Y position in terms of min TU (4x4) units
   1315      */
   1316     UWORD32     b4_pos_y            : 4;
   1317 
   1318     /*************************************************************************/
   1319     /* Luma TU size (width or height) = 1 << (b3_size + 2)                   */
   1320     /*   i.e. 0 : 4, 1 : 8, 2: 16, 3: 32, 4: 64                              */
   1321     /* Note: Though 64 x 64 TU is not possible, this size is supported to    */
   1322     /* signal SKIP CUs or PCM CUs etc where transform is not called          */
   1323     /* Chroma width will be half of luma except for 4x4 luma                 */
   1324     /*************************************************************************/
   1325     /**
   1326      * Luma TU size (width or height)
   1327      */
   1328     UWORD32     b3_size             : 3; //To be changed.
   1329 
   1330     /*************************************************************************/
   1331     /* Chroma present : For 4x4 Luma TUs only the fourth one contains Cb     */
   1332     /* Cr info. For the first three TUs in 8x8 (for 4x4 luma) this will      */
   1333     /* be zero. For all the other cases this will be 1                       */
   1334     /*************************************************************************/
   1335     /**
   1336      * 4x4 Luma TUs only the fourth one contains cb,cr
   1337      * TODO: Check if this is really needed, cb_cbf and cr_cbf should be enough
   1338      */
   1339 
   1340     /**
   1341      *  Y CBF
   1342      */
   1343     UWORD32      b1_y_cbf            : 1;
   1344 
   1345     /**
   1346      *  Cb CBF
   1347      */
   1348     UWORD32      b1_cb_cbf           : 1;
   1349 
   1350 
   1351     /**
   1352      *  Cr CBF
   1353      */
   1354     UWORD32     b1_cr_cbf           : 1;
   1355 
   1356 
   1357     /**
   1358      *  Flag to indicate if it is the first TU in a CU
   1359      */
   1360     UWORD32     b1_first_tu_in_cu       : 1;
   1361 
   1362     /**
   1363      *  Transform quant bypass flag
   1364      */
   1365     UWORD32     b1_transquant_bypass  : 1;
   1366 
   1367     /**
   1368      *  Y Qp
   1369      */
   1370     //UWORD32     b6_qp               : 6; // BUG_FIX related to nighbour QP's in case of negative QP for HBD.
   1371     WORD32     b7_qp               : 7;
   1372 
   1373 
   1374     /**
   1375      *  Luma Intra Mode 0 - 34
   1376      */
   1377     UWORD32    b6_luma_intra_mode      : 6;
   1378 
   1379     /*************************************************************************/
   1380     /* Chroma Intra Mode Index 0 - 4: Actual mode (0, 1, 10, 26, 34, X) to be*/
   1381     /* derived using luma_intra_mode and the following                       */
   1382     /*************************************************************************/
   1383     /**
   1384      * Chroma Intra Mode Index 0 - 4
   1385      */
   1386     UWORD32    b3_chroma_intra_mode_idx    : 3;
   1387 
   1388 }tu_t;
   1389 
   1390 /**
   1391  * CU information
   1392  */
   1393 typedef struct
   1394 {
   1395 
   1396     /**
   1397      *  CU X position in terms of min CU (8x8) units
   1398      */
   1399     UWORD32 b3_cu_pos_x :3;
   1400 
   1401     /**
   1402      *  CU Y position in terms of min CU (8x8) units
   1403      */
   1404     UWORD32 b3_cu_pos_y :3;
   1405 
   1406     /**
   1407      *  CU size in terms of min CU (8x8) units
   1408      */
   1409     UWORD32 b4_cu_size :4;
   1410 
   1411     /**
   1412      *  transquant bypass flag ; 0 for this encoder
   1413      */
   1414     UWORD32 b1_tq_bypass_flag :1;
   1415 
   1416     /**
   1417      *  CU skip flag
   1418      */
   1419     UWORD32 b1_skip_flag :1;
   1420 
   1421     /**
   1422      *  intra / inter CU flag
   1423      */
   1424     UWORD32 b1_pred_mode_flag :1;
   1425 
   1426     /**
   1427      *  indicates partition information for CU
   1428      *  For intra 0 : for 2Nx2N / 1 for NxN iff CU=minCBsize
   1429      *  For inter 0 : @sa PART_SIZE_E
   1430      */
   1431     UWORD32 b3_part_mode :3;
   1432 
   1433     /**
   1434      *  0 for this encoder
   1435      */
   1436     UWORD32 b1_pcm_flag :1;
   1437 
   1438     /**
   1439      *  only applicable for intra cu
   1440      */
   1441     UWORD32 b3_chroma_intra_pred_mode :3;
   1442 
   1443     /**
   1444      * only applicable for intra cu
   1445      */
   1446     UWORD32 b1_prev_intra_luma_pred_flag0 :1;
   1447 
   1448     /**
   1449      * only applicable for intra cu and pred_mode=NxN
   1450      */
   1451     UWORD32 b1_prev_intra_luma_pred_flag1 :1;
   1452 
   1453     /**
   1454      * only applicable for intra cu and pred_mode=NxN
   1455      */
   1456     UWORD32 b1_prev_intra_luma_pred_flag2 :1;
   1457 
   1458     /**
   1459      * only applicable for intra cu and pred_mode=NxN
   1460      */
   1461     UWORD32 b1_prev_intra_luma_pred_flag3 :1;
   1462 
   1463     /**
   1464      *  only applicable for luma intra cu
   1465      */
   1466     UWORD32 b2_mpm_idx0 :2;
   1467 
   1468     /**
   1469      *  only applicable for intra cu and pred_mode=NxN
   1470      */
   1471     UWORD32 b2_mpm_idx1 :2;
   1472 
   1473     /**
   1474      *  only applicable for intra cu and pred_mode=NxN
   1475      */
   1476     UWORD32 b2_mpm_idx2 :2;
   1477 
   1478     /**
   1479      *  only applicable for intra cu and pred_mode=NxN
   1480      */
   1481     UWORD32 b2_mpm_idx3 :2;
   1482 
   1483     /**
   1484      *  only applicable for intra cu
   1485      */
   1486     UWORD32 b5_rem_intra_pred_mode0 :5;
   1487 
   1488     /**
   1489      *  only applicable for intra cu and pred_mode=NxN
   1490      */
   1491     UWORD32 b5_rem_intra_pred_mode1 :5;
   1492 
   1493     /**
   1494      *  only applicable for intra cu and pred_mode=NxN
   1495      */
   1496     UWORD32 b5_rem_intra_pred_mode2 :5;
   1497 
   1498     /**
   1499      *  only applicable for intra cu and pred_mode=NxN
   1500      */
   1501     UWORD32 b5_rem_intra_pred_mode3 :5;
   1502 
   1503     /**
   1504      *  no residue flag for cu
   1505      */
   1506     UWORD32 b1_no_residual_syntax_flag :1;
   1507 
   1508 }cu_t;
   1509 
   1510 /*****************************************************************************/
   1511 /* Since the following data will be accessed linearly (no random access      */
   1512 /*  is needed for this) there is no need to store a frame level offset for   */
   1513 /*  each CTB's TU data. Only a pointer to this is stored in CTB's structure  */
   1514 /*****************************************************************************/
   1515 
   1516 typedef struct
   1517 {
   1518     /*************************************************************************/
   1519     /* Number of TUs filled in as_tu                                         */
   1520     /* Having the first entry as 32 bit data, helps in keeping each of       */
   1521     /* the structures aligned to 32 bits at CTB level                        */
   1522     /*************************************************************************/
   1523     /**
   1524      * Number of TUs filled in as_tu
   1525      */
   1526     WORD32 i4_tu_cnt;
   1527 
   1528     /**
   1529      *  Array to map each min TU unit to a corresponding entry in as_tu
   1530      */
   1531     UWORD8 au1_tu_map[MAX_TU_IN_CTB];
   1532 
   1533     /*************************************************************************/
   1534     /* TU level information                                                  */
   1535     /* Though the allocation for as_pu as done to handle worst case data,    */
   1536     /* only valid number of TUs will be filled in the following array.       */
   1537     /* Next CTB starts after the valid as_tu entries                         */
   1538     /*************************************************************************/
   1539     /**
   1540      *  TU level information
   1541      */
   1542     tu_t as_tu[MAX_TU_IN_CTB];
   1543 
   1544 }ctb_tu_list_t;
   1545 
   1546 /*****************************************************************************/
   1547 /* Info from last TU row of CTB is stored in a row level neighbour buffer    */
   1548 /* , which will be used for Boundary Strength computation                    */
   1549 /*****************************************************************************/
   1550 /**
   1551  *  CTB neighbor info
   1552  */
   1553 typedef struct
   1554 {
   1555     /**
   1556      *  Slice index of the ctb
   1557      */
   1558     UWORD16 u2_slice_idx;
   1559 
   1560     /*************************************************************************/
   1561     /* CBF of bottom TU row (replicated in 4 pixel boundary)                 */
   1562     /* MSB contains CBF of first TU in the last row and LSB contains CBF     */
   1563     /* of last TU in the last row                                            */
   1564     /*************************************************************************/
   1565     /**
   1566      * CBF of bottom TU row
   1567      */
   1568     UWORD16 u2_packed_cbf;
   1569 
   1570     /*************************************************************************/
   1571     /* QP of bottom TU row (replicated at 8 pixel boundary (Since QP can     */
   1572     /* not change at less than min CU granularity)                           */
   1573     /*************************************************************************/
   1574     /**
   1575      * QP of bottom TU row
   1576      */
   1577     UWORD8 au1_qp[MAX_CU_IN_CTB_ROW];
   1578 
   1579 }ctb_top_ny_info_t;
   1580 
   1581 /**
   1582  *  CTB level info
   1583  */
   1584 typedef struct _ctb_t
   1585 {
   1586     /*************************************************************************/
   1587     /* Tile boundary can be detected by looking at tile start x and tile     */
   1588     /* start y.  And based on the tile, slice and frame boundary the         */
   1589     /* following will be initialized.                                        */
   1590     /*************************************************************************/
   1591     /**
   1592      *  Pointer to left CTB
   1593      */
   1594     /*  If not available, this will be set to NULL   */
   1595     struct _ctb_t *ps_ctb_left;
   1596 
   1597     /**
   1598      *  Pointer to top-left CTB
   1599      */
   1600     /* If not available, this will be set to NULL   */
   1601     ctb_top_ny_info_t *ps_ctb_ny_topleft;
   1602 
   1603     /**
   1604      *  Pointer to top CTB
   1605      */
   1606     /* If not available, this will be set to NULL  */
   1607     ctb_top_ny_info_t *ps_ctb_ny_top;
   1608 
   1609     /**
   1610      *  Pointer to top-right CTB
   1611      */
   1612     /* If not available, this will be set to NULL */
   1613     ctb_top_ny_info_t *ps_ctb_ny_topright;
   1614 
   1615     /*************************************************************************/
   1616     /* Pointer to PU data.                                                   */
   1617     /* This points to a MV Bank stored at frame level. Though this           */
   1618     /* pointer can be derived by reading offset at frame level, it is        */
   1619     /* stored here for faster access. Can be removed if storage of CTB       */
   1620     /* structure is critical                                                 */
   1621     /*************************************************************************/
   1622     /**
   1623      * Pointer to PU data
   1624      */
   1625     pu_t *ps_pu;
   1626 
   1627     /*************************************************************************/
   1628     /* Pointer to a PU map stored at frame level,                            */
   1629     /* Though this pointer can be derived by multiplying CTB adress with     */
   1630     /* number of minTUs in a CTB, it is stored here for faster access.       */
   1631     /* Can be removed if storage of CTB structure is critical                */
   1632     /*************************************************************************/
   1633     /**
   1634      * Pointer to a PU map stored at frame level
   1635      */
   1636     UWORD8 *pu1_pu_map;
   1637 
   1638     /**
   1639      *  Number of TUs filled in as_tu
   1640      */
   1641     /*************************************************************************/
   1642     /* Having the first entry as 32 bit data, helps in keeping each of       */
   1643     /* the structures aligned to 32 bits at CTB level                        */
   1644     /*************************************************************************/
   1645     WORD32 i4_tu_cnt;
   1646 
   1647     /**
   1648      *  Array to map each min TU unit to a corresponding entry in as_tu
   1649      */
   1650     UWORD8 *pu1_tu_map;
   1651 
   1652     /**
   1653      *  TU level information
   1654      */
   1655     /*************************************************************************/
   1656     /* Though the allocation for as_pu as done to handle worst case data,    */
   1657     /* only valid number of TUs will be filled in the following array.       */
   1658     /* Next CTB starts after the valid as_tu entries                         */
   1659     /*************************************************************************/
   1660     tu_t *ps_tu;
   1661 
   1662     /**
   1663      *  Pointer to transform coeff data
   1664      */
   1665     /*************************************************************************/
   1666     /* Following format is repeated for every coded TU                       */
   1667     /* Luma Block                                                            */
   1668     /* num_coeffs      : 16 bits                                             */
   1669     /* zero_cols       : 8 bits ( 1 bit per 4 columns)                       */
   1670     /* sig_coeff_map   : ((TU Size * TU Size) + 31) >> 5 number of WORD32s   */
   1671     /* coeff_data      : Non zero coefficients                               */
   1672     /* Cb Block (only for last TU in 4x4 case else for every luma TU)        */
   1673     /* num_coeffs      : 16 bits                                             */
   1674     /* zero_cols       : 8 bits ( 1 bit per 4 columns)                       */
   1675     /* sig_coeff_map   : ((TU Size * TU Size) + 31) >> 5 number of WORD32s   */
   1676     /* coeff_data      : Non zero coefficients                               */
   1677     /* Cr Block (only for last TU in 4x4 case else for every luma TU)        */
   1678     /* num_coeffs      : 16 bits                                             */
   1679     /* zero_cols       : 8 bits ( 1 bit per 4 columns)                       */
   1680     /* sig_coeff_map   : ((TU Size * TU Size) + 31) >> 5 number of WORD32s   */
   1681     /* coeff_data      : Non zero coefficients                               */
   1682     /*************************************************************************/
   1683     void            *pv_coeff_data;
   1684 
   1685     /**
   1686      *  Slice to which the CTB belongs to
   1687      */
   1688     WORD32 i4_slice_idx;
   1689 
   1690     /**
   1691      *  CTB column position
   1692      */
   1693     WORD32 i4_pos_x;
   1694 
   1695     /**
   1696      *  CTB row position
   1697      */
   1698     WORD32 i4_pos_y;
   1699 
   1700     /**
   1701      *  Number of PUs filled in ps_pu
   1702      */
   1703     WORD32 i4_pu_cnt;
   1704 
   1705     /**
   1706      *  Index of current PU being processed in ps_pu
   1707      */
   1708     /*  Scratch variable set to 0 at the start of any PU processing function */
   1709     WORD32 i4_pu_idx;
   1710 
   1711     /**
   1712      * Vertical Boundary strength
   1713      */
   1714     /* Two bits per edge.
   1715     Stored in format. BS[15] | BS[14] | .. |BS[0]*/
   1716     UWORD32 *pu4_vert_bs;
   1717 
   1718     /**
   1719      * Horizontal Boundary strength
   1720      */
   1721 
   1722     /* Two bits per edge.
   1723     Stored in format. BS[15] | BS[14] | .. |BS[0]*/
   1724     UWORD32 *pu4_horz_bs;
   1725 
   1726     /**
   1727      *  Qp array stored for each 8x8 pixels
   1728      */
   1729     UWORD8 *pu1_qp;
   1730 
   1731     /**
   1732      *  Pointer to current frame's pu_t array
   1733      */
   1734     pu_t *ps_frm_pu;
   1735 
   1736     /**
   1737      * Pointer to current frame's pu_t index array, which stores starting index
   1738      * of pu_t for every CTB
   1739      */
   1740     UWORD32 *pu4_frm_pu_idx;
   1741 
   1742     /**
   1743      *  Pointer to current frame's pu map array
   1744      */
   1745     UWORD8 *pu1_frm_pu_map;
   1746 
   1747     /*************************************************************************/
   1748     /* Need to add encoder specific elements for identifying the order of    */
   1749     /* coding for CU, TU and PU if any                                       */
   1750     /*************************************************************************/
   1751 }ctb_t;
   1752 
   1753 /*****************************************************************************/
   1754 /* The following can be used to typecast coefficient data that is stored     */
   1755 /*  per subblock. Note that though i2_level is shown as an array that        */
   1756 /*  holds 16 coefficients, only the first few entries will be valid. Next    */
   1757 /*  subblocks data starts after the valid number of coefficients. Number     */
   1758 /*  of non-zero coefficients will be derived using number of non-zero bits   */
   1759 /*  in sig coeff map                                                         */
   1760 /*****************************************************************************/
   1761 /**
   1762  * Structure to hold coefficient info for a 4x4 subblock
   1763  */
   1764 typedef struct
   1765 {
   1766     /**
   1767      * sub block position
   1768      */
   1769     UWORD16 u2_subblk_pos;
   1770 
   1771     /**
   1772      * significant coefficient map
   1773      */
   1774     UWORD16 u2_sig_coeff_map;
   1775 
   1776     /**
   1777      * holds 16 coefficients
   1778      */
   1779     WORD16  ai2_level[SUBBLK_COEFF_CNT];
   1780 }tu_sblk_coeff_data_t;
   1781 
   1782 
   1783 /*************************************************************************/
   1784 /* The following describes how each of the CU cases are handled          */
   1785 /*************************************************************************/
   1786 
   1787 /*************************************************************************/
   1788 /* For SKIP CU                                                           */
   1789 /* One Inter PU with appropriate MV                                      */
   1790 /* One TU which says Y, Cb and Cr CBF is zero with size equal to CB size */
   1791 /*************************************************************************/
   1792 
   1793 /*************************************************************************/
   1794 /* For Inter CU                                                          */
   1795 /* M Inter PU with appropriate MVs (M between 1 to 4)                    */
   1796 /* N TU (N is number of TU in CU)                                        */
   1797 /*************************************************************************/
   1798 
   1799 /*************************************************************************/
   1800 /* For Intra CU                                                          */
   1801 /* N TU (N is number of TU in CU)                                        */
   1802 /* N Intra PU with appropriate pred modes for luma and chroma            */
   1803 /*************************************************************************/
   1804 
   1805 /*************************************************************************/
   1806 /* For Intra PCM CU                                                      */
   1807 /* One TU which says transquant bypass is 1  with size equal to CB size  */
   1808 /* 1 Intra PU with pcm flag set to 1(which ensures no intra pred is done)*/
   1809 /*************************************************************************/
   1810 
   1811 /*************************************************************************/
   1812 /* For a CU where cu_transquant_bypass_flag is 1                         */
   1813 /* One TU which says transquant bypass is 1  with size equal to CB size  */
   1814 /* N Intra/Inter PUs                                                     */
   1815 /*************************************************************************/
   1816 
   1817 /*************************************************************************/
   1818 /* For a CU where no_residual_syntax_flag is 1                           */
   1819 /* One TU which says Y, Cb, Cr CBF is 0  with size equal to CB size      */
   1820 /* N Inter PUs                                                           */
   1821 /*************************************************************************/
   1822 
   1823 
   1824 /**
   1825  * Structure giving information about the tile
   1826  */
   1827 typedef struct
   1828 {
   1829     /* X position of the tile in the current frame in CTB units */
   1830     UWORD8 u1_pos_x;
   1831 
   1832     /* Y position of the tile in the current frame in CTB units */
   1833     UWORD8 u1_pos_y;
   1834 
   1835     /* Tile width in CTB units */
   1836     UWORD16 u2_wd;
   1837 
   1838     /* Tile height in CTB units */
   1839     UWORD16 u2_ht;
   1840 
   1841 }tile_t;
   1842 
   1843 /**
   1844  * Structure to hold Profile tier level info for a given layer
   1845  */
   1846 
   1847 typedef struct
   1848 {
   1849     /**
   1850      *  NAL unit type
   1851      */
   1852     WORD8 i1_nal_unit_type;
   1853 
   1854     /**
   1855      *  NAL temporal id
   1856      */
   1857     WORD8 i1_nuh_temporal_id;
   1858 }nal_header_t;
   1859 
   1860 /**
   1861  * Structure to hold Profile tier level info for a given layer
   1862  */
   1863 
   1864 typedef struct
   1865 {
   1866     /**
   1867      *  profile_space
   1868      */
   1869     WORD8 i1_profile_space;
   1870 
   1871     /**
   1872      *  tier_flag
   1873      */
   1874     WORD8 i1_tier_flag;
   1875 
   1876     /**
   1877      *  profile_idc
   1878      */
   1879     WORD8 i1_profile_idc;
   1880 
   1881     /**
   1882      *  profile_compatibility_flag[]
   1883      */
   1884     WORD8 ai1_profile_compatibility_flag[MAX_PROFILE_COMPATBLTY];
   1885 
   1886     /**
   1887      * progressive_source_flag
   1888      */
   1889     WORD8 i1_general_progressive_source_flag;
   1890 
   1891     /**
   1892      * interlaced_source_flag
   1893      */
   1894     WORD8 i1_general_interlaced_source_flag;
   1895 
   1896     /**
   1897      * non_packed_constraint_flag
   1898      */
   1899     WORD8 i1_general_non_packed_constraint_flag;
   1900 
   1901     /**
   1902      * frame_only_constraint_flag
   1903      */
   1904     WORD8 i1_frame_only_constraint_flag;
   1905 
   1906     /**
   1907      * general_max_12bit_constraint_flag
   1908      */
   1909     WORD8 i1_general_max_12bit_constraint_flag;
   1910 
   1911     /**
   1912      * general_max_10bit_constraint_flag
   1913      */
   1914     WORD8 i1_general_max_10bit_constraint_flag;
   1915 
   1916     /**
   1917      * general_max_8bit_constraint_flag
   1918      */
   1919     WORD8 i1_general_max_8bit_constraint_flag;
   1920 
   1921     /**
   1922      * general_max_422chroma_constraint_flag
   1923      */
   1924     WORD8 i1_general_max_422chroma_constraint_flag;
   1925 
   1926     /**
   1927      * general_max_420chroma_constraint_flag
   1928      */
   1929     WORD8 i1_general_max_420chroma_constraint_flag;
   1930 
   1931     /**
   1932      * general_max_monochrome_constraint_flag
   1933      */
   1934     WORD8 i1_general_max_monochrome_constraint_flag;
   1935 
   1936     /**
   1937      * general_intra_constraint_flag
   1938      */
   1939     WORD8 i1_general_intra_constraint_flag;
   1940 
   1941     /**
   1942      * general_one_picture_only_constraint_flag
   1943      */
   1944     WORD8 i1_general_one_picture_only_constraint_flag;
   1945 
   1946     /**
   1947      * general_lower_bit_rate_constraint_flag
   1948      */
   1949     WORD8 i1_general_lower_bit_rate_constraint_flag;
   1950 
   1951     /**
   1952      *  level_idc
   1953      */
   1954     UWORD8 u1_level_idc;
   1955 }profile_tier_lvl_t;
   1956 
   1957 /**
   1958  * Structure to hold Profile tier level info for all layers
   1959  */
   1960 typedef struct
   1961 {
   1962     /**
   1963      *  Profile and tier information for general
   1964      */
   1965     profile_tier_lvl_t s_ptl_gen;
   1966 
   1967     /**
   1968      *  sub_layer_profile_present_flag[]
   1969      */
   1970     WORD8 ai1_sub_layer_profile_present_flag[VPS_MAX_SUB_LAYERS - 1];
   1971 
   1972     /**
   1973      *  sub_layer_level_present_flag[]
   1974      */
   1975     WORD8 ai1_sub_layer_level_present_flag[VPS_MAX_SUB_LAYERS - 1];
   1976 
   1977     /**
   1978      *  Profile and tier information for sub layers
   1979      */
   1980     profile_tier_lvl_t as_ptl_sub[VPS_MAX_SUB_LAYERS - 1];
   1981 
   1982 }profile_tier_lvl_info_t;
   1983 
   1984 /**
   1985  * Structure to hold short term reference picture set info
   1986  */
   1987 typedef struct
   1988 {
   1989     /**
   1990      *  delta_poc_s0_minus1[ i ] and delta_poc_s1_minus1[ i ]
   1991      */
   1992     WORD16 ai2_delta_poc[MAX_DPB_SIZE];
   1993 
   1994     /**
   1995      *  inter_ref_pic_set_prediction_flag
   1996      */
   1997     WORD8 i1_inter_ref_pic_set_prediction_flag;
   1998 
   1999     /**
   2000      *  num_negative_pics
   2001      */
   2002     WORD8 i1_num_neg_pics;
   2003 
   2004     /**
   2005      *  num_positive_pics
   2006      */
   2007     WORD8 i1_num_pos_pics;
   2008 
   2009     /**
   2010      *  used_by_curr_pic_s0_flag[ i ] and used_by_curr_pic_s1_flag[i]
   2011      */
   2012     WORD8 ai1_used[MAX_DPB_SIZE];
   2013 
   2014     /**
   2015      *  Ref Idc
   2016      */
   2017     WORD8 ai1_ref_idc[MAX_DPB_SIZE];
   2018 
   2019     /**
   2020      *  Sum of positive and negative pics for each refence
   2021      */
   2022     WORD8 i1_num_delta_pocs;
   2023 
   2024     /**
   2025      *  Number of ref_idc
   2026      */
   2027     WORD8 i1_num_ref_idc;
   2028 }stref_picset_t;
   2029 
   2030 /**
   2031  * Structure to hold weighted prediction info such as weights and offsets
   2032  */
   2033 typedef struct
   2034 {
   2035     /** luma_log2_weight_denom */
   2036     WORD8 i1_luma_log2_weight_denom;
   2037 
   2038     /** delta_chroma_log2_weight_denom */
   2039     WORD8 i1_chroma_log2_weight_denom;
   2040 
   2041 
   2042     /** luma_weight_l0_flag[ i ] */
   2043     WORD8 i1_luma_weight_l0_flag[MAX_DPB_SIZE];
   2044 
   2045     /** chroma_weight_l0_flag[ i ] */
   2046     WORD8 i1_chroma_weight_l0_flag[MAX_DPB_SIZE];
   2047 
   2048     /** delta_luma_weight_l0[ i ] */
   2049     WORD16 i2_luma_weight_l0[MAX_DPB_SIZE];
   2050 
   2051     /** luma_offset_l0[ i ] */
   2052     WORD16 i2_luma_offset_l0[MAX_DPB_SIZE];
   2053 
   2054     /** delta_chroma_weight_l0[ i ][ j ] */
   2055     WORD16 i2_chroma_weight_l0_cb[MAX_DPB_SIZE];
   2056 
   2057     /** delta_chroma_offset_l0[ i ][ j ] */
   2058     WORD16 i2_chroma_offset_l0_cb[MAX_DPB_SIZE];
   2059 
   2060     /** delta_chroma_weight_l0[ i ][ j ] */
   2061     WORD16 i2_chroma_weight_l0_cr[MAX_DPB_SIZE];
   2062 
   2063     /** delta_chroma_offset_l0[ i ][ j ] */
   2064     WORD16 i2_chroma_offset_l0_cr[MAX_DPB_SIZE];
   2065 
   2066     /** luma_weight_l1_flag[ i ] */
   2067     WORD8 i1_luma_weight_l1_flag[MAX_DPB_SIZE];
   2068 
   2069     /** chroma_weight_l1_flag[ i ] */
   2070     WORD8 i1_chroma_weight_l1_flag[MAX_DPB_SIZE];
   2071 
   2072     /** delta_luma_weight_l1[ i ] */
   2073     WORD16 i2_luma_weight_l1[MAX_DPB_SIZE];
   2074 
   2075     /** luma_offset_l1[ i ] */
   2076     WORD16 i2_luma_offset_l1[MAX_DPB_SIZE];
   2077 
   2078     /** delta_chroma_weight_l1[ i ][ j ] */
   2079     WORD16 i2_chroma_weight_l1_cb[MAX_DPB_SIZE];
   2080 
   2081     /** delta_chroma_offset_l1[ i ][ j ] */
   2082     WORD16 i2_chroma_offset_l1_cb[MAX_DPB_SIZE];
   2083 
   2084     /** delta_chroma_weight_l1[ i ][ j ] */
   2085     WORD16 i2_chroma_weight_l1_cr[MAX_DPB_SIZE];
   2086 
   2087     /** delta_chroma_offset_l1[ i ][ j ] */
   2088     WORD16 i2_chroma_offset_l1_cr[MAX_DPB_SIZE];
   2089 
   2090 }pred_wt_ofst_t;
   2091 
   2092 
   2093 /**
   2094  * Structure to hold Reference picture list modification info
   2095  */
   2096 typedef struct
   2097 {
   2098     /* ref_pic_list_modification_flag_l0 */
   2099     WORD8 i1_ref_pic_list_modification_flag_l0;
   2100 
   2101     /* list_entry_l0[ i ] */
   2102     WORD8 i1_list_entry_l0[16];
   2103 
   2104     /* ref_pic_list_modification_flag_l1 */
   2105     WORD8 i1_ref_pic_list_modification_flag_l1;
   2106 
   2107     /* list_entry_l1[ i ] */
   2108     WORD8 i1_list_entry_l1[16];
   2109 
   2110     /* Reference POC values for L0,L1 */
   2111     WORD32 i4_ref_poc_l0[16];
   2112     WORD32 i4_ref_poc_l1[16];
   2113 }rplm_t;
   2114 
   2115 
   2116 /**
   2117  * Structure to hold VPS info
   2118  */
   2119 typedef struct
   2120 {
   2121     /**
   2122      *  video_parameter_set_id
   2123      */
   2124     WORD8 i1_vps_id;
   2125 
   2126     /**
   2127      *  vps_temporal_id_nesting_flag
   2128      */
   2129     WORD8 i1_vps_temporal_id_nesting_flag;
   2130     /**
   2131      * sub_layer_ordering_info_present_flag
   2132      */
   2133     WORD8 i1_sub_layer_ordering_info_present_flag;
   2134     /**
   2135      *  vps_max_sub_layers_minus1
   2136      */
   2137     WORD8 i1_vps_max_sub_layers;
   2138 
   2139     /**
   2140      *  vps_max_dec_pic_buffering
   2141      */
   2142     WORD8 ai1_vps_max_dec_pic_buffering[VPS_MAX_SUB_LAYERS];
   2143 
   2144     /**
   2145      *  vps_max_num_reorder_pics
   2146      */
   2147     WORD8 ai1_vps_max_num_reorder_pics[VPS_MAX_SUB_LAYERS];
   2148 
   2149     /**
   2150      *  vps_max_latency_increase
   2151      */
   2152     WORD8 ai1_vps_max_latency_increase[VPS_MAX_SUB_LAYERS];
   2153 
   2154     /**
   2155      *  vps_num_hrd_parameters
   2156      */
   2157     WORD8 i1_vps_num_hrd_parameters;
   2158 
   2159     /**
   2160      * vps_max_nuh_reserved_zero_layer_id
   2161      */
   2162     WORD8 i1_vps_max_nuh_reserved_zero_layer_id;
   2163 
   2164     /**
   2165      * vps_num_op_sets
   2166      */
   2167     WORD8 i1_vps_num_op_sets;
   2168 
   2169     /**
   2170      * layer_id_included_flag
   2171      */
   2172     //WORD8 ai1_layer_id_included_flag[2][MAX_NUH_LAYERS];
   2173     /**
   2174      *  Profile, Tier and Level info
   2175      */
   2176     profile_tier_lvl_info_t s_ptl;
   2177 
   2178     /**
   2179      * bit_rate_info_present_flag[i]
   2180      */
   2181     WORD8 ai1_bit_rate_info_present_flag[VPS_MAX_SUB_LAYERS];
   2182 
   2183     /**
   2184      * pic_rate_info_present_flag[i]
   2185      */
   2186     WORD8 ai1_pic_rate_info_present_flag[VPS_MAX_SUB_LAYERS];
   2187 
   2188     /**
   2189      * avg_bit_rate[i]
   2190      */
   2191     UWORD16 au2_avg_bit_rate[VPS_MAX_SUB_LAYERS];
   2192 
   2193     /**
   2194      * max_bit_rate[i]
   2195      */
   2196     UWORD16 au2_max_bit_rate[VPS_MAX_SUB_LAYERS];
   2197 
   2198     /**
   2199      * constant_pic_rate_idc[i]
   2200      */
   2201     WORD8 ai1_constant_pic_rate_idc[VPS_MAX_SUB_LAYERS];
   2202 
   2203     /**
   2204      * avg_pic_rate[i]
   2205      */
   2206     UWORD16 au2_avg_pic_rate[VPS_MAX_SUB_LAYERS];
   2207 }vps_t;
   2208 
   2209 
   2210 /**
   2211  * Structure to hold SPS info
   2212  */
   2213 typedef struct
   2214 {
   2215     /**
   2216      * pic_width_in_luma_samples
   2217      */
   2218     WORD16 i2_pic_width_in_luma_samples;
   2219 
   2220     /**
   2221      *  pic_height_in_luma_samples
   2222      */
   2223     WORD16 i2_pic_height_in_luma_samples;
   2224 
   2225     /**
   2226      *  pic_crop_left_offset
   2227      */
   2228     WORD16 i2_pic_crop_left_offset;
   2229 
   2230     /**
   2231      *  pic_crop_right_offset
   2232      */
   2233     WORD16 i2_pic_crop_right_offset;
   2234 
   2235     /**
   2236      *  pic_crop_top_offset
   2237      */
   2238     WORD16 i2_pic_crop_top_offset;
   2239 
   2240     /**
   2241      *  pic_crop_bottom_offset
   2242      */
   2243     WORD16 i2_pic_crop_bottom_offset;
   2244 
   2245     /**
   2246      *  seq_parameter_set_id
   2247      */
   2248     WORD8 i1_sps_id;
   2249 
   2250     /**
   2251      *  video_parameter_set_id
   2252      */
   2253     WORD8 i1_vps_id;
   2254 
   2255     /**
   2256      *  sps_max_sub_layers_minus1
   2257      */
   2258     WORD8 i1_sps_max_sub_layers;
   2259 
   2260     /**
   2261      *  chroma_format_idc
   2262      */
   2263     WORD8 i1_chroma_format_idc;
   2264 
   2265     /**
   2266      * Bit depth of luma samples
   2267      */
   2268     WORD8 i1_bit_depth_luma_minus8;
   2269 
   2270     /**
   2271      * Bit depth of chrma samples
   2272      */
   2273     WORD8 i1_bit_depth_chroma_minus8;
   2274 
   2275     /* separate_colour_plane_flag */
   2276     WORD8 i1_separate_colour_plane_flag;
   2277 
   2278     /**
   2279      *  pic_cropping_flag
   2280      */
   2281     WORD8 i1_pic_cropping_flag;
   2282 
   2283     /**
   2284      *  pcm_enabled_flag
   2285      */
   2286     WORD8 i1_pcm_enabled_flag;
   2287 
   2288     /**
   2289      *  pcm_sample_bit_depth_luma
   2290      */
   2291     WORD8 i1_pcm_sample_bit_depth_luma;
   2292 
   2293     /**
   2294      *  pcm_sample_bit_depth_chroma
   2295      */
   2296     WORD8 i1_pcm_sample_bit_depth_chroma;
   2297 
   2298     /**
   2299      *  log2_max_pic_order_cnt_lsb_minus4
   2300      */
   2301     WORD8 i1_log2_max_pic_order_cnt_lsb;
   2302     /**
   2303      * sps_sub_layer_ordering_info_present_flag
   2304      */
   2305     WORD8 i1_sps_sub_layer_ordering_info_present_flag;
   2306     /**
   2307      *  sps_max_dec_pic_buffering
   2308      */
   2309     WORD8 ai1_sps_max_dec_pic_buffering[SPS_MAX_SUB_LAYERS];
   2310 
   2311     /**
   2312      *  sps_max_num_reorder_pics
   2313      */
   2314     WORD8 ai1_sps_max_num_reorder_pics[SPS_MAX_SUB_LAYERS];
   2315 
   2316     /**
   2317      *  sps_max_latency_increase
   2318      */
   2319     WORD8 ai1_sps_max_latency_increase[SPS_MAX_SUB_LAYERS];
   2320 
   2321     /**
   2322      *  log2_min_coding_block_size_minus3
   2323      */
   2324     WORD8 i1_log2_min_coding_block_size;
   2325 
   2326     /**
   2327      *  log2_diff_max_min_coding_block_size
   2328      */
   2329     WORD8 i1_log2_diff_max_min_coding_block_size;
   2330 
   2331     /**
   2332      *  log2_min_transform_block_size_minus2
   2333      */
   2334     WORD8 i1_log2_min_transform_block_size;
   2335 
   2336     /**
   2337      *  log2_diff_max_min_transform_block_size
   2338      */
   2339     WORD8 i1_log2_diff_max_min_transform_block_size;
   2340 
   2341     /**
   2342      *  log2_min_pcm_coding_block_size_minus3
   2343      */
   2344     WORD8 i1_log2_min_pcm_coding_block_size;
   2345 
   2346     /**
   2347      *  log2_diff_max_min_pcm_coding_block_size
   2348      */
   2349     WORD8 i1_log2_diff_max_min_pcm_coding_block_size;
   2350 
   2351     /**
   2352      *  max_transform_hierarchy_depth_inter
   2353      */
   2354     WORD8 i1_max_transform_hierarchy_depth_inter;
   2355 
   2356     /**
   2357      *  max_transform_hierarchy_depth_intra
   2358      */
   2359     WORD8 i1_max_transform_hierarchy_depth_intra;
   2360 
   2361     /**
   2362      *  scaling_list_enable_flag
   2363      */
   2364     WORD8 i1_scaling_list_enable_flag;
   2365 
   2366     /**
   2367      *  sps_scaling_list_data_present_flag
   2368      */
   2369     WORD8 i1_sps_scaling_list_data_present_flag;
   2370 
   2371     /**
   2372      *  amp_enabled_flag
   2373      */
   2374     WORD8 i1_amp_enabled_flag;
   2375 
   2376     /**
   2377      *  sample_adaptive_offset_enabled_flag
   2378      */
   2379     WORD8 i1_sample_adaptive_offset_enabled_flag;
   2380 
   2381     /**
   2382      *  pcm_loop_filter_disable_flag
   2383      */
   2384     WORD8 i1_pcm_loop_filter_disable_flag;
   2385 
   2386     /**
   2387      *  sps_temporal_id_nesting_flag
   2388      */
   2389     WORD8 i1_sps_temporal_id_nesting_flag;
   2390 
   2391     /**
   2392      *  num_short_term_ref_pic_sets
   2393      */
   2394     WORD8 i1_num_short_term_ref_pic_sets;
   2395 
   2396     /**
   2397      *  long_term_ref_pics_present_flag
   2398      */
   2399     WORD8 i1_long_term_ref_pics_present_flag;
   2400 
   2401     /**
   2402      *  num_long_term_ref_pics_sps
   2403      */
   2404     WORD8 i1_num_long_term_ref_pics_sps;
   2405 
   2406     /**
   2407      *  lt_ref_pic_poc_lsb_sps[]
   2408      */
   2409     UWORD16 au2_lt_ref_pic_poc_lsb_sps[MAX_LTREF_PICS_SPS];
   2410 
   2411     /**
   2412      *  used_by_curr_pic_lt_sps_flag[]
   2413      */
   2414     WORD8 ai1_used_by_curr_pic_lt_sps_flag[MAX_LTREF_PICS_SPS];
   2415 
   2416     /**
   2417      *  sps_temporal_mvp_enable_flag
   2418      */
   2419     WORD8 i1_sps_temporal_mvp_enable_flag;
   2420 
   2421     /**
   2422      * strong_intra_smoothing_enable_flag
   2423      */
   2424     WORD8 i1_strong_intra_smoothing_enable_flag;
   2425 
   2426     /**
   2427      *  vui_parameters_present_flag
   2428      */
   2429     WORD8 i1_vui_parameters_present_flag;
   2430 
   2431     /**
   2432      * vui parameters Structure info
   2433      */
   2434     vui_t s_vui_parameters;
   2435 
   2436     /**
   2437      *  Log2(CTB Size) in luma units
   2438      */
   2439 
   2440     WORD8 i1_log2_ctb_size;
   2441 
   2442     /**
   2443      * Maximum transform block size
   2444      */
   2445     WORD8 i1_log2_max_transform_block_size;
   2446 
   2447     /**
   2448      *  Picture width in CTB units
   2449      */
   2450 
   2451     WORD16 i2_pic_wd_in_ctb;
   2452 
   2453     /**
   2454      *  Picture height in CTB units
   2455      */
   2456 
   2457     WORD16 i2_pic_ht_in_ctb;
   2458 
   2459     /**
   2460      * Picture width in min CB units
   2461      */
   2462 
   2463     WORD16 i2_pic_wd_in_min_cb;
   2464 
   2465     /**
   2466      *  Picture height in min CB units
   2467      */
   2468 
   2469     WORD16 i2_pic_ht_in_min_cb;
   2470 
   2471     /**
   2472      *  Picture size in CTB units
   2473      */
   2474     WORD32 i4_pic_size_in_ctb;
   2475 
   2476     /**
   2477      *  Profile, Tier and Level info
   2478      */
   2479 
   2480     profile_tier_lvl_info_t s_ptl;
   2481 
   2482     /**
   2483      *  Short term reference pic set
   2484      */
   2485     stref_picset_t as_stref_picset[MAX_STREF_PICS_SPS];
   2486 
   2487     /**
   2488      *  Pointer to scaling matrix
   2489      */
   2490     /*************************************************************************/
   2491     /* Contanis the matrice in the following order in a 1D buffer            */
   2492     /* Intra 4 x 4 Y, 4 x 4 U, 4 x 4 V                                       */
   2493     /* Inter 4 x 4 Y, 4 x 4 U, 4 x 4 V                                       */
   2494     /* Intra 8 x 8 Y, 8 x 8 U, 8 x 8 V                                       */
   2495     /* Inter 8 x 8 Y, 8 x 8 U, 8 x 8 V                                       */
   2496     /* Intra 16x16 Y, 16x16 U, 16x16 V                                       */
   2497     /* Inter 16x16 Y, 16x16 U, 16x16 V                                       */
   2498     /* Intra 32x32 Y                                                         */
   2499     /* Inter 32x32 Y                                                         */
   2500     /*************************************************************************/
   2501     WORD16 *pi2_scaling_mat;
   2502 
   2503 
   2504     /*
   2505      * Flag indicating if the SPS is parsed
   2506      */
   2507     WORD8 i1_sps_valid;
   2508 
   2509 }sps_t;
   2510 
   2511 /**
   2512  * Structure to hold PPS info
   2513  */
   2514 typedef struct
   2515 {
   2516     /**
   2517      *  Pointer to scaling matrix
   2518      */
   2519     /*************************************************************************/
   2520     /* Contanis the matrice in the following order in a 1D buffer            */
   2521     /* Intra 4 x 4 Y, 4 x 4 U, 4 x 4 V                                       */
   2522     /* Inter 4 x 4 Y, 4 x 4 U, 4 x 4 V                                       */
   2523     /* Intra 8 x 8 Y, 8 x 8 U, 8 x 8 V                                       */
   2524     /* Inter 8 x 8 Y, 8 x 8 U, 8 x 8 V                                       */
   2525     /* Intra 16x16 Y, 16x16 U, 16x16 V                                       */
   2526     /* Inter 16x16 Y, 16x16 U, 16x16 V                                       */
   2527     /* Intra 32x32 Y                                                         */
   2528     /* Inter 32x32 Y                                                         */
   2529     /*************************************************************************/
   2530     WORD16 *pi2_scaling_mat;
   2531 
   2532     /**
   2533      *  Pointer to an array containing tile info such as position, width, height
   2534      *  of each tile
   2535      */
   2536 
   2537     /* column_width_minus1[ i ] and row_height_minus1[ i ] */
   2538     tile_t *ps_tile;
   2539 
   2540     /**
   2541      *  pic_parameter_set_id
   2542      */
   2543     WORD8 i1_pps_id;
   2544 
   2545     /**
   2546      *  seq_parameter_set_id
   2547      */
   2548     WORD8 i1_sps_id;
   2549 
   2550     /**
   2551      *  sign_data_hiding_flag
   2552      */
   2553     WORD8 i1_sign_data_hiding_flag;
   2554 
   2555     /**
   2556      *  cabac_init_present_flag
   2557      */
   2558     WORD8 i1_cabac_init_present_flag;
   2559 
   2560     /**
   2561      *  num_ref_idx_l0_default_active_minus1
   2562      */
   2563     WORD8 i1_num_ref_idx_l0_default_active;
   2564 
   2565     /**
   2566      * num_ref_idx_l1_default_active_minus1
   2567      */
   2568     WORD8 i1_num_ref_idx_l1_default_active;
   2569 
   2570     /**
   2571      *  pic_init_qp_minus26
   2572      */
   2573     WORD8 i1_pic_init_qp;
   2574 
   2575     /**
   2576      *  constrained_intra_pred_flag
   2577      */
   2578     WORD8 i1_constrained_intra_pred_flag;
   2579 
   2580     /**
   2581      *  transform_skip_enabled_flag
   2582      */
   2583     WORD8 i1_transform_skip_enabled_flag;
   2584 
   2585     /**
   2586      *  cu_qp_delta_enabled_flag
   2587      */
   2588     WORD8 i1_cu_qp_delta_enabled_flag;
   2589 
   2590     /**
   2591      * diff_cu_qp_delta_depth
   2592      */
   2593     WORD8 i1_diff_cu_qp_delta_depth;
   2594 
   2595     /**
   2596      *  pic_cb_qp_offset
   2597      */
   2598     WORD8 i1_pic_cb_qp_offset;
   2599 
   2600     /**
   2601      *  pic_cr_qp_offset
   2602      */
   2603     WORD8 i1_pic_cr_qp_offset;
   2604 
   2605     /**
   2606      *  pic_slice_level_chroma_qp_offsets_present_flag
   2607      */
   2608     WORD8 i1_pic_slice_level_chroma_qp_offsets_present_flag;
   2609 
   2610     /**
   2611      *  weighted_pred_flag
   2612      */
   2613     WORD8 i1_weighted_pred_flag;
   2614 
   2615     /**
   2616      *  weighted_bipred_flag
   2617      */
   2618     WORD8 i1_weighted_bipred_flag;
   2619 
   2620     /**
   2621      *  output_flag_present_flag
   2622      */
   2623     WORD8 i1_output_flag_present_flag;
   2624 
   2625     /**
   2626      *  transquant_bypass_enable_flag
   2627      */
   2628     WORD8 i1_transquant_bypass_enable_flag;
   2629 
   2630     /**
   2631      *  dependent_slice_enabled_flag
   2632      */
   2633     WORD8 i1_dependent_slice_enabled_flag;
   2634 
   2635     /**
   2636      *  tiles_enabled_flag
   2637      */
   2638     WORD8 i1_tiles_enabled_flag;
   2639 
   2640     /**
   2641      *  entropy_coding_sync_enabled_flag
   2642      */
   2643     WORD8 i1_entropy_coding_sync_enabled_flag;
   2644 
   2645     /**
   2646      * entropy_slice_enabled_flag
   2647      */
   2648     WORD8 i1_entropy_slice_enabled_flag;
   2649 
   2650     /**
   2651      *  num_tile_columns_minus1
   2652      */
   2653     WORD8 i1_num_tile_columns;
   2654 
   2655     /**
   2656      *  num_tile_rows_minus1
   2657      */
   2658     WORD8 i1_num_tile_rows;
   2659 
   2660     /**
   2661      *  uniform_spacing_flag
   2662      */
   2663     WORD8 i1_uniform_spacing_flag;
   2664 
   2665     /**
   2666      *  loop_filter_across_tiles_enabled_flag
   2667      */
   2668     WORD8 i1_loop_filter_across_tiles_enabled_flag;
   2669 
   2670     /**
   2671      *  loop_filter_across_slices_enabled_flag
   2672      */
   2673     WORD8 i1_loop_filter_across_slices_enabled_flag;
   2674 
   2675     /**
   2676      *  deblocking_filter_control_present_flag
   2677      */
   2678     WORD8 i1_deblocking_filter_control_present_flag;
   2679 
   2680     /**
   2681      *  deblocking_filter_override_enabled_flag
   2682      */
   2683     WORD8 i1_deblocking_filter_override_enabled_flag;
   2684 
   2685     /**
   2686      *  pic_disable_deblocking_filter_flag
   2687      */
   2688     WORD8 i1_pic_disable_deblocking_filter_flag;
   2689 
   2690     /**
   2691      *  beta_offset_div2
   2692      */
   2693     WORD8 i1_beta_offset_div2;
   2694 
   2695     /**
   2696      *  tc_offset_div2
   2697      */
   2698     WORD8 i1_tc_offset_div2;
   2699 
   2700     /**
   2701      *  pps_scaling_list_data_present_flag
   2702      */
   2703     WORD8 i1_pps_scaling_list_data_present_flag;
   2704 
   2705     /**
   2706      * lists_modification_present_flag
   2707      */
   2708     WORD8 i1_lists_modification_present_flag;
   2709 
   2710     /**
   2711      * num_extra_slice_header_bits
   2712      */
   2713     WORD8 i1_num_extra_slice_header_bits;
   2714 
   2715     /**
   2716      *  log2_parallel_merge_level_minus2
   2717      */
   2718     WORD8 i1_log2_parallel_merge_level;
   2719 
   2720     /**
   2721      *  slice_header_extension_present_flag
   2722      */
   2723     WORD8 i1_slice_header_extension_present_flag;
   2724 
   2725     /**
   2726      *  slice_extension_present_flag
   2727      */
   2728     WORD8 i1_slice_extension_present_flag;
   2729 
   2730     /**
   2731      *  scaling_list_dc_coef_minus8
   2732      */
   2733     /*************************************************************************/
   2734     /* DC value of the scaling list                                          */
   2735     /* Only 16 x 16 and 32 x 32 scaling lists have valid entries.            */
   2736     /* Entries stored for all sizes for uniformity.                          */
   2737     /* Remaining will be initialized to default values if used               */
   2738     /*************************************************************************/
   2739     UWORD8 au1_scaling_list_dc_coef[TOTAL_SCALE_MAT_COUNT];
   2740 
   2741     /**
   2742      * Log2MinCuQpDeltaSize
   2743      */
   2744     WORD8 i1_log2_min_cu_qp_delta_size;
   2745 
   2746 
   2747     /*
   2748      * Flag indicating if the PPS is parsed
   2749      */
   2750     WORD8 i1_pps_valid;
   2751 
   2752 }pps_t;
   2753 
   2754 
   2755 /**
   2756  * Structure to hold slice header info
   2757  */
   2758 typedef struct
   2759 {
   2760     /**
   2761      *  entry_point_offset[ i ]
   2762      */
   2763     WORD32 *pi4_entry_point_offset;
   2764 
   2765     /**
   2766      *  poc_lsb_lt[ i ]
   2767      */
   2768     WORD32 ai4_poc_lsb_lt[MAX_DPB_SIZE];
   2769 
   2770     /**
   2771      *  slice_header_extension_length
   2772      */
   2773     WORD16 i2_slice_header_extension_length;
   2774 
   2775     /**
   2776      *  slice_address
   2777      */
   2778     WORD16 i2_slice_address;
   2779 
   2780     /**
   2781      *  first_slice_in_pic_flag
   2782      */
   2783     WORD8 i1_first_slice_in_pic_flag;
   2784 
   2785     /* PPS id */
   2786     WORD8 i1_pps_id;
   2787     /**
   2788      *  no_output_of_prior_pics_flag
   2789      */
   2790     WORD8 i1_no_output_of_prior_pics_flag;
   2791 
   2792     /**
   2793      *  dependent_slice_flag
   2794      */
   2795     WORD8 i1_dependent_slice_flag;
   2796 
   2797     /**
   2798      *  slice_type
   2799      */
   2800     WORD8 i1_slice_type;
   2801 
   2802     /**
   2803      *  pic_output_flag
   2804      */
   2805     WORD8 i1_pic_output_flag;
   2806 
   2807     /**
   2808      *  colour_plane_id
   2809      */
   2810     WORD8 i1_colour_plane_id;
   2811 
   2812     /**
   2813      *  pic_order_cnt_lsb
   2814      */
   2815     WORD32 i4_pic_order_cnt_lsb;
   2816 
   2817     /**
   2818      *  absolute pic_order_cnt
   2819      */
   2820     WORD32 i4_abs_pic_order_cnt;
   2821 
   2822     /**
   2823      *  short_term_ref_pic_set_sps_flag
   2824      */
   2825     WORD8 i1_short_term_ref_pic_set_sps_flag;
   2826 
   2827     /**
   2828      *  short_term_ref_pic_set_idx
   2829      */
   2830     WORD8 i1_short_term_ref_pic_set_idx;
   2831 
   2832     /**
   2833      *  num_long_term_sps
   2834      */
   2835     WORD8 i1_num_long_term_sps;
   2836 
   2837     /**
   2838      *  num_long_term_pics
   2839      */
   2840     WORD8 i1_num_long_term_pics;
   2841 
   2842     /**
   2843      *  lt_idx_sps[ i ]
   2844      */
   2845     WORD8 ai1_lt_idx_sps[MAX_DPB_SIZE];
   2846 
   2847     /**
   2848      *  used_by_curr_pic_lt_flag[ i ]
   2849      */
   2850     WORD8 ai1_used_by_curr_pic_lt_flag[MAX_DPB_SIZE];
   2851 
   2852     /**
   2853      *  delta_poc_msb_present_flag[ i ]
   2854      */
   2855     WORD8 ai1_delta_poc_msb_present_flag[MAX_DPB_SIZE];
   2856 
   2857     /**
   2858      *  delta_poc_msb_cycle_lt[ i ]
   2859      */
   2860     WORD8 ai1_delta_poc_msb_cycle_lt[MAX_DPB_SIZE];
   2861 
   2862     /**
   2863      *  slice_sao_luma_flag
   2864      */
   2865     WORD8 i1_slice_sao_luma_flag;
   2866 
   2867     /**
   2868      *  slice_sao_chroma_flag
   2869      */
   2870     WORD8 i1_slice_sao_chroma_flag;
   2871 
   2872     /**
   2873      *  slice_temporal_mvp_enable_flag
   2874      */
   2875     WORD8 i1_slice_temporal_mvp_enable_flag;
   2876 
   2877     /**
   2878      *  num_ref_idx_active_override_flag
   2879      */
   2880     WORD8 i1_num_ref_idx_active_override_flag;
   2881 
   2882     /**
   2883      *  num_ref_idx_l0_active_minus1
   2884      */
   2885     WORD8 i1_num_ref_idx_l0_active;
   2886 
   2887     /**
   2888      *  num_ref_idx_l1_active_minus1
   2889      */
   2890     WORD8 i1_num_ref_idx_l1_active;
   2891 
   2892     /**
   2893      *  mvd_l1_zero_flag
   2894      */
   2895     WORD8 i1_mvd_l1_zero_flag;
   2896 
   2897     /**
   2898      *  cabac_init_flag
   2899      */
   2900     WORD8 i1_cabac_init_flag;
   2901 
   2902     /**
   2903      *  collocated_from_l0_flag
   2904      */
   2905     WORD8 i1_collocated_from_l0_flag;
   2906 
   2907     /**
   2908      *  collocated_ref_idx
   2909      */
   2910     WORD8 i1_collocated_ref_idx;
   2911 
   2912     /**
   2913      * five_minus_max_num_merge_cand
   2914      */
   2915     WORD8 i1_max_num_merge_cand;
   2916 
   2917     /**
   2918      *  slice_qp_delta
   2919      */
   2920     WORD8 i1_slice_qp_delta;
   2921 
   2922     /**
   2923      *  slice_cb_qp_offset
   2924      */
   2925     WORD8 i1_slice_cb_qp_offset;
   2926 
   2927     /**
   2928      *  slice_cr_qp_offset
   2929      */
   2930     WORD8 i1_slice_cr_qp_offset;
   2931 
   2932     /**
   2933      *  deblocking_filter_override_flag
   2934      */
   2935     WORD8 i1_deblocking_filter_override_flag;
   2936 
   2937     /**
   2938      *  slice_disable_deblocking_filter_flag
   2939      */
   2940     WORD8 i1_slice_disable_deblocking_filter_flag;
   2941 
   2942     /**
   2943      *  beta_offset_div2
   2944      */
   2945     WORD8 i1_beta_offset_div2;
   2946 
   2947     /**
   2948      *  tc_offset_div2
   2949      */
   2950     WORD8 i1_tc_offset_div2;
   2951 
   2952     /**
   2953      *  slice_loop_filter_across_slices_enabled_flag
   2954      */
   2955     WORD8 i1_slice_loop_filter_across_slices_enabled_flag;
   2956 
   2957     /**
   2958      *  NUmber of entry point offsets
   2959      */
   2960     WORD32 i4_num_entry_point_offsets;
   2961 
   2962     /**
   2963      *  offset_len_minus1
   2964      */
   2965     WORD8 i1_offset_len;
   2966 
   2967     /**
   2968      *  Entry point offsets
   2969      */
   2970     WORD32 *pu4_entry_point_offset;
   2971 
   2972     /**
   2973      * Short term reference picture set
   2974      */
   2975     stref_picset_t s_stref_picset;
   2976 
   2977     /**
   2978      *  Weight and offset info for Weighted prediction
   2979      */
   2980     pred_wt_ofst_t s_wt_ofst;
   2981 
   2982     /**
   2983      *  Reference prediction list modification
   2984      */
   2985     rplm_t s_rplm;
   2986 
   2987     /**
   2988      *  First CTB' X pos : slice_address % i2_pic_wd_in_ctb
   2989      */
   2990     WORD16 i2_ctb_x;
   2991 
   2992     /**
   2993      *  First CTB' Y pos : slice_address / i2_pic_wd_in_ctb
   2994      */
   2995     WORD16 i2_ctb_y;
   2996 
   2997     /**
   2998      * L0 Reference pic lists
   2999      */
   3000     ref_list_t as_ref_pic_list0[MAX_DPB_SIZE];
   3001 
   3002     /**
   3003      * L1 Reference pic lists
   3004      */
   3005     ref_list_t as_ref_pic_list1[MAX_DPB_SIZE];
   3006 
   3007     /**
   3008      * NAL unit type of the slice
   3009      */
   3010     WORD8 i1_nal_unit_type;
   3011 
   3012     /**
   3013      * Low delay check flag
   3014      */
   3015     WORD8 i1_low_delay_flag;
   3016 
   3017     /**
   3018      * The last independent slice's start ctb_x
   3019      * If the current slice is independent, it is the same as the current CTBs ctb_x
   3020      */
   3021     WORD16 i2_independent_ctb_x;
   3022 
   3023     /**
   3024      * The last independent slice's start ctb_y
   3025      * If the current slice is independent, it is the same as the current CTBs ctb_y
   3026      */
   3027     WORD16 i2_independent_ctb_y;
   3028 
   3029 
   3030     UWORD8 u1_parse_data_init_done;
   3031 
   3032     /**
   3033      * Temporal ID in NAL header
   3034      */
   3035     WORD32 u4_nuh_temporal_id;
   3036 }slice_header_t;
   3037 
   3038 
   3039 
   3040 
   3041 
   3042 
   3043 
   3044 
   3045 #endif /* _IHEVC_STRUCTS_H_ */
   3046