Create a branch for network fixes.
[reactos.git] / include / dxsdk / aviriff.h
1
2
3
4
5 #if !defined AVIRIFF_H
6 #define AVIRIFF_H
7
8 #if !defined NUMELMS
9 #define NUMELMS(aa) (sizeof(aa)/sizeof((aa)[0]))
10 #endif
11
12 #include <pshpack2.h>
13
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)
33
34 #ifndef ckidSTREAMHEADER
35 #define ckidSTREAMHEADER FCC('strh')
36 #endif
37
38 #ifndef ckidSTREAMFORMAT
39 #define ckidSTREAMFORMAT FCC('strf')
40 #endif
41
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')
48
49 #ifndef TIMECODE_DEFINED
50 #define TIMECODE_DEFINED
51 typedef union _timecode
52 {
53 struct
54 {
55 WORD wFrameRate;
56 WORD wFrameFract;
57 LONG cFrames;
58 };
59 DWORDLONG qw;
60 } TIMECODE;
61 #endif
62
63
64 typedef struct _riffchunk
65 {
66 FOURCC fcc;
67 DWORD cb;
68 } RIFFCHUNK, *LPRIFFCHUNK;
69
70 typedef struct _rifflist
71 {
72 FOURCC fcc;
73 DWORD cb;
74 FOURCC fccListType;
75 } RIFFLIST, *LPRIFFLIST;
76
77 typedef struct _avimainheader
78 {
79 FOURCC fcc;
80 DWORD cb;
81 DWORD dwMicroSecPerFrame;
82 DWORD dwMaxBytesPerSec;
83 DWORD dwPaddingGranularity;
84 DWORD dwFlags;
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
91 DWORD dwTotalFrames;
92 DWORD dwInitialFrames;
93 DWORD dwStreams;
94 DWORD dwSuggestedBufferSize;
95 DWORD dwWidth;
96 DWORD dwHeight;
97 DWORD dwReserved[4];
98 } AVIMAINHEADER;
99
100 typedef struct _aviextheader
101 {
102 FOURCC fcc;
103 DWORD cb;
104 DWORD dwGrandFrames;
105 DWORD dwFuture[61];
106 } AVIEXTHEADER;
107
108 typedef struct _avistreamheader
109 {
110 FOURCC fcc;
111 DWORD cb;
112 FOURCC fccType;
113 #ifndef streamtypeVIDEO
114 #define streamtypeVIDEO FCC('vids')
115 #define streamtypeAUDIO FCC('auds')
116 #define streamtypeMIDI FCC('mids')
117 #define streamtypeTEXT FCC('txts')
118 #endif
119
120 FOURCC fccHandler;
121 DWORD dwFlags;
122 #define AVISF_DISABLED 0x00000001
123 #define AVISF_VIDEO_PALCHANGES 0x00010000
124
125 WORD wPriority;
126 WORD wLanguage;
127 DWORD dwInitialFrames;
128 DWORD dwScale;
129 DWORD dwRate;
130 DWORD dwStart;
131 DWORD dwLength;
132 DWORD dwSuggestedBufferSize;
133 DWORD dwQuality;
134 DWORD dwSampleSize;
135 struct
136 {
137 short int left;
138 short int top;
139 short int right;
140 short int bottom;
141 } rcFrame;
142 } AVISTREAMHEADER;
143
144 #pragma warning(disable:4200)
145
146 typedef struct _avioldindex
147 {
148 FOURCC fcc;
149 DWORD cb;
150 struct _avioldindex_entry
151 {
152 DWORD dwChunkId;
153 DWORD dwFlags;
154
155 #ifndef AVIIF_LIST
156 #define AVIIF_LIST 0x00000001
157 #define AVIIF_KEYFRAME 0x00000010
158 #endif
159
160 #define AVIIF_NO_TIME 0x00000100
161 #define AVIIF_COMPRESSOR 0x0FFF0000
162 DWORD dwOffset;
163 DWORD dwSize;
164 } aIndex[];
165 } AVIOLDINDEX;
166
167 typedef struct _timecodedata
168 {
169 TIMECODE time;
170 DWORD dwSMPTEflags;
171 DWORD dwUser;
172 } TIMECODEDATA;
173
174 typedef struct _avimetaindex
175 {
176 FOURCC fcc;
177 UINT cb;
178 WORD wLongsPerEntry;
179 BYTE bIndexSubType;
180 BYTE bIndexType;
181 DWORD nEntriesInUse;
182 DWORD dwChunkId;
183 DWORD dwReserved[3];
184 DWORD adwIndex[];
185 } AVIMETAINDEX;
186
187
188 typedef struct _avisuperindex
189 {
190 FOURCC fcc;
191 UINT cb;
192 WORD wLongsPerEntry;
193 BYTE bIndexSubType;
194 BYTE bIndexType;
195 DWORD nEntriesInUse;
196 DWORD dwChunkId;
197 DWORD dwReserved[3];
198 struct _avisuperindex_entry
199 {
200 DWORDLONG qwOffset;
201 DWORD dwSize;
202 DWORD dwDuration;
203 } aIndex[NUMINDEX(4)];
204 } AVISUPERINDEX;
205
206 typedef struct _avistdindex_entry
207 {
208 DWORD dwOffset;
209 DWORD dwSize;
210 } AVISTDINDEX_ENTRY;
211
212 typedef struct _avistdindex
213 {
214 FOURCC fcc;
215 UINT cb;
216 WORD wLongsPerEntry;
217 BYTE bIndexSubType;
218 BYTE bIndexType;
219 DWORD nEntriesInUse;
220 DWORD dwChunkId;
221 DWORDLONG qwBaseOffset;
222 DWORD dwReserved_3;
223 AVISTDINDEX_ENTRY aIndex[NUMINDEX(2)];
224 } AVISTDINDEX;
225
226
227 typedef struct _avitimedindex_entry
228 {
229 DWORD dwOffset;
230 DWORD dwSize;
231 DWORD dwDuration;
232 } AVITIMEDINDEX_ENTRY;
233
234 typedef struct _avitimedindex
235 {
236 FOURCC fcc;
237 UINT cb;
238 WORD wLongsPerEntry;
239 BYTE bIndexSubType;
240 BYTE bIndexType;
241 DWORD nEntriesInUse;
242 DWORD dwChunkId;
243 DWORDLONG qwBaseOffset;
244 DWORD dwReserved_3;
245 AVITIMEDINDEX_ENTRY aIndex[NUMINDEX(3)];
246 DWORD adwTrailingFill[NUMINDEXFILL(3)];
247 } AVITIMEDINDEX;
248
249 typedef struct _avitimecodeindex
250 {
251 FOURCC fcc;
252 UINT cb;
253 WORD wLongsPerEntry;
254 BYTE bIndexSubType;
255 BYTE bIndexType;
256 DWORD nEntriesInUse;
257 DWORD dwChunkId;
258 DWORD dwReserved[3];
259 TIMECODEDATA aIndex[NUMINDEX(sizeof(TIMECODEDATA)/sizeof(LONG))];
260 } AVITIMECODEINDEX;
261
262
263 typedef struct _avitcdlindex_entry
264 {
265 DWORD dwTick;
266 TIMECODE time;
267 DWORD dwSMPTEflags;
268 DWORD dwUser;
269 TCHAR szReelId[12];
270 } AVITCDLINDEX_ENTRY;
271
272 typedef struct _avitcdlindex
273 {
274 FOURCC fcc;
275 UINT cb;
276 WORD wLongsPerEntry;
277 BYTE bIndexSubType;
278 BYTE bIndexType;
279 DWORD nEntriesInUse;
280 DWORD dwChunkId;
281 DWORD dwReserved[3];
282 AVITCDLINDEX_ENTRY aIndex[NUMINDEX(7)];
283 DWORD adwTrailingFill[NUMINDEXFILL(7)];
284 } AVITCDLINDEX;
285
286 typedef struct _avifieldindex_chunk
287 {
288 FOURCC fcc;
289 DWORD cb;
290 WORD wLongsPerEntry;
291 BYTE bIndexSubType;
292 BYTE bIndexType;
293 DWORD nEntriesInUse;
294 DWORD dwChunkId;
295 DWORDLONG qwBaseOffset;
296 DWORD dwReserved3;
297 struct _avifieldindex_entry
298 {
299 DWORD dwOffset;
300 DWORD dwSize;
301 DWORD dwOffsetField2;
302 } aIndex[];
303 } AVIFIELDINDEX, *PAVIFIELDINDEX;
304
305 #include <poppack.h>
306
307 #endif