Home | History | Annotate | Download | only in common
      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