/******************************************************************************
*
* Copyright (C) 2015 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*****************************************************************************
* Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
*/
#ifndef __IMPEG2_DEFS_H__
#define __IMPEG2_DEFS_H__
#include <assert.h>
/******************************************************************************
* MPEG2 Start code and other code definitions
*******************************************************************************/
#define START_CODE_PREFIX 0x000001
#define SEQUENCE_HEADER_CODE 0x000001B3
#define EXTENSION_START_CODE 0x000001B5
#define USER_DATA_START_CODE 0x000001B2
#define GOP_START_CODE 0x000001B8
#define PICTURE_START_CODE 0x00000100
#define SEQUENCE_END_CODE 0x000001B7
#define RESERVED_START_CODE 0x000001B0
#define MB_ESCAPE_CODE 0x008
/******************************************************************************
* MPEG2 Length of various codes definitions
*******************************************************************************/
#define START_CODE_LEN 32
#define START_CODE_PREFIX_LEN 24
#define MB_ESCAPE_CODE_LEN 11
#define EXT_ID_LEN 4
#define MB_QUANT_SCALE_CODE_LEN 5
#define MB_DCT_TYPE_LEN 1
#define MB_MOTION_TYPE_LEN 2
#define BYTE_LEN 8
/******************************************************************************
* MPEG1 code definitions
*******************************************************************************/
#define MB_STUFFING_CODE 0x00F
/******************************************************************************
* MPEG1 Length of various codes definitions
*******************************************************************************/
#define MB_STUFFING_CODE_LEN 11
/******************************************************************************
* MPEG2 MB definitions
*******************************************************************************/
#define MPEG2_INTRA_MB 0x04
#define MPEG2_INTRAQ_MB 0x44
#define MPEG2_INTER_MB 0x28
#define MB_MOTION_BIDIRECT 0x30
#define MB_INTRA_OR_PATTERN 0x0C
/******************************************************************************
* Tools definitions
*******************************************************************************/
#define SPATIAL_SCALABILITY 0x01
#define TEMPORAL_SCALABILITY 0x03
/******************************************************************************
* Extension IDs definitions
*******************************************************************************/
#define SEQ_DISPLAY_EXT_ID 0x02
#define SEQ_SCALABLE_EXT_ID 0x05
#define QUANT_MATRIX_EXT_ID 0x03
#define COPYRIGHT_EXT_ID 0x04
#define PIC_DISPLAY_EXT_ID 0x07
#define PIC_SPATIAL_SCALABLE_EXT_ID 0x09
#define PIC_TEMPORAL_SCALABLE_EXT_ID 0x0A
#define CAMERA_PARAM_EXT_ID 0x0B
#define ITU_T_EXT_ID 0x0C
/******************************************************************************
* Extension IDs Length definitions
*******************************************************************************/
#define CAMERA_PARAMETER_EXTENSION_LEN 377
#define COPYRIGHT_EXTENSION_LEN 88
#define GROUP_OF_PICTURE_LEN 59
/******************************************************************************
* MPEG2 Picture structure definitions
*******************************************************************************/
#define TOP_FIELD 1
#define BOTTOM_FIELD 2
#define FRAME_PICTURE 3
/******************************************************************************
* MPEG2 Profile definitions
*******************************************************************************/
#define MPEG2_SIMPLE_PROFILE 0x05
#define MPEG2_MAIN_PROFILE 0x04
/******************************************************************************
* MPEG2 Level definitions
*******************************************************************************/
#define MPEG2_LOW_LEVEL 0x0a
#define MPEG2_MAIN_LEVEL 0x08
/******************************************************************************
* MPEG2 Prediction types
*******************************************************************************/
#define FIELD_PRED 0
#define FRAME_PRED 1
#define DUAL_PRED 2
#define RESERVED -1
#define MC_16X8_PRED 3
/*****************************************************************************
* MPEG2 Motion vector format
******************************************************************************/
#define FIELD_MV 0
#define FRAME_MV 1
/******************************************************************************/
/* General Video related definitions */
/******************************************************************************/
#define BLK_SIZE 8
#define NUM_COEFFS ((BLK_SIZE)*(BLK_SIZE))
#define LUMA_BLK_SIZE (2 * (BLK_SIZE))
#define CHROMA_BLK_SIZE (BLK_SIZE)
#define BLOCKS_IN_MB 6
#define MB_SIZE 16
#define MB_CHROMA_SIZE 8
#define NUM_PELS_IN_BLOCK 64
#define NUM_LUMA_BLKS 4
#define NUM_CHROMA_BLKS 2
#define MAX_COLR_COMPS 3
#define Y_LUMA 0
#define U_CHROMA 1
#define V_CHROMA 2
#define MB_LUMA_MEM_SIZE ((MB_SIZE) * (MB_SIZE))
#define MB_CHROMA_MEM_SIZE ((MB_SIZE/2) * (MB_SIZE/2))
#define BITS_IN_INT 32
/******************************************************************************/
/* MPEG2 Motion compensation related definitions */
/******************************************************************************/
#define REF_FRM_MB_WIDTH 18
#define REF_FRM_MB_HEIGHT 18
#define REF_FLD_MB_HEIGHT 10
#define REF_FLD_MB_WIDTH 18
/******************************************************************************/
/* Maximum number of bits per MB */
/******************************************************************************/
#define I_MB_BIT_SIZE 90
#define P_MB_BIT_SIZE 90
#define B_MB_BIT_SIZE 150
/******************************************************************************/
/* Aspect ratio related definitions */
/******************************************************************************/
#define MPG1_NTSC_4_3 0x8
#define MPG1_PAL_4_3 0xc
#define MPG1_NTSC_16_9 0x6
#define MPG1_PAL_16_9 0x3
#define MPG1_1_1 0x1
#define MPG2_4_3 0x2
#define MPG2_16_9 0x3
#define MPG2_1_1 0x1
/******************************************************************************/
/* Inverse Quantizer Output range */
/******************************************************************************/
#define IQ_OUTPUT_MAX 2047
#define IQ_OUTPUT_MIN -2048
/******************************************************************************/
/* IDCT Output range */
/******************************************************************************/
#define IDCT_OUTPUT_MAX 255
#define IDCT_OUTPUT_MIN -256
/******************************************************************************/
/* Output pixel range */
/******************************************************************************/
#define PEL_VALUE_MAX 255
#define PEL_VALUE_MIN 0
/******************************************************************************/
/* inv scan types */
/******************************************************************************/
#define ZIG_ZAG_SCAN 0
#define VERTICAL_SCAN 1
/******************************************************************************/
/* Related VLD codes */
/******************************************************************************/
#define ESC_CODE_VALUE 0x0058
#define EOB_CODE_VALUE 0x07d0
#define END_OF_BLOCK 0x01
#define ESCAPE_CODE 0x06
#define END_OF_BLOCK_ZERO 0x01ff
#define END_OF_BLOCK_ONE 0x01ff
/******************** Idct Specific ***************/
#define TRANS_SIZE_8 8
#define IDCT_STG1_SHIFT 12
#define IDCT_STG2_SHIFT 16
#define IDCT_STG1_ROUND ((1 << IDCT_STG1_SHIFT) >> 1)
#define IDCT_STG2_ROUND ((1 << IDCT_STG2_SHIFT) >> 1)
/******************************************************************************
* Sample Version Definitions
*******************************************************************************/
#define SAMPLE_VERS_MAX_FRAMES_DECODE 999
#define MAX_FRAME_BUFFER 7
/* vop coding type */
typedef enum
{
I_PIC = 1,
P_PIC,
B_PIC,
D_PIC
} e_pic_type_t;
typedef enum
{
MPEG_2_VIDEO,
MPEG_1_VIDEO
} e_video_type_t;
typedef enum
{
FORW,
BACK,
BIDIRECT
} e_pred_direction_t;
typedef enum
{
TOP,
BOTTOM
} e_field_t;
/* Motion vectors (first/second) */
enum
{
FIRST,
SECOND,
THIRD,
FOURTH
};
enum
{
MV_X,
MV_Y
};
/* Enumeration defining the various kinds of interpolation possible in
motion compensation */
typedef enum
{
FULL_XFULL_Y,
FULL_XHALF_Y,
HALF_XFULL_Y,
HALF_XHALF_Y
} e_sample_type_t;
typedef enum
{
/* Params of the reference buffer used as input to MC */
/* frame prediction in P frame picture */
MC_FRM_FW_OR_BK_1MV,
/* field prediction in P frame picture */
MC_FRM_FW_OR_BK_2MV,
/* frame prediction in B frame picture */
MC_FRM_FW_AND_BK_2MV,
/* field prediction in B frame picture */
MC_FRM_FW_AND_BK_4MV,
/* dual prime prediction in P frame picture */
MC_FRM_FW_DUAL_PRIME_1MV,
/* frame prediction in P field picture */
MC_FLD_FW_OR_BK_1MV,
/* 16x8 prediction in P field picture */
MC_FLD_FW_OR_BK_2MV,
/* field prediction in B field picture */
MC_FLD_FW_AND_BK_2MV,
/* 16x8 prediction in B field picture */
MC_FLD_FW_AND_BK_4MV,
/* dual prime prediction in P field picture */
MC_FLD_FW_DUAL_PRIME_1MV,
} e_mb_type_t;
#endif /* __IMPEG2_DEFS_H__ */