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

📄 movfile.h

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 H
字号:
/********************************************************************************************
*	Copyright (C), 2008, Fuzhou Rockchip Co.,Ltd.
*   All Rights Reserved
*
*	File:
*              MovFile.h
*	Description:
*
*	Author:
*              guosl
*	Note:
*	           None.
*	$Log: MovFile.h,v $
*	Revision 1.1  2008/07/08 07:29:20  HZF
*	增加3gp和MP4
*	
*	Revision 1.1  2008/5/16 14:43:19  guosl
*	no message
*
*
*
*
********************************************************************************************/

#ifndef _MOVFILE_H
#define _MOVFILE_H


#include "system.h"


#ifdef __cplusplus
extern "C" {
#endif



/*#define MOV_FILE_PARSING_OK         0
#define MOV_FILE_FORMAT_ERR         -1
#define MOV_FILE_INDX_ERR           -2
#define MOV_FILE_NO_MOVI_CHUNK      -3
#define MOV_FILE_RESOLUTION_ERR     -4
#define MOV_FILE_VIDEO_CODEC_ERR    -5
#define MOV_FILE_AUDIO_CODEC_ERR    -6
#define MOV_FILE_OPEN_ERR           -7*/

#define MOV_FILE_PARSING_OK 0
#define MOV_FILE_BOX_PARSE_SUCCESS 0
#define MOV_FILE_BOX_PARSE_ERR -1
#define MOV_FILE_AUDIO_UNSUPPORTED -2
#define MOV_FILE_VIDEO_UNSUPPORTED -3
#define MOV_FILE_RESOLUTION_UNSUPPORTED -4
#define MOV_FILE_AUDIO_CODEC_ERR -6
#define MALLOC_FAILED -1


/* open file state */
#define MOV_FILE_OPEN_ERR -1
#define MOV_FILE_OPEN_SUCCESS 0



/* mov play state */
#define MOV_STATE_PALYING 0
#define MOV_STATE_FFD 1
#define MOV_STATE_FFW 2
#define MOV_STATE_PAUSE 3
#define MOV_STATE_STOP 4
#define MOV_STATE_INITIALIZING 5

/* four bytes */
#define FOURBYTE 4


/*data type define */
#ifndef DWORD
typedef unsigned long int DWORD;
#endif
typedef DWORD FOURCC;
#ifndef LONG
/*typedef unsigned long int LONG;*/
typedef long  LONG;
#endif
#ifndef BYTE
typedef unsigned char BYTE;
#endif
#ifndef WORD
typedef short int WORD;
#endif
#ifndef uint32
typedef unsigned int uint32;
#endif

#define  ON_RKFS
#ifdef ON_RKFS
#define MovFread FS_fread
#define MovFseek FS_fseek
#define MovFopen FS_fopen
#define MovFClose FS_fclose
#define MovFtell FS_ftell
#define MovGFSize FSFileGetSize
#define MovFastFseek FSFileSeekEx
#define MovFwrite FS_fwrite
#define MOV_FILE FS_FILE
#else
#define MovFread fread
#define MovFseek fseek
#define MovFopen fopen
#define MovFtell ftell
#define MovFClose fclose
#define MOV_FILE FILE
#endif

#define BYTESWAP(a) (((a >> 24) & 0x000000ff) | ((a >> 8) & 0x0000ff00) | ((a << 8) & 0x00ff0000) | (a << 24))

#define WORDSWAP(a) (((a >> 8) & 0x00ff) | (a << 8))

#define UINT64SWAP(a) (((a >> 56) & 0x00000000000000ffll) | ((a >> 40) & 0x000000000000ff00ll) \
                      | ((a >> 24) & 0x0000000000ff0000ll) | ((a >> 8) & 0x00000000ff000000ll)   \
                      | ((a << 8) & 0x000000ff00000000ll) | ((a << 24) & 0x0000ff0000000000ll)   \
                      | ((a << 40) & 0x00ff000000000000ll) | (a << 56))


#define SIGN_FTYP 0x70797466 //ftyp
#define SIGN_PDIN 0x6E696470 //pdin
#define SIGN_MOOV 0x766F6F6D //moov
#define SIGN_MOOF 0x666F6F6D //moof
#define SIGN_MFRA 0x6172666D //mfra
#define SIGN_FREE 0x65657266 //free
#define SIGN_MDAT 0x7461646D //mdat
#define SIGN_SKIP 0x70696B73 //skip
#define SIGN_META 0x6174656D //meta

