312 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			312 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| /**
 | |
|     Header file of mov fileformat.
 | |
| 
 | |
|     Exported header file of mov fileformat.
 | |
| 
 | |
|     @file       MOVLib.h
 | |
|     @ingroup    mIAVMOV
 | |
|     @note       Nothing
 | |
| 
 | |
|     Copyright   Novatek Microelectronics Corp. 2019.  All rights reserved.
 | |
| */
 | |
| #ifndef _MOVLIB_H
 | |
| #define _MOVLIB_H
 | |
| 
 | |
| /*-----------------------------------------------------------------------------*/
 | |
| /* Include Header Files                                                        */
 | |
| /*-----------------------------------------------------------------------------*/
 | |
| #if defined (__UITRON) || defined (__ECOS)
 | |
| #include "Type.h"
 | |
| #else
 | |
| #include "kwrap/type.h"
 | |
| #endif
 | |
| 
 | |
| /**
 | |
|     @addtogroup mIAVMOV
 | |
| */
 | |
| //@{
 | |
| 
 | |
| /*-----------------------------------------------------------------------------*/
 | |
| /* Macro Constant Definitions                                                  */
 | |
| /*-----------------------------------------------------------------------------*/
 | |
| //timescale
 | |
| //#define MOV_TIMESCALE  600 // should be precise to fit all kinds of frame rate (such as 10, 15, 24, 30, 60, 120fps...)
 | |
| //#define MOV_TIMESCALE  60000 // should be precise to fit all kinds of frame rate (such as 10, 15, 24, 30, 60, 120fps...)
 | |
| #define MOV_TIMESCALE  92400 // should be precise to fit all kinds of frame rate (such as 10, 15, 24, 28, 30, 55, 60, 120fps...)
 | |
| 
 | |
| //#NT#2012/08/22#Hideo Lin -begin
 | |
| //#NT#For thumbnail and user data
 | |
| //#define ATOM_THUM   0x7468756d  // 'thum'
 | |
| #define ATOM_USER   0x75736572  // 'user'
 | |
| //#NT#2012/08/22#Hideo Lin -end
 | |
| #define VERSION_LENGTH  8       //'ver ' in frea atom
 | |
| 
 | |
| /*-----------------------------------------------------------------------------*/
 | |
| /* Type Definitions                                                            */
 | |
| /*-----------------------------------------------------------------------------*/
 | |
| /*
 | |
|     MOV_offset as a 32-bit pointer
 | |
| */
 | |
| typedef UINT32  MOV_Offset;
 | |
| 
 | |
| 
 | |
| /**
 | |
|     @ name mov entry structure.
 | |
| 
 | |
|     Structure definition for a video/audio frame, including file offset, frame size,
 | |
|     frame duration, and frame type.
 | |
| 
 | |
| */
 | |
| typedef struct {
 | |
| 	UINT64      pos;        ///< file offset of this frame
 | |
| 	UINT32      size;       ///< frame size
 | |
| 	//UINT32      duration;   ///< frame duration, used for av-sync
 | |
| 	UINT16      key_frame;  ///< frame type, whether key frame or not
 | |
| 	UINT8       updated;
 | |
| 	UINT8       rev;       ///< (internal) variable rate usage
 | |
| } MOV_Ientry;
 | |
| 
 | |
| typedef struct {
 | |
| 	UINT32      pos;        ///< file offset of this frame
 | |
| 	UINT32      size;       ///< frame size
 | |
| 	//UINT32      duration;   ///< frame duration, used for av-sync
 | |
| 	UINT16      key_frame;  ///< frame type, whether key frame or not
 | |
| 	UINT8       updated;
 | |
| 	UINT8       rev;
 | |
| } MOV_old32_Ientry;
 | |
| 
 | |
| #define MP_MOV_SIZE_ONEENTRY 12// one entry is 12 bytes
 | |
| #define MP_MOV_SIZE_CO64_ONEENTRY 16 // one entry is 16 bytes
 | |
| 
 | |
| 
 | |
| //#NT#2012/09/11#Meg Lin -begin
 | |
