📄 movfile.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 + -