/** * This file is part of the mingw-w64 runtime package. * No warranty is given; refer to the file DISCLAIMER within this package. */ #include #ifndef AVIRIFF_H #define AVIRIFF_H #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) #ifndef NUMELMS #define NUMELMS (aa) (sizeof (aa) / sizeof ((aa)[0])) #endif #define FCC(ch4) ((((DWORD)(ch4) & 0xff) << 24) | (((DWORD)(ch4) & 0xff00) << 8) | (((DWORD)(ch4) & 0xff0000) >> 8) | (((DWORD)(ch4) & 0xff000000) >> 24)) #include typedef struct _riffchunk { FOURCC fcc; DWORD cb; } RIFFCHUNK,*LPRIFFCHUNK; typedef struct _rifflist { FOURCC fcc; DWORD cb; FOURCC fccListType; } RIFFLIST,*LPRIFFLIST; #define RIFFROUND(cb) ((cb) + ((cb) & 1)) #define RIFFNEXT(pChunk) (LPRIFFCHUNK) ((LPBYTE) (pChunk) + sizeof (RIFFCHUNK) + RIFFROUND (((LPRIFFCHUNK)pChunk)->cb)) #define ckidMAINAVIHEADER FCC('avih') #define ckidAVIEXTHEADER FCC('dmlh') #define ckidAVIOLDINDEX FCC('idx1') #define ckidAVISUPERINDEX FCC('indx') #define ckidODML FCC('odml') #ifndef ckidSTREAMFORMAT #define ckidSTREAMFORMAT FCC('strf') #endif #ifndef ckidSTREAMHEADER #define ckidSTREAMHEADER FCC('strh') #endif #define ckidSTREAMLIST FCC('strl') #ifndef streamtypeVIDEO #define streamtypeAUDIO FCC('auds') #define streamtypeMIDI FCC('mids') #define streamtypeTEXT FCC('txts') #define streamtypeVIDEO FCC('vids') #endif #define AVIF_HASINDEX 0x00000010 #define AVIF_MUSTUSEINDEX 0x00000020 #define AVIF_ISINTERLEAVED 0x00000100 #define AVIF_TRUSTCKTYPE 0x00000800 #define AVIF_WASCAPTUREFILE 0x00010000 #define AVIF_COPYRIGHTED 0x00020000 #ifndef AVIIF_LIST #define AVIIF_LIST 0x1 #define AVIIF_KEYFRAME 0x10 #endif #define AVIIF_NO_TIME 0x100 #define AVIIF_COMPRESSOR 0xfff0000 #define AVISF_DISABLED 0x00000001 #define AVISF_VIDEO_PALCHANGES 0x00010000 #define TIMECODE_RATE_30DROP 0 #define TIMECODE_SMPTE_BINARY_GROUP 0x7 #define TIMECODE_SMPTE_COLOR_FRAME 0x8 #define AVI_INDEX_OF_INDEXES 0x0 #define AVI_INDEX_OF_CHUNKS 0x1 #define AVI_INDEX_OF_TIMED_CHUNKS 0x2 #define AVI_INDEX_OF_SUB_2FIELD 0x3 #define AVI_INDEX_IS_DATA 0x80 #define AVI_INDEX_SUB_DEFAULT 0x0 #define AVI_INDEX_SUB_2FIELD 0x1 #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) typedef struct _avimainheader { FOURCC fcc; DWORD cb; DWORD dwMicroSecPerFrame; DWORD dwMaxBytesPerSec; DWORD dwPaddingGranularity; DWORD dwFlags; 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; FOURCC fccHandler; DWORD dwFlags; 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; typedef struct _avioldindex { FOURCC fcc; DWORD cb; struct _avioldindex_entry { DWORD dwChunkId; DWORD dwFlags; DWORD dwOffset; DWORD dwSize; } aIndex[]; } AVIOLDINDEX; #ifndef TIMECODE_DEFINED #define TIMECODE_DEFINED typedef union _timecode { __C89_NAMELESS struct { WORD wFrameRate; WORD wFrameFract; LONG cFrames; }; DWORDLONG qw; } TIMECODE; #endif 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; #define AVISTDINDEX_DELTAFRAME (0x80000000) #define AVISTDINDEX_SIZEMASK (~0x80000000) 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 #endif