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