⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mp4.h

📁 这是在PCA下的基于IPP库示例代码例子,在网上下了IPP的库之后,设置相关参数就可以编译该代码.
💻 H
📖 第 1 页 / 共 3 页
字号:
/* ///////////////////////////////////////////////////////////////////////////               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 + -