#define SIGN_MVEX 0x7865766D  //mvex
#define SIGN_TRAK 0x6B617274 //trak
#define SIGN_MVHD 0x6468766D //mvhd
#define SIGN_IPMC 0x636D7069 //ipmc
#define SIGN_MFHD 0x6468666D //mfhd
#define SIGN_TRAF 0x66617274 //traf
#define SIGN_TFRA 0x61726674 //tfra
#define SIGN_MFRO 0x6F72666D //mfro
#define SIGN_UDTA 0x61746475 //udta
#define SIGN_HDLR 0x726C6468 //hdlr
#define SIGN_DINF 0x666E6964 //dinf
#define SIGN_IPMC 0x636D7069 //ipmc
#define SIGN_ILOC 0x636F6C69 //iloc
#define SIGN_IPRO 0x6F727069 //ipro
#define SIGN_IINF 0x666E6969 //iinf
#define SIGN_XML  0x206C6D78 //xml
#define SIGN_BXML 0x6C6D7862 //bxml
#define SIGN_PITM 0x6D746970 //pitm

#define SIGN_TKHD 0x64686B74 //tkhd
#define SIGN_TREF 0x66657274 //tref
#define SIGN_EDTS 0x73746465 //edts
#define SIGN_MDIA 0x6169646D //mdia
#define SIGN_MEHD 0x6468656D //mehd
#define SIGN_TREX 0x78657274 //trex
#define SIGN_TFHD 0x64686674 //tfhd
#define SIGN_TRUN 0x6E757274 //trun
#define SIGN_CPRT 0x74727063 //cprt

#define SIGN_STSD 0x64737473 //stsd
#define SIGN_STTS 0x73747473 //stts
#define SIGN_CTTS 0x73747463 //ctts
#define SIGN_STSC 0x63737473 //stsc
#define SIGN_STSZ 0x7A737473 //stsz
#define SIGN_STZ2 0x327A7473 //stz2
#define SIGN_STCO 0x6F637473 //stco
#define SIGN_CO64 0x34366F63 //co64
#define SIGN_STSS 0x73737473 //stss
#define SIGN_STSH 0x68737473 //stsh
#define SIGN_PADB 0x62646170 //padb
#define SIGN_STDP 0x70647473 //stdp
#define SIGN_SGPD 0x64706773 //sgpd
#define SIGN_SDTP 0x70746473 //sdtp
#define SIGN_SBGP 0x70676273 //sbgp
#define SIGN_SUBS 0x73627573 //subs
#define SIGN_ESDS 0x73647365 //esds

#define SIGN_DREF 0x66657264 //dref
#define SIGN_URL  0x206C7275 //"url "
#define SIGN_URN  0x206E7275 //"urn "
#define SIGN_SINF 0x666E6973 //sinf

#define SIGN_ELST 0x74736C65 //elst
#define SIGN_MDHD 0x6468646D //mdhd
#define SIGN_HDLR 0x726C6468 //hdlr
#define SIGN_MINF 0x666E696D //minf
#define SIGN_FRMA 0x616D7266 //frma
#define SIGN_IMIF 0x66696D69 //imif
#define SIGN_SCHM 0x6D686373 //schm
#define SIGN_SCHI 0x69686373 //schi

#define SIGN_VMHD 0x64686D76 //vmhd
#define SIGN_SMHD 0x64686D73 //smhd
#define SIGN_HMHD 0x64686D68 //hmhd
#define SIGN_NMHD 0x64686D6E //nmhd
#define SIGN_DINF 0x666E6964 //dinf
#define SIGN_STBL 0x6C627473 //stbl


#define SIGN_VIDEO 0x0000
#define SIGN_AUDIO 0x0001
#define SIGN_OTHER 0x0002

#define HANDLER_VIDE 0x65646976
#define HANDLER_SOUN 0x6E756F73

#define MP4ESDescrTag 0x03
#define MP4DecConfigDescrTag 0x04
#define MP4DecSpecificDescrTag 0x05

#define VIDEO_TRACK 0x65646976 //video track
#define AUDIO_TRACK 0x6E756F73 //audio track

#define VIDEOCODE_MP4V 0x7634706D //mp4v
#define VIDEOCODE_S263 0x33363273 //s263
#define VIDEOCODE_AVC1 0x31637661 //avc1
#define AUDIOCODE_SAMR 0x726D6173 //samr
#define AUDIOCODE_MP4A 0x6134706D //mp4a


#define VIDEO_CODEC_LIB_NULL 0
#define VIDEO_CODEC_LIB_MP4V 1
#define VIDEO_CODEC_LIB_H263 2
#define VIDEO_CODEC_LIB_H264 3