| typedef struct {
 | |
| 	UINT32 junkCC;      //oft: 0
 | |
| 	UINT32 junkSize;    //oft: 4
 | |
| 	UINT32 nidxCC;      //oft: 8
 | |
| 	UINT32 nidxSize;    //oft: c
 | |
| 	UINT32 audPos;      //oft: 10
 | |
| 	UINT32 audSize;     //oft: 14
 | |
| 	UINT32 lastjunkPos; //oft: 18
 | |
| 	UINT32 vidstartFN;  //oft: 1c
 | |
| 	UINT32 videoWid;    //oft: 20
 | |
| 	UINT32 videoHei;    //oft: 24
 | |
| 	UINT32 videoCodec;  //oft: 28
 | |
| 	UINT32 audSR;       //oft: 2c
 | |
| 	UINT32 audChs;      //oft: 30
 | |
| 	UINT32 hdrSize;     //oft: 34
 | |
| 	UINT32 versionCode; //oft: 38
 | |
| 	UINT32 vidPosLen;   //oft: 3c, thisVideoFrmDataLen
 | |
| 	UINT32 vidPosArray;//array of vidPos, vidSize, oft:40
 | |
| 
 | |
| } MOV_NIDXINFO;
 | |
| 
 | |
| typedef struct {
 | |
| 	UINT32 junkCC;      //oft: 0
 | |
| 	UINT32 junkSize;    //oft: 4
 | |
| 	UINT32 nidxCC;      //oft: 8
 | |
| 	UINT32 nidxSize;    //oft: c
 | |
| 	UINT32 audstartFN;  //oft: 10, this sec start framenumber
 | |
| 	UINT32 audcodec;    //oft: 14
 | |
| 	UINT32 lastjunkPos; //oft: 18
 | |
| 	UINT32 vidstartFN;  //oft: 1c, this sec start framenumber
 | |
| 	UINT32 videoWid;    //oft: 20
 | |
| 	UINT32 videoHei;    //oft: 24
 | |
| 	UINT32 videoCodec;  //oft: 28
 | |
| 	UINT32 videoFR;     //oft: 2c
 | |
| 	UINT32 audSR;       //oft: 30
 | |
| 	UINT32 audChs;      //oft: 34
 | |
| 	UINT32 hdrSize;     //oft: 38
 | |
| 	UINT32 versionCode; //oft: 3c
 | |
| 	UINT32 vidtotalFN;  //oft: 40, this sec total framenumber
 | |
| 	UINT32 vidPosArray;//array of (vidPos, vidSize)* vidtotalFN, oft:44
 | |
| 	UINT32 audtotalFN;  //oft: 44+vidFN*8
 | |
| 	UINT32 audPosArray;//array of (audPos, audSize)* audtotalFN, oft:48+vidFN*8
 | |
| 
 | |
| } MOV_SM_NIDXINFO;
 | |
| 
 | |
| typedef struct {
 | |
| 	UINT32 junkCC;      //oft: 0
 | |
| 	UINT32 junkSize;    //oft: 4
 | |
| 	UINT32 nidxCC;      //oft: 8
 | |
| 	UINT32 nidxSize;    //oft: c
 | |
| 	UINT32 audstartFN;  //oft: 10, this sec start framenumber
 | |
| 	UINT32 audcodec;    //oft: 14
 | |
| 	UINT32 lastjunkPos0; //oft: 18
 | |
| 	UINT32 lastjunkPos1; //oft: 1c
 | |
| 	UINT32 vidstartFN;  //oft: 20, this sec start framenumber
 | |
| 	UINT32 videoWid;    //oft: 24
 | |
| 	UINT32 videoHei;    //oft: 28
 | |
| 	UINT32 videoCodec;  //oft: 2c
 | |
| 	UINT32 videoFR;     //oft: 30
 | |
| 	UINT32 audSR;       //oft: 34
 | |
| 	UINT32 audChs;      //oft: 38
 | |
| 	UINT32 hdrSize;     //oft: 3c
 | |
| 	UINT32 versionCode; //oft: 40
 | |
| 	UINT32 vidtotalFN;  //oft: 44, this sec total framenumber
 | |
| 	UINT32 vidPosArray;//array of (vidPos, vidSize)* vidtotalFN, oft:48
 | |
| 	UINT32 audtotalFN;  //oft: 48+vidFN*8
 | |
| 	UINT32 audPosArray;//array of (audPos, audSize)* audtotalFN, oft:4c+vidFN*8
 | |
| 
 | |
| } MOV_SM_CO64_NIDXINFO;
 | |
| 
 | |
| 
 | |
