📄 mp4.h
字号:
/* /////////////////////////////////////////////////////////////////////////// INTEL CORPORATION PROPRIETARY INFORMATION// This software is supplied under the terms of a license agreement or// nondisclosure agreement with Intel Corporation and may not be copied// or disclosed except in accordance with the terms of that agreement.// Copyright (c) 2001-2005 Intel Corporation. All Rights Reserved.//// Description: MPEG-4 header.//*/#ifndef _MP4_H_#define _MP4_H_#include <stdlib.h>#include <stdio.h>#include <string.h>#include "ippdefs.h"#include "ippcore.h"#include "ipps.h"#include "ippi.h"#include "ippvc.h"//#include "ippcc.h"#pragma warning(disable : 4710) // function not inlined#pragma warning(disable : 4514) // unreferenced inline function has been removed CL#pragma warning(disable : 4100) // unreferenced formal parameter CL#ifdef __cplusplusextern "C" {#endif//#define MP4_USE_INLINE_BITS_FUNC#if defined(__INTEL_COMPILER) || defined(_MSC_VER) #define __INLINE static __inline#elif defined( __GNUC__ ) #define __INLINE static __inline__#else #define __INLINE static#endif#if defined(__INTEL_COMPILER) && !defined(_WIN32_WCE) #define __ALIGN16(type, name, size) \ __declspec (align(16)) type name[size]#else #if defined(_WIN64) || defined(WIN64) || defined(LINUX64) #define __ALIGN16(type, name, size) \ Ipp8u _a16_##name[(size)*sizeof(type)+15]; type *name = (type*)(((Ipp64s)(_a16_##name) + 15) & ~15) #else #define __ALIGN16(type, name, size) \ Ipp8u _a16_##name[(size)*sizeof(type)+15]; type *name = (type*)(((Ipp32s)(_a16_##name) + 15) & ~15) #endif#endif#define mp4_CLIP(x, min, max) if ((x) < (min)) (x) = (min); else if ((x) > (max)) (x) = (max)#define mp4_CLIPR(x, max) if ((x) > (max)) (x) = (max)#define mp4_SWAP(type, x, y) {type t = (x); (x) = (y); (y) = t;}#define mp4_ABS(a) ((a) >= 0 ? (a) : -(a))/* Timer Info */#if defined(_WIN32) || defined(_WIN64) || defined(WIN32) || defined(WIN64) #include <windows.h> typedef struct _mp4_Timer { LARGE_INTEGER count; LARGE_INTEGER start; LARGE_INTEGER stop; int calls; } mp4_Timer; __INLINE void mp4_TimerStart(mp4_Timer *t) { QueryPerformanceCounter(&t->start); } __INLINE void mp4_TimerStop(mp4_Timer *t) { QueryPerformanceCounter(&t->stop); t->count.QuadPart += t->stop.QuadPart - t->start.QuadPart; t->calls ++; } #define TIMER_FREQ_TYPE LARGE_INTEGER __INLINE void mp4_GetTimerFreq(TIMER_FREQ_TYPE *f) { QueryPerformanceFrequency(f); } __INLINE double mp4_GetTimerSec(mp4_Timer *t, TIMER_FREQ_TYPE f) { return (double)t->count.QuadPart / (double)f.QuadPart; }#else // LINUX #include <time.h> typedef struct _mp4_Timer { clock_t count; clock_t start; clock_t stop; int calls; } mp4_Timer; __INLINE void mp4_TimerStart(mp4_Timer *t) { t->start = clock(); } __INLINE void mp4_TimerStop(mp4_Timer *t) { t->stop = clock(); t->count += t->stop - t->start; t->calls ++; } #define TIMER_FREQ_TYPE int __INLINE void mp4_GetTimerFreq(TIMER_FREQ_TYPE *f) { *f = CLOCKS_PER_SEC; } __INLINE double mp4_GetTimerSec(mp4_Timer *t, TIMER_FREQ_TYPE f) { return (double)t->count / (double)f; }#endif/* number of exterior MB */#define MP4_NUM_EXT_MB 1/* Statistic Info */typedef struct _mp4_Statistic { // VideoObjectLayer Info int nVOP; int nVOP_I; int nVOP_P; int nVOP_B; int nVOP_S; int nMB; int nMB_INTER; int nMB_INTER_Q; int nMB_INTRA; int nMB_INTRA_Q; int nMB_INTER4V; int nMB_DIRECT; int nMB_INTERPOLATE; int nMB_BACKWARD; int nMB_FORWARD; int nMB_NOTCODED; int nB_INTRA_DC; int nB_INTRA_AC; int nB_INTER_C; int nB_INTER_NC; // app Timing Info mp4_Timer time_DecodeShow; // decode + draw + file reading mp4_Timer time_Decode; // decode + file reading mp4_Timer time_DecodeOnly; // decode only} mp4_Statistic;__INLINE void mp4_StatisticInc(int *s){ *s = (*s) + 1;}// when using Full Statistic, FPS is less#ifdef MP4_FULL_STAT#define mp4_StatisticInc_(s) mp4_StatisticInc(s)#define mp4_TimerStart_(t) mp4_TimerStart(t)#define mp4_TimerStop_(t) mp4_TimerStop(t)#else#define mp4_StatisticInc_(s)#define mp4_TimerStart_(t)#define mp4_TimerStop_(t)#endif/* status codes */typedef enum { MP4_STATUS_OK = 0, // no error MP4_STATUS_NO_MEM = -1, // out of memory MP4_STATUS_FILE_ERROR = -2, // file error MP4_STATUS_NOTSUPPORT = -3, // not supported mode MP4_STATUS_PARSE_ERROR = -4, // fail in parse MPEG-4 stream MP4_STATUS_ERROR = -5 // unknown/unspecified error} mp4_Status;/* MPEG-4 start code values */// ISO/IEC 14496-2: table 6-3enum { MP4_VIDEO_OBJECT_MIN_SC = 0x00, MP4_VIDEO_OBJECT_MAX_SC = 0x1F, MP4_VIDEO_OBJECT_LAYER_MIN_SC = 0x20, MP4_VIDEO_OBJECT_LAYER_MAX_SC = 0x2F, MP4_FGS_BP_MIN_SC = 0x40, MP4_FGS_BP_MAX_SC = 0x5F, MP4_VISUAL_OBJECT_SEQUENCE_SC = 0xB0, MP4_VISUAL_OBJECT_SEQUENCE_EC = 0xB1, MP4_USER_DATA_SC = 0xB2, MP4_GROUP_OF_VOP_SC = 0xB3, MP4_VIDEO_SESSION_ERROR_SC = 0xB4, MP4_VISUAL_OBJECT_SC = 0xB5, MP4_VIDEO_OBJECT_PLANE_SC = 0xB6, MP4_SLICE_SC = 0xB7, MP4_EXTENSION_SC = 0xB8, MP4_FGS_VOP_SC = 0xB9, MP4_FBA_OBJECT_SC = 0xBA, MP4_FBA_OBJECT_PLANE_SC = 0xBB, MP4_MESH_OBJECT_SC = 0xBC, MP4_MESH_OBJECT_PLANE_SC = 0xBD, MP4_STILL_TEXTURE_OBJECT_SC = 0xBE, MP4_TEXTURE_SPATIAL_LAYER_SC = 0xBF, MP4_TEXTURE_SNR_LAYER_SC = 0xC0, MP4_TEXTURE_TILE_SC = 0xC1, MP4_TEXTURE_SHAPE_LAYER_SC = 0xC2, MP4_STUFFING_SC = 0xC3};/* MPEG-4 code values */// ISO/IEC 14496-2:2004 table 6-6enum { MP4_VISUAL_OBJECT_TYPE_VIDEO = 1, MP4_VISUAL_OBJECT_TYPE_TEXTURE = 2, MP4_VISUAL_OBJECT_TYPE_MESH = 3, MP4_VISUAL_OBJECT_TYPE_FBA = 4, MP4_VISUAL_OBJECT_TYPE_3DMESH = 5};// ISO/IEC 14496-2:2004 table 6-7enum { MP4_VIDEO_FORMAT_COMPONENT = 0, MP4_VIDEO_FORMAT_PAL = 1, MP4_VIDEO_FORMAT_NTSC = 2, MP4_VIDEO_FORMAT_SECAM = 3, MP4_VIDEO_FORMAT_MAC = 4, MP4_VIDEO_FORMAT_UNSPECIFIED = 5};// ISO/IEC 14496-2:2004 table 6-8..10enum { MP4_VIDEO_COLORS_FORBIDDEN = 0, MP4_VIDEO_COLORS_ITU_R_BT_709 = 1, MP4_VIDEO_COLORS_UNSPECIFIED = 2, MP4_VIDEO_COLORS_RESERVED = 3, MP4_VIDEO_COLORS_ITU_R_BT_470_2_M = 4, MP4_VIDEO_COLORS_ITU_R_BT_470_2_BG = 5, MP4_VIDEO_COLORS_SMPTE_170M = 6, MP4_VIDEO_COLORS_SMPTE_240M = 7, MP4_VIDEO_COLORS_GENERIC_FILM = 8};// ISO/IEC 14496-2:2004 table 6-11enum { MP4_VIDEO_OBJECT_TYPE_SIMPLE = 1, MP4_VIDEO_OBJECT_TYPE_SIMPLE_SCALABLE = 2, MP4_VIDEO_OBJECT_TYPE_CORE = 3, MP4_VIDEO_OBJECT_TYPE_MAIN = 4, MP4_VIDEO_OBJECT_TYPE_NBIT = 5, MP4_VIDEO_OBJECT_TYPE_2DTEXTURE = 6, MP4_VIDEO_OBJECT_TYPE_2DMESH = 7, MP4_VIDEO_OBJECT_TYPE_SIMPLE_FACE = 8, MP4_VIDEO_OBJECT_TYPE_STILL_SCALABLE_TEXTURE = 9, MP4_VIDEO_OBJECT_TYPE_ADVANCED_REAL_TIME_SIMPLE = 10, MP4_VIDEO_OBJECT_TYPE_CORE_SCALABLE = 11, MP4_VIDEO_OBJECT_TYPE_ADVANCED_CODING_EFFICIENCY = 12, MP4_VIDEO_OBJECT_TYPE_ADVANCED_SCALABLE_TEXTURE = 13, MP4_VIDEO_OBJECT_TYPE_SIMPLE_FBA = 14, MP4_VIDEO_OBJECT_TYPE_SIMPLE_STUDIO = 15, MP4_VIDEO_OBJECT_TYPE_CORE_STUDIO = 16, MP4_VIDEO_OBJECT_TYPE_ADVANCED_SIMPLE = 17, MP4_VIDEO_OBJECT_TYPE_FINE_GRANULARITY_SCALABLE = 18};// ISO/IEC 14496-2:2004 table 6.17 (maximum defined video_object_layer_shape_extension)#define MP4_SHAPE_EXT_NUM 13// ISO/IEC 14496-2:2004 table 6-14enum { MP4_ASPECT_RATIO_FORBIDDEN = 0, MP4_ASPECT_RATIO_1_1 = 1, MP4_ASPECT_RATIO_12_11 = 2, MP4_ASPECT_RATIO_10_11 = 3, MP4_ASPECT_RATIO_16_11 = 4, MP4_ASPECT_RATIO_40_33 = 5, MP4_ASPECT_RATIO_EXTPAR = 15};// ISO/IEC 14496-2:2004 table 6-15#define MP4_CHROMA_FORMAT_420 1// ISO/IEC 14496-2:2004 table 6-16enum { MP4_SHAPE_TYPE_RECTANGULAR = 0, MP4_SHAPE_TYPE_BINARY = 1, MP4_SHAPE_TYPE_BINARYONLY = 2, MP4_SHAPE_TYPE_GRAYSCALE = 3};// ISO/IEC 14496-2:2004 table 6-19#define MP4_SPRITE_STATIC 1#define MP4_SPRITE_GMC 2// ISO/IEC 14496-2:2004 table 6-24enum { MP4_VOP_TYPE_I = 0, MP4_VOP_TYPE_P = 1, MP4_VOP_TYPE_B = 2, MP4_VOP_TYPE_S = 3};// ISO/IEC 14496-2:2004 table 6-26enum { MP4_SPRITE_TRANSMIT_MODE_STOP = 0, MP4_SPRITE_TRANSMIT_MODE_PIECE = 1, MP4_SPRITE_TRANSMIT_MODE_UPDATE = 2, MP4_SPRITE_TRANSMIT_MODE_PAUSE = 3};// ISO/IEC 14496-2:2004 table 7-3enum { MP4_BAB_TYPE_MVDSZ_NOUPDATE = 0, MP4_BAB_TYPE_MVDSNZ_NOUPDATE = 1, MP4_BAB_TYPE_TRANSPARENT = 2, MP4_BAB_TYPE_OPAQUE = 3, MP4_BAB_TYPE_INTRACAE = 4, MP4_BAB_TYPE_MVDSZ_INTERCAE = 5, MP4_BAB_TYPE_MVDSNZ_INTERCAE = 6};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -