1 /****************************************************************************** 2 * 3 * Copyright (C) 2015 The Android Open Source Project 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 * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore 19 */ 20 /** 21 ******************************************************************************* 22 * @file 23 * ih264_defs.h 24 * 25 * @brief 26 * Definitions used in the codec 27 * 28 * @author 29 * Ittiam 30 * 31 * 32 * @remarks 33 * None 34 * 35 ******************************************************************************* 36 */ 37 38 #ifndef IH264_DEFS_H_ 39 #define IH264_DEFS_H_ 40 41 /*****************************************************************************/ 42 /* Enums */ 43 /*****************************************************************************/ 44 45 46 /*****************************************************************************/ 47 /* Profile and Levels */ 48 /*****************************************************************************/ 49 50 /** 51 ****************************************************************************** 52 * @enum PROFILE_IDC 53 * @brief Defines the set of possible profiles 54 ****************************************************************************** 55 */ 56 enum 57 { 58 IH264_PROFILE_BASELINE = 66, 59 IH264_PROFILE_MAIN = 77, 60 IH264_PROFILE_EXTENDED = 88, 61 IH264_PROFILE_HIGH = 100, 62 IH264_PROFILE_HIGH10 = 110, 63 IH264_PROFILE_HIGH422 = 122, 64 IH264_PROFILE_HIGH444 = 144, 65 }; 66 67 /** 68 ****************************************************************************** 69 * @enum LEVEL_IDC 70 * @brief Defines the set of possible levels 71 ****************************************************************************** 72 */ 73 typedef enum 74 { 75 IH264_LEVEL_10 = 10, 76 IH264_LEVEL_1B = 9, 77 IH264_LEVEL_11 = 11, 78 IH264_LEVEL_12 = 12, 79 IH264_LEVEL_13 = 13, 80 IH264_LEVEL_20 = 20, 81 IH264_LEVEL_21 = 21, 82 IH264_LEVEL_22 = 22, 83 IH264_LEVEL_30 = 30, 84 IH264_LEVEL_31 = 31, 85 IH264_LEVEL_32 = 32, 86 IH264_LEVEL_40 = 40, 87 IH264_LEVEL_41 = 41, 88 IH264_LEVEL_42 = 42, 89 IH264_LEVEL_50 = 50, 90 IH264_LEVEL_51 = 51, 91 }IH264_LEVEL_T; 92 93 94 /** 95 ****************************************************************************** 96 * @enum PIC TYPES 97 * @brief Defines the set of possible picture type - not signaled in bitstream 98 ****************************************************************************** 99 */ 100 typedef enum 101 { 102 PIC_NA = 0x7FFFFFFF, 103 PIC_IDR = 0, 104 PIC_I = 1, 105 PIC_P = 2, 106 PIC_B = 3, 107 PIC_P_NONREF = 4, 108 PIC_B_NONREF = 5, 109 PIC_MAX, 110 }PIC_TYPE_T; 111 112 /** 113 ****************************************************************************** 114 * @enum FRAME-FIELD types 115 * @brief Defines the set of possible field types. 116 ****************************************************************************** 117 */ 118 enum 119 { 120 TOP_FIELD, 121 BOTTOM_FIELD, 122 FRAME, 123 }; 124 125 /** 126 ****************************************************************************** 127 * @enum SLICE TYPES 128 * @brief Defines the set of possible SLICE TYPES 129 ****************************************************************************** 130 */ 131 enum 132 { 133 PSLICE = 0, 134 BSLICE = 1, 135 ISLICE = 2, 136 SPSLICE = 3, 137 SISLICE = 4, 138 MAXSLICE_TYPE, 139 }; 140 141 /** 142 ****************************************************************************** 143 * @enum NAL_UNIT_TYPE 144 * @brief Defines the set of possible nal unit types 145 ****************************************************************************** 146 */ 147 enum 148 { 149 NAL_UNSPEC_0 = 0, 150 NAL_SLICE_NON_IDR = 1, 151 NAL_SLICE_DPA = 2, 152 NAL_SLICE_DPB = 3, 153 NAL_SLICE_DPC = 4, 154 NAL_SLICE_IDR = 5, 155 NAL_SEI = 6, 156 NAL_SPS = 7, 157 NAL_PPS = 8, 158 NAL_AUD = 9, 159 NAL_EOSEQ = 10, 160 NAL_EOSTR = 11, 161 NAL_FILLER = 12, 162 NAL_SPSE = 13, 163 NAL_RES_18 = 14, 164 NAL_AUX_PIC = 19, 165 NAL_RES_23 = 20, 166 NAL_UNSPEC_31 = 24, 167 }; 168 169 /** 170 ****************************************************************************** 171 * @enum CHROMA_FORMAT_IDC 172 * @brief Defines the set of possible chroma formats 173 * Note Chorma format Do not change enum values 174 ****************************************************************************** 175 */ 176 enum 177 { 178 CHROMA_FMT_IDC_MONOCHROME = 0, 179 CHROMA_FMT_IDC_YUV420 = 1, 180 CHROMA_FMT_IDC_YUV422 = 2, 181 CHROMA_FMT_IDC_YUV444 = 3, 182 CHROMA_FMT_IDC_YUV444_PLANES = 4, 183 }; 184 185 186 /** 187 ****************************************************************************** 188 * @enum MBMODES_I16x16 189 * @brief Defines the set of possible intra 16x16 mb modes 190 ****************************************************************************** 191 */ 192 typedef enum 193 { 194 VERT_I16x16 = 0, 195 HORZ_I16x16 = 1, 196 DC_I16x16 = 2, 197 PLANE_I16x16 = 3, 198 MAX_I16x16 = 4, 199 }MBMODES_I16x16; 200 201 /** 202 ****************************************************************************** 203 * @enum MBMODES_I4x4 204 * @brief Defines the set of possible intra 4x4 mb modes 205 ****************************************************************************** 206 */ 207 typedef enum 208 { 209 VERT_I4x4 = 0, 210 HORZ_I4x4 = 1, 211 DC_I4x4 = 2, 212 DIAG_DL_I4x4 = 3, 213 DIAG_DR_I4x4 = 4, 214 VERT_R_I4x4 = 5, 215 HORZ_D_I4x4 = 6, 216 VERT_L_I4x4 = 7, 217 HORZ_U_I4x4 = 8, 218 MAX_I4x4 = 9, 219 }MBMODES_I4x4; 220 221 /** 222 ****************************************************************************** 223 * @enum MBMODES_I8x8 224 * @brief Defines the set of possible intra 8x8 mb modes 225 ****************************************************************************** 226 */ 227 typedef enum 228 { 229 VERT_I8x8 = 0, 230 HORZ_I8x8 = 1, 231 DC_I8x8 = 2, 232 DIAG_DL_I8x8 = 3, 233 DIAG_DR_I8x8 = 4, 234 VERT_R_I8x8 = 5, 235 HORZ_D_I8x8 = 6, 236 VERT_L_I8x8 = 7, 237 HORZ_U_I8x8 = 8, 238 MAX_I8x8 = 9, 239 }MBMODES_I8x8; 240 241 /** 242 ****************************************************************************** 243 * @enum MBMODES_CHROMA_I8x8 (Chroma) 244 * @brief Defines the set of possible intra 8x8 mb modes for chroma 245 ****************************************************************************** 246 */ 247 typedef enum 248 { 249 DC_CH_I8x8 = 0, 250 HORZ_CH_I8x8 = 1, 251 VERT_CH_I8x8 = 2, 252 PLANE_CH_I8x8 = 3, 253 MAX_CH_I8x8 = 4, 254 }MBMODES_CHROMA_I8x8; 255 256 /** 257 ****************************************************************************** 258 * @enum MBTYPES 259 * @brief Defines the set of possible macro block types 260 ****************************************************************************** 261 */ 262 typedef enum 263 { 264 I16x16 = 0, 265 I4x4 = 1, 266 I8x8 = 2, 267 P16x16 = 3, 268 P16x8 = 4, 269 P8x16 = 5, 270 P8x8 = 6, 271 PSKIP = 7, 272 IPCM = 8, 273 B16x16 = 9, 274 BSKIP = 10, 275 BDIRECT = 11, 276 MAX_MBTYPES, 277 }MBTYPES_T; 278 279 /* Prediction list */ 280 /* Do not change enum values */ 281 enum 282 { 283 PRED_L0 = 0, 284 PRED_L1 = 1, 285 PRED_BI = 2 286 }; 287 288 289 /** 290 ****************************************************************************** 291 * @enum ENTROPY_BLK_TYPE 292 * @brief Defines the nature of blocks employed in entropy coding 293 ****************************************************************************** 294 */ 295 typedef enum 296 { 297 ENTROPY_BLK_INVALID = -1, 298 CAVLC_LUMA_4x4_DC = 0, 299 CAVLC_LUMA_4x4_AC = 1, 300 CAVLC_LUMA_4x4 = 2, 301 CAVLC_CHROMA_4x4_DC = 3, 302 CAVLC_CHROMA_4x4_AC = 4, 303 } ENTROPY_BLK_TYPE; 304 305 /** 306 ****************************************************************************** 307 * @enum ENTROPY_MODE 308 * @brief Entropy coding modes 309 ****************************************************************************** 310 */ 311 typedef enum 312 { 313 CAVLC = 0, 314 CABAC = 1, 315 } ENTROPY_MODE; 316 317 /** 318 ****************************************************************************** 319 * @enum COMPONENT_TYPE 320 * @brief components Y, U & V 321 ****************************************************************************** 322 */ 323 typedef enum 324 { 325 Y, 326 U, 327 V, 328 } COMPONENT_TYPE; 329 330 331 /** 332 ****************************************************************************** 333 * @enum MBPART_PREDMODE_T 334 * @brief MbPartps_pred_mode_ctxt Table 7-11 to 7-14 335 ****************************************************************************** 336 */ 337 typedef enum 338 { 339 MBPART_NA, 340 MBPART_I4x4, 341 MBPART_I8x8, 342 MBPART_I16x16, 343 MBPART_L0, 344 MBPART_L1, 345 MBPART_BI, 346 MBPART_DIRECT, 347 MBPART_IPCM, 348 }MBPART_PREDMODE_T; 349 350 351 typedef enum 352 { 353 I_NxN, 354 I_16x16_0_0_0, 355 I_16x16_1_0_0, 356 I_16x16_2_0_0, 357 I_16x16_3_0_0, 358 I_16x16_0_1_0, 359 I_16x16_1_1_0, 360 I_16x16_2_1_0, 361 I_16x16_3_1_0, 362 I_16x16_0_2_0, 363 I_16x16_1_2_0, 364 I_16x16_2_2_0, 365 I_16x16_3_2_0, 366 I_16x16_0_0_1, 367 I_16x16_1_0_1, 368 I_16x16_2_0_1, 369 I_16x16_3_0_1, 370 I_16x16_0_1_1, 371 I_16x16_1_1_1, 372 I_16x16_2_1_1, 373 I_16x16_3_1_1, 374 I_16x16_0_2_1, 375 I_16x16_1_2_1, 376 I_16x16_2_2_1, 377 I_16x16_3_2_1, 378 I_PCM, 379 }MBTYPE_ISLICE_T; 380 381 typedef enum 382 { 383 P_L0_16x16, 384 P_L0_L0_16x8, 385 P_L0_L0_8x16, 386 P_8x8, 387 P_8x8REF0, 388 P_SKIP 389 }MBTYPE_PSLICE_T; 390 391 typedef enum 392 { 393 B_DIRECT_16x16, 394 B_L0_16x16, 395 B_L1_16x16, 396 B_BI_16x16, 397 B_L0_L0_16x8, 398 B_L0_L0_8x16, 399 B_L1_L1_16x8, 400 B_L1_L1_8x16, 401 B_L0_L1_16x8, 402 B_L0_L1_8x16, 403 B_L1_L0_16x8, 404 B_L1_L0_8x16, 405 B_L0_BI_16x8, 406 B_L0_BI_8x16, 407 B_L1_BI_16x8, 408 B_L1_BI_8x16, 409 B_BI_L0_16x8, 410 B_BI_L0_8x16, 411 B_BI_L1_16x8, 412 B_BI_L1_8x16, 413 B_BI_BI_16x8, 414 B_BI_BI_8x16, 415 B_8x8, 416 B_SKIP, 417 }MBTYPE_BSLICE_T; 418 419 420 typedef enum 421 { 422 P_L0_8x8, 423 P_L0_8x4, 424 P_L0_4x8, 425 P_L0_4x4, 426 }SUBMBTYPE_PSLICE_T; 427 428 typedef enum 429 { 430 B_DIRECT_8x8, 431 B_L0_8x8, 432 B_L1_8x8, 433 B_BI_8x8, 434 B_L0_8x4, 435 B_L0_4x8, 436 B_L1_8x4, 437 B_L1_4x8, 438 B_BI_8x4, 439 B_BI_4x8, 440 B_L0_4x4, 441 B_L1_4x4, 442 B_BI_4x4, 443 }SUBMBTYPE_BSLICE_T; 444 445 /** 446 * DC Mode pattern for 4 4x4 sub blocks in an MB row 447 */ 448 #define DC_I16X16_MB_ROW (DC_I16x16 << 24) | (DC_I16x16 << 16) | \ 449 (DC_I16x16 << 8) | DC_I16x16 450 451 452 453 /*****************************************************************************/ 454 /* Constant Macros */ 455 /*****************************************************************************/ 456 457 /*****************************************************************************/ 458 /* Reference frame defs */ 459 /*****************************************************************************/ 460 /* Maximum DPB size */ 461 #define MAX_DPB_SIZE 16 462 463 /* Maximum mmco commands in slice header */ 464 #define MAX_MMCO_COMMANDS 32 465 466 /* Maximum reference reorder idc */ 467 #define MAX_MODICATION_IDC 32 468 469 /*****************************************************************************/ 470 /* SPS restrictions */ 471 /*****************************************************************************/ 472 473 /* Number of SPS allowed */ 474 /* An extra buffer is allocated to write the parsed data 475 * It is copied to the appropriate location later */ 476 #define MAX_SPS_CNT (32 + 1) 477 478 /* Maximum long term reference pics */ 479 #define MAX_LTREF_PICS_SPS 16 480 481 /* Maximum short term reference pics */ 482 #define MAX_STREF_PICS_SPS 64 483 484 485 /*****************************************************************************/ 486 /* PPS restrictions */ 487 /*****************************************************************************/ 488 489 /* Number of PPS allowed */ 490 /* An extra buffer is allocated to write the parsed data 491 * It is copied to the appropriate location later */ 492 #define MAX_PPS_CNT (256 + 1) 493 494 /*****************************************************************************/ 495 /* Macro definitions for sizes of MB, PU, TU, CU */ 496 /*****************************************************************************/ 497 #define MB_SIZE 16 498 #define BLK8x8SIZE 8 499 #define BLK_SIZE 4 500 501 502 /* TU Size Range */ 503 #define MAX_TU_SIZE 8 504 #define MIN_TU_SIZE 4 505 506 /* Max Transform Size */ 507 #define MAX_TRANS_SIZE (MAX_TU_SIZE*MAX_TU_SIZE) 508 509 /* PU Size Range */ 510 #define MAX_PU_SIZE 16 511 #define MIN_PU_SIZE 4 512 513 /* Number of max TU in a MB row */ 514 #define MAX_TU_IN_MB_ROW ((MB_SIZE / MIN_TU_SIZE)) 515 516 /* Number of max PU in a CTb row */ 517 #define MAX_PU_IN_MB_ROW ((MB_SIZE / MIN_PU_SIZE)) 518 519 520 /* Number of max PU in a MB */ 521 /*****************************************************************************/ 522 /* Note though for 64 x 64 MB, Max PU in MB is 128, in order to store */ 523 /* intra pred info, 256 entries are needed */ 524 /*****************************************************************************/ 525 #define MAX_PU_IN_MB ((MB_SIZE / MIN_PU_SIZE) * \ 526 (MB_SIZE / MIN_PU_SIZE)) 527 528 /* Number of max TU in a MB */ 529 #define MAX_TU_IN_MB ((MB_SIZE / MIN_TU_SIZE) * \ 530 (MB_SIZE / MIN_TU_SIZE)) 531 532 533 534 /** 535 * Maximum transform depths 536 */ 537 #define MAX_TRAFO_DEPTH 5 538 539 #define MAX_DC_4x4_SUBBLK_LUMA 1 540 #define MAX_AC_4x4_SUBBLK_LUMA 16 541 #define MAX_DC_4x4_SUBBLK_CHROMA 2 542 #define MAX_AC_4x4_SUBBLK_CHROMA 8 543 544 #define MAX_4x4_SUBBLKS (MAX_DC_4x4_SUBBLK_LUMA + MAX_DC_4x4_SUBBLK_CHROMA +\ 545 MAX_AC_4x4_SUBBLK_LUMA + MAX_AC_4x4_SUBBLK_CHROMA) 546 547 /* Max number of deblocking edges */ 548 #define MAX_VERT_DEBLK_EDGES ((MB_SIZE/8) * (MB_SIZE/4)) 549 #define MAX_HORZ_DEBLK_EDGES ((MB_SIZE/4) * (MB_SIZE/8)) 550 551 /* Qp can not change below 8x8 level */ 552 #define MAX_DEBLK_QP_CNT ((MB_SIZE/8) * (MB_SIZE/8)) 553 554 /*****************************************************************************/ 555 /* Parsing related macros */ 556 /*****************************************************************************/ 557 #define SUBBLK_COEFF_CNT 16 558 559 /* Quant and Trans defs */ 560 561 /*****************************************************************************/ 562 /* Sizes for Transform functions */ 563 /*****************************************************************************/ 564 #define TRANS_SIZE_4 4 565 #define TRANS_SIZE_8 8 566 #define TRANS_SIZE_16 16 567 #define TRANS_SIZE_32 32 568 569 570 #define IT_SHIFT_STAGE_1 7 571 #define IT_SHIFT_STAGE_2 12 572 573 /** 574 * @breif Maximum transform dynamic range (excluding sign bit) 575 */ 576 #define MAX_TR_DYNAMIC_RANGE 15 577 578 /** 579 * @brief Q(QP%6) * IQ(QP%6) = 2^20 580 */ 581 #define QUANT_IQUANT_SHIFT 20 582 583 /** 584 * @breif Q factor for Qp%6 multiplication 585 */ 586 #define QUANT_SHIFT 14 587 588 /** 589 * @breif Q shift factor for flat rescale matrix weights 590 */ 591 #define FLAT_RESCALE_MAT_Q_SHIFT 11 592 593 /** 594 * @breif Scaling matrix is represented in Q15 format 595 */ 596 #define SCALING_Q_SHIFT 15 597 598 /** 599 * @brief rounding factor for quantization represented in Q9 format 600 */ 601 #define QUANT_ROUND_FACTOR_Q 9 602 603 /** 604 * @brief Minimum qp supported in H264 spec 605 */ 606 #define MIN_H264_QP 0 607 608 /** 609 * @brief Maximum qp supported in H264 spec 610 */ 611 #define MAX_H264_QP 51 612 613 /** 614 * @breif Total number of transform sizes 615 * used for sizeID while getting scale matrix 616 */ 617 #define NUM_UNIQUE_TRANS_SIZE 4 618 619 /** 620 * @breif Maximum number of bits in frameNumber signaling 621 */ 622 #define MAX_BITS_IN_FRAME_NUM 16 623 624 /** 625 * @breif Maximum number of bits in POC LSB signaling 626 */ 627 #define MAX_BITS_IN_POC_LSB 16 628 629 630 /** 631 * @breif Maximum PIC Order Count type 632 */ 633 #define MAX_PIC_ORDER_COUNT_TYPE 2 634 635 636 /** 637 * @breif Maximum Weighted bipred idc 638 */ 639 #define MAX_WEIGHT_BIPRED_IDC 2 640 641 /*****************************************************************************/ 642 /* Number of scaling matrices for each transform size */ 643 /*****************************************************************************/ 644 #define SCALE_MAT_CNT_TRANS_SIZE_4 6 645 #define SCALE_MAT_CNT_TRANS_SIZE_8 6 646 #define SCALE_MAT_CNT_TRANS_SIZE_16 6 647 #define SCALE_MAT_CNT_TRANS_SIZE_32 2 648 649 /* Maximum number of scale matrices for a given transform size */ 650 #define SCALE_MAT_CNT_MAX_PER_TRANS_SIZE 6 651 652 /* Total number of scale matrices */ 653 #define TOTAL_SCALE_MAT_COUNT (SCALE_MAT_CNT_TRANS_SIZE_4 + \ 654 SCALE_MAT_CNT_TRANS_SIZE_8 + \ 655 SCALE_MAT_CNT_TRANS_SIZE_16 + \ 656 SCALE_MAT_CNT_TRANS_SIZE_32) 657 658 659 /*****************************************************************************/ 660 /* Intra pred Macros */ 661 /*****************************************************************************/ 662 /** Planar Intra prediction mode */ 663 #define INTRA_PLANAR 0 664 665 /** DC Intra prediction mode */ 666 #define INTRA_DC 1 667 668 /** Gives angular mode for intra prediction */ 669 #define INTRA_ANGULAR(x) (x) 670 671 /** Following is used to signal no intra prediction in case of pcm blocks 672 */ 673 #define INTRA_PRED_NONE 63 674 675 676 /** Following is used to signal no intra prediction is needed for first three 677 * 4x4 luma blocks in case of 4x4 TU sizes 678 * Also used in pcm cases 679 */ 680 #define INTRA_PRED_CHROMA_IDX_NONE 7 681 682 683 /** 684 ****************************************************************************** 685 * @brief neighbor availability masks 686 ****************************************************************************** 687 */ 688 #define LEFT_MB_AVAILABLE_MASK 0x01 689 #define TOP_LEFT_MB_AVAILABLE_MASK 0x02 690 #define TOP_MB_AVAILABLE_MASK 0x04 691 #define TOP_RIGHT_MB_AVAILABLE_MASK 0x08 692 693 #endif /* IH264_DEFS_H_ */ 694