| typedef struct {
 | |
| 	UINT32 junkCC;      //oft: 0
 | |
| 	UINT32 junkSize;    //oft: 4
 | |
| 	UINT32 nidxCC;      //oft: 8
 | |
| 	UINT32 nidxSize;    //oft: c
 | |
| 	UINT32 timeID;      //oft: 10, this sec start framenumber
 | |
| 	UINT32 audstartFN;  //oft: 14, this sec start framenumber
 | |
| 	UINT32 audcodec;    //oft: 18
 | |
| 	UINT32 lastjunkPos; //oft: 1c
 | |
| 	UINT32 vidstartFN;  //oft: 20, this sec start framenumber
 | |
| 	UINT32 videoWid;    //oft: 24
 | |
| 	UINT32 videoHei;    //oft: 28
 | |
| 	UINT32 videoCodec;  //oft: 2c
 | |
| 	UINT32 videoFR;     //oft: 30
 | |
| 	UINT32 audSR;       //oft: 34
 | |
| 	UINT32 audChs;      //oft: 38
 | |
| 	UINT32 hdrSize;     //oft: 3c
 | |
| 	UINT32 versionCode; //oft: 40
 | |
| 	UINT32 vidtotalFN;  //oft: 44, this sec total framenumber
 | |
| 	UINT32 vidPosArray;//array of (vidPos, vidSize)* vidtotalFN, oft:48
 | |
| 	UINT32 audtotalFN;  //oft: 48+vidFN*8
 | |
| 	UINT32 audPosArray;//array of (audPos, audSize)* audtotalFN, oft:4c+vidFN*8
 | |
| 
 | |
| } MOV_2015_NIDXINFO;
 | |
| 
 | |
| typedef struct {
 | |
| 	UINT32 junkCC;      //oft: 0
 | |
| 	UINT32 junkSize;    //oft: 4
 | |
| 	UINT32 nidxCC;      //oft: 8
 | |
| 	UINT32 nidxSize;    //oft: c
 | |
| 	UINT32 timeID;      //oft: 10, this sec start framenumber
 | |
| 	UINT32 audstartFN;  //oft: 14, this sec start framenumber
 | |
| 	UINT32 audcodec;    //oft: 18
 | |
| 	UINT32 vidstartFN;  //oft: 1c, this sec start framenumber
 | |
| 	UINT32 lastjunkPos0; //oft: 20
 | |
| 	UINT32 lastjunkPos1; //oft: 24
 | |
| 	UINT32 videoWid;    //oft: 28
 | |
| 	UINT32 videoHei;    //oft: 2c
 | |
| 	UINT32 videoCodec;  //oft: 30
 | |
| 	UINT32 videoFR;     //oft: 34
 | |
| 	UINT32 audSR;       //oft: 38
 | |
| 	UINT32 audChs;      //oft: 3c
 | |
| 	UINT32 hdrSize;     //oft: 40
 | |
| 	UINT32 versionCode; //oft: 44
 | |
| 	UINT32 vidtotalFN;  //oft: 48, this sec total framenumber
 | |
| 	UINT32 vidPosArray;//array of (vidPos, vidSize)* vidtotalFN, oft:4c
 | |
| 	UINT32 audtotalFN;  //oft: 4c+vidFN*8
 | |
| 	UINT32 audPosArray;//array of (audPos, audSize)* audtotalFN, oft:50+vidFN*8
 | |
| 
 | |
| } MOV_2015_CO64_NIDXINFO;
 | |
| #define MP_MOV_NIDX_FIXEDSIZE       0x3C //before vidPosArray, not including junk (8bytes)
 | |
| #define MP_MOV_NIDXCO64_FIXEDSIZE   0x40 //before vidPosArray, not including junk (8bytes)
 | |
| 
 | |
| #define MP_MOV_2015NIDX_FIXEDSIZE   0x40 //before vidPosArray, not including junk (8bytes)
 | |
| #define MP_MOV_2015CO64NIDX_FIXEDSIZE   0x44 //before vidPosArray, not including junk (8bytes)
 | |
| //#NT#2012/09/11#Meg Lin -end
 | |
| 
 | |
| typedef struct {
 | |
| 	UINT32 ouputAddr;
 | |
| 	UINT32 makerLen;
 | |
| 	UINT32 modelLen;
 | |
| 	unsigned char *pMaker;
 | |
| 	unsigned char *pModel;
 | |
| } MOV_USER_MAKERINFO;
 | |
| 
 | |
| /*-----------------------------------------------------------------------------*/
 | |
| /* Extern Functions                                                            */
 | |
| /*-----------------------------------------------------------------------------*/
 | |
| typedef struct {
 | |
| 	UINT8               FrameResolution;
 | |
| 	UINT8               VideoQuality;
 | |
| 	UINT16              rev;
 | |
| 	UINT32              TimeResolution;
 | |
| 	UINT32              BufHeaderLen;
 | |
| 	UINT32              BufOffsetLen;
 | |
| 	UINT32              BufLen;
 | |
| 	UINT32              BufOffsetCnt;
 | |
| 	UINT32              DataPacketSize;//4K
 | |
| 
 | |
| 	UINT8               decVideoCodec;
 | |
| 	UINT8               decAudioCodec;
 | |
| 
 | |
| 	UINT8               encVideoCodec;
 | |
| 	UINT8               encAudioCodec;//MOVAUDENC_AAC
 | |
| 	UINT32              Preroll;
 | |
| 	UINT16              PacketPayloadType;
 | |
| 	UINT16              VideoFrameRate;
 | |
| 	UINT32              TotalAudioSampleCount;
 | |
| 	UINT16              AudioSampleRate;
 | |
| 	UINT16              AudioChannel;
 | |
| 	UINT32              AudioBitsPerSample;
 | |
| 	UINT32              AudioBitRate;
 | |
| 	UINT16              ImageWidth;             ///< [Out]     : mov Image Width
 | |
| 	UINT16              ImageHeight;            ///< [Out]     : mov Image Height
 | |
| 	UINT32              VideoPayloadSize;
 | |
| 	UINT32              AudioPayloadSize;
 | |
| 	UINT32              CreationDate;
 | |
| 	//UINT32              NowFilePos;
 | |
| 	UINT32              fileOffset;
 | |
| 	UINT32              audioFrameCount;
 | |
| 	UINT32              videoFrameCount;
 | |
| 	UINT64              totalMdatSize;
 | |
| 	UINT8               *ptempMoovBufAddr;
 | |
| 	UINT32              audioTotalSize;
 | |
| 	UINT64              IndexEntryTimeInterval; ///< [In/Out]  : Key frame Time Inerval
 | |
| 	UINT64              DataPacketsCount;
 | |
| 	UINT64              PlayDuration;
 | |
| 	UINT32              uiH264GopType;  // H.264 GOP type (Hideo@120322)
 | |
| 	UINT32              uiFileType;     // file type (Hideo@120626)
 | |
| 
 | |
| 	//add for recovery -begin
 | |
| 	UINT32              bufaddr;
 | |
| 	UINT32              bufsize;
 | |
| 	UINT64              recv_filesize; //filesize before recovery
 | |
| 	UINT32              clustersize;
 | |
| 	UINT32              hdr_revSize;//MEDIAREC_AVI_HDR//2012/10/22 Meg
 | |
| 	//add for recovery -end
 | |
| 	//#NT#2013/04/17#Calvin Chang#Support Rotation information in Mov/Mp4 File format -begin
 | |
| 	UINT32              uiVideoRotate;
 | |
| 	//#NT#2013/04/17#Calvin Chang -end
 | |
| 	//UINT64              FileSize;
 | |
| 	UINT32              uinidxversion;
 | |
| 	UINT32              uiTempHdrAdr;
 | |
| 	//add for front moov -begin
 | |
| 	UINT32              outMoovSize;
 | |
| 	UINT32              vidDescAdr;
 | |
| 	UINT32              vidDescSize;
 | |
| 	UINT32              shiftfrea;
 | |
| 	//add for front moov -end
 | |
| 	//add for sub-stream -begin
 | |
| 	UINT8               SubVideoTrackEn;
 | |
| 	UINT8               SubencVideoCodec;
 | |
| 	UINT16              SubVideoFrameRate;
 | |
| 	UINT16              SubImageWidth;
 | |
| 	UINT16              SubImageHeight;
 | |
| 	UINT32              SubvideoFrameCount;
 | |
| 	UINT64              SubPlayDuration;
 | |
| 	//add for sub-stream -end
 | |
| 	//add for recovery
 | |
| 	UINT32              rcvy_blksize;
 | |
| 	UINT16              max_vfr_cfg;
 | |
| 	UINT16              max_asr_cfg;
 | |
| 	UINT32              max_dur_cfg; // sec
 | |
| 	//add for recovery
 | |
| } MOVMJPG_FILEINFO;
 | |
| 
 | |
| typedef struct {
 | |
| 	UINT32 id;
 | |
| 	MOVMJPG_FILEINFO *pfileinfo;
 | |
| } MAKEMOOV_INFO;
 | |
| 
 | |
| extern UINT32 MOVWrite_UserMakerModelData(MOV_USER_MAKERINFO *pMaker);
 | |
| extern UINT32 MOVWrite_TransRoundVidFrameRate(UINT32 input);
 | |
| extern void   MOVRcvy_OpenMsg(UINT32 value);//2015/11/09
 | |
| extern void   MOV_EndFileWay(UINT32 value);
 | |
| extern void   mov_setConMakerId(UINT32 value);
 | |
| #endif//_MOVLIB_H
 | |
| 
 | |
| //@}
 | 
