9 #define NUMELMS(aa) (sizeof(aa)/sizeof((aa)[0]))
14 #define FCC(ch4) ((((DWORD)(ch4) & 0xFF) << 24) | (((DWORD)(ch4) & 0xFF00) << 8) | (((DWORD)(ch4) & 0xFF0000) >> 8) | (((DWORD)(ch4) & 0xFF000000) >> 24))
15 #define RIFFROUND(cb) ((cb) + ((cb)&1))
16 #define RIFFNEXT(pChunk) (LPRIFFCHUNK)((LPBYTE)(pChunk) + sizeof(RIFFCHUNK) + RIFFROUND(((LPRIFFCHUNK)pChunk)->cb))
17 #define TIMECODE_RATE_30DROP 0
18 #define TIMECODE_SMPTE_BINARY_GROUP 0x07
19 #define TIMECODE_SMPTE_COLOR_FRAME 0x08
20 #define AVI_INDEX_OF_INDEXES 0x00
21 #define AVI_INDEX_OF_CHUNKS 0x01
22 #define AVI_INDEX_OF_TIMED_CHUNKS 0x02
23 #define AVI_INDEX_OF_SUB_2FIELD 0x03
24 #define AVI_INDEX_IS_DATA 0x80
25 #define AVI_INDEX_SUB_DEFAULT 0x00
26 #define AVI_INDEX_SUB_2FIELD 0x01
27 #define STDINDEXSIZE 0x4000
28 #define NUMINDEX(wLongsPerEntry) ((STDINDEXSIZE-32)/4/(wLongsPerEntry))
29 #define NUMINDEXFILL(wLongsPerEntry) ((STDINDEXSIZE/4) - NUMINDEX(wLongsPerEntry))
30 #define Valid_SUPERINDEX(pi) (*(DWORD *)(&((pi)->wLongsPerEntry)) == (4 | (AVI_INDEX_OF_INDEXES << 24)))
31 #define AVISTDINDEX_DELTAFRAME ( 0x80000000)
32 #define AVISTDINDEX_SIZEMASK (~0x80000000)
34 #ifndef ckidSTREAMHEADER
35 #define ckidSTREAMHEADER FCC('strh')
38 #ifndef ckidSTREAMFORMAT
39 #define ckidSTREAMFORMAT FCC('strf')
42 #define ckidMAINAVIHEADER FCC('avih')
43 #define ckidODML FCC('odml')
44 #define ckidAVIEXTHEADER FCC('dmlh')
45 #define ckidSTREAMLIST FCC('strl')
46 #define ckidAVIOLDINDEX FCC('idx1')
47 #define ckidAVISUPERINDEX FCC('indx')
49 #ifndef TIMECODE_DEFINED
50 #define TIMECODE_DEFINED
51 typedef union _timecode
64 typedef struct _riffchunk
68 } RIFFCHUNK
, *LPRIFFCHUNK
;
70 typedef struct _rifflist
75 } RIFFLIST
, *LPRIFFLIST
;
77 typedef struct _avimainheader
81 DWORD dwMicroSecPerFrame
;
82 DWORD dwMaxBytesPerSec
;
83 DWORD dwPaddingGranularity
;
85 #define AVIF_HASINDEX 0x00000010
86 #define AVIF_MUSTUSEINDEX 0x00000020
87 #define AVIF_ISINTERLEAVED 0x00000100
88 #define AVIF_TRUSTCKTYPE 0x00000800
89 #define AVIF_WASCAPTUREFILE 0x00010000
90 #define AVIF_COPYRIGHTED 0x00020000
92 DWORD dwInitialFrames
;
94 DWORD dwSuggestedBufferSize
;
100 typedef struct _aviextheader
108 typedef struct _avistreamheader
113 #ifndef streamtypeVIDEO
114 #define streamtypeVIDEO FCC('vids')
115 #define streamtypeAUDIO FCC('auds')
116 #define streamtypeMIDI FCC('mids')
117 #define streamtypeTEXT FCC('txts')
122 #define AVISF_DISABLED 0x00000001
123 #define AVISF_VIDEO_PALCHANGES 0x00010000
127 DWORD dwInitialFrames
;
132 DWORD dwSuggestedBufferSize
;
144 #pragma warning(disable:4200)
146 typedef struct _avioldindex
150 struct _avioldindex_entry
156 #define AVIIF_LIST 0x00000001
157 #define AVIIF_KEYFRAME 0x00000010
160 #define AVIIF_NO_TIME 0x00000100
161 #define AVIIF_COMPRESSOR 0x0FFF0000
167 typedef struct _timecodedata
174 typedef struct _avimetaindex
188 typedef struct _avisuperindex
198 struct _avisuperindex_entry
203 } aIndex
[NUMINDEX(4)];
206 typedef struct _avistdindex_entry
212 typedef struct _avistdindex
221 DWORDLONG qwBaseOffset
;
223 AVISTDINDEX_ENTRY aIndex
[NUMINDEX(2)];
227 typedef struct _avitimedindex_entry
232 } AVITIMEDINDEX_ENTRY
;
234 typedef struct _avitimedindex
243 DWORDLONG qwBaseOffset
;
245 AVITIMEDINDEX_ENTRY aIndex
[NUMINDEX(3)];
246 DWORD adwTrailingFill
[NUMINDEXFILL(3)];
249 typedef struct _avitimecodeindex
259 TIMECODEDATA aIndex
[NUMINDEX(sizeof(TIMECODEDATA
)/sizeof(LONG
))];
263 typedef struct _avitcdlindex_entry
270 } AVITCDLINDEX_ENTRY
;
272 typedef struct _avitcdlindex
282 AVITCDLINDEX_ENTRY aIndex
[NUMINDEX(7)];
283 DWORD adwTrailingFill
[NUMINDEXFILL(7)];
286 typedef struct _avifieldindex_chunk
295 DWORDLONG qwBaseOffset
;
297 struct _avifieldindex_entry
301 DWORD dwOffsetField2
;
303 } AVIFIELDINDEX
, *PAVIFIELDINDEX
;