1bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#ifndef VIDDEC_MP4_PARSE_H 2bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define VIDDEC_MP4_PARSE_H 3bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 4bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#include "viddec_fw_debug.h" 5bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#include "viddec_fw_mp4.h" 6bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 7bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* Macros for MP4 start code detection */ 8bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define FIRST_STARTCODE_BYTE 0x00 9bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define SECOND_STARTCODE_BYTE 0x00 10bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define THIRD_STARTCODE_BYTE 0x01 11bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define SHORT_THIRD_STARTCODE_BYTE 0x80 12bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define SC_BYTE_MASK0 0x00ff0000 13bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define SC_BYTE_MASK1 0x000000ff 14bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 15bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* status codes */ 16bd8388b4555645b3d29abc6a94c303638064d69awonjong.leetypedef enum 17bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 18bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_STATUS_OK = 0, /* Success */ 19bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_STATUS_PARSE_ERROR = (1 << 0), /* Invalid syntax */ 20bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_STATUS_NOTSUPPORT = (1 << 1), /* unsupported feature */ 21bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_STATUS_REQD_DATA_ERROR = (1 << 2), /* supported data either invalid or missing */ 22bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} mp4_Status_t; 23bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 24bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* feature codes */ 25bd8388b4555645b3d29abc6a94c303638064d69awonjong.leetypedef enum 26bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 27bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VOP_FEATURE_DEFAULT = 0, // Default VOP features, no code image update needed 28bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VOP_FEATURE_SVH = 1, // VOP has Short Video Header 29bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VOP_FEATURE_DP = 2 // VOP is Data Partitioned 30bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} mp4_Vop_feature; 31bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 32bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* MPEG-4 start code values: Table 6-3 */ 33bd8388b4555645b3d29abc6a94c303638064d69awonjong.leetypedef enum 34bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 35bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SC_VIDEO_OBJECT_MIN = 0x00, 36bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SC_VIDEO_OBJECT_MAX = 0x1F, 37bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SC_VIDEO_OBJECT_LAYER_MIN = 0x20, 38bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SC_VIDEO_OBJECT_LAYER_MAX = 0x2F, 39bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SC_FGS_BP_MIN = 0x40, /* Unsupported */ 40bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SC_FGS_BP_MAX = 0x5F, /* Unsupported */ 41bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SC_VISUAL_OBJECT_SEQUENCE = 0xB0, 42bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SC_VISUAL_OBJECT_SEQUENCE_EC = 0xB1, 43bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SC_USER_DATA = 0xB2, 44bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SC_GROUP_OF_VOP = 0xB3, 45bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SC_VIDEO_SESSION_ERROR = 0xB4, 46bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SC_VISUAL_OBJECT = 0xB5, 47bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SC_VIDEO_OBJECT_PLANE = 0xB6, 48bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SC_SLICE = 0xB7, /* Unsupported */ 49bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SC_EXTENSION = 0xB8, /* Unsupported */ 50bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SC_FGS_VOP = 0xB9, /* Unsupported */ 51bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SC_FBA_OBJECT = 0xBA, /* Unsupported */ 52bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SC_FBA_OBJECT_PLANE = 0xBB, /* Unsupported */ 53bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SC_MESH_OBJECT = 0xBC, /* Unsupported */ 54bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SC_MESH_OBJECT_PLANE = 0xBD, /* Unsupported */ 55bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SC_STILL_TEXTURE_OBJECT = 0xBE, /* Unsupported */ 56bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SC_TEXTURE_SPATIAL_LAYER = 0xBF, /* Unsupported */ 57bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SC_TEXTURE_SNR_LAYER = 0xC0, /* Unsupported */ 58bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SC_TEXTURE_TILE = 0xC1, /* Unsupported */ 59bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SC_TEXTURE_SHAPE_LAYER = 0xC2, /* Unsupported */ 60bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SC_STUFFING = 0xC3, 61bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SC_SYTEM_MIN = 0xC6, /* Unsupported */ 62bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SC_SYTEM_MAX = 0xFF, /* Unsupported */ 63bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SC_INVALID = 0x100, /* Invalid */ 64bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee}mp4_start_code_values_t; 65bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 66bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* MPEG-4 code values 67bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee ISO/IEC 14496-2:2004 table 6-6 */ 68bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeenum 69bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 70bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VISUAL_OBJECT_TYPE_VIDEO = 1, 71bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VISUAL_OBJECT_TYPE_TEXTURE = 2, 72bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VISUAL_OBJECT_TYPE_MESH = 3, 73bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VISUAL_OBJECT_TYPE_FBA = 4, 74bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VISUAL_OBJECT_TYPE_3DMESH = 5 75bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee}; 76bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 77bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* ISO/IEC 14496-2:2004 table 6-7 */ 78bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeenum 79bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 80bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VIDEO_FORMAT_COMPONENT = 0, 81bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VIDEO_FORMAT_PAL = 1, 82bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VIDEO_FORMAT_NTSC = 2, 83bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VIDEO_FORMAT_SECAM = 3, 84bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VIDEO_FORMAT_MAC = 4, 85bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VIDEO_FORMAT_UNSPECIFIED = 5 86bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee}; 87bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 88bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* ISO/IEC 14496-2:2004 table 6-8..10 */ 89bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeenum 90bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 91bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VIDEO_COLORS_FORBIDDEN = 0, 92bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VIDEO_COLORS_ITU_R_BT_709 = 1, 93bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VIDEO_COLORS_UNSPECIFIED = 2, 94bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VIDEO_COLORS_RESERVED = 3, 95bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VIDEO_COLORS_ITU_R_BT_470_2_M = 4, 96bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VIDEO_COLORS_ITU_R_BT_470_2_BG = 5, 97bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VIDEO_COLORS_SMPTE_170M = 6, 98bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VIDEO_COLORS_SMPTE_240M = 7, 99bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VIDEO_COLORS_GENERIC_FILM = 8 100bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee}; 101bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 102bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* ISO/IEC 14496-2:2004 table 6-11 */ 103bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeenum 104bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 105bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VIDEO_OBJECT_TYPE_SIMPLE = 1, 106bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VIDEO_OBJECT_TYPE_SIMPLE_SCALABLE = 2, 107bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VIDEO_OBJECT_TYPE_CORE = 3, 108bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VIDEO_OBJECT_TYPE_MAIN = 4, 109bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VIDEO_OBJECT_TYPE_NBIT = 5, 110bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VIDEO_OBJECT_TYPE_2DTEXTURE = 6, 111bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VIDEO_OBJECT_TYPE_2DMESH = 7, 112bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VIDEO_OBJECT_TYPE_SIMPLE_FACE = 8, 113bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VIDEO_OBJECT_TYPE_STILL_SCALABLE_TEXTURE = 9, 114bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VIDEO_OBJECT_TYPE_ADVANCED_REAL_TIME_SIMPLE = 10, 115bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VIDEO_OBJECT_TYPE_CORE_SCALABLE = 11, 116bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VIDEO_OBJECT_TYPE_ADVANCED_CODING_EFFICIENCY = 12, 117bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VIDEO_OBJECT_TYPE_ADVANCED_SCALABLE_TEXTURE = 13, 118bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VIDEO_OBJECT_TYPE_SIMPLE_FBA = 14, 119bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VIDEO_OBJECT_TYPE_SIMPLE_STUDIO = 15, 120bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VIDEO_OBJECT_TYPE_CORE_STUDIO = 16, 121bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VIDEO_OBJECT_TYPE_ADVANCED_SIMPLE = 17, 122bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VIDEO_OBJECT_TYPE_FINE_GRANULARITY_SCALABLE = 18 123bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee}; 124bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 125bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* ISO/IEC 14496-2:2004 table 6.17 (maximum defined video_object_layer_shape_extension) */ 126bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define MP4_SHAPE_EXT_NUM 13 127bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 128bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* ISO/IEC 14496-2:2004 table 6-14 */ 129bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeenum 130bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 131bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_ASPECT_RATIO_FORBIDDEN = 0, 132bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_ASPECT_RATIO_1_1 = 1, 133bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_ASPECT_RATIO_12_11 = 2, 134bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_ASPECT_RATIO_10_11 = 3, 135bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_ASPECT_RATIO_16_11 = 4, 136bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_ASPECT_RATIO_40_33 = 5, 137bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_ASPECT_RATIO_EXTPAR = 15 138bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee}; 139bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 140bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* ISO/IEC 14496-2:2004 table 6-15 */ 141bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define MP4_CHROMA_FORMAT_420 1 142bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 143bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* ISO/IEC 14496-2:2004 table 6-16 */ 144bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeenum 145bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 146bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SHAPE_TYPE_RECTANGULAR = 0, 147bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SHAPE_TYPE_BINARY = 1, 148bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SHAPE_TYPE_BINARYONLY = 2, 149bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SHAPE_TYPE_GRAYSCALE = 3 150bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee}; 151bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 152bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* ISO/IEC 14496-2:2004 table 6-19 */ 153bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define MP4_SPRITE_STATIC 1 154bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define MP4_SPRITE_GMC 2 155bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 156bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* ISO/IEC 14496-2:2004 table 6-24 */ 157bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeenum 158bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 159bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VOP_TYPE_I = 0, 160bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VOP_TYPE_P = 1, 161bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VOP_TYPE_B = 2, 162bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_VOP_TYPE_S = 3, 163bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee}; 164bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 165bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* ISO/IEC 14496-2:2004 table 6-26 */ 166bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeenum 167bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 168bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SPRITE_TRANSMIT_MODE_STOP = 0, 169bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SPRITE_TRANSMIT_MODE_PIECE = 1, 170bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SPRITE_TRANSMIT_MODE_UPDATE = 2, 171bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SPRITE_TRANSMIT_MODE_PAUSE = 3 172bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee}; 173bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 174bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* ISO/IEC 14496-2:2004 table 7-3 */ 175bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeenum 176bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 177bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_BAB_TYPE_MVDSZ_NOUPDATE = 0, 178bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_BAB_TYPE_MVDSNZ_NOUPDATE = 1, 179bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_BAB_TYPE_TRANSPARENT = 2, 180bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_BAB_TYPE_OPAQUE = 3, 181bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_BAB_TYPE_INTRACAE = 4, 182bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_BAB_TYPE_MVDSZ_INTERCAE = 5, 183bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_BAB_TYPE_MVDSNZ_INTERCAE = 6 184bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee}; 185bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 186bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define MP4_DC_MARKER 0x6B001 // 110 1011 0000 0000 0001 187bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define MP4_MV_MARKER 0x1F001 // 1 1111 0000 0000 0001 188bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 189bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 190bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* ISO/IEC 14496-2:2004 table G.1 */ 191bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeenum 192bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 193bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SIMPLE_PROFILE_LEVEL_1 = 0x01, 194bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SIMPLE_PROFILE_LEVEL_2 = 0x02, 195bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SIMPLE_PROFILE_LEVEL_3 = 0x03, 196bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SIMPLE_PROFILE_LEVEL_4a = 0x04, 197bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SIMPLE_PROFILE_LEVEL_5 = 0x05, 198bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SIMPLE_PROFILE_LEVEL_6 = 0x06, 199bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SIMPLE_PROFILE_LEVEL_0 = 0x08, 200bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_CORE_PROFILE_LEVEL_1 = 0x21, 201bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_CORE_PROFILE_LEVEL_2 = 0x22, 202bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_MAIN_PROFILE_LEVEL_2 = 0x32, 203bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_MAIN_PROFILE_LEVEL_3 = 0x33, 204bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_MAIN_PROFILE_LEVEL_4 = 0x34, 205bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_ADVANCED_REAL_TIME_SIMPLE_PROFILE_LEVEL_1 = 0x91, 206bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_ADVANCED_REAL_TIME_SIMPLE_PROFILE_LEVEL_2 = 0x92, 207bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_ADVANCED_REAL_TIME_SIMPLE_PROFILE_LEVEL_3 = 0x93, 208bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_ADVANCED_REAL_TIME_SIMPLE_PROFILE_LEVEL_4 = 0x94, 209bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_ADVANCED_CODING_EFFICIENCY_PROFILE_LEVEL_1 = 0xB1, 210bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_ADVANCED_CODING_EFFICIENCY_PROFILE_LEVEL_2 = 0xB2, 211bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_ADVANCED_CODING_EFFICIENCY_PROFILE_LEVEL_3 = 0xB3, 212bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_ADVANCED_CODING_EFFICIENCY_PROFILE_LEVEL_4 = 0xB4, 213bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_ADVANCED_CORE_PROFILE_LEVEL_1 = 0xC1, 214bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_ADVANCED_CORE_PROFILE_LEVEL_2 = 0xC2, 215bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_ADVANCED_SIMPLE_PROFILE_LEVEL_0 = 0xF0, 216bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_ADVANCED_SIMPLE_PROFILE_LEVEL_1 = 0xF1, 217bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_ADVANCED_SIMPLE_PROFILE_LEVEL_2 = 0xF2, 218bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_ADVANCED_SIMPLE_PROFILE_LEVEL_3 = 0xF3, 219bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_ADVANCED_SIMPLE_PROFILE_LEVEL_4 = 0xF4, 220bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_ADVANCED_SIMPLE_PROFILE_LEVEL_5 = 0xF5, 221bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_ADVANCED_SIMPLE_PROFILE_LEVEL_3B = 0xF7 222bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee}; 223bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 224bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* Group Of Video Object Plane Info */ 225bd8388b4555645b3d29abc6a94c303638064d69awonjong.leetypedef struct 226bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 227bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t closed_gov; 228bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t broken_link; 229bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t time_code_hours; 230bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t time_code_minutes; 231bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t time_code_seconds; 232bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t dummy1; 233bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint16_t dummy2; 234bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint32_t time_base; 235bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} mp4_GroupOfVideoObjectPlane_t; 236bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 237bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 238bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* Video Object Plane Info */ 239bd8388b4555645b3d29abc6a94c303638064d69awonjong.leetypedef struct 240bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 241bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t vop_coding_type; 242bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint32_t modulo_time_base; 243bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint16_t vop_time_increment; 244bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t vop_coded; 245bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 246bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint16_t vop_id; 247bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint16_t vop_id_for_prediction; 248bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t is_vop_id_for_prediction_indication; 249bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t vop_rounding_type; 250bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t vop_reduced_resolution; 251bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t align_dummy; 252bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 253bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint16_t vop_width; 254bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint16_t vop_height; 255bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint16_t vop_horizontal_mc_spatial_ref; 256bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint16_t vop_vertical_mc_spatial_ref; 257bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 258bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t background_composition; 259bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t change_conv_ratio_disable; 260bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t is_vop_constant_alpha; 261bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t vop_constant_alpha_value; 262bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t intra_dc_vlc_thr; 263bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t top_field_first; 264bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t alternate_vertical_scan_flag; 265bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t sprite_transmit_mode; 266bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 267bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee int32_t brightness_change_factor; 268bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint16_t vop_quant; 269bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t vop_fcode_forward; 270bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t vop_fcode_backward; 271bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 272bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint16_t warping_mv_code_du[4]; 273bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint16_t warping_mv_code_dv[4]; 274bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 275bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} mp4_VideoObjectPlane_t; 276bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 277bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* VOLControlParameters Info */ 278bd8388b4555645b3d29abc6a94c303638064d69awonjong.leetypedef struct 279bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 280bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t chroma_format; 281bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t low_delay; 282bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t vbv_parameters; 283bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t align_dummy1; 284bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint32_t bit_rate; 285bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint32_t vbv_buffer_size; 286bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint32_t vbv_occupancy; 287bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} mp4_VOLControlParameters_t; 288bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 289bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* Video Object Plane with short header Info */ 290bd8388b4555645b3d29abc6a94c303638064d69awonjong.leetypedef struct _mp4_VideoObjectPlaneH263 291bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 292bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t temporal_reference; 293bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t split_screen_indicator; 294bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t document_camera_indicator; 295bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t full_picture_freeze_release; 296bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t source_format; 297bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t picture_coding_type; 298bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t vop_quant; 299bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint16_t num_gobs_in_vop; 300bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint16_t num_macroblocks_in_gob; 301bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t num_rows_in_gob; 302bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 303bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#if 0 304bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t gob_number; 305bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee int gob_header_empty; 306bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee int gob_frame_id; 307bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee int quant_scale; 308bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#endif 309bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} mp4_VideoObjectPlaneH263; 310bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 311bd8388b4555645b3d29abc6a94c303638064d69awonjong.leetypedef struct 312bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 313bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint16_t sprite_width; 314bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint16_t sprite_height; 315bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint16_t sprite_left_coordinate; 316bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint16_t sprite_top_coordinate; 317bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint16_t no_of_sprite_warping_points; 318bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint16_t sprite_warping_accuracy; 319bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint16_t sprite_brightness_change; 320bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint16_t low_latency_sprite_enable; 321bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee}mp4_VOLSpriteInfo_t; 322bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 323bd8388b4555645b3d29abc6a94c303638064d69awonjong.leetypedef struct 324bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 325bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t load_intra_quant_mat; 326bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t load_nonintra_quant_mat; 327bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint16_t align_dummy1; 328bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t intra_quant_mat[64]; 329bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t nonintra_quant_mat[64]; 330bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee}mp4_VOLQuant_mat_t; 331bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 332bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* Video Object Layer Info */ 333bd8388b4555645b3d29abc6a94c303638064d69awonjong.leetypedef struct 334bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 335bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t video_object_layer_id; /* Last 4 bits of start code. */ 336bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t short_video_header; 337bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t random_accessible_vol; 338bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t video_object_type_indication; 339bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 340bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t is_object_layer_identifier; 341bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t video_object_layer_verid; 342bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t video_object_layer_priority; 343bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t aspect_ratio_info; 344bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 345bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t aspect_ratio_info_par_width; 346bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t aspect_ratio_info_par_height; 347bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t align_dummy1; 348bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t is_vol_control_parameters; 349bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 350bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mp4_VOLControlParameters_t VOLControlParameters; 351bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 352bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t video_object_layer_shape; 353bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint16_t vop_time_increment_resolution; 354bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t vop_time_increment_resolution_bits; 355bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 356bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t fixed_vop_rate; 357bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint16_t fixed_vop_time_increment; 358bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint16_t video_object_layer_width; 359bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint16_t video_object_layer_height; 360bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t interlaced; 361bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 362bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t obmc_disable; 363bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t sprite_enable; 364bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mp4_VOLSpriteInfo_t sprite_info; 365bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t not_8_bit; 366bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t quant_precision; 367bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 368bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t bits_per_pixel; 369bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t quant_type; 370bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mp4_VOLQuant_mat_t quant_mat_info; 371bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t quarter_sample; 372bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t complexity_estimation_disable; 373bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 374bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t resync_marker_disable; 375bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t data_partitioned; 376bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t reversible_vlc; 377bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t newpred_enable; 378bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 379bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t reduced_resolution_vop_enable; // verid != 1 380bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t scalability; 381bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t low_latency_sprite_enable; 382bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 383bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mp4_GroupOfVideoObjectPlane_t GroupOfVideoObjectPlane; 384bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mp4_VideoObjectPlane_t VideoObjectPlane; 385bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mp4_VideoObjectPlaneH263 VideoObjectPlaneH263; 386bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 387bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // for interlaced B-VOP direct mode 388bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint32_t Tframe; 389bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // for B-VOP direct mode 390bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint32_t TRB, TRD; 391bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // time increment of past and future VOP for B-VOP 392bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint32_t pastFrameTime, futureFrameTime; 393bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // VOP global time 394bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint32_t vop_sync_time, vop_sync_time_b; 395bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 396bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} mp4_VideoObjectLayer_t; 397bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 398bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* video_signal_type Info */ 399bd8388b4555645b3d29abc6a94c303638064d69awonjong.leetypedef struct 400bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 401bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t is_video_signal_type; 402bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t video_format; 403bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t video_range; 404bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t is_colour_description; 405bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t colour_primaries; 406bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t transfer_characteristics; 407bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t matrix_coefficients; 408bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} mp4_VideoSignalType_t; 409bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 410bd8388b4555645b3d29abc6a94c303638064d69awonjong.leetypedef struct _mp4_Frame { 411bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee long long int time; 412bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} mp4_Frame; 413bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 414bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* Visual Object Info */ 415bd8388b4555645b3d29abc6a94c303638064d69awonjong.leetypedef struct 416bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 417bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t is_visual_object_identifier; 418bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t visual_object_verid; 419bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t visual_object_priority; 420bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t visual_object_type; 421bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mp4_VideoSignalType_t VideoSignalType; 422bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mp4_VideoObjectLayer_t VideoObject; 423bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 424bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mp4_Frame currentFrame; // current 425bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mp4_Frame pastFrame; // reference in past 426bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mp4_Frame futureFrame; // reference in future 427bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} mp4_VisualObject_t; 428bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 429bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* Full Info */ 430bd8388b4555645b3d29abc6a94c303638064d69awonjong.leetypedef struct 431bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 432bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mp4_VisualObject_t VisualObject; 433bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t profile_and_level_indication; 434bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} mp4_Info_t; 435bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 436bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeenum 437bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 438bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SC_SEEN_INVALID = 0x0, 439bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SC_SEEN_VOL = 0x1, 440bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SC_SEEN_VOP = 0x2, 441bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_SC_SEEN_SVH = 0x4, 442bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee}; 443bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 444bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeenum 445bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 446bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_BS_ERROR_NONE = (0 << 0), 447bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_BS_ERROR_HDR_PARSE = (1 << 0), 448bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_BS_ERROR_HDR_NONDEC = (1 << 1), 449bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_BS_ERROR_HDR_UNSUP = (1 << 2), 450bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_BS_ERROR_FRM_PARSE = (1 << 3), 451bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_BS_ERROR_FRM_NONDEC = (1 << 4), 452bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MP4_BS_ERROR_FRM_UNSUP = (1 << 5), 453bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee}; 454bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 455bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define MP4_HDR_ERROR_MASK (MP4_BS_ERROR_HDR_PARSE | MP4_BS_ERROR_HDR_NONDEC | MP4_BS_ERROR_HDR_UNSUP) 456bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 457bd8388b4555645b3d29abc6a94c303638064d69awonjong.leetypedef enum 458bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 459bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee VIDDEC_MP4_INDX_0 = 0, 460bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee VIDDEC_MP4_INDX_1 = 1, 461bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee VIDDEC_MP4_INDX_2 = 2, 462bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee VIDDEC_MP4_INDX_MAX = 3, 463bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} viddec_fw_mp4_ref_index_t; 464bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 465bd8388b4555645b3d29abc6a94c303638064d69awonjong.leetypedef struct 466bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 467bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t is_field; 468bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} viddec_mp4_ref_info_t; 469bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 470bd8388b4555645b3d29abc6a94c303638064d69awonjong.leetypedef struct 471bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 472bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // The relevant bitstream data for current stream 473bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mp4_Info_t info; 474bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 475bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // The previous start code (without the prefix) 476bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint32_t prev_sc; 477bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 478bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // The current start code (without the prefix) 479bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // TODO: Revisit for SVH 480bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint32_t current_sc; 481bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 482bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // Indicates if we look for both short and long video header or just the long video header 483bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // If false, sc detection looks for both short and long video headers. 484bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // If true, long video header has been seen and sc detection does not look for short video header any more. 485bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t ignore_scs; 486bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 487bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // Indicates if the current start code prefix is long (if true). 488bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t cur_sc_prefix; 489bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 490bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // Indicates if the next start code prefix is long (if true). 491bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t next_sc_prefix; 492bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 493bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // Indicates start of a frame 494bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t is_frame_start; 495bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 496bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // Indicates which start codes were seen for this workload 497bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint8_t sc_seen; 498bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 499bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // Indicates bitstream errors if any 500bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint16_t bitstream_error; 501bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 502bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // Reference frame information 503bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee viddec_mp4_ref_info_t ref_frame[VIDDEC_MP4_INDX_MAX]; 504bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 505bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee}viddec_mp4_parser_t; 506bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 507bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define BREAK_GETBITS_FAIL(x, ret) { \ 508bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if(x == -1){ \ 509bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee FWTRACE; \ 510bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee ret = MP4_STATUS_PARSE_ERROR; \ 511bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee break;} \ 512bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 513bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 514bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define BREAK_GETBITS_REQD_MISSING(x, ret) { \ 515bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if(x == -1){ \ 516bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee FWTRACE; \ 517bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee ret = MP4_STATUS_REQD_DATA_ERROR; \ 518bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee break;} \ 519bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 520bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 521bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeextern void *memset(void *s, int32_t c, uint32_t n); 522bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 523bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeuint32_t viddec_fw_mp4_emit_workload(void *parent, void *ctxt); 524bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 525bd8388b4555645b3d29abc6a94c303638064d69awonjong.leevoid mp4_set_hdr_bitstream_error(viddec_mp4_parser_t *parser, uint8_t hdr_flag, mp4_Status_t parse_status); 526bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 527bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#endif 528