#define AUDIO_CODEC_LIB_NULL 0
#define AUDIO_CODEC_LIB_SAMR 1
#define AUDIO_CODEC_LIB_MP4A 2

typedef enum
{
    FFD_STATE,
    FFW_STATE,
    NO_SKIP,
    SEEK_TIME,
    RESUME
}SKIPSTATE;

typedef struct
{
    uint32  clus;               //当前簇号
    uint32  offset;             //文件指针偏移量
}FILE_POS;


typedef struct
{
	uint32  readSize;     /* size read out. */
	uint32  chunkOffset;
	uint32  curChunkSize;
    uint32  sampleSum;
    uint32  firstSampleNo;
    uint32  endSampleNo;
}CurChunkinf;

typedef struct
{
    uint32  readSize;
    uint32  sampleOffset;
    uint32  curSampleSize;
    //uint32  msTime;
}CurSampleinf;

/* just used in mp4v */
typedef struct
{
    FILE_POS esdsFilePos;
    uint32   length;
}EsdsBoxinf;

typedef struct
{
    CurChunkinf  audioChunk;        /* current video sample information. */
	CurChunkinf  videoChunk;
    CurSampleinf audioSample;
    CurSampleinf videoSample;

    EsdsBoxinf   esdsInf;

    uint32       curAudioChunkNo;
    uint32       curVideoChunkNo;
    uint32       curAudioSampleNo;
    uint32       curVideoSampleNo;

    uint32       audioChunkNum;
    uint32       videoChunkNum;
    uint32       audioSampleNum;
    uint32       videoSampleNum;
    uint32       audioSampleSize;
    uint32       videoSampleSize;
    uint32       videoSampleToChunkNo;
    uint32       audioSampleToChunkNo;

    uint32       audioTimeToSampleNo;
    uint32       videoTimeToSampleNo;

    int          videoSyncSampleNo;

    uint32       videoTimeScale;
    uint32       audioTimeScale;
    uint32       uint32VideoDuration;
    uint32       uint32AudioDuration;
    uint64       uint64VideoDuration;
    uint64       uint64AudioDuration;
    uint32       length ;  //ms

    WORD         channelCount;   //either 1(mono) or2 (stereo)
    uint32       sampleRate;     //audio sampling rate

    WORD         width;
    WORD         height;


    WORD		 aFormat;
	WORD		 vFormat;
    BYTE		 audioFlag;			/* audio flag. if audio stream is not exist or not supported, its value will be 0. */
	BYTE		 videoFlag;			/* video flag. if video stream is not exist or not supported, its value will be 0. */

}MovFileinf;

EXT MOV_FILE       *gMovFilePointer;
EXT MOV_FILE *gMovAudioFilePointer;
EXT MovFileinf gMovFile;
EXT SKIPSTATE gBeingSkip;


EXT int MovFileInit(const char *pathName);

EXT int	MovFileParsing(MOV_FILE *videoFile);

EXT void MovFileClose(void);

EXT int MovVideoGetDataToSDRAM(MOV_FILE *videoFile,
                               MovFileinf *pFileinf,
                               char *buffer,
                               const DWORD *size);


EXT int MovAudioGetDataToSDRAM(MOV_FILE *videoFile,
                               MovFileinf *pFileinf,
                               char *buffer,
                               const DWORD *size);

EXT int MovSeekVideoNextISample2Time(MOV_FILE *videoFile,
                                     MovFileinf *pFileinf,
                                     LONG msTime);

EXT int MovSeekVideoPreISample2Time(MOV_FILE *videoFile,
                                    MovFileinf *pFileinf,
                                    LONG msTime);


EXT int MovGetAudioFormat(void);

EXT int MovAudioSeek(MOV_FILE *videoFile, long offset, int origin);

EXT void MovGlobalVarInit(void);

EXT void MovGlobalVarDspInit(void);

EXT void MovSynAudio2Video(LONG videoSampleNo);

EXT int MovVideoGetNextISample(MOV_FILE *videoFile,
                               MovFileinf *pFileinf,
                               uint32 frameNo);

EXT int MovVideoGetPreISample(MOV_FILE *videoFile,
                              MovFileinf *pFileinf,
                              uint32 frameNo);

EXT void MovGetVideoISampleinf(MOV_FILE *videoFile,
                               MovFileinf *pFileinf,
                               uint32 keyFrameNo);

EXT uint32 MovGetVideoFrameTime(MOV_FILE *videoFile,
                                MovFileinf *pFileinf,
                                uint32 frameNo);


#ifdef __cplusplus
}
#endif

#endif


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -