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 #ifndef __IMPEG2_DEFS_H__
     22 #define __IMPEG2_DEFS_H__
     23 
     24 #include <assert.h>
     25 
     26 /******************************************************************************
     27 * MPEG2 Start code and other code definitions
     28 *******************************************************************************/
     29 #define START_CODE_PREFIX               0x000001
     30 #define SEQUENCE_HEADER_CODE            0x000001B3
     31 #define EXTENSION_START_CODE            0x000001B5
     32 #define USER_DATA_START_CODE            0x000001B2
     33 #define GOP_START_CODE                  0x000001B8
     34 #define PICTURE_START_CODE              0x00000100
     35 #define SEQUENCE_END_CODE               0x000001B7
     36 #define RESERVED_START_CODE             0x000001B0
     37 #define MB_ESCAPE_CODE                  0x008
     38 
     39 /******************************************************************************
     40 * MPEG2 Length of various codes definitions
     41 *******************************************************************************/
     42 #define START_CODE_LEN                  32
     43 #define START_CODE_PREFIX_LEN           24
     44 #define MB_ESCAPE_CODE_LEN              11
     45 #define EXT_ID_LEN                      4
     46 #define MB_QUANT_SCALE_CODE_LEN         5
     47 #define MB_DCT_TYPE_LEN                 1
     48 #define MB_MOTION_TYPE_LEN              2
     49 #define BYTE_LEN                        8
     50 
     51 /******************************************************************************
     52 * MPEG1 code definitions
     53 *******************************************************************************/
     54 #define MB_STUFFING_CODE                0x00F
     55 
     56 /******************************************************************************
     57 * MPEG1 Length of various codes definitions
     58 *******************************************************************************/
     59 #define MB_STUFFING_CODE_LEN             11
     60 
     61 /******************************************************************************
     62 * MPEG2 MB definitions
     63 *******************************************************************************/
     64 #define MPEG2_INTRA_MB                  0x04
     65 #define MPEG2_INTRAQ_MB                 0x44
     66 #define MPEG2_INTER_MB                  0x28
     67 #define MB_MOTION_BIDIRECT              0x30
     68 #define MB_INTRA_OR_PATTERN             0x0C
     69 
     70 /******************************************************************************
     71 * Tools definitions
     72 *******************************************************************************/
     73 #define SPATIAL_SCALABILITY             0x01
     74 #define TEMPORAL_SCALABILITY            0x03
     75 
     76 /******************************************************************************
     77 * Extension IDs definitions
     78 *******************************************************************************/
     79 #define SEQ_DISPLAY_EXT_ID              0x02
     80 #define SEQ_SCALABLE_EXT_ID             0x05
     81 #define QUANT_MATRIX_EXT_ID             0x03
     82 #define COPYRIGHT_EXT_ID                0x04
     83 #define PIC_DISPLAY_EXT_ID              0x07
     84 #define PIC_SPATIAL_SCALABLE_EXT_ID     0x09
     85 #define PIC_TEMPORAL_SCALABLE_EXT_ID    0x0A
     86 #define CAMERA_PARAM_EXT_ID             0x0B
     87 #define ITU_T_EXT_ID                    0x0C
     88 /******************************************************************************
     89 * Extension IDs Length definitions
     90 *******************************************************************************/
     91 #define CAMERA_PARAMETER_EXTENSION_LEN  377
     92 #define COPYRIGHT_EXTENSION_LEN          88
     93 #define GROUP_OF_PICTURE_LEN             59
     94 
     95 
     96 /******************************************************************************
     97 * MPEG2 Picture structure definitions
     98 *******************************************************************************/
     99 #define TOP_FIELD                       1
    100 #define BOTTOM_FIELD                    2
    101 #define FRAME_PICTURE                   3
    102 
    103 /******************************************************************************
    104 * MPEG2 Profile definitions
    105 *******************************************************************************/
    106 #define MPEG2_SIMPLE_PROFILE            0x05
    107 #define MPEG2_MAIN_PROFILE              0x04
    108 
    109 /******************************************************************************
    110 * MPEG2 Level definitions
    111 *******************************************************************************/
    112 #define MPEG2_LOW_LEVEL                 0x0a
    113 #define MPEG2_MAIN_LEVEL                0x08
    114 
    115 /******************************************************************************
    116 * MPEG2 Prediction types
    117 *******************************************************************************/
    118 #define FIELD_PRED                      0
    119 #define FRAME_PRED                      1
    120 #define DUAL_PRED                       2
    121 #define RESERVED                        -1
    122 #define MC_16X8_PRED                    3
    123 
    124 /*****************************************************************************
    125 * MPEG2 Motion vector format
    126 ******************************************************************************/
    127 #define FIELD_MV                        0
    128 #define FRAME_MV                        1
    129 
    130 /******************************************************************************/
    131 /* General Video related definitions                                          */
    132 /******************************************************************************/
    133 
    134 #define BLK_SIZE 8
    135 #define NUM_COEFFS ((BLK_SIZE)*(BLK_SIZE))
    136 #define LUMA_BLK_SIZE (2 * (BLK_SIZE))
    137 #define CHROMA_BLK_SIZE (BLK_SIZE)
    138 #define  BLOCKS_IN_MB            6
    139 #define  MB_SIZE                16
    140 #define  MB_CHROMA_SIZE          8
    141 #define  NUM_PELS_IN_BLOCK      64
    142 #define  NUM_LUMA_BLKS           4
    143 #define  NUM_CHROMA_BLKS         2
    144 #define  MAX_COLR_COMPS          3
    145 #define  Y_LUMA                  0
    146 #define  U_CHROMA                1
    147 #define  V_CHROMA                2
    148 #define  MB_LUMA_MEM_SIZE           ((MB_SIZE) * (MB_SIZE))
    149 #define  MB_CHROMA_MEM_SIZE         ((MB_SIZE/2) * (MB_SIZE/2))
    150 
    151 #define BITS_IN_INT     32
    152 /******************************************************************************/
    153 /* MPEG2 Motion compensation related definitions                              */
    154 /******************************************************************************/
    155 #define REF_FRM_MB_WIDTH        18
    156 #define REF_FRM_MB_HEIGHT       18
    157 #define REF_FLD_MB_HEIGHT       10
    158 #define REF_FLD_MB_WIDTH        18
    159 
    160 /******************************************************************************/
    161 /* Maximum number of bits per MB                                              */
    162 /******************************************************************************/
    163 #define I_MB_BIT_SIZE 90
    164 #define P_MB_BIT_SIZE 90
    165 #define B_MB_BIT_SIZE 150
    166 
    167 /******************************************************************************/
    168 /* Aspect ratio related definitions                                           */
    169 /******************************************************************************/
    170 #define MPG1_NTSC_4_3       0x8
    171 #define MPG1_PAL_4_3        0xc
    172 #define MPG1_NTSC_16_9      0x6
    173 #define MPG1_PAL_16_9       0x3
    174 #define MPG1_1_1            0x1
    175 
    176 #define MPG2_4_3            0x2
    177 #define MPG2_16_9           0x3
    178 #define MPG2_1_1            0x1
    179 
    180 /******************************************************************************/
    181 /* Inverse Quantizer Output range                                             */
    182 /******************************************************************************/
    183 #define IQ_OUTPUT_MAX 2047
    184 #define IQ_OUTPUT_MIN -2048
    185 
    186 /******************************************************************************/
    187 /* IDCT Output range                                                          */
    188 /******************************************************************************/
    189 #define IDCT_OUTPUT_MAX  255
    190 #define IDCT_OUTPUT_MIN -256
    191 
    192 /******************************************************************************/
    193 /* Output pixel range                                                         */
    194 /******************************************************************************/
    195 #define PEL_VALUE_MAX 255
    196 #define PEL_VALUE_MIN 0
    197 
    198 /******************************************************************************/
    199 /* inv scan types                                                             */
    200 /******************************************************************************/
    201 #define ZIG_ZAG_SCAN        0
    202 #define VERTICAL_SCAN       1
    203 
    204 /******************************************************************************/
    205 /* Related VLD codes                                                          */
    206 /******************************************************************************/
    207 #define ESC_CODE_VALUE 0x0058
    208 #define EOB_CODE_VALUE 0x07d0
    209 
    210 #define END_OF_BLOCK                    0x01
    211 #define ESCAPE_CODE                     0x06
    212 
    213 #define END_OF_BLOCK_ZERO               0x01ff
    214 #define END_OF_BLOCK_ONE                0x01ff
    215 
    216 /******************** Idct Specific ***************/
    217 #define TRANS_SIZE_8            8
    218 #define IDCT_STG1_SHIFT        12
    219 #define IDCT_STG2_SHIFT        16
    220 
    221 #define IDCT_STG1_ROUND        ((1 << IDCT_STG1_SHIFT) >> 1)
    222 #define IDCT_STG2_ROUND        ((1 << IDCT_STG2_SHIFT) >> 1)
    223 
    224 
    225 /******************************************************************************
    226 * Sample Version Definitions
    227 *******************************************************************************/
    228 #define SAMPLE_VERS_MAX_FRAMES_DECODE   999
    229 
    230 #define MAX_FRAME_BUFFER                     7
    231 
    232 /* vop coding type */
    233 typedef enum
    234 {
    235     I_PIC = 1,
    236     P_PIC,
    237     B_PIC,
    238     D_PIC
    239 } e_pic_type_t;
    240 
    241 typedef enum
    242 {
    243     MPEG_2_VIDEO,
    244     MPEG_1_VIDEO
    245 } e_video_type_t;
    246 
    247 typedef enum
    248 {
    249     FORW,
    250     BACK,
    251     BIDIRECT
    252 } e_pred_direction_t;
    253 
    254 typedef enum
    255 {
    256     TOP,
    257     BOTTOM
    258 } e_field_t;
    259 
    260 /* Motion vectors (first/second) */
    261 enum
    262 {
    263     FIRST,
    264     SECOND,
    265     THIRD,
    266     FOURTH
    267 };
    268 
    269 enum
    270 {
    271     MV_X,
    272     MV_Y
    273 };
    274 
    275 /* Enumeration defining the various kinds of interpolation possible in
    276 motion compensation */
    277 typedef enum
    278 {
    279   FULL_XFULL_Y,
    280     FULL_XHALF_Y,
    281     HALF_XFULL_Y,
    282     HALF_XHALF_Y
    283 } e_sample_type_t;
    284 typedef enum
    285 {
    286     /* Params of the reference buffer used as input to MC */
    287     /* frame prediction in P frame picture */
    288     MC_FRM_FW_OR_BK_1MV,
    289     /* field prediction in P frame picture */
    290     MC_FRM_FW_OR_BK_2MV,
    291     /* frame prediction in B frame picture */
    292     MC_FRM_FW_AND_BK_2MV,
    293     /* field prediction in B frame picture */
    294     MC_FRM_FW_AND_BK_4MV,
    295     /* dual prime prediction in P frame picture */
    296     MC_FRM_FW_DUAL_PRIME_1MV,
    297     /* frame prediction in P field picture */
    298     MC_FLD_FW_OR_BK_1MV,
    299     /* 16x8 prediction in P field picture */
    300     MC_FLD_FW_OR_BK_2MV,
    301     /* field prediction in B field picture */
    302     MC_FLD_FW_AND_BK_2MV,
    303     /* 16x8 prediction in B field picture */
    304     MC_FLD_FW_AND_BK_4MV,
    305     /* dual prime prediction in P field picture */
    306     MC_FLD_FW_DUAL_PRIME_1MV,
    307 } e_mb_type_t;
    308 
    309 #endif /* __IMPEG2_DEFS_H__ */
    310 
    311