/** Header file of media fileformat reading library Exported header file of media fileformat reading library. @file AVFile_ParserTs.h @ingroup mIMEDIAREAD @note Nothing. Copyright Novatek Microelectronics Corp. 2012. All rights reserved. */ #if defined (__UITRON) || defined (__ECOS) #include "Type.h" #include "MediaReadLib.h" #else #include "kwrap/type.h" #include "avfile/MediaReadLib.h" #endif #ifndef _AVFILE_PARSERTS_H #define _AVFILE_PARSERTS_H #define TS_CHECK_COUNT 10 #define TS_PACKET_SIZE 188 #define TS_VID_PESHEADER_LENGTH 14 // length of pes header #define TS_AUD_PESHEADER_LENGTH 14 #define TS_VID_SPSPPS_LENGTH 33 #define TS_VID_264_NAL_LENGTH 6 // length of nal (0x00 00 00 01 09 10) #define TS_VID_265_NAL_LENGTH 7 // length of nal (0x00 00 00 01 46 01 10) #define TS_AUD_ADTS_LENGTH 7 /* pids */ #define PAT_PID 0x0000 #define TS_GPS_PID 768 #define TS_THUMBNAIL_PID 769 /* table ids */ #define PAT_TID 0x00 #define PMT_TID 0x02 /* filter amount */ #define FILTER_NUM 5 #define TSVID_ENTRY_SIZE 18000 #define TSAUD_ENTRY_SIZE 18000 enum MpegTSFilterType { MPEGTS_PES, MPEGTS_SECTION, MPEGTS_PCR, }; typedef enum { PESTYPE_NONE, PESTYPE_AUDIO, PESTYPE_VIDEO, } CurPesType; typedef enum { SEEKRESULT_AHEAD, SEEKRESULT_BEHIND, SEEKRESULT_ONEMORE, } SeekResult; /** MPEG-4 Sampling Frequency Index (please see ADTS Header) */ typedef enum _AVFILE_TS_SAMPLEFREQ { SAMPLEFREQ_96000 = 0, SAMPLEFREQ_88200 = 1, SAMPLEFREQ_64000 = 2, SAMPLEFREQ_48000 = 3, SAMPLEFREQ_44100 = 4, SAMPLEFREQ_32000 = 5, SAMPLEFREQ_24000 = 6, SAMPLEFREQ_22050 = 7, SAMPLEFREQ_16000 = 8, SAMPLEFREQ_12000 = 9, SAMPLEFREQ_11025 = 10, SAMPLEFREQ_8000 = 11, SAMPLEFREQ_7350 = 12, SAMPLEFREQ_Resv1 = 13, SAMPLEFREQ_Resv2 = 14, SAMPLEFREQ_FORBIDDEN = 15, } AVFILE_TS_SAMPLEFREQ; typedef struct _MpegTSFilter { UINT32 pid; UINT32 es_id; UINT32 last_cc; /* last cc code (-1 if first packet) */ UINT32 program_number; UINT64 last_pcr; enum MpegTSFilterType type; //union { // MpegTSPESFilter pes_filter; // MpegTSSectionFilter section_filter; //} u; } MpegTSFilter; typedef struct _TsFilterManager { MpegTSFilter vidFilter; MpegTSFilter audFilter; MpegTSFilter patFilter; MpegTSFilter pmtFilter; MpegTSFilter pcrFilter; } TsFilterManager; typedef struct _TsPlayInfo { UINT64 pcrValue; UINT64 pcrStartValue; UINT64 pcrEndValue; UINT64 firstPts; UINT64 lastPts; UINT32 totalMs; UINT32 totalVidFrame; UINT32 vidWidth; UINT32 vidHeight; UINT32 vidTkWidth; UINT32 vidTkHeight; UINT32 demuxAddr; UINT32 vidFPS; UINT32 audFrmIndex; UINT32 audFrameSize; UINT32 audSampleRate; UINT32 audChannel; UINT32 vidFrmIndex; UINT32 vidFrameSize; UINT32 gopNumber; UINT32 thumbAddr; UINT32 thumbSize; UINT32 keyFrameDist; UINT32 vidCodecType; UINT32 audCodecType; UINT32 vidNalLength; UINT16 h264VidDescLen; _ALIGNED(32) unsigned char h264VidDesc[0xB0]; CurPesType currentPesType; BOOL demuxFinished; } TsPlayInfo; typedef struct _NAL_INFO { UINT32 width; UINT32 height; } NAL_INFO; typedef struct { UINT32 memAddr; UINT32 size; UINT16 key_frame; UINT32 frameIdx; } TS_FRAME_ENTRY; typedef struct { UINT8 data[188]; UINT32 pid; UINT32 splitted1stHalfSize; } SPLITTED_TS_PACKET; typedef struct { UINT64 targetPts; UINT64 diff; SeekResult result; } TS_SEEK_INFO; /** @addtogroup mIMEDIAREAD */ //@{ /** @name Media File Container Function Instances */ //@{ /** Get media TS file container structure Get media file container function structure. @return CONTAINERPARSER pointer */ extern CONTAINERPARSER *MP_TsReadLib_GerFormatParser(void); extern ER TsReadLib_ConfigFilters(UINT32 addr, UINT32 size); extern ER TsReadLib_ParsePAT(UINT8 *data); extern ER TsReadLib_ParsePMT(UINT8 *data); extern ER TsReadLib_ParseADTS(UINT8 *data); extern ER TsReadLib_ParseStuffing(UINT8 *data, UINT32 *size); extern UINT64 TsReadLib_ParsePCR(UINT8 *data); extern UINT64 TsReadLib_ParsePTS(UINT8 *data); extern BOOL TsReadLib_AESDECRYP2(UINT8 *PlanText,UINT8 *uiKey,UINT8 *CypherText); extern ER TsReadLib_Decrypt(UINT32 addr, UINT32 size); extern INT32 TsReadLib_IsDecrypt(void); extern ER TsReadLib_SetDecryptKey(UINT8 *key); extern ER TsReadLib_DemuxTsStream(UINT32 srcAddr, UINT32 readSize, UINT32 dstAddr, UINT32 *usedSize); extern ER TsReadLib_Parse1stVideo(UINT32 hdrAddr, UINT32 hdrSize, void *pobj); extern ER TsReadLib_SaveFrameSize2Table(void); extern void TsReadLib_SaveIncompletePacketInfo(UINT32 remainLength, UINT8 *data); extern void TsReadLib_SaveIncompleteFrameInfo(void); extern void TsReadLib_RecoverFrame(UINT8 *data, UINT32 dstAddr, UINT32 *buff_offset); extern void TsReadLib_RecoverTsPacket(UINT8 *data, UINT32 dstAddr, UINT32 *buff_offset, UINT32 splitted2ndHalfSize); extern void TsReadLib_ClearFrameEntry(void); extern BOOL TsReadLib_DemuxFinished(void); extern void TsReadLib_setDemuxFinished(BOOL finished); extern void TsReadLib_registerTSDemuxCallback(void (*demuxCB)(UINT32, UINT32)); extern void TsReadLib_ParseEndInfo(UINT32 srcAddr, UINT32 readSize); extern void TsReadLib_PrepareSeek(UINT32 vidIdx, UINT32 audIdx); extern UINT32 TsReadLib_SeekTsStream(UINT32 srcAddr, UINT32 readSize, UINT64 targetPts); extern void TsReadLib_ParseThumbInfo(UINT32 srcAddr, UINT32 readSize, UINT32 dstAddr); extern UINT32 TsReadLib_GetNextIFrame(UINT32 uiFrmIdx, UINT32 uiSkipI); extern ER TsReadLib_SearchIFrame(UINT32 srcAddr, UINT32 srcSize, UINT32 dstAddr, UINT32 *dstSize, UINT32 *direction); //extern ER TsReadLib_ParseNextIFrame(); // [TestSkip] /** Parse Thumbnail Information Parse Thumbnail Information @param[in] hdrAddr not used. @param[in] hdrSize not used. @param[in] pobj MEDIA_FIRST_INFO object @return ER */ //extern ER MovReadLib_ParseThumbnail(UINT32 hdrAddr, UINT32 hdrSize, void *pobj); /** Parse Video Information Parse Video Information @param[in] hdrAddr not used. @param[in] hdrSize not used. @param[in] pobj MEDIA_FIRST_INFO object @return ER */ //extern ER MovReadLib_ParseVideoInfo(UINT32 hdrAddr, UINT32 hdrSize, void *pobj); /** Register Callback function Register callback function for file read and output message. @param[out] pobj CONTAINERPARSER object. @return ER */ extern ER TsReadLib_RegisterObjCB(void *pobj);//pContainer = (CONTAINERPARSER *)pobj; //-------------------------------------- nal parser -------------------------------------- extern INT32 TsReadLib_ReadBit(void); extern INT32 TsReadLib_ReadBits(INT32 n); extern void TsReadLib_SkipBit(UINT32 num); extern INT32 TsReadLib_ReadExpGolCode(void); extern void TsReadLib_SkipExpGolCode(void); extern INT32 TsReadLib_ReadSE(void); extern void TsReadLib_SkipSE(void); extern void TsReadLib_ParseH264(const unsigned char *pStart, unsigned short nLen); extern UINT32 TsReadLib_ebspTorbsp(UINT8 *pucAddr, UINT8 *pucBuf, UINT32 uiTotalBytes); extern void TsReadLib_PTL(UINT32 sps_max_sub_layers_minus1); extern void TsReadLib_ParseH265(const unsigned char *pStart, unsigned short nLen); #endif //_AVFILE_PARSERTS_H