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