diff --git a/reactos/include/dxsdk/aviriff.h b/reactos/include/dxsdk/aviriff.h new file mode 100644 index 00000000000..caf00007cf9 --- /dev/null +++ b/reactos/include/dxsdk/aviriff.h @@ -0,0 +1,307 @@ + + + + +#if !defined AVIRIFF_H +#define AVIRIFF_H + +#if !defined NUMELMS + #define NUMELMS(aa) (sizeof(aa)/sizeof((aa)[0])) +#endif + +#include + +#define FCC(ch4) ((((DWORD)(ch4) & 0xFF) << 24) | (((DWORD)(ch4) & 0xFF00) << 8) | (((DWORD)(ch4) & 0xFF0000) >> 8) | (((DWORD)(ch4) & 0xFF000000) >> 24)) +#define RIFFROUND(cb) ((cb) + ((cb)&1)) +#define RIFFNEXT(pChunk) (LPRIFFCHUNK)((LPBYTE)(pChunk) + sizeof(RIFFCHUNK) + RIFFROUND(((LPRIFFCHUNK)pChunk)->cb)) +#define TIMECODE_RATE_30DROP 0 +#define TIMECODE_SMPTE_BINARY_GROUP 0x07 +#define TIMECODE_SMPTE_COLOR_FRAME 0x08 +#define AVI_INDEX_OF_INDEXES 0x00 +#define AVI_INDEX_OF_CHUNKS 0x01 +#define AVI_INDEX_OF_TIMED_CHUNKS 0x02 +#define AVI_INDEX_OF_SUB_2FIELD 0x03 +#define AVI_INDEX_IS_DATA 0x80 +#define AVI_INDEX_SUB_DEFAULT 0x00 +#define AVI_INDEX_SUB_2FIELD 0x01 +#define STDINDEXSIZE 0x4000 +#define NUMINDEX(wLongsPerEntry) ((STDINDEXSIZE-32)/4/(wLongsPerEntry)) +#define NUMINDEXFILL(wLongsPerEntry) ((STDINDEXSIZE/4) - NUMINDEX(wLongsPerEntry)) +#define Valid_SUPERINDEX(pi) (*(DWORD *)(&((pi)->wLongsPerEntry)) == (4 | (AVI_INDEX_OF_INDEXES << 24))) +#define AVISTDINDEX_DELTAFRAME ( 0x80000000) +#define AVISTDINDEX_SIZEMASK (~0x80000000) + +#ifndef ckidSTREAMHEADER + #define ckidSTREAMHEADER FCC('strh') +#endif + +#ifndef ckidSTREAMFORMAT + #define ckidSTREAMFORMAT FCC('strf') +#endif + +#define ckidMAINAVIHEADER FCC('avih') +#define ckidODML FCC('odml') +#define ckidAVIEXTHEADER FCC('dmlh') +#define ckidSTREAMLIST FCC('strl') +#define ckidAVIOLDINDEX FCC('idx1') +#define ckidAVISUPERINDEX FCC('indx') + +#ifndef TIMECODE_DEFINED +#define TIMECODE_DEFINED + typedef union _timecode + { + struct + { + WORD wFrameRate; + WORD wFrameFract; + LONG cFrames; + }; + DWORDLONG qw; + } TIMECODE; +#endif + + +typedef struct _riffchunk +{ + FOURCC fcc; + DWORD cb; + } RIFFCHUNK, *LPRIFFCHUNK; + +typedef struct _rifflist +{ + FOURCC fcc; + DWORD cb; + FOURCC fccListType; +} RIFFLIST, *LPRIFFLIST; + +typedef struct _avimainheader +{ + FOURCC fcc; + DWORD cb; + DWORD dwMicroSecPerFrame; + DWORD dwMaxBytesPerSec; + DWORD dwPaddingGranularity; + DWORD dwFlags; + #define AVIF_HASINDEX 0x00000010 + #define AVIF_MUSTUSEINDEX 0x00000020 + #define AVIF_ISINTERLEAVED 0x00000100 + #define AVIF_TRUSTCKTYPE 0x00000800 + #define AVIF_WASCAPTUREFILE 0x00010000 + #define AVIF_COPYRIGHTED 0x00020000 + DWORD dwTotalFrames; + DWORD dwInitialFrames; + DWORD dwStreams; + DWORD dwSuggestedBufferSize; + DWORD dwWidth; + DWORD dwHeight; + DWORD dwReserved[4]; +} AVIMAINHEADER; + +typedef struct _aviextheader +{ + FOURCC fcc; + DWORD cb; + DWORD dwGrandFrames; + DWORD dwFuture[61]; +} AVIEXTHEADER; + +typedef struct _avistreamheader +{ + FOURCC fcc; + DWORD cb; + FOURCC fccType; + #ifndef streamtypeVIDEO + #define streamtypeVIDEO FCC('vids') + #define streamtypeAUDIO FCC('auds') + #define streamtypeMIDI FCC('mids') + #define streamtypeTEXT FCC('txts') + #endif + + FOURCC fccHandler; + DWORD dwFlags; + #define AVISF_DISABLED 0x00000001 + #define AVISF_VIDEO_PALCHANGES 0x00010000 + + WORD wPriority; + WORD wLanguage; + DWORD dwInitialFrames; + DWORD dwScale; + DWORD dwRate; + DWORD dwStart; + DWORD dwLength; + DWORD dwSuggestedBufferSize; + DWORD dwQuality; + DWORD dwSampleSize; + struct + { + short int left; + short int top; + short int right; + short int bottom; + } rcFrame; +} AVISTREAMHEADER; + +#pragma warning(disable:4200) + +typedef struct _avioldindex +{ + FOURCC fcc; + DWORD cb; + struct _avioldindex_entry + { + DWORD dwChunkId; + DWORD dwFlags; + + #ifndef AVIIF_LIST + #define AVIIF_LIST 0x00000001 + #define AVIIF_KEYFRAME 0x00000010 + #endif + + #define AVIIF_NO_TIME 0x00000100 + #define AVIIF_COMPRESSOR 0x0FFF0000 + DWORD dwOffset; + DWORD dwSize; + } aIndex[]; +} AVIOLDINDEX; + +typedef struct _timecodedata +{ + TIMECODE time; + DWORD dwSMPTEflags; + DWORD dwUser; +} TIMECODEDATA; + +typedef struct _avimetaindex +{ + FOURCC fcc; + UINT cb; + WORD wLongsPerEntry; + BYTE bIndexSubType; + BYTE bIndexType; + DWORD nEntriesInUse; + DWORD dwChunkId; + DWORD dwReserved[3]; + DWORD adwIndex[]; +} AVIMETAINDEX; + + +typedef struct _avisuperindex +{ + FOURCC fcc; + UINT cb; + WORD wLongsPerEntry; + BYTE bIndexSubType; + BYTE bIndexType; + DWORD nEntriesInUse; + DWORD dwChunkId; + DWORD dwReserved[3]; + struct _avisuperindex_entry + { + DWORDLONG qwOffset; + DWORD dwSize; + DWORD dwDuration; + } aIndex[NUMINDEX(4)]; +} AVISUPERINDEX; + +typedef struct _avistdindex_entry +{ + DWORD dwOffset; + DWORD dwSize; +} AVISTDINDEX_ENTRY; + +typedef struct _avistdindex +{ + FOURCC fcc; + UINT cb; + WORD wLongsPerEntry; + BYTE bIndexSubType; + BYTE bIndexType; + DWORD nEntriesInUse; + DWORD dwChunkId; + DWORDLONG qwBaseOffset; + DWORD dwReserved_3; + AVISTDINDEX_ENTRY aIndex[NUMINDEX(2)]; +} AVISTDINDEX; + + +typedef struct _avitimedindex_entry +{ + DWORD dwOffset; + DWORD dwSize; + DWORD dwDuration; +} AVITIMEDINDEX_ENTRY; + +typedef struct _avitimedindex +{ + FOURCC fcc; + UINT cb; + WORD wLongsPerEntry; + BYTE bIndexSubType; + BYTE bIndexType; + DWORD nEntriesInUse; + DWORD dwChunkId; + DWORDLONG qwBaseOffset; + DWORD dwReserved_3; + AVITIMEDINDEX_ENTRY aIndex[NUMINDEX(3)]; + DWORD adwTrailingFill[NUMINDEXFILL(3)]; +} AVITIMEDINDEX; + +typedef struct _avitimecodeindex +{ + FOURCC fcc; + UINT cb; + WORD wLongsPerEntry; + BYTE bIndexSubType; + BYTE bIndexType; + DWORD nEntriesInUse; + DWORD dwChunkId; + DWORD dwReserved[3]; + TIMECODEDATA aIndex[NUMINDEX(sizeof(TIMECODEDATA)/sizeof(LONG))]; +} AVITIMECODEINDEX; + + +typedef struct _avitcdlindex_entry +{ + DWORD dwTick; + TIMECODE time; + DWORD dwSMPTEflags; + DWORD dwUser; + TCHAR szReelId[12]; +} AVITCDLINDEX_ENTRY; + +typedef struct _avitcdlindex +{ + FOURCC fcc; + UINT cb; + WORD wLongsPerEntry; + BYTE bIndexSubType; + BYTE bIndexType; + DWORD nEntriesInUse; + DWORD dwChunkId; + DWORD dwReserved[3]; + AVITCDLINDEX_ENTRY aIndex[NUMINDEX(7)]; + DWORD adwTrailingFill[NUMINDEXFILL(7)]; +} AVITCDLINDEX; + +typedef struct _avifieldindex_chunk +{ + FOURCC fcc; + DWORD cb; + WORD wLongsPerEntry; + BYTE bIndexSubType; + BYTE bIndexType; + DWORD nEntriesInUse; + DWORD dwChunkId; + DWORDLONG qwBaseOffset; + DWORD dwReserved3; + struct _avifieldindex_entry + { + DWORD dwOffset; + DWORD dwSize; + DWORD dwOffsetField2; + } aIndex[]; +} AVIFIELDINDEX, *PAVIFIELDINDEX; + +#include + +#endif \ No newline at end of file