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