1 /**
2  * This file has no copyright assigned and is placed in the Public Domain.
3  * This file is part of the mingw-w64 runtime package.
4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5  */
6 #ifndef _INC_VFW
7 #define _INC_VFW
8 
9 #include <_mingw_unicode.h>
10 
11 #ifdef __cplusplus
12 extern "C" {
13 #endif
14 
15 #define VFWAPI WINAPI
16 #define VFWAPIV WINAPIV
17 #define VFWAPI_INLINE WINAPI
18 
19   DWORD WINAPI VideoForWindowsVersion(void);
20   LONG WINAPI InitVFW(void);
21   LONG WINAPI TermVFW(void);
22 
23 #ifdef __cplusplus
24 }
25 #endif
26 
27 #if !defined(_INC_MMSYSTEM) && (!defined(NOVIDEO) || !defined(NOAVICAP))
28 #include <mmsystem.h>
29 #endif
30 
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34 
35 #ifndef MKFOURCC
36 #define MKFOURCC(ch0,ch1,ch2,ch3) ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24))
37 #endif
38 
39 #if !defined(_INC_MMSYSTEM)
40 #define mmioFOURCC MKFOURCC
41 #endif
42 
43 #ifndef NOCOMPMAN
44 
45 #define ICVERSION 0x0104
46 
47   DECLARE_HANDLE(HIC);
48 
49 #define BI_1632 0x32333631
50 
51 #ifndef mmioFOURCC
52 #define mmioFOURCC(ch0,ch1,ch2,ch3) ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24))
53 #endif
54 
55 #ifndef aviTWOCC
56 #define aviTWOCC(ch0,ch1) ((WORD)(BYTE)(ch0) | ((WORD)(BYTE)(ch1) << 8))
57 #endif
58 
59 #ifndef ICTYPE_VIDEO
60 #define ICTYPE_VIDEO mmioFOURCC('v','i','d','c')
61 #define ICTYPE_AUDIO mmioFOURCC('a','u','d','c')
62 #endif
63 
64 #ifndef ICERR_OK
65 #define ICERR_OK __MSABI_LONG(0)
66 #define ICERR_DONTDRAW __MSABI_LONG(1)
67 #define ICERR_NEWPALETTE __MSABI_LONG(2)
68 #define ICERR_GOTOKEYFRAME __MSABI_LONG(3)
69 #define ICERR_STOPDRAWING __MSABI_LONG(4)
70 
71 #define ICERR_UNSUPPORTED __MSABI_LONG(-1)
72 #define ICERR_BADFORMAT __MSABI_LONG(-2)
73 #define ICERR_MEMORY __MSABI_LONG(-3)
74 #define ICERR_INTERNAL __MSABI_LONG(-4)
75 #define ICERR_BADFLAGS __MSABI_LONG(-5)
76 #define ICERR_BADPARAM __MSABI_LONG(-6)
77 #define ICERR_BADSIZE __MSABI_LONG(-7)
78 #define ICERR_BADHANDLE __MSABI_LONG(-8)
79 #define ICERR_CANTUPDATE __MSABI_LONG(-9)
80 #define ICERR_ABORT __MSABI_LONG(-10)
81 #define ICERR_ERROR __MSABI_LONG(-100)
82 #define ICERR_BADBITDEPTH __MSABI_LONG(-200)
83 #define ICERR_BADIMAGESIZE __MSABI_LONG(-201)
84 
85 #define ICERR_CUSTOM __MSABI_LONG(-400)
86 #endif
87 
88 #ifndef ICMODE_COMPRESS
89 #define ICMODE_COMPRESS 1
90 #define ICMODE_DECOMPRESS 2
91 #define ICMODE_FASTDECOMPRESS 3
92 #define ICMODE_QUERY 4
93 #define ICMODE_FASTCOMPRESS 5
94 #define ICMODE_DRAW 8
95 #endif
96 
97 #define AVIIF_LIST __MSABI_LONG(0x00000001)
98 #define AVIIF_TWOCC __MSABI_LONG(0x00000002)
99 #define AVIIF_KEYFRAME __MSABI_LONG(0x00000010)
100 
101 #define ICQUALITY_LOW 0
102 #define ICQUALITY_HIGH 10000
103 #define ICQUALITY_DEFAULT -1
104 
105 #define ICM_USER (DRV_USER+0x0000)
106 
107 #define ICM_RESERVED ICM_RESERVED_LOW
108 #define ICM_RESERVED_LOW (DRV_USER+0x1000)
109 #define ICM_RESERVED_HIGH (DRV_USER+0x2000)
110 
111 #define ICM_GETSTATE (ICM_RESERVED+0)
112 #define ICM_SETSTATE (ICM_RESERVED+1)
113 #define ICM_GETINFO (ICM_RESERVED+2)
114 
115 #define ICM_CONFIGURE (ICM_RESERVED+10)
116 #define ICM_ABOUT (ICM_RESERVED+11)
117 
118 #define ICM_GETERRORTEXT (ICM_RESERVED+12)
119 #define ICM_GETFORMATNAME (ICM_RESERVED+20)
120 #define ICM_ENUMFORMATS (ICM_RESERVED+21)
121 
122 #define ICM_GETDEFAULTQUALITY (ICM_RESERVED+30)
123 #define ICM_GETQUALITY (ICM_RESERVED+31)
124 #define ICM_SETQUALITY (ICM_RESERVED+32)
125 
126 #define ICM_SET (ICM_RESERVED+40)
127 #define ICM_GET (ICM_RESERVED+41)
128 
129 #define ICM_FRAMERATE mmioFOURCC('F','r','m','R')
130 #define ICM_KEYFRAMERATE mmioFOURCC('K','e','y','R')
131 
132 #define ICM_COMPRESS_GET_FORMAT (ICM_USER+4)
133 #define ICM_COMPRESS_GET_SIZE (ICM_USER+5)
134 #define ICM_COMPRESS_QUERY (ICM_USER+6)
135 #define ICM_COMPRESS_BEGIN (ICM_USER+7)
136 #define ICM_COMPRESS (ICM_USER+8)
137 #define ICM_COMPRESS_END (ICM_USER+9)
138 
139 #define ICM_DECOMPRESS_GET_FORMAT (ICM_USER+10)
140 #define ICM_DECOMPRESS_QUERY (ICM_USER+11)
141 #define ICM_DECOMPRESS_BEGIN (ICM_USER+12)
142 #define ICM_DECOMPRESS (ICM_USER+13)
143 #define ICM_DECOMPRESS_END (ICM_USER+14)
144 #define ICM_DECOMPRESS_SET_PALETTE (ICM_USER+29)
145 #define ICM_DECOMPRESS_GET_PALETTE (ICM_USER+30)
146 
147 #define ICM_DRAW_QUERY (ICM_USER+31)
148 #define ICM_DRAW_BEGIN (ICM_USER+15)
149 #define ICM_DRAW_GET_PALETTE (ICM_USER+16)
150 #define ICM_DRAW_UPDATE (ICM_USER+17)
151 #define ICM_DRAW_START (ICM_USER+18)
152 #define ICM_DRAW_STOP (ICM_USER+19)
153 #define ICM_DRAW_BITS (ICM_USER+20)
154 #define ICM_DRAW_END (ICM_USER+21)
155 #define ICM_DRAW_GETTIME (ICM_USER+32)
156 #define ICM_DRAW (ICM_USER+33)
157 #define ICM_DRAW_WINDOW (ICM_USER+34)
158 #define ICM_DRAW_SETTIME (ICM_USER+35)
159 #define ICM_DRAW_REALIZE (ICM_USER+36)
160 #define ICM_DRAW_FLUSH (ICM_USER+37)
161 #define ICM_DRAW_RENDERBUFFER (ICM_USER+38)
162 
163 #define ICM_DRAW_START_PLAY (ICM_USER+39)
164 #define ICM_DRAW_STOP_PLAY (ICM_USER+40)
165 
166 #define ICM_DRAW_SUGGESTFORMAT (ICM_USER+50)
167 #define ICM_DRAW_CHANGEPALETTE (ICM_USER+51)
168 
169 #define ICM_DRAW_IDLE (ICM_USER+52)
170 
171 #define ICM_GETBUFFERSWANTED (ICM_USER+41)
172 
173 #define ICM_GETDEFAULTKEYFRAMERATE (ICM_USER+42)
174 
175 #define ICM_DECOMPRESSEX_BEGIN (ICM_USER+60)
176 #define ICM_DECOMPRESSEX_QUERY (ICM_USER+61)
177 #define ICM_DECOMPRESSEX (ICM_USER+62)
178 #define ICM_DECOMPRESSEX_END (ICM_USER+63)
179 
180 #define ICM_COMPRESS_FRAMES_INFO (ICM_USER+70)
181 #define ICM_COMPRESS_FRAMES (ICM_USER+71)
182 #define ICM_SET_STATUS_PROC (ICM_USER+72)
183 
184   typedef struct {
185     DWORD dwSize;
186     DWORD fccType;
187     DWORD fccHandler;
188     DWORD dwVersion;
189     DWORD dwFlags;
190     LRESULT dwError;
191     LPVOID pV1Reserved;
192     LPVOID pV2Reserved;
193     DWORD dnDevNode;
194   } ICOPEN;
195 
196   typedef struct {
197     DWORD dwSize;
198     DWORD fccType;
199     DWORD fccHandler;
200     DWORD dwFlags;
201     DWORD dwVersion;
202     DWORD dwVersionICM;
203 
204     WCHAR szName[16];
205     WCHAR szDescription[128];
206     WCHAR szDriver[128];
207   } ICINFO;
208 
209 #define VIDCF_QUALITY 0x0001
210 #define VIDCF_CRUNCH 0x0002
211 #define VIDCF_TEMPORAL 0x0004
212 #define VIDCF_COMPRESSFRAMES 0x0008
213 #define VIDCF_DRAW 0x0010
214 #define VIDCF_FASTTEMPORALC 0x0020
215 #define VIDCF_QUALITYTIME   0x0040
216 #define VIDCF_FASTTEMPORALD 0x0080
217 #define VIDCF_FASTTEMPORAL	(VIDCF_FASTTEMPORALC|VIDCF_FASTTEMPORALD)
218 
219 #define ICCOMPRESS_KEYFRAME __MSABI_LONG(0x00000001)
220 
221   typedef struct {
222     DWORD dwFlags;
223     LPBITMAPINFOHEADER lpbiOutput;
224     LPVOID lpOutput;
225 
226     LPBITMAPINFOHEADER lpbiInput;
227     LPVOID lpInput;
228     LPDWORD lpckid;
229     LPDWORD lpdwFlags;
230     LONG lFrameNum;
231     DWORD dwFrameSize;
232     DWORD dwQuality;
233     LPBITMAPINFOHEADER lpbiPrev;
234     LPVOID lpPrev;
235   } ICCOMPRESS;
236 
237 #define ICCOMPRESSFRAMES_PADDING 0x00000001
238 
239   typedef struct {
240     DWORD dwFlags;
241     LPBITMAPINFOHEADER lpbiOutput;
242     LPARAM lOutput;
243     LPBITMAPINFOHEADER lpbiInput;
244     LPARAM lInput;
245     LONG lStartFrame;
246     LONG lFrameCount;
247     LONG lQuality;
248     LONG lDataRate;
249     LONG lKeyRate;
250     DWORD dwRate;
251     DWORD dwScale;
252     DWORD dwOverheadPerFrame;
253     DWORD dwReserved2;
254     LONG (CALLBACK *GetData)(LPARAM lInput,LONG lFrame,LPVOID lpBits,LONG len);
255     LONG (CALLBACK *PutData)(LPARAM lOutput,LONG lFrame,LPVOID lpBits,LONG len);
256   } ICCOMPRESSFRAMES;
257 
258 #define ICSTATUS_START 0
259 #define ICSTATUS_STATUS 1
260 #define ICSTATUS_END 2
261 #define ICSTATUS_ERROR 3
262 #define ICSTATUS_YIELD 4
263 
264   typedef struct {
265     DWORD dwFlags;
266     LPARAM lParam;
267     LONG (CALLBACK *Status)(LPARAM lParam,UINT message,LONG l);
268   } ICSETSTATUSPROC;
269 
270 #define ICDECOMPRESS_HURRYUP __MSABI_LONG(0x80000000)
271 #define ICDECOMPRESS_UPDATE __MSABI_LONG(0x40000000)
272 #define ICDECOMPRESS_PREROLL __MSABI_LONG(0x20000000)
273 #define ICDECOMPRESS_NULLFRAME __MSABI_LONG(0x10000000)
274 #define ICDECOMPRESS_NOTKEYFRAME __MSABI_LONG(0x08000000)
275 
276   typedef struct {
277     DWORD dwFlags;
278     LPBITMAPINFOHEADER lpbiInput;
279     LPVOID lpInput;
280     LPBITMAPINFOHEADER lpbiOutput;
281     LPVOID lpOutput;
282     DWORD ckid;
283   } ICDECOMPRESS;
284 
285   typedef struct {
286     DWORD dwFlags;
287     LPBITMAPINFOHEADER lpbiSrc;
288     LPVOID lpSrc;
289     LPBITMAPINFOHEADER lpbiDst;
290     LPVOID lpDst;
291     int xDst;
292     int yDst;
293     int dxDst;
294     int dyDst;
295 
296     int xSrc;
297     int ySrc;
298     int dxSrc;
299     int dySrc;
300   } ICDECOMPRESSEX;
301 
302 #define ICDRAW_QUERY __MSABI_LONG(0x00000001)
303 #define ICDRAW_FULLSCREEN __MSABI_LONG(0x00000002)
304 #define ICDRAW_HDC __MSABI_LONG(0x00000004)
305 #define ICDRAW_ANIMATE __MSABI_LONG(0x00000008)
306 #define ICDRAW_CONTINUE __MSABI_LONG(0x00000010)
307 #define ICDRAW_MEMORYDC __MSABI_LONG(0x00000020)
308 #define ICDRAW_UPDATING __MSABI_LONG(0x00000040)
309 #define ICDRAW_RENDER __MSABI_LONG(0x00000080)
310 #define ICDRAW_BUFFER __MSABI_LONG(0x00000100)
311 
312   typedef struct {
313     DWORD dwFlags;
314     HPALETTE hpal;
315     HWND hwnd;
316     HDC hdc;
317     int xDst;
318     int yDst;
319     int dxDst;
320     int dyDst;
321     LPBITMAPINFOHEADER lpbi;
322     int xSrc;
323     int ySrc;
324     int dxSrc;
325     int dySrc;
326     DWORD dwRate;
327     DWORD dwScale;
328   } ICDRAWBEGIN;
329 
330 #define ICDRAW_HURRYUP __MSABI_LONG(0x80000000)
331 #define ICDRAW_UPDATE __MSABI_LONG(0x40000000)
332 #define ICDRAW_PREROLL __MSABI_LONG(0x20000000)
333 #define ICDRAW_NULLFRAME __MSABI_LONG(0x10000000)
334 #define ICDRAW_NOTKEYFRAME __MSABI_LONG(0x08000000)
335 
336   typedef struct {
337     DWORD dwFlags;
338     LPVOID lpFormat;
339     LPVOID lpData;
340     DWORD cbData;
341     LONG lTime;
342   } ICDRAW;
343 
344   typedef struct {
345     LPBITMAPINFOHEADER lpbiIn;
346     LPBITMAPINFOHEADER lpbiSuggest;
347     int dxSrc;
348     int dySrc;
349     int dxDst;
350     int dyDst;
351     HIC hicDecompressor;
352   } ICDRAWSUGGEST;
353 
354   typedef struct {
355     DWORD dwFlags;
356     int iStart;
357     int iLen;
358     LPPALETTEENTRY lppe;
359   } ICPALETTE;
360 
361   WINBOOL WINAPI ICInfo(DWORD fccType,DWORD fccHandler,ICINFO *lpicinfo);
362   WINBOOL WINAPI ICInstall(DWORD fccType,DWORD fccHandler,LPARAM lParam,LPSTR szDesc,UINT wFlags);
363   WINBOOL WINAPI ICRemove(DWORD fccType,DWORD fccHandler,UINT wFlags);
364   LRESULT WINAPI ICGetInfo(HIC hic,ICINFO *picinfo,DWORD cb);
365   HIC WINAPI ICOpen(DWORD fccType,DWORD fccHandler,UINT wMode);
366   HIC WINAPI ICOpenFunction(DWORD fccType,DWORD fccHandler,UINT wMode,FARPROC lpfnHandler);
367   LRESULT WINAPI ICClose(HIC hic);
368   LRESULT WINAPI ICSendMessage(HIC hic,UINT msg,DWORD_PTR dw1,DWORD_PTR dw2);
369 
370 #define ICINSTALL_UNICODE 0x8000
371 #define ICINSTALL_FUNCTION 0x0001
372 #define ICINSTALL_DRIVER 0x0002
373 #define ICINSTALL_HDRV 0x0004
374 #define ICINSTALL_DRIVERW 0x8002
375 
376 #define ICMF_CONFIGURE_QUERY 0x00000001
377 #define ICMF_ABOUT_QUERY 0x00000001
378 
379 #define ICQueryAbout(hic) (ICSendMessage(hic,ICM_ABOUT,(DWORD_PTR) -1,ICMF_ABOUT_QUERY)==ICERR_OK)
380 #define ICAbout(hic,hwnd) ICSendMessage(hic,ICM_ABOUT,(DWORD_PTR)(UINT_PTR)(hwnd),(DWORD_PTR)0)
381 #define ICQueryConfigure(hic) (ICSendMessage(hic,ICM_CONFIGURE,(DWORD_PTR) -1,ICMF_CONFIGURE_QUERY)==ICERR_OK)
382 #define ICConfigure(hic,hwnd) ICSendMessage(hic,ICM_CONFIGURE,(DWORD_PTR)(UINT_PTR)(hwnd),(DWORD_PTR)0)
383 #define ICGetState(hic,pv,cb) ICSendMessage(hic,ICM_GETSTATE,(DWORD_PTR)(LPVOID)(pv),(DWORD_PTR)(cb))
384 #define ICSetState(hic,pv,cb) ICSendMessage(hic,ICM_SETSTATE,(DWORD_PTR)(LPVOID)(pv),(DWORD_PTR)(cb))
385 #define ICGetStateSize(hic) (DWORD) ICGetState(hic,NULL,0)
386 
387   static DWORD dwICValue;
388 
389 #define ICGetDefaultQuality(hic) (ICSendMessage(hic,ICM_GETDEFAULTQUALITY,(DWORD_PTR)(LPVOID)&dwICValue,sizeof(DWORD)),dwICValue)
390 #define ICGetDefaultKeyFrameRate(hic) (ICSendMessage(hic,ICM_GETDEFAULTKEYFRAMERATE,(DWORD_PTR)(LPVOID)&dwICValue,sizeof(DWORD)),dwICValue)
391 #define ICDrawWindow(hic,prc) ICSendMessage(hic,ICM_DRAW_WINDOW,(DWORD_PTR)(LPVOID)(prc),sizeof(RECT))
392 
393   DWORD WINAPIV ICCompress(HIC hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiOutput,LPVOID lpData,LPBITMAPINFOHEADER lpbiInput,LPVOID lpBits,LPDWORD lpckid,LPDWORD lpdwFlags,LONG lFrameNum,DWORD dwFrameSize,DWORD dwQuality,LPBITMAPINFOHEADER lpbiPrev,LPVOID lpPrev);
394 
395 #define ICCompressBegin(hic,lpbiInput,lpbiOutput) ICSendMessage(hic,ICM_COMPRESS_BEGIN,(DWORD_PTR)(LPVOID)(lpbiInput),(DWORD_PTR)(LPVOID)(lpbiOutput))
396 #define ICCompressQuery(hic,lpbiInput,lpbiOutput) ICSendMessage(hic,ICM_COMPRESS_QUERY,(DWORD_PTR)(LPVOID)(lpbiInput),(DWORD_PTR)(LPVOID)(lpbiOutput))
397 #define ICCompressGetFormat(hic,lpbiInput,lpbiOutput) ICSendMessage(hic,ICM_COMPRESS_GET_FORMAT,(DWORD_PTR)(LPVOID)(lpbiInput),(DWORD_PTR)(LPVOID)(lpbiOutput))
398 #define ICCompressGetFormatSize(hic,lpbi) (DWORD) ICCompressGetFormat(hic,lpbi,NULL)
399 #define ICCompressGetSize(hic,lpbiInput,lpbiOutput) (DWORD) ICSendMessage(hic,ICM_COMPRESS_GET_SIZE,(DWORD_PTR)(LPVOID)(lpbiInput),(DWORD_PTR)(LPVOID)(lpbiOutput))
400 #define ICCompressEnd(hic) ICSendMessage(hic,ICM_COMPRESS_END,(DWORD_PTR)0,(DWORD_PTR)0)
401 #define ICDECOMPRESS_HURRYUP __MSABI_LONG(0x80000000)
402 
403   DWORD WINAPIV ICDecompress(HIC hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiFormat,LPVOID lpData,LPBITMAPINFOHEADER lpbi,LPVOID lpBits);
404 
405 #define ICDecompressBegin(hic,lpbiInput,lpbiOutput) ICSendMessage(hic,ICM_DECOMPRESS_BEGIN,(DWORD_PTR)(LPVOID)(lpbiInput),(DWORD_PTR)(LPVOID)(lpbiOutput))
406 #define ICDecompressQuery(hic,lpbiInput,lpbiOutput) ICSendMessage(hic,ICM_DECOMPRESS_QUERY,(DWORD_PTR)(LPVOID)(lpbiInput),(DWORD_PTR)(LPVOID)(lpbiOutput))
407 #define ICDecompressGetFormat(hic,lpbiInput,lpbiOutput) ((LONG) ICSendMessage(hic,ICM_DECOMPRESS_GET_FORMAT,(DWORD_PTR)(LPVOID)(lpbiInput),(DWORD_PTR)(LPVOID)(lpbiOutput)))
408 #define ICDecompressGetFormatSize(hic,lpbi) ICDecompressGetFormat(hic,lpbi,NULL)
409 #define ICDecompressGetPalette(hic,lpbiInput,lpbiOutput) ICSendMessage(hic,ICM_DECOMPRESS_GET_PALETTE,(DWORD_PTR)(LPVOID)(lpbiInput),(DWORD_PTR)(LPVOID)(lpbiOutput))
410 #define ICDecompressSetPalette(hic,lpbiPalette) ICSendMessage(hic,ICM_DECOMPRESS_SET_PALETTE,(DWORD_PTR)(LPVOID)(lpbiPalette),(DWORD_PTR)0)
411 #define ICDecompressEnd(hic) ICSendMessage(hic,ICM_DECOMPRESS_END,(DWORD_PTR)0,(DWORD_PTR)0)
412 
413 #ifndef __CRT__NO_INLINE
ICDecompressEx(HIC hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiSrc,LPVOID lpSrc,int xSrc,int ySrc,int dxSrc,int dySrc,LPBITMAPINFOHEADER lpbiDst,LPVOID lpDst,int xDst,int yDst,int dxDst,int dyDst)414   __CRT_INLINE LRESULT WINAPI ICDecompressEx(HIC hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiSrc,LPVOID lpSrc,int xSrc,int ySrc,int dxSrc,int dySrc,LPBITMAPINFOHEADER lpbiDst,LPVOID lpDst,int xDst,int yDst,int dxDst,int dyDst) {
415     ICDECOMPRESSEX ic;
416     ic.dwFlags = dwFlags;
417     ic.lpbiSrc = lpbiSrc;
418     ic.lpSrc = lpSrc;
419     ic.xSrc = xSrc;
420     ic.ySrc = ySrc;
421     ic.dxSrc = dxSrc;
422     ic.dySrc = dySrc;
423     ic.lpbiDst = lpbiDst;
424     ic.lpDst = lpDst;
425     ic.xDst = xDst;
426     ic.yDst = yDst;
427     ic.dxDst = dxDst;
428     ic.dyDst = dyDst;
429     return ICSendMessage(hic,ICM_DECOMPRESSEX,(DWORD_PTR)&ic,sizeof(ic));
430   }
431 
ICDecompressExBegin(HIC hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiSrc,LPVOID lpSrc,int xSrc,int ySrc,int dxSrc,int dySrc,LPBITMAPINFOHEADER lpbiDst,LPVOID lpDst,int xDst,int yDst,int dxDst,int dyDst)432   __CRT_INLINE LRESULT WINAPI ICDecompressExBegin(HIC hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiSrc,LPVOID lpSrc,int xSrc,int ySrc,int dxSrc,int dySrc,LPBITMAPINFOHEADER lpbiDst,LPVOID lpDst,int xDst,int yDst,int dxDst,int dyDst) {
433     ICDECOMPRESSEX ic;
434     ic.dwFlags = dwFlags;
435     ic.lpbiSrc = lpbiSrc;
436     ic.lpSrc = lpSrc;
437     ic.xSrc = xSrc;
438     ic.ySrc = ySrc;
439     ic.dxSrc = dxSrc;
440     ic.dySrc = dySrc;
441     ic.lpbiDst = lpbiDst;
442     ic.lpDst = lpDst;
443     ic.xDst = xDst;
444     ic.yDst = yDst;
445     ic.dxDst = dxDst;
446     ic.dyDst = dyDst;
447     return ICSendMessage(hic,ICM_DECOMPRESSEX_BEGIN,(DWORD_PTR)&ic,sizeof(ic));
448   }
449 
ICDecompressExQuery(HIC hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiSrc,LPVOID lpSrc,int xSrc,int ySrc,int dxSrc,int dySrc,LPBITMAPINFOHEADER lpbiDst,LPVOID lpDst,int xDst,int yDst,int dxDst,int dyDst)450   __CRT_INLINE LRESULT WINAPI ICDecompressExQuery(HIC hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiSrc,LPVOID lpSrc,int xSrc,int ySrc,int dxSrc,int dySrc,LPBITMAPINFOHEADER lpbiDst,LPVOID lpDst,int xDst,int yDst,int dxDst,int dyDst) {
451     ICDECOMPRESSEX ic;
452     ic.dwFlags = dwFlags;
453     ic.lpbiSrc = lpbiSrc;
454     ic.lpSrc = lpSrc;
455     ic.xSrc = xSrc;
456     ic.ySrc = ySrc;
457     ic.dxSrc = dxSrc;
458     ic.dySrc = dySrc;
459     ic.lpbiDst = lpbiDst;
460     ic.lpDst = lpDst;
461     ic.xDst = xDst;
462     ic.yDst = yDst;
463     ic.dxDst = dxDst;
464     ic.dyDst = dyDst;
465     return ICSendMessage(hic,ICM_DECOMPRESSEX_QUERY,(DWORD_PTR)&ic,sizeof(ic));
466   }
467 #endif /* !__CRT__NO_INLINE */
468 
469 #define ICDecompressExEnd(hic) ICSendMessage(hic,ICM_DECOMPRESSEX_END,(DWORD_PTR)0,(DWORD_PTR)0)
470 
471 #define ICDRAW_QUERY __MSABI_LONG(0x00000001)
472 #define ICDRAW_FULLSCREEN __MSABI_LONG(0x00000002)
473 #define ICDRAW_HDC __MSABI_LONG(0x00000004)
474 
475   DWORD WINAPIV ICDrawBegin(HIC hic,DWORD dwFlags,HPALETTE hpal,HWND hwnd,HDC hdc,int xDst,int yDst,int dxDst,int dyDst,LPBITMAPINFOHEADER lpbi,int xSrc,int ySrc,int dxSrc,int dySrc,DWORD dwRate,DWORD dwScale);
476 
477 #define ICDRAW_HURRYUP __MSABI_LONG(0x80000000)
478 #define ICDRAW_UPDATE __MSABI_LONG(0x40000000)
479 
480   DWORD WINAPIV ICDraw(HIC hic,DWORD dwFlags,LPVOID lpFormat,LPVOID lpData,DWORD cbData,LONG lTime);
481 
482 #ifndef __CRT__NO_INLINE
ICDrawSuggestFormat(HIC hic,LPBITMAPINFOHEADER lpbiIn,LPBITMAPINFOHEADER lpbiOut,int dxSrc,int dySrc,int dxDst,int dyDst,HIC hicDecomp)483   __CRT_INLINE LRESULT WINAPI ICDrawSuggestFormat(HIC hic,LPBITMAPINFOHEADER lpbiIn,LPBITMAPINFOHEADER lpbiOut,int dxSrc,int dySrc,int dxDst,int dyDst,HIC hicDecomp) {
484     ICDRAWSUGGEST ic;
485     ic.lpbiIn = lpbiIn;
486     ic.lpbiSuggest = lpbiOut;
487     ic.dxSrc = dxSrc;
488     ic.dySrc = dySrc;
489     ic.dxDst = dxDst;
490     ic.dyDst = dyDst;
491     ic.hicDecompressor = hicDecomp;
492     return ICSendMessage(hic,ICM_DRAW_SUGGESTFORMAT,(DWORD_PTR)&ic,sizeof(ic));
493   }
494 #endif /* !__CRT__NO_INLINE */
495 
496 #define ICDrawQuery(hic,lpbiInput) ICSendMessage(hic,ICM_DRAW_QUERY,(DWORD_PTR)(LPVOID)(lpbiInput),(DWORD)0)
497 #define ICDrawChangePalette(hic,lpbiInput) ICSendMessage(hic,ICM_DRAW_CHANGEPALETTE,(DWORD_PTR)(LPVOID)(lpbiInput),(DWORD)0)
498 #define ICGetBuffersWanted(hic,lpdwBuffers) ICSendMessage(hic,ICM_GETBUFFERSWANTED,(DWORD_PTR)(LPVOID)(lpdwBuffers),(DWORD_PTR)0)
499 #define ICDrawEnd(hic) ICSendMessage(hic,ICM_DRAW_END,(DWORD_PTR)0,(DWORD_PTR)0)
500 #define ICDrawStart(hic) ICSendMessage(hic,ICM_DRAW_START,(DWORD_PTR)0,(DWORD_PTR)0)
501 #define ICDrawStartPlay(hic,lFrom,lTo) ICSendMessage(hic,ICM_DRAW_START_PLAY,(DWORD_PTR)(lFrom),(DWORD_PTR)(lTo))
502 #define ICDrawStop(hic) ICSendMessage(hic,ICM_DRAW_STOP,(DWORD_PTR)0,(DWORD_PTR)0)
503 #define ICDrawStopPlay(hic) ICSendMessage(hic,ICM_DRAW_STOP_PLAY,(DWORD_PTR)0,(DWORD_PTR)0)
504 #define ICDrawGetTime(hic,lplTime) ICSendMessage(hic,ICM_DRAW_GETTIME,(DWORD_PTR)(LPVOID)(lplTime),(DWORD_PTR)0)
505 #define ICDrawSetTime(hic,lTime) ICSendMessage(hic,ICM_DRAW_SETTIME,(DWORD_PTR)lTime,(DWORD_PTR)0)
506 #define ICDrawRealize(hic,hdc,fBackground) ICSendMessage(hic,ICM_DRAW_REALIZE,(DWORD_PTR)(UINT_PTR)(HDC)(hdc),(DWORD_PTR)(WINBOOL)(fBackground))
507 #define ICDrawFlush(hic) ICSendMessage(hic,ICM_DRAW_FLUSH,(DWORD_PTR)0,(DWORD_PTR)0)
508 #define ICDrawRenderBuffer(hic) ICSendMessage(hic,ICM_DRAW_RENDERBUFFER,(DWORD_PTR)0,(DWORD_PTR)0)
509 
510 #ifndef __CRT__NO_INLINE
ICSetStatusProc(HIC hic,DWORD dwFlags,LRESULT lParam,LONG (CALLBACK * fpfnStatus)(LPARAM,UINT,LONG))511   __CRT_INLINE LRESULT WINAPI ICSetStatusProc(HIC hic,DWORD dwFlags,LRESULT lParam,LONG (CALLBACK *fpfnStatus)(LPARAM,UINT,LONG)) {
512     ICSETSTATUSPROC ic;
513     ic.dwFlags = dwFlags;
514     ic.lParam = lParam;
515     ic.Status = fpfnStatus;
516     return ICSendMessage(hic,ICM_SET_STATUS_PROC,(DWORD_PTR)&ic,sizeof(ic));
517   }
518 #endif /* !__CRT__NO_INLINE */
519 
520 #define ICDecompressOpen(fccType,fccHandler,lpbiIn,lpbiOut) ICLocate(fccType,fccHandler,lpbiIn,lpbiOut,ICMODE_DECOMPRESS)
521 #define ICDrawOpen(fccType,fccHandler,lpbiIn) ICLocate(fccType,fccHandler,lpbiIn,NULL,ICMODE_DRAW)
522 
523   HIC WINAPI ICLocate(DWORD fccType,DWORD fccHandler,LPBITMAPINFOHEADER lpbiIn,LPBITMAPINFOHEADER lpbiOut,WORD wFlags);
524   HIC WINAPI ICGetDisplayFormat(HIC hic,LPBITMAPINFOHEADER lpbiIn,LPBITMAPINFOHEADER lpbiOut,int BitDepth,int dx,int dy);
525   HANDLE WINAPI ICImageCompress(HIC hic,UINT uiFlags,LPBITMAPINFO lpbiIn,LPVOID lpBits,LPBITMAPINFO lpbiOut,LONG lQuality,LONG *plSize);
526   HANDLE WINAPI ICImageDecompress(HIC hic,UINT uiFlags,LPBITMAPINFO lpbiIn,LPVOID lpBits,LPBITMAPINFO lpbiOut);
527 
528   typedef struct {
529     LONG cbSize;
530     DWORD dwFlags;
531     HIC hic;
532     DWORD fccType;
533     DWORD fccHandler;
534     LPBITMAPINFO lpbiIn;
535     LPBITMAPINFO lpbiOut;
536     LPVOID lpBitsOut;
537     LPVOID lpBitsPrev;
538     LONG lFrame;
539     LONG lKey;
540     LONG lDataRate;
541     LONG lQ;
542     LONG lKeyCount;
543     LPVOID lpState;
544     LONG cbState;
545   } COMPVARS,*PCOMPVARS;
546 
547 #define ICMF_COMPVARS_VALID 0x00000001
548 
549   WINBOOL WINAPI ICCompressorChoose(HWND hwnd,UINT uiFlags,LPVOID pvIn,LPVOID lpData,PCOMPVARS pc,LPSTR lpszTitle);
550 
551 #define ICMF_CHOOSE_KEYFRAME 0x0001
552 #define ICMF_CHOOSE_DATARATE 0x0002
553 #define ICMF_CHOOSE_PREVIEW 0x0004
554 #define ICMF_CHOOSE_ALLCOMPRESSORS 0x0008
555 
556   WINBOOL WINAPI ICSeqCompressFrameStart(PCOMPVARS pc,LPBITMAPINFO lpbiIn);
557   void WINAPI ICSeqCompressFrameEnd(PCOMPVARS pc);
558   LPVOID WINAPI ICSeqCompressFrame(PCOMPVARS pc,UINT uiFlags,LPVOID lpBits,WINBOOL *pfKey,LONG *plSize);
559   void WINAPI ICCompressorFree(PCOMPVARS pc);
560 #endif
561 
562 #ifndef NODRAWDIB
563 
564   typedef HANDLE HDRAWDIB;
565 
566 #define DDF_0001 0x0001
567 #define DDF_UPDATE 0x0002
568 #define DDF_SAME_HDC 0x0004
569 #define DDF_SAME_DRAW 0x0008
570 #define DDF_DONTDRAW 0x0010
571 #define DDF_ANIMATE 0x0020
572 #define DDF_BUFFER 0x0040
573 #define DDF_JUSTDRAWIT 0x0080
574 #define DDF_FULLSCREEN 0x0100
575 #define DDF_BACKGROUNDPAL 0x0200
576 #define DDF_NOTKEYFRAME 0x0400
577 #define DDF_HURRYUP 0x0800
578 #define DDF_HALFTONE 0x1000
579 #define DDF_2000 0x2000
580 
581 #define DDF_PREROLL DDF_DONTDRAW
582 #define DDF_SAME_DIB DDF_SAME_DRAW
583 #define DDF_SAME_SIZE DDF_SAME_DRAW
584 
585   extern WINBOOL WINAPI DrawDibInit(void);
586   extern HDRAWDIB WINAPI DrawDibOpen(void);
587   extern WINBOOL WINAPI DrawDibClose(HDRAWDIB hdd);
588   extern LPVOID WINAPI DrawDibGetBuffer(HDRAWDIB hdd,LPBITMAPINFOHEADER lpbi,DWORD dwSize,DWORD dwFlags);
589   extern UINT WINAPI DrawDibError(HDRAWDIB hdd);
590   extern HPALETTE WINAPI DrawDibGetPalette(HDRAWDIB hdd);
591   extern WINBOOL WINAPI DrawDibSetPalette(HDRAWDIB hdd,HPALETTE hpal);
592   extern WINBOOL WINAPI DrawDibChangePalette(HDRAWDIB hdd,int iStart,int iLen,LPPALETTEENTRY lppe);
593   extern UINT WINAPI DrawDibRealize(HDRAWDIB hdd,HDC hdc,WINBOOL fBackground);
594   extern WINBOOL WINAPI DrawDibStart(HDRAWDIB hdd,DWORD rate);
595   extern WINBOOL WINAPI DrawDibStop(HDRAWDIB hdd);
596   extern WINBOOL WINAPI DrawDibBegin(HDRAWDIB hdd,HDC hdc,int dxDst,int dyDst,LPBITMAPINFOHEADER lpbi,int dxSrc,int dySrc,UINT wFlags);
597   extern WINBOOL WINAPI DrawDibDraw(HDRAWDIB hdd,HDC hdc,int xDst,int yDst,int dxDst,int dyDst,LPBITMAPINFOHEADER lpbi,LPVOID lpBits,int xSrc,int ySrc,int dxSrc,int dySrc,UINT wFlags);
598 
599 #define DrawDibUpdate(hdd,hdc,x,y) DrawDibDraw(hdd,hdc,x,y,0,0,NULL,NULL,0,0,0,0,DDF_UPDATE)
600 
601   extern WINBOOL WINAPI DrawDibEnd(HDRAWDIB hdd);
602 
603   typedef struct {
604     LONG timeCount;
605     LONG timeDraw;
606     LONG timeDecompress;
607     LONG timeDither;
608     LONG timeStretch;
609     LONG timeBlt;
610     LONG timeSetDIBits;
611   } DRAWDIBTIME,*LPDRAWDIBTIME;
612 
613   WINBOOL WINAPI DrawDibTime(HDRAWDIB hdd,LPDRAWDIBTIME lpddtime);
614 
615 #define PD_CAN_DRAW_DIB 0x0001
616 #define PD_CAN_STRETCHDIB 0x0002
617 #define PD_STRETCHDIB_1_1_OK 0x0004
618 #define PD_STRETCHDIB_1_2_OK 0x0008
619 #define PD_STRETCHDIB_1_N_OK 0x0010
620 
621   LRESULT WINAPI DrawDibProfileDisplay(LPBITMAPINFOHEADER lpbi);
622 
623 #ifdef DRAWDIB_INCLUDE_STRETCHDIB
624   void WINAPI StretchDIB(LPBITMAPINFOHEADER biDst,LPVOID lpDst,int DstX,int DstY,int DstXE,int DstYE,LPBITMAPINFOHEADER biSrc,LPVOID lpSrc,int SrcX,int SrcY,int SrcXE,int SrcYE);
625 #endif
626 #endif
627 
628 #ifndef NOAVIFMT
629 #ifndef _INC_MMSYSTEM
630   typedef DWORD FOURCC;
631 #endif
632 
633 /* This part of the file is duplicated in avifmt.h */
634 #ifndef mmioFOURCC
635 #define mmioFOURCC(ch0,ch1,ch2,ch3) ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24))
636 #endif
637 
638 #ifndef aviTWOCC
639 #define aviTWOCC(ch0,ch1) ((WORD)(BYTE)(ch0) | ((WORD)(BYTE)(ch1) << 8))
640 #endif
641 
642   typedef WORD TWOCC;
643 
644 #define formtypeAVI mmioFOURCC('A','V','I',' ')
645 #define listtypeAVIHEADER mmioFOURCC('h','d','r','l')
646 #define ckidAVIMAINHDR mmioFOURCC('a','v','i','h')
647 #define listtypeSTREAMHEADER mmioFOURCC('s','t','r','l')
648 #define ckidSTREAMHEADER mmioFOURCC('s','t','r','h')
649 #define ckidSTREAMFORMAT mmioFOURCC('s','t','r','f')
650 #define ckidSTREAMHANDLERDATA mmioFOURCC('s','t','r','d')
651 #define ckidSTREAMNAME mmioFOURCC('s','t','r','n')
652 
653 #define listtypeAVIMOVIE mmioFOURCC('m','o','v','i')
654 #define listtypeAVIRECORD mmioFOURCC('r','e','c',' ')
655 
656 #define ckidAVINEWINDEX mmioFOURCC('i','d','x','1')
657 
658 #define streamtypeANY __MSABI_LONG(0U)
659 #define streamtypeVIDEO mmioFOURCC('v','i','d','s')
660 #define streamtypeAUDIO mmioFOURCC('a','u','d','s')
661 #define streamtypeMIDI mmioFOURCC('m','i','d','s')
662 #define streamtypeTEXT mmioFOURCC('t','x','t','s')
663 
664 #define cktypeDIBbits aviTWOCC('d','b')
665 #define cktypeDIBcompressed aviTWOCC('d','c')
666 #define cktypePALchange aviTWOCC('p','c')
667 #define cktypeWAVEbytes aviTWOCC('w','b')
668 
669 #define ckidAVIPADDING mmioFOURCC('J','U','N','K')
670 
671 #define FromHex(n) (((n) >= 'A') ? ((n) + 10 - 'A') : ((n) - '0'))
672 #define StreamFromFOURCC(fcc) ((WORD) ((FromHex(LOBYTE(LOWORD(fcc))) << 4) + (FromHex(HIBYTE(LOWORD(fcc))))))
673 
674 #define TWOCCFromFOURCC(fcc) HIWORD(fcc)
675 
676 #define ToHex(n) ((BYTE) (((n) > 9) ? ((n) - 10 + 'A') : ((n) + '0')))
677 #define MAKEAVICKID(tcc,stream) MAKELONG((ToHex((stream) & 0x0f) << 8) | (ToHex(((stream) & 0xf0) >> 4)),tcc)
678 
679 #define AVIF_HASINDEX 0x00000010
680 #define AVIF_MUSTUSEINDEX 0x00000020
681 #define AVIF_ISINTERLEAVED 0x00000100
682 #define AVIF_TRUSTCKTYPE 0x00000800
683 #define AVIF_WASCAPTUREFILE 0x00010000
684 #define AVIF_COPYRIGHTED 0x00020000
685 
686 #define AVI_HEADERSIZE 2048
687 
688   typedef struct {
689     DWORD dwMicroSecPerFrame;
690     DWORD dwMaxBytesPerSec;
691     DWORD dwPaddingGranularity;
692     DWORD dwFlags;
693     DWORD dwTotalFrames;
694     DWORD dwInitialFrames;
695     DWORD dwStreams;
696     DWORD dwSuggestedBufferSize;
697     DWORD dwWidth;
698     DWORD dwHeight;
699     DWORD dwReserved[4];
700   } MainAVIHeader;
701 
702 #define AVISF_DISABLED 0x00000001
703 #define AVISF_VIDEO_PALCHANGES 0x00010000
704 
705   typedef struct {
706     FOURCC fccType;
707     FOURCC fccHandler;
708     DWORD dwFlags;
709     WORD wPriority;
710     WORD wLanguage;
711     DWORD dwInitialFrames;
712     DWORD dwScale;
713     DWORD dwRate;
714     DWORD dwStart;
715     DWORD dwLength;
716     DWORD dwSuggestedBufferSize;
717     DWORD dwQuality;
718     DWORD dwSampleSize;
719     RECT rcFrame;
720   } AVIStreamHeader;
721 
722 #define AVIIF_LIST __MSABI_LONG(0x00000001)
723 #define AVIIF_KEYFRAME __MSABI_LONG(0x00000010)
724 #define AVIIF_FIRSTPART __MSABI_LONG(0x00000020)
725 #define AVIIF_LASTPART __MSABI_LONG(0x00000040)
726 #define AVIIF_MIDPART (AVIIF_LASTPART|AVIIF_FIRSTPART)
727 
728 #define AVIIF_NOTIME __MSABI_LONG(0x00000100)
729 #define AVIIF_COMPUSE __MSABI_LONG(0x0FFF0000)
730 
731   typedef struct {
732     DWORD ckid;
733     DWORD dwFlags;
734     DWORD dwChunkOffset;
735     DWORD dwChunkLength;
736   } AVIINDEXENTRY;
737 
738   typedef struct {
739     BYTE bFirstEntry;
740     BYTE bNumEntries;
741     WORD wFlags;
742     PALETTEENTRY peNew[];
743   } AVIPALCHANGE;
744 #endif
745 /* End of duplication */
746 
747 #ifdef __cplusplus
748 }
749 #endif
750 
751 #ifndef RC_INVOKED
752 #include "pshpack8.h"
753 #endif
754 
755 #ifndef NOMMREG
756 #include <mmreg.h>
757 #endif
758 
759 #ifdef __cplusplus
760 extern "C" {
761 #endif
762 
763 #ifndef NOAVIFILE
764 #ifndef mmioFOURCC
765 #define mmioFOURCC(ch0,ch1,ch2,ch3) ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24))
766 #endif
767 
768 #ifndef streamtypeVIDEO
769 #define streamtypeANY __MSABI_LONG(0U)
770 #define streamtypeVIDEO mmioFOURCC('v','i','d','s')
771 #define streamtypeAUDIO mmioFOURCC('a','u','d','s')
772 #define streamtypeMIDI mmioFOURCC('m','i','d','s')
773 #define streamtypeTEXT mmioFOURCC('t','x','t','s')
774 #endif
775 
776 #ifndef AVIIF_KEYFRAME
777 #define AVIIF_KEYFRAME __MSABI_LONG(0x00000010)
778 #endif
779 
780 #define AVIGETFRAMEF_BESTDISPLAYFMT 1
781 
782   typedef struct _AVISTREAMINFOW {
783     DWORD fccType;
784     DWORD fccHandler;
785     DWORD dwFlags;
786     DWORD dwCaps;
787     WORD wPriority;
788     WORD wLanguage;
789     DWORD dwScale;
790     DWORD dwRate;
791     DWORD dwStart;
792     DWORD dwLength;
793     DWORD dwInitialFrames;
794     DWORD dwSuggestedBufferSize;
795     DWORD dwQuality;
796     DWORD dwSampleSize;
797     RECT rcFrame;
798     DWORD dwEditCount;
799     DWORD dwFormatChangeCount;
800     WCHAR szName[64];
801   } AVISTREAMINFOW,*LPAVISTREAMINFOW;
802 
803   typedef struct _AVISTREAMINFOA {
804     DWORD fccType;
805     DWORD fccHandler;
806     DWORD dwFlags;
807     DWORD dwCaps;
808     WORD wPriority;
809     WORD wLanguage;
810     DWORD dwScale;
811     DWORD dwRate;
812     DWORD dwStart;
813     DWORD dwLength;
814     DWORD dwInitialFrames;
815     DWORD dwSuggestedBufferSize;
816     DWORD dwQuality;
817     DWORD dwSampleSize;
818     RECT rcFrame;
819     DWORD dwEditCount;
820     DWORD dwFormatChangeCount;
821     char szName[64];
822   } AVISTREAMINFOA,*LPAVISTREAMINFOA;
823 
824 #define AVISTREAMINFO __MINGW_NAME_AW(AVISTREAMINFO)
825 #define LPAVISTREAMINFO __MINGW_NAME_AW(LPAVISTREAMINFO)
826 
827 #define AVISTREAMINFO_DISABLED 0x00000001
828 #define AVISTREAMINFO_FORMATCHANGES 0x00010000
829 
830   typedef struct _AVIFILEINFOW {
831     DWORD dwMaxBytesPerSec;
832     DWORD dwFlags;
833     DWORD dwCaps;
834     DWORD dwStreams;
835     DWORD dwSuggestedBufferSize;
836     DWORD dwWidth;
837     DWORD dwHeight;
838     DWORD dwScale;
839     DWORD dwRate;
840     DWORD dwLength;
841     DWORD dwEditCount;
842     WCHAR szFileType[64];
843   } AVIFILEINFOW,*LPAVIFILEINFOW;
844 
845   typedef struct _AVIFILEINFOA {
846     DWORD dwMaxBytesPerSec;
847     DWORD dwFlags;
848     DWORD dwCaps;
849     DWORD dwStreams;
850     DWORD dwSuggestedBufferSize;
851     DWORD dwWidth;
852     DWORD dwHeight;
853     DWORD dwScale;
854     DWORD dwRate;
855     DWORD dwLength;
856     DWORD dwEditCount;
857     char szFileType[64];
858   } AVIFILEINFOA,*LPAVIFILEINFOA;
859 
860 #define AVIFILEINFO __MINGW_NAME_AW(AVIFILEINFO)
861 #define LPAVIFILEINFO __MINGW_NAME_AW(LPAVIFILEINFO)
862 
863 #define AVIFILEINFO_HASINDEX 0x00000010
864 #define AVIFILEINFO_MUSTUSEINDEX 0x00000020
865 #define AVIFILEINFO_ISINTERLEAVED 0x00000100
866 #define AVIFILEINFO_TRUSTCKTYPE 0x00000800
867 #define AVIFILEINFO_WASCAPTUREFILE 0x00010000
868 #define AVIFILEINFO_COPYRIGHTED 0x00020000
869 
870 #define AVIFILECAPS_CANREAD 0x00000001
871 #define AVIFILECAPS_CANWRITE 0x00000002
872 #define AVIFILECAPS_ALLKEYFRAMES 0x00000010
873 #define AVIFILECAPS_NOCOMPRESSION 0x00000020
874 
875   typedef WINBOOL (WINAPI *AVISAVECALLBACK)(int);
876 
877   typedef struct {
878     DWORD fccType;
879     DWORD fccHandler;
880     DWORD dwKeyFrameEvery;
881     DWORD dwQuality;
882     DWORD dwBytesPerSecond;
883     DWORD dwFlags;
884     LPVOID lpFormat;
885     DWORD cbFormat;
886     LPVOID lpParms;
887     DWORD cbParms;
888     DWORD dwInterleaveEvery;
889   } AVICOMPRESSOPTIONS, FAR *LPAVICOMPRESSOPTIONS;
890 
891 #define AVICOMPRESSF_INTERLEAVE 0x00000001
892 #define AVICOMPRESSF_DATARATE 0x00000002
893 #define AVICOMPRESSF_KEYFRAMES 0x00000004
894 #define AVICOMPRESSF_VALID 0x00000008
895 
896 #ifdef __cplusplus
897 }
898 #endif
899 
900 #include <ole2.h>
901 
902 #ifdef __cplusplus
903 extern "C" {
904 #endif
905 
906 #undef INTERFACE
907 #define INTERFACE IAVIStream
DECLARE_INTERFACE_(IAVIStream,IUnknown)908   DECLARE_INTERFACE_(IAVIStream,IUnknown) {
909     STDMETHOD(QueryInterface) (THIS_ REFIID riid,LPVOID *ppvObj) PURE;
910     STDMETHOD_(ULONG,AddRef) (THIS) PURE;
911     STDMETHOD_(ULONG,Release) (THIS) PURE;
912     STDMETHOD(Create) (THIS_ LPARAM lParam1,LPARAM lParam2) PURE;
913     STDMETHOD(Info) (THIS_ AVISTREAMINFOW *psi,LONG lSize) PURE;
914     STDMETHOD_(LONG,FindSample)(THIS_ LONG lPos,LONG lFlags) PURE;
915     STDMETHOD(ReadFormat) (THIS_ LONG lPos,LPVOID lpFormat,LONG *lpcbFormat) PURE;
916     STDMETHOD(SetFormat) (THIS_ LONG lPos,LPVOID lpFormat,LONG cbFormat) PURE;
917     STDMETHOD(Read) (THIS_ LONG lStart,LONG lSamples,LPVOID lpBuffer,LONG cbBuffer,LONG *plBytes,LONG *plSamples) PURE;
918     STDMETHOD(Write) (THIS_ LONG lStart,LONG lSamples,LPVOID lpBuffer,LONG cbBuffer,DWORD dwFlags,LONG *plSampWritten,LONG *plBytesWritten) PURE;
919     STDMETHOD(Delete) (THIS_ LONG lStart,LONG lSamples) PURE;
920     STDMETHOD(ReadData) (THIS_ DWORD fcc,LPVOID lp,LONG *lpcb) PURE;
921     STDMETHOD(WriteData) (THIS_ DWORD fcc,LPVOID lp,LONG cb) PURE;
922     STDMETHOD(SetInfo) (THIS_ AVISTREAMINFOW *lpInfo,LONG cbInfo) PURE;
923   };
924 
925   typedef IAVIStream *PAVISTREAM;
926 
927 #undef INTERFACE
928 #define INTERFACE IAVIStreaming
DECLARE_INTERFACE_(IAVIStreaming,IUnknown)929   DECLARE_INTERFACE_(IAVIStreaming,IUnknown) {
930     STDMETHOD(QueryInterface) (THIS_ REFIID riid,LPVOID *ppvObj) PURE;
931     STDMETHOD_(ULONG,AddRef) (THIS) PURE;
932     STDMETHOD_(ULONG,Release) (THIS) PURE;
933     STDMETHOD(Begin) (THIS_ LONG lStart,LONG lEnd,LONG lRate) PURE;
934     STDMETHOD(End) (THIS) PURE;
935   };
936 
937   typedef IAVIStreaming *PAVISTREAMING;
938 
939 #undef INTERFACE
940 #define INTERFACE IAVIEditStream
DECLARE_INTERFACE_(IAVIEditStream,IUnknown)941   DECLARE_INTERFACE_(IAVIEditStream,IUnknown) {
942     STDMETHOD(QueryInterface) (THIS_ REFIID riid,LPVOID *ppvObj) PURE;
943     STDMETHOD_(ULONG,AddRef) (THIS) PURE;
944     STDMETHOD_(ULONG,Release) (THIS) PURE;
945     STDMETHOD(Cut) (THIS_ LONG *plStart,LONG *plLength,PAVISTREAM *ppResult) PURE;
946     STDMETHOD(Copy) (THIS_ LONG *plStart,LONG *plLength,PAVISTREAM *ppResult) PURE;
947     STDMETHOD(Paste) (THIS_ LONG *plPos,LONG *plLength,PAVISTREAM pstream,LONG lStart,LONG lEnd) PURE;
948     STDMETHOD(Clone) (THIS_ PAVISTREAM *ppResult) PURE;
949     STDMETHOD(SetInfo) (THIS_ AVISTREAMINFOW *lpInfo,LONG cbInfo) PURE;
950   };
951 
952   typedef IAVIEditStream *PAVIEDITSTREAM;
953 
954 #undef INTERFACE
955 #define INTERFACE IAVIPersistFile
DECLARE_INTERFACE_(IAVIPersistFile,IPersistFile)956   DECLARE_INTERFACE_(IAVIPersistFile,IPersistFile) {
957     STDMETHOD(Reserved1)(THIS) PURE;
958   };
959 
960   typedef IAVIPersistFile *PAVIPERSISTFILE;
961 
962 #undef INTERFACE
963 #define INTERFACE IAVIFile
964 #define PAVIFILE IAVIFile *
DECLARE_INTERFACE_(IAVIFile,IUnknown)965   DECLARE_INTERFACE_(IAVIFile,IUnknown) {
966     STDMETHOD(QueryInterface) (THIS_ REFIID riid,LPVOID *ppvObj) PURE;
967     STDMETHOD_(ULONG,AddRef) (THIS) PURE;
968     STDMETHOD_(ULONG,Release) (THIS) PURE;
969     STDMETHOD(Info) (THIS_ AVIFILEINFOW *pfi,LONG lSize) PURE;
970     STDMETHOD(GetStream) (THIS_ PAVISTREAM *ppStream,DWORD fccType,LONG lParam) PURE;
971     STDMETHOD(CreateStream) (THIS_ PAVISTREAM *ppStream,AVISTREAMINFOW *psi) PURE;
972     STDMETHOD(WriteData) (THIS_ DWORD ckid,LPVOID lpData,LONG cbData) PURE;
973     STDMETHOD(ReadData) (THIS_ DWORD ckid,LPVOID lpData,LONG *lpcbData) PURE;
974     STDMETHOD(EndRecord) (THIS) PURE;
975     STDMETHOD(DeleteStream) (THIS_ DWORD fccType,LONG lParam) PURE;
976   };
977 
978 #undef PAVIFILE
979   typedef IAVIFile *PAVIFILE;
980 
981 #undef INTERFACE
982 #define INTERFACE IGetFrame
983 #define PGETFRAME IGetFrame *
DECLARE_INTERFACE_(IGetFrame,IUnknown)984   DECLARE_INTERFACE_(IGetFrame,IUnknown) {
985     STDMETHOD(QueryInterface) (THIS_ REFIID riid,LPVOID *ppvObj) PURE;
986     STDMETHOD_(ULONG,AddRef) (THIS) PURE;
987     STDMETHOD_(ULONG,Release) (THIS) PURE;
988     STDMETHOD_(LPVOID,GetFrame) (THIS_ LONG lPos) PURE;
989     STDMETHOD(Begin) (THIS_ LONG lStart,LONG lEnd,LONG lRate) PURE;
990     STDMETHOD(End) (THIS) PURE;
991     STDMETHOD(SetFormat) (THIS_ LPBITMAPINFOHEADER lpbi,LPVOID lpBits,int x,int y,int dx,int dy) PURE;
992   };
993 
994 #undef PGETFRAME
995   typedef IGetFrame *PGETFRAME;
996 
997 #define DEFINE_AVIGUID(name,l,w1,w2) DEFINE_GUID(name,l,w1,w2,0xC0,0,0,0,0,0,0,0x46)
998 
999   DEFINE_AVIGUID(IID_IAVIFile,0x00020020,0,0);
1000   DEFINE_AVIGUID(IID_IAVIStream,0x00020021,0,0);
1001   DEFINE_AVIGUID(IID_IAVIStreaming,0x00020022,0,0);
1002   DEFINE_AVIGUID(IID_IGetFrame,0x00020023,0,0);
1003   DEFINE_AVIGUID(IID_IAVIEditStream,0x00020024,0,0);
1004   DEFINE_AVIGUID(IID_IAVIPersistFile,0x00020025,0,0);
1005 #if !defined(UNICODE)
1006   DEFINE_AVIGUID(CLSID_AVISimpleUnMarshal,0x00020009,0,0);
1007 #endif
1008 
1009   DEFINE_AVIGUID(CLSID_AVIFile,0x00020000,0,0);
1010 
1011 #define AVIFILEHANDLER_CANREAD 0x0001
1012 #define AVIFILEHANDLER_CANWRITE 0x0002
1013 #define AVIFILEHANDLER_CANACCEPTNONRGB 0x0004
1014 
1015 #define AVIFileOpen __MINGW_NAME_AW(AVIFileOpen)
1016 #define AVIFileInfo __MINGW_NAME_AW(AVIFileInfo)
1017 #define AVIFileCreateStream __MINGW_NAME_AW(AVIFileCreateStream)
1018 #define AVIStreamInfo __MINGW_NAME_AW(AVIStreamInfo)
1019 #define AVIStreamOpenFromFile __MINGW_NAME_AW(AVIStreamOpenFromFile)
1020 
1021   STDAPI_(void) AVIFileInit(void);
1022   STDAPI_(void) AVIFileExit(void);
1023   STDAPI_(ULONG) AVIFileAddRef (PAVIFILE pfile);
1024   STDAPI_(ULONG) AVIFileRelease (PAVIFILE pfile);
1025   STDAPI AVIFileOpenA (PAVIFILE *ppfile,LPCSTR szFile,UINT uMode,LPCLSID lpHandler);
1026   STDAPI AVIFileOpenW (PAVIFILE *ppfile,LPCWSTR szFile,UINT uMode,LPCLSID lpHandler);
1027   STDAPI AVIFileInfoW (PAVIFILE pfile,LPAVIFILEINFOW pfi,LONG lSize);
1028   STDAPI AVIFileInfoA (PAVIFILE pfile,LPAVIFILEINFOA pfi,LONG lSize);
1029   STDAPI AVIFileGetStream (PAVIFILE pfile,PAVISTREAM *ppavi,DWORD fccType,LONG lParam);
1030   STDAPI AVIFileCreateStreamW (PAVIFILE pfile,PAVISTREAM *ppavi,AVISTREAMINFOW *psi);
1031   STDAPI AVIFileCreateStreamA (PAVIFILE pfile,PAVISTREAM *ppavi,AVISTREAMINFOA *psi);
1032   STDAPI AVIFileWriteData (PAVIFILE pfile,DWORD ckid,LPVOID lpData,LONG cbData);
1033   STDAPI AVIFileReadData (PAVIFILE pfile,DWORD ckid,LPVOID lpData,LONG *lpcbData);
1034   STDAPI AVIFileEndRecord (PAVIFILE pfile);
1035   STDAPI_(ULONG) AVIStreamAddRef (PAVISTREAM pavi);
1036   STDAPI_(ULONG) AVIStreamRelease (PAVISTREAM pavi);
1037   STDAPI AVIStreamInfoW (PAVISTREAM pavi,LPAVISTREAMINFOW psi,LONG lSize);
1038   STDAPI AVIStreamInfoA (PAVISTREAM pavi,LPAVISTREAMINFOA psi,LONG lSize);
1039   STDAPI_(LONG) AVIStreamFindSample(PAVISTREAM pavi,LONG lPos,LONG lFlags);
1040   STDAPI AVIStreamReadFormat (PAVISTREAM pavi,LONG lPos,LPVOID lpFormat,LONG *lpcbFormat);
1041   STDAPI AVIStreamSetFormat (PAVISTREAM pavi,LONG lPos,LPVOID lpFormat,LONG cbFormat);
1042   STDAPI AVIStreamReadData (PAVISTREAM pavi,DWORD fcc,LPVOID lp,LONG *lpcb);
1043   STDAPI AVIStreamWriteData (PAVISTREAM pavi,DWORD fcc,LPVOID lp,LONG cb);
1044   STDAPI AVIStreamRead (PAVISTREAM pavi,LONG lStart,LONG lSamples,LPVOID lpBuffer,LONG cbBuffer,LONG *plBytes,LONG *plSamples);
1045 #define AVISTREAMREAD_CONVENIENT (__MSABI_LONG(-1))
1046   STDAPI AVIStreamWrite (PAVISTREAM pavi,LONG lStart,LONG lSamples,LPVOID lpBuffer,LONG cbBuffer,DWORD dwFlags,LONG *plSampWritten,LONG *plBytesWritten);
1047   STDAPI_(LONG) AVIStreamStart (PAVISTREAM pavi);
1048   STDAPI_(LONG) AVIStreamLength (PAVISTREAM pavi);
1049   STDAPI_(LONG) AVIStreamTimeToSample (PAVISTREAM pavi,LONG lTime);
1050   STDAPI_(LONG) AVIStreamSampleToTime (PAVISTREAM pavi,LONG lSample);
1051   STDAPI AVIStreamBeginStreaming(PAVISTREAM pavi,LONG lStart,LONG lEnd,LONG lRate);
1052   STDAPI AVIStreamEndStreaming(PAVISTREAM pavi);
1053   STDAPI_(PGETFRAME) AVIStreamGetFrameOpen(PAVISTREAM pavi,LPBITMAPINFOHEADER lpbiWanted);
1054   STDAPI_(LPVOID) AVIStreamGetFrame(PGETFRAME pg,LONG lPos);
1055   STDAPI AVIStreamGetFrameClose(PGETFRAME pg);
1056   STDAPI AVIStreamOpenFromFileA(PAVISTREAM *ppavi,LPCSTR szFile,DWORD fccType,LONG lParam,UINT mode,CLSID *pclsidHandler);
1057   STDAPI AVIStreamOpenFromFileW(PAVISTREAM *ppavi,LPCWSTR szFile,DWORD fccType,LONG lParam,UINT mode,CLSID *pclsidHandler);
1058   STDAPI AVIStreamCreate(PAVISTREAM *ppavi,LONG lParam1,LONG lParam2,CLSID *pclsidHandler);
1059 
1060 #define FIND_DIR __MSABI_LONG(0x0000000F)
1061 #define FIND_NEXT __MSABI_LONG(0x00000001)
1062 #define FIND_PREV __MSABI_LONG(0x00000004)
1063 #define FIND_FROM_START __MSABI_LONG(0x00000008)
1064 
1065 #define FIND_TYPE __MSABI_LONG(0x000000F0)
1066 #define FIND_KEY __MSABI_LONG(0x00000010)
1067 #define FIND_ANY __MSABI_LONG(0x00000020)
1068 #define FIND_FORMAT __MSABI_LONG(0x00000040)
1069 
1070 #define FIND_RET __MSABI_LONG(0x0000F000)
1071 #define FIND_POS __MSABI_LONG(0x00000000)
1072 #define FIND_LENGTH __MSABI_LONG(0x00001000)
1073 #define FIND_OFFSET __MSABI_LONG(0x00002000)
1074 #define FIND_SIZE __MSABI_LONG(0x00003000)
1075 #define FIND_INDEX __MSABI_LONG(0x00004000)
1076 
1077 #define AVIStreamFindKeyFrame AVIStreamFindSample
1078 #define FindKeyFrame FindSample
1079 
1080 #define AVIStreamClose AVIStreamRelease
1081 #define AVIFileClose AVIFileRelease
1082 #define AVIStreamInit AVIFileInit
1083 #define AVIStreamExit AVIFileExit
1084 
1085 #define SEARCH_NEAREST FIND_PREV
1086 #define SEARCH_BACKWARD FIND_PREV
1087 #define SEARCH_FORWARD FIND_NEXT
1088 #define SEARCH_KEY FIND_KEY
1089 #define SEARCH_ANY FIND_ANY
1090 
1091 #define AVIStreamSampleToSample(pavi1,pavi2,l) AVIStreamTimeToSample(pavi1,AVIStreamSampleToTime(pavi2,l))
1092 #define AVIStreamNextSample(pavi,l) AVIStreamFindSample(pavi,l+1,FIND_NEXT|FIND_ANY)
1093 #define AVIStreamPrevSample(pavi,l) AVIStreamFindSample(pavi,l-1,FIND_PREV|FIND_ANY)
1094 #define AVIStreamNearestSample(pavi,l) AVIStreamFindSample(pavi,l,FIND_PREV|FIND_ANY)
1095 #define AVIStreamNextKeyFrame(pavi,l) AVIStreamFindSample(pavi,l+1,FIND_NEXT|FIND_KEY)
1096 #define AVIStreamPrevKeyFrame(pavi,l) AVIStreamFindSample(pavi,l-1,FIND_PREV|FIND_KEY)
1097 #define AVIStreamNearestKeyFrame(pavi,l) AVIStreamFindSample(pavi,l,FIND_PREV|FIND_KEY)
1098 #define AVIStreamIsKeyFrame(pavi,l) (AVIStreamNearestKeyFrame(pavi,l)==l)
1099 #define AVIStreamPrevSampleTime(pavi,t) AVIStreamSampleToTime(pavi,AVIStreamPrevSample(pavi,AVIStreamTimeToSample(pavi,t)))
1100 #define AVIStreamNextSampleTime(pavi,t) AVIStreamSampleToTime(pavi,AVIStreamNextSample(pavi,AVIStreamTimeToSample(pavi,t)))
1101 #define AVIStreamNearestSampleTime(pavi,t) AVIStreamSampleToTime(pavi,AVIStreamNearestSample(pavi,AVIStreamTimeToSample(pavi,t)))
1102 #define AVIStreamNextKeyFrameTime(pavi,t) AVIStreamSampleToTime(pavi,AVIStreamNextKeyFrame(pavi,AVIStreamTimeToSample(pavi,t)))
1103 #define AVIStreamPrevKeyFrameTime(pavi,t) AVIStreamSampleToTime(pavi,AVIStreamPrevKeyFrame(pavi,AVIStreamTimeToSample(pavi,t)))
1104 #define AVIStreamNearestKeyFrameTime(pavi,t) AVIStreamSampleToTime(pavi,AVIStreamNearestKeyFrame(pavi,AVIStreamTimeToSample(pavi,t)))
1105 #define AVIStreamStartTime(pavi) AVIStreamSampleToTime(pavi,AVIStreamStart(pavi))
1106 #define AVIStreamLengthTime(pavi) AVIStreamSampleToTime(pavi,AVIStreamLength(pavi))
1107 #define AVIStreamEnd(pavi) (AVIStreamStart(pavi) + AVIStreamLength(pavi))
1108 #define AVIStreamEndTime(pavi) AVIStreamSampleToTime(pavi,AVIStreamEnd(pavi))
1109 #define AVIStreamSampleSize(pavi,lPos,plSize) AVIStreamRead(pavi,lPos,1,NULL,(LONG)0,plSize,NULL)
1110 #define AVIStreamFormatSize(pavi,lPos,plSize) AVIStreamReadFormat(pavi,lPos,NULL,plSize)
1111 #define AVIStreamDataSize(pavi,fcc,plSize) AVIStreamReadData(pavi,fcc,NULL,plSize)
1112 
1113 #define AVStreamNextKeyFrame(pavi,pos) AVIStreamFindSample(pavi, pos + 1, FIND_NEXT | FIND_KEY)
1114 #define AVStreamPrevKeyFrame(pavi,pos) AVIStreamFindSample(pavi, pos - 1, FIND_NEXT | FIND_KEY)
1115 
1116 #ifndef comptypeDIB
1117 #define comptypeDIB mmioFOURCC('D','I','B',' ')
1118 #endif
1119 
1120 #define AVISave __MINGW_NAME_AW(AVISave)
1121 #define AVISaveV __MINGW_NAME_AW(AVISaveV)
1122 #define AVIBuildFilter __MINGW_NAME_AW(AVIBuildFilter)
1123 #define EditStreamSetInfo __MINGW_NAME_AW(EditStreamSetInfo)
1124 #define EditStreamSetName __MINGW_NAME_AW(EditStreamSetName)
1125 
1126   STDAPI AVIMakeCompressedStream(PAVISTREAM *ppsCompressed,PAVISTREAM ppsSource,AVICOMPRESSOPTIONS *lpOptions,CLSID *pclsidHandler);
1127   EXTERN_C HRESULT CDECL AVISaveA (LPCSTR szFile,CLSID *pclsidHandler,AVISAVECALLBACK lpfnCallback,int nStreams,PAVISTREAM pfile,LPAVICOMPRESSOPTIONS lpOptions,...);
1128   STDAPI AVISaveVA(LPCSTR szFile,CLSID *pclsidHandler,AVISAVECALLBACK lpfnCallback,int nStreams,PAVISTREAM *ppavi,LPAVICOMPRESSOPTIONS *plpOptions);
1129   EXTERN_C HRESULT CDECL AVISaveW (LPCWSTR szFile,CLSID *pclsidHandler,AVISAVECALLBACK lpfnCallback,int nStreams,PAVISTREAM pfile,LPAVICOMPRESSOPTIONS lpOptions,...);
1130   STDAPI AVISaveVW(LPCWSTR szFile,CLSID *pclsidHandler,AVISAVECALLBACK lpfnCallback,int nStreams,PAVISTREAM *ppavi,LPAVICOMPRESSOPTIONS *plpOptions);
1131   STDAPI_(INT_PTR) AVISaveOptions(HWND hwnd,UINT uiFlags,int nStreams,PAVISTREAM *ppavi,LPAVICOMPRESSOPTIONS *plpOptions);
1132   STDAPI AVISaveOptionsFree(int nStreams,LPAVICOMPRESSOPTIONS *plpOptions);
1133   STDAPI AVIBuildFilterW(LPWSTR lpszFilter,LONG cbFilter,WINBOOL fSaving);
1134   STDAPI AVIBuildFilterA(LPSTR lpszFilter,LONG cbFilter,WINBOOL fSaving);
1135   STDAPI AVIMakeFileFromStreams(PAVIFILE *ppfile,int nStreams,PAVISTREAM *papStreams);
1136   STDAPI AVIMakeStreamFromClipboard(UINT cfFormat,HANDLE hGlobal,PAVISTREAM *ppstream);
1137   STDAPI AVIPutFileOnClipboard(PAVIFILE pf);
1138   STDAPI AVIGetFromClipboard(PAVIFILE *lppf);
1139   STDAPI AVIClearClipboard(void);
1140   STDAPI CreateEditableStream(PAVISTREAM *ppsEditable,PAVISTREAM psSource);
1141   STDAPI EditStreamCut(PAVISTREAM pavi,LONG *plStart,LONG *plLength,PAVISTREAM *ppResult);
1142   STDAPI EditStreamCopy(PAVISTREAM pavi,LONG *plStart,LONG *plLength,PAVISTREAM *ppResult);
1143   STDAPI EditStreamPaste(PAVISTREAM pavi,LONG *plPos,LONG *plLength,PAVISTREAM pstream,LONG lStart,LONG lEnd);
1144   STDAPI EditStreamClone(PAVISTREAM pavi,PAVISTREAM *ppResult);
1145   STDAPI EditStreamSetNameA(PAVISTREAM pavi,LPCSTR lpszName);
1146   STDAPI EditStreamSetNameW(PAVISTREAM pavi,LPCWSTR lpszName);
1147   STDAPI EditStreamSetInfoW(PAVISTREAM pavi,LPAVISTREAMINFOW lpInfo,LONG cbInfo);
1148   STDAPI EditStreamSetInfoA(PAVISTREAM pavi,LPAVISTREAMINFOA lpInfo,LONG cbInfo);
1149 
1150 #ifndef AVIERR_OK
1151 #define AVIERR_OK __MSABI_LONG(0)
1152 
1153 #define MAKE_AVIERR(error) MAKE_SCODE(SEVERITY_ERROR,FACILITY_ITF,0x4000 + error)
1154 
1155 #define AVIERR_UNSUPPORTED MAKE_AVIERR(101)
1156 #define AVIERR_BADFORMAT MAKE_AVIERR(102)
1157 #define AVIERR_MEMORY MAKE_AVIERR(103)
1158 #define AVIERR_INTERNAL MAKE_AVIERR(104)
1159 #define AVIERR_BADFLAGS MAKE_AVIERR(105)
1160 #define AVIERR_BADPARAM MAKE_AVIERR(106)
1161 #define AVIERR_BADSIZE MAKE_AVIERR(107)
1162 #define AVIERR_BADHANDLE MAKE_AVIERR(108)
1163 #define AVIERR_FILEREAD MAKE_AVIERR(109)
1164 #define AVIERR_FILEWRITE MAKE_AVIERR(110)
1165 #define AVIERR_FILEOPEN MAKE_AVIERR(111)
1166 #define AVIERR_COMPRESSOR MAKE_AVIERR(112)
1167 #define AVIERR_NOCOMPRESSOR MAKE_AVIERR(113)
1168 #define AVIERR_READONLY MAKE_AVIERR(114)
1169 #define AVIERR_NODATA MAKE_AVIERR(115)
1170 #define AVIERR_BUFFERTOOSMALL MAKE_AVIERR(116)
1171 #define AVIERR_CANTCOMPRESS MAKE_AVIERR(117)
1172 #define AVIERR_USERABORT MAKE_AVIERR(198)
1173 #define AVIERR_ERROR MAKE_AVIERR(199)
1174 #endif
1175 #endif
1176 
1177 #ifndef NOMCIWND
1178 
1179 #ifdef __cplusplus
1180 #define MCIWndSM ::SendMessage
1181 #else
1182 #define MCIWndSM SendMessage
1183 #endif
1184 
1185 #define MCIWND_WINDOW_CLASS TEXT("MCIWndClass")
1186 
1187 #define MCIWndCreate __MINGW_NAME_AW(MCIWndCreate)
1188 
1189   HWND WINAPIV MCIWndCreateA(HWND hwndParent,HINSTANCE hInstance,DWORD dwStyle,LPCSTR szFile);
1190   HWND WINAPIV MCIWndCreateW(HWND hwndParent,HINSTANCE hInstance,DWORD dwStyle,LPCWSTR szFile);
1191   WINBOOL WINAPIV MCIWndRegisterClass(void);
1192 
1193 #define MCIWNDOPENF_NEW 0x0001
1194 
1195 #define MCIWNDF_NOAUTOSIZEWINDOW 0x0001
1196 #define MCIWNDF_NOPLAYBAR 0x0002
1197 #define MCIWNDF_NOAUTOSIZEMOVIE 0x0004
1198 #define MCIWNDF_NOMENU 0x0008
1199 #define MCIWNDF_SHOWNAME 0x0010
1200 #define MCIWNDF_SHOWPOS 0x0020
1201 #define MCIWNDF_SHOWMODE 0x0040
1202 #define MCIWNDF_SHOWALL 0x0070
1203 
1204 #define MCIWNDF_NOTIFYMODE 0x0100
1205 #define MCIWNDF_NOTIFYPOS 0x0200
1206 #define MCIWNDF_NOTIFYSIZE 0x0400
1207 #define MCIWNDF_NOTIFYERROR 0x1000
1208 #define MCIWNDF_NOTIFYALL 0x1F00
1209 
1210 #define MCIWNDF_NOTIFYANSI 0x0080
1211 
1212 #define MCIWNDF_NOTIFYMEDIAA 0x0880
1213 #define MCIWNDF_NOTIFYMEDIAW 0x0800
1214 
1215 #define MCIWNDF_NOTIFYMEDIA __MINGW_NAME_AW(MCIWNDF_NOTIFYMEDIA)
1216 
1217 #define MCIWNDF_RECORD 0x2000
1218 #define MCIWNDF_NOERRORDLG 0x4000
1219 #define MCIWNDF_NOOPEN 0x8000
1220 
1221 #define MCIWndCanPlay(hwnd) (WINBOOL)MCIWndSM(hwnd,MCIWNDM_CAN_PLAY,(WPARAM)0,(LPARAM)0)
1222 #define MCIWndCanRecord(hwnd) (WINBOOL)MCIWndSM(hwnd,MCIWNDM_CAN_RECORD,(WPARAM)0,(LPARAM)0)
1223 #define MCIWndCanSave(hwnd) (WINBOOL)MCIWndSM(hwnd,MCIWNDM_CAN_SAVE,(WPARAM)0,(LPARAM)0)
1224 #define MCIWndCanWindow(hwnd) (WINBOOL)MCIWndSM(hwnd,MCIWNDM_CAN_WINDOW,(WPARAM)0,(LPARAM)0)
1225 #define MCIWndCanEject(hwnd) (WINBOOL)MCIWndSM(hwnd,MCIWNDM_CAN_EJECT,(WPARAM)0,(LPARAM)0)
1226 #define MCIWndCanConfig(hwnd) (WINBOOL)MCIWndSM(hwnd,MCIWNDM_CAN_CONFIG,(WPARAM)0,(LPARAM)0)
1227 #define MCIWndPaletteKick(hwnd) (WINBOOL)MCIWndSM(hwnd,MCIWNDM_PALETTEKICK,(WPARAM)0,(LPARAM)0)
1228 
1229 #define MCIWndSave(hwnd,szFile) (LONG)MCIWndSM(hwnd,MCI_SAVE,(WPARAM)0,(LPARAM)(LPVOID)(szFile))
1230 #define MCIWndSaveDialog(hwnd) MCIWndSave(hwnd,-1)
1231 
1232 #define MCIWndNew(hwnd,lp) (LONG)MCIWndSM(hwnd,MCIWNDM_NEW,(WPARAM)0,(LPARAM)(LPVOID)(lp))
1233 
1234 #define MCIWndRecord(hwnd) (LONG)MCIWndSM(hwnd,MCI_RECORD,(WPARAM)0,(LPARAM)0)
1235 #define MCIWndOpen(hwnd,sz,f) (LONG)MCIWndSM(hwnd,MCIWNDM_OPEN,(WPARAM)(UINT)(f),(LPARAM)(LPVOID)(sz))
1236 #define MCIWndOpenDialog(hwnd) MCIWndOpen(hwnd,-1,0)
1237 #define MCIWndClose(hwnd) (LONG)MCIWndSM(hwnd,MCI_CLOSE,(WPARAM)0,(LPARAM)0)
1238 #define MCIWndPlay(hwnd) (LONG)MCIWndSM(hwnd,MCI_PLAY,(WPARAM)0,(LPARAM)0)
1239 #define MCIWndStop(hwnd) (LONG)MCIWndSM(hwnd,MCI_STOP,(WPARAM)0,(LPARAM)0)
1240 #define MCIWndPause(hwnd) (LONG)MCIWndSM(hwnd,MCI_PAUSE,(WPARAM)0,(LPARAM)0)
1241 #define MCIWndResume(hwnd) (LONG)MCIWndSM(hwnd,MCI_RESUME,(WPARAM)0,(LPARAM)0)
1242 #define MCIWndSeek(hwnd,lPos) (LONG)MCIWndSM(hwnd,MCI_SEEK,(WPARAM)0,(LPARAM)(LONG)(lPos))
1243 #define MCIWndEject(hwnd) (LONG)MCIWndSM(hwnd,MCIWNDM_EJECT,(WPARAM)0,(LPARAM)0)
1244 
1245 #define MCIWndHome(hwnd) MCIWndSeek(hwnd,MCIWND_START)
1246 #define MCIWndEnd(hwnd) MCIWndSeek(hwnd,MCIWND_END)
1247 
1248 #define MCIWndGetSource(hwnd,prc) (LONG)MCIWndSM(hwnd,MCIWNDM_GET_SOURCE,(WPARAM)0,(LPARAM)(LPRECT)(prc))
1249 #define MCIWndPutSource(hwnd,prc) (LONG)MCIWndSM(hwnd,MCIWNDM_PUT_SOURCE,(WPARAM)0,(LPARAM)(LPRECT)(prc))
1250 
1251 #define MCIWndGetDest(hwnd,prc) (LONG)MCIWndSM(hwnd,MCIWNDM_GET_DEST,(WPARAM)0,(LPARAM)(LPRECT)(prc))
1252 #define MCIWndPutDest(hwnd,prc) (LONG)MCIWndSM(hwnd,MCIWNDM_PUT_DEST,(WPARAM)0,(LPARAM)(LPRECT)(prc))
1253 
1254 #define MCIWndPlayReverse(hwnd) (LONG)MCIWndSM(hwnd,MCIWNDM_PLAYREVERSE,(WPARAM)0,(LPARAM)0)
1255 #define MCIWndPlayFrom(hwnd,lPos) (LONG)MCIWndSM(hwnd,MCIWNDM_PLAYFROM,(WPARAM)0,(LPARAM)(LONG)(lPos))
1256 #define MCIWndPlayTo(hwnd,lPos) (LONG)MCIWndSM(hwnd,MCIWNDM_PLAYTO,(WPARAM)0,(LPARAM)(LONG)(lPos))
1257 #define MCIWndPlayFromTo(hwnd,lStart,lEnd) (MCIWndSeek(hwnd,lStart),MCIWndPlayTo(hwnd,lEnd))
1258 
1259 #define MCIWndGetDeviceID(hwnd) (UINT)MCIWndSM(hwnd,MCIWNDM_GETDEVICEID,(WPARAM)0,(LPARAM)0)
1260 #define MCIWndGetAlias(hwnd) (UINT)MCIWndSM(hwnd,MCIWNDM_GETALIAS,(WPARAM)0,(LPARAM)0)
1261 #define MCIWndGetMode(hwnd,lp,len) (LONG)MCIWndSM(hwnd,MCIWNDM_GETMODE,(WPARAM)(UINT)(len),(LPARAM)(LPTSTR)(lp))
1262 #define MCIWndGetPosition(hwnd) (LONG)MCIWndSM(hwnd,MCIWNDM_GETPOSITION,(WPARAM)0,(LPARAM)0)
1263 #define MCIWndGetPositionString(hwnd,lp,len) (LONG)MCIWndSM(hwnd,MCIWNDM_GETPOSITION,(WPARAM)(UINT)(len),(LPARAM)(LPTSTR)(lp))
1264 #define MCIWndGetStart(hwnd) (LONG)MCIWndSM(hwnd,MCIWNDM_GETSTART,(WPARAM)0,(LPARAM)0)
1265 #define MCIWndGetLength(hwnd) (LONG)MCIWndSM(hwnd,MCIWNDM_GETLENGTH,(WPARAM)0,(LPARAM)0)
1266 #define MCIWndGetEnd(hwnd) (LONG)MCIWndSM(hwnd,MCIWNDM_GETEND,(WPARAM)0,(LPARAM)0)
1267 
1268 #define MCIWndStep(hwnd,n) (LONG)MCIWndSM(hwnd,MCI_STEP,(WPARAM)0,(LPARAM)(__LONG32)(n))
1269 
1270 #define MCIWndDestroy(hwnd) (VOID)MCIWndSM(hwnd,WM_CLOSE,(WPARAM)0,(LPARAM)0)
1271 #define MCIWndSetZoom(hwnd,iZoom) (VOID)MCIWndSM(hwnd,MCIWNDM_SETZOOM,(WPARAM)0,(LPARAM)(UINT)(iZoom))
1272 #define MCIWndGetZoom(hwnd) (UINT)MCIWndSM(hwnd,MCIWNDM_GETZOOM,(WPARAM)0,(LPARAM)0)
1273 #define MCIWndSetVolume(hwnd,iVol) (LONG)MCIWndSM(hwnd,MCIWNDM_SETVOLUME,(WPARAM)0,(LPARAM)(UINT)(iVol))
1274 #define MCIWndGetVolume(hwnd) (LONG)MCIWndSM(hwnd,MCIWNDM_GETVOLUME,(WPARAM)0,(LPARAM)0)
1275 #define MCIWndSetSpeed(hwnd,iSpeed) (LONG)MCIWndSM(hwnd,MCIWNDM_SETSPEED,(WPARAM)0,(LPARAM)(UINT)(iSpeed))
1276 #define MCIWndGetSpeed(hwnd) (LONG)MCIWndSM(hwnd,MCIWNDM_GETSPEED,(WPARAM)0,(LPARAM)0)
1277 #define MCIWndSetTimeFormat(hwnd,lp) (LONG)MCIWndSM(hwnd,MCIWNDM_SETTIMEFORMAT,(WPARAM)0,(LPARAM)(LPTSTR)(lp))
1278 #define MCIWndGetTimeFormat(hwnd,lp,len) (LONG)MCIWndSM(hwnd,MCIWNDM_GETTIMEFORMAT,(WPARAM)(UINT)(len),(LPARAM)(LPTSTR)(lp))
1279 #define MCIWndValidateMedia(hwnd) (VOID)MCIWndSM(hwnd,MCIWNDM_VALIDATEMEDIA,(WPARAM)0,(LPARAM)0)
1280 
1281 #define MCIWndSetRepeat(hwnd,f) (void)MCIWndSM(hwnd,MCIWNDM_SETREPEAT,(WPARAM)0,(LPARAM)(WINBOOL)(f))
1282 #define MCIWndGetRepeat(hwnd) (WINBOOL)MCIWndSM(hwnd,MCIWNDM_GETREPEAT,(WPARAM)0,(LPARAM)0)
1283 
1284 #define MCIWndUseFrames(hwnd) MCIWndSetTimeFormat(hwnd,TEXT("frames"))
1285 #define MCIWndUseTime(hwnd) MCIWndSetTimeFormat(hwnd,TEXT("ms"))
1286 
1287 #define MCIWndSetActiveTimer(hwnd,active) (VOID)MCIWndSM(hwnd,MCIWNDM_SETACTIVETIMER,(WPARAM)(UINT)(active),(LPARAM)0)
1288 #define MCIWndSetInactiveTimer(hwnd,inactive) (VOID)MCIWndSM(hwnd,MCIWNDM_SETINACTIVETIMER,(WPARAM)(UINT)(inactive),(LPARAM)0)
1289 #define MCIWndSetTimers(hwnd,active,inactive) (VOID)MCIWndSM(hwnd,MCIWNDM_SETTIMERS,(WPARAM)(UINT)(active),(LPARAM)(UINT)(inactive))
1290 #define MCIWndGetActiveTimer(hwnd) (UINT)MCIWndSM(hwnd,MCIWNDM_GETACTIVETIMER,(WPARAM)0,(LPARAM)0);
1291 #define MCIWndGetInactiveTimer(hwnd) (UINT)MCIWndSM(hwnd,MCIWNDM_GETINACTIVETIMER,(WPARAM)0,(LPARAM)0);
1292 
1293 #define MCIWndRealize(hwnd,fBkgnd) (LONG)MCIWndSM(hwnd,MCIWNDM_REALIZE,(WPARAM)(WINBOOL)(fBkgnd),(LPARAM)0)
1294 
1295 #define MCIWndSendString(hwnd,sz) (LONG)MCIWndSM(hwnd,MCIWNDM_SENDSTRING,(WPARAM)0,(LPARAM)(LPTSTR)(sz))
1296 #define MCIWndReturnString(hwnd,lp,len) (LONG)MCIWndSM(hwnd,MCIWNDM_RETURNSTRING,(WPARAM)(UINT)(len),(LPARAM)(LPVOID)(lp))
1297 #define MCIWndGetError(hwnd,lp,len) (LONG)MCIWndSM(hwnd,MCIWNDM_GETERROR,(WPARAM)(UINT)(len),(LPARAM)(LPVOID)(lp))
1298 
1299 #define MCIWndGetPalette(hwnd) (HPALETTE)MCIWndSM(hwnd,MCIWNDM_GETPALETTE,(WPARAM)0,(LPARAM)0)
1300 #define MCIWndSetPalette(hwnd,hpal) (LONG)MCIWndSM(hwnd,MCIWNDM_SETPALETTE,(WPARAM)(HPALETTE)(hpal),(LPARAM)0)
1301 
1302 #define MCIWndGetFileName(hwnd,lp,len) (LONG)MCIWndSM(hwnd,MCIWNDM_GETFILENAME,(WPARAM)(UINT)(len),(LPARAM)(LPVOID)(lp))
1303 #define MCIWndGetDevice(hwnd,lp,len) (LONG)MCIWndSM(hwnd,MCIWNDM_GETDEVICE,(WPARAM)(UINT)(len),(LPARAM)(LPVOID)(lp))
1304 
1305 #define MCIWndGetStyles(hwnd) (UINT)MCIWndSM(hwnd,MCIWNDM_GETSTYLES,(WPARAM)0,(LPARAM)0)
1306 #define MCIWndChangeStyles(hwnd,mask,value) (LONG)MCIWndSM(hwnd,MCIWNDM_CHANGESTYLES,(WPARAM)(UINT)(mask),(LPARAM)(LONG)(value))
1307 
1308 #define MCIWndOpenInterface(hwnd,pUnk) (LONG)MCIWndSM(hwnd,MCIWNDM_OPENINTERFACE,(WPARAM)0,(LPARAM)(LPUNKNOWN)(pUnk))
1309 
1310 #define MCIWndSetOwner(hwnd,hwndP) (LONG)MCIWndSM(hwnd,MCIWNDM_SETOWNER,(WPARAM)(hwndP),(LPARAM)0)
1311 
1312 #define MCIWNDM_GETDEVICEID (WM_USER + 100)
1313 #define MCIWNDM_GETSTART (WM_USER + 103)
1314 #define MCIWNDM_GETLENGTH (WM_USER + 104)
1315 #define MCIWNDM_GETEND (WM_USER + 105)
1316 #define MCIWNDM_EJECT (WM_USER + 107)
1317 #define MCIWNDM_SETZOOM (WM_USER + 108)
1318 #define MCIWNDM_GETZOOM (WM_USER + 109)
1319 #define MCIWNDM_SETVOLUME (WM_USER + 110)
1320 #define MCIWNDM_GETVOLUME (WM_USER + 111)
1321 #define MCIWNDM_SETSPEED (WM_USER + 112)
1322 #define MCIWNDM_GETSPEED (WM_USER + 113)
1323 #define MCIWNDM_SETREPEAT (WM_USER + 114)
1324 #define MCIWNDM_GETREPEAT (WM_USER + 115)
1325 #define MCIWNDM_REALIZE (WM_USER + 118)
1326 #define MCIWNDM_VALIDATEMEDIA (WM_USER + 121)
1327 #define MCIWNDM_PLAYFROM (WM_USER + 122)
1328 #define MCIWNDM_PLAYTO (WM_USER + 123)
1329 #define MCIWNDM_GETPALETTE (WM_USER + 126)
1330 #define MCIWNDM_SETPALETTE (WM_USER + 127)
1331 #define MCIWNDM_SETTIMERS (WM_USER + 129)
1332 #define MCIWNDM_SETACTIVETIMER (WM_USER + 130)
1333 #define MCIWNDM_SETINACTIVETIMER (WM_USER + 131)
1334 #define MCIWNDM_GETACTIVETIMER (WM_USER + 132)
1335 #define MCIWNDM_GETINACTIVETIMER (WM_USER + 133)
1336 #define MCIWNDM_CHANGESTYLES (WM_USER + 135)
1337 #define MCIWNDM_GETSTYLES (WM_USER + 136)
1338 #define MCIWNDM_GETALIAS (WM_USER + 137)
1339 #define MCIWNDM_PLAYREVERSE (WM_USER + 139)
1340 #define MCIWNDM_GET_SOURCE (WM_USER + 140)
1341 #define MCIWNDM_PUT_SOURCE (WM_USER + 141)
1342 #define MCIWNDM_GET_DEST (WM_USER + 142)
1343 #define MCIWNDM_PUT_DEST (WM_USER + 143)
1344 #define MCIWNDM_CAN_PLAY (WM_USER + 144)
1345 #define MCIWNDM_CAN_WINDOW (WM_USER + 145)
1346 #define MCIWNDM_CAN_RECORD (WM_USER + 146)
1347 #define MCIWNDM_CAN_SAVE (WM_USER + 147)
1348 #define MCIWNDM_CAN_EJECT (WM_USER + 148)
1349 #define MCIWNDM_CAN_CONFIG (WM_USER + 149)
1350 #define MCIWNDM_PALETTEKICK (WM_USER + 150)
1351 #define MCIWNDM_OPENINTERFACE (WM_USER + 151)
1352 #define MCIWNDM_SETOWNER (WM_USER + 152)
1353 
1354 #define MCIWNDM_SENDSTRINGA (WM_USER + 101)
1355 #define MCIWNDM_GETPOSITIONA (WM_USER + 102)
1356 #define MCIWNDM_GETMODEA (WM_USER + 106)
1357 #define MCIWNDM_SETTIMEFORMATA (WM_USER + 119)
1358 #define MCIWNDM_GETTIMEFORMATA (WM_USER + 120)
1359 #define MCIWNDM_GETFILENAMEA (WM_USER + 124)
1360 #define MCIWNDM_GETDEVICEA (WM_USER + 125)
1361 #define MCIWNDM_GETERRORA (WM_USER + 128)
1362 #define MCIWNDM_NEWA (WM_USER + 134)
1363 #define MCIWNDM_RETURNSTRINGA (WM_USER + 138)
1364 #define MCIWNDM_OPENA (WM_USER + 153)
1365 
1366 #define MCIWNDM_SENDSTRINGW (WM_USER + 201)
1367 #define MCIWNDM_GETPOSITIONW (WM_USER + 202)
1368 #define MCIWNDM_GETMODEW (WM_USER + 206)
1369 #define MCIWNDM_SETTIMEFORMATW (WM_USER + 219)
1370 #define MCIWNDM_GETTIMEFORMATW (WM_USER + 220)
1371 #define MCIWNDM_GETFILENAMEW (WM_USER + 224)
1372 #define MCIWNDM_GETDEVICEW (WM_USER + 225)
1373 #define MCIWNDM_GETERRORW (WM_USER + 228)
1374 #define MCIWNDM_NEWW (WM_USER + 234)
1375 #define MCIWNDM_RETURNSTRINGW (WM_USER + 238)
1376 #define MCIWNDM_OPENW (WM_USER + 252)
1377 
1378 #define MCIWNDM_SENDSTRING __MINGW_NAME_AW(MCIWNDM_SENDSTRING)
1379 #define MCIWNDM_GETPOSITION __MINGW_NAME_AW(MCIWNDM_GETPOSITION)
1380 #define MCIWNDM_GETMODE __MINGW_NAME_AW(MCIWNDM_GETMODE)
1381 #define MCIWNDM_SETTIMEFORMAT __MINGW_NAME_AW(MCIWNDM_SETTIMEFORMAT)
1382 #define MCIWNDM_GETTIMEFORMAT __MINGW_NAME_AW(MCIWNDM_GETTIMEFORMAT)
1383 #define MCIWNDM_GETFILENAME __MINGW_NAME_AW(MCIWNDM_GETFILENAME)
1384 #define MCIWNDM_GETDEVICE __MINGW_NAME_AW(MCIWNDM_GETDEVICE)
1385 #define MCIWNDM_GETERROR __MINGW_NAME_AW(MCIWNDM_GETERROR)
1386 #define MCIWNDM_NEW __MINGW_NAME_AW(MCIWNDM_NEW)
1387 #define MCIWNDM_RETURNSTRING __MINGW_NAME_AW(MCIWNDM_RETURNSTRING)
1388 #define MCIWNDM_OPEN __MINGW_NAME_AW(MCIWNDM_OPEN)
1389 
1390 #define MCIWNDM_NOTIFYMODE (WM_USER + 200)
1391 #define MCIWNDM_NOTIFYPOS (WM_USER + 201)
1392 #define MCIWNDM_NOTIFYSIZE (WM_USER + 202)
1393 #define MCIWNDM_NOTIFYMEDIA (WM_USER + 203)
1394 #define MCIWNDM_NOTIFYERROR (WM_USER + 205)
1395 
1396 #define MCIWND_START -1
1397 #define MCIWND_END -2
1398 
1399 #ifndef MCI_PLAY
1400 #define MCI_CLOSE 0x0804
1401 #define MCI_PLAY 0x0806
1402 #define MCI_SEEK 0x0807
1403 #define MCI_STOP 0x0808
1404 #define MCI_PAUSE 0x0809
1405 #define MCI_STEP 0x080E
1406 #define MCI_RECORD 0x080F
1407 #define MCI_SAVE 0x0813
1408 #define MCI_CUT 0x0851
1409 #define MCI_COPY 0x0852
1410 #define MCI_PASTE 0x0853
1411 #define MCI_RESUME 0x0855
1412 #define MCI_DELETE 0x0856
1413 #endif
1414 
1415 #ifndef MCI_MODE_NOT_READY
1416 
1417 #define MCI_MODE_NOT_READY (524)
1418 #define MCI_MODE_STOP (525)
1419 #define MCI_MODE_PLAY (526)
1420 #define MCI_MODE_RECORD (527)
1421 #define MCI_MODE_SEEK (528)
1422 #define MCI_MODE_PAUSE (529)
1423 #define MCI_MODE_OPEN (530)
1424 #endif
1425 #endif
1426 
1427 #if !defined(NOAVICAP) || !defined(NOVIDEO)
1428 
1429 #ifndef _RCINVOKED
1430 
1431   DECLARE_HANDLE(HVIDEO);
1432   typedef HVIDEO *LPHVIDEO;
1433 #endif
1434 
1435   DWORD WINAPI VideoForWindowsVersion(void);
1436 
1437 #define DV_ERR_OK (0)
1438 #define DV_ERR_BASE (1)
1439 #define DV_ERR_NONSPECIFIC (DV_ERR_BASE)
1440 #define DV_ERR_BADFORMAT (DV_ERR_BASE + 1)
1441 
1442 #define DV_ERR_STILLPLAYING (DV_ERR_BASE + 2)
1443 
1444 #define DV_ERR_UNPREPARED (DV_ERR_BASE + 3)
1445 
1446 #define DV_ERR_SYNC (DV_ERR_BASE + 4)
1447 
1448 #define DV_ERR_TOOMANYCHANNELS (DV_ERR_BASE + 5)
1449 
1450 #define DV_ERR_NOTDETECTED (DV_ERR_BASE + 6)
1451 #define DV_ERR_BADINSTALL (DV_ERR_BASE + 7)
1452 #define DV_ERR_CREATEPALETTE (DV_ERR_BASE + 8)
1453 #define DV_ERR_SIZEFIELD (DV_ERR_BASE + 9)
1454 #define DV_ERR_PARAM1 (DV_ERR_BASE + 10)
1455 #define DV_ERR_PARAM2 (DV_ERR_BASE + 11)
1456 #define DV_ERR_CONFIG1 (DV_ERR_BASE + 12)
1457 #define DV_ERR_CONFIG2 (DV_ERR_BASE + 13)
1458 #define DV_ERR_FLAGS (DV_ERR_BASE + 14)
1459 #define DV_ERR_13 (DV_ERR_BASE + 15)
1460 
1461 #define DV_ERR_NOTSUPPORTED (DV_ERR_BASE + 16)
1462 #define DV_ERR_NOMEM (DV_ERR_BASE + 17)
1463 #define DV_ERR_ALLOCATED (DV_ERR_BASE + 18)
1464 #define DV_ERR_BADDEVICEID (DV_ERR_BASE + 19)
1465 #define DV_ERR_INVALHANDLE (DV_ERR_BASE + 20)
1466 #define DV_ERR_BADERRNUM (DV_ERR_BASE + 21)
1467 #define DV_ERR_NO_BUFFERS (DV_ERR_BASE + 22)
1468 
1469 #define DV_ERR_MEM_CONFLICT (DV_ERR_BASE + 23)
1470 #define DV_ERR_IO_CONFLICT (DV_ERR_BASE + 24)
1471 #define DV_ERR_DMA_CONFLICT (DV_ERR_BASE + 25)
1472 #define DV_ERR_INT_CONFLICT (DV_ERR_BASE + 26)
1473 #define DV_ERR_PROTECT_ONLY (DV_ERR_BASE + 27)
1474 #define DV_ERR_LASTERROR (DV_ERR_BASE + 27)
1475 
1476 #define DV_ERR_USER_MSG (DV_ERR_BASE + 1000)
1477 
1478 #ifndef _RCINVOKED
1479 
1480 #ifndef MM_DRVM_OPEN
1481 #define MM_DRVM_OPEN 0x3D0
1482 #define MM_DRVM_CLOSE 0x3D1
1483 #define MM_DRVM_DATA 0x3D2
1484 #define MM_DRVM_ERROR 0x3D3
1485 #endif
1486 
1487 #define DV_VM_OPEN MM_DRVM_OPEN
1488 #define DV_VM_CLOSE MM_DRVM_CLOSE
1489 #define DV_VM_DATA MM_DRVM_DATA
1490 #define DV_VM_ERROR MM_DRVM_ERROR
1491 
1492   typedef struct videohdr_tag {
1493     LPBYTE lpData;
1494     DWORD dwBufferLength;
1495     DWORD dwBytesUsed;
1496     DWORD dwTimeCaptured;
1497     DWORD_PTR dwUser;
1498     DWORD dwFlags;
1499     DWORD_PTR dwReserved[4];
1500   } VIDEOHDR, NEAR *PVIDEOHDR, FAR * LPVIDEOHDR;
1501 
1502 #define VHDR_DONE 0x00000001
1503 #define VHDR_PREPARED 0x00000002
1504 #define VHDR_INQUEUE 0x00000004
1505 #define VHDR_KEYFRAME 0x00000008
1506 #define VHDR_VALID 0x0000000F
1507 
1508   typedef struct channel_caps_tag {
1509     DWORD dwFlags;
1510     DWORD dwSrcRectXMod;
1511     DWORD dwSrcRectYMod;
1512     DWORD dwSrcRectWidthMod;
1513     DWORD dwSrcRectHeightMod;
1514     DWORD dwDstRectXMod;
1515     DWORD dwDstRectYMod;
1516     DWORD dwDstRectWidthMod;
1517     DWORD dwDstRectHeightMod;
1518   } CHANNEL_CAPS,NEAR *PCHANNEL_CAPS,*LPCHANNEL_CAPS;
1519 
1520 #define VCAPS_OVERLAY 0x00000001
1521 #define VCAPS_SRC_CAN_CLIP 0x00000002
1522 #define VCAPS_DST_CAN_CLIP 0x00000004
1523 #define VCAPS_CAN_SCALE 0x00000008
1524 
1525 #define VIDEO_EXTERNALIN 0x0001
1526 #define VIDEO_EXTERNALOUT 0x0002
1527 #define VIDEO_IN 0x0004
1528 #define VIDEO_OUT 0x0008
1529 
1530 #define VIDEO_DLG_QUERY 0x0010
1531 
1532 #define VIDEO_CONFIGURE_QUERY 0x8000
1533 
1534 #define VIDEO_CONFIGURE_SET 0x1000
1535 
1536 #define VIDEO_CONFIGURE_GET 0x2000
1537 #define VIDEO_CONFIGURE_QUERYSIZE 0x0001
1538 
1539 #define VIDEO_CONFIGURE_CURRENT 0x0010
1540 #define VIDEO_CONFIGURE_NOMINAL 0x0020
1541 #define VIDEO_CONFIGURE_MIN 0x0040
1542 #define VIDEO_CONFIGURE_MAX 0x0080
1543 
1544 #define DVM_USER 0X4000
1545 
1546 #define DVM_CONFIGURE_START 0x1000
1547 #define DVM_CONFIGURE_END 0x1FFF
1548 
1549 #define DVM_PALETTE (DVM_CONFIGURE_START + 1)
1550 #define DVM_FORMAT (DVM_CONFIGURE_START + 2)
1551 #define DVM_PALETTERGB555 (DVM_CONFIGURE_START + 3)
1552 #define DVM_SRC_RECT (DVM_CONFIGURE_START + 4)
1553 #define DVM_DST_RECT (DVM_CONFIGURE_START + 5)
1554 #endif
1555 #endif
1556 
1557 #ifndef NOAVICAP
1558 #ifdef __cplusplus
1559 
1560 #define AVICapSM(hwnd,m,w,l) ((::IsWindow(hwnd)) ? ::SendMessage(hwnd,m,w,l) : 0)
1561 #else
1562 
1563 #define AVICapSM(hwnd,m,w,l) ((IsWindow(hwnd)) ? SendMessage(hwnd,m,w,l) : 0)
1564 #endif
1565 
1566 #ifndef RC_INVOKED
1567 
1568 #define WM_CAP_START WM_USER
1569 
1570 #define WM_CAP_UNICODE_START WM_USER+100
1571 
1572 #define WM_CAP_GET_CAPSTREAMPTR (WM_CAP_START+ 1)
1573 
1574 #define WM_CAP_SET_CALLBACK_ERRORW (WM_CAP_UNICODE_START+ 2)
1575 #define WM_CAP_SET_CALLBACK_STATUSW (WM_CAP_UNICODE_START+ 3)
1576 #define WM_CAP_SET_CALLBACK_ERRORA (WM_CAP_START+ 2)
1577 #define WM_CAP_SET_CALLBACK_STATUSA (WM_CAP_START+ 3)
1578 
1579 #define WM_CAP_SET_CALLBACK_ERROR __MINGW_NAME_AW(WM_CAP_SET_CALLBACK_ERROR)
1580 #define WM_CAP_SET_CALLBACK_STATUS __MINGW_NAME_AW(WM_CAP_SET_CALLBACK_STATUS)
1581 
1582 #define WM_CAP_SET_CALLBACK_YIELD (WM_CAP_START+ 4)
1583 #define WM_CAP_SET_CALLBACK_FRAME (WM_CAP_START+ 5)
1584 #define WM_CAP_SET_CALLBACK_VIDEOSTREAM (WM_CAP_START+ 6)
1585 #define WM_CAP_SET_CALLBACK_WAVESTREAM (WM_CAP_START+ 7)
1586 #define WM_CAP_GET_USER_DATA (WM_CAP_START+ 8)
1587 #define WM_CAP_SET_USER_DATA (WM_CAP_START+ 9)
1588 
1589 #define WM_CAP_DRIVER_CONNECT (WM_CAP_START+ 10)
1590 #define WM_CAP_DRIVER_DISCONNECT (WM_CAP_START+ 11)
1591 
1592 #define WM_CAP_DRIVER_GET_NAMEA (WM_CAP_START+ 12)
1593 #define WM_CAP_DRIVER_GET_VERSIONA (WM_CAP_START+ 13)
1594 #define WM_CAP_DRIVER_GET_NAMEW (WM_CAP_UNICODE_START+ 12)
1595 #define WM_CAP_DRIVER_GET_VERSIONW (WM_CAP_UNICODE_START+ 13)
1596 
1597 #define WM_CAP_DRIVER_GET_NAME __MINGW_NAME_AW(WM_CAP_DRIVER_GET_NAME)
1598 #define WM_CAP_DRIVER_GET_VERSION __MINGW_NAME_AW(WM_CAP_DRIVER_GET_VERSION)
1599 
1600 #define WM_CAP_DRIVER_GET_CAPS (WM_CAP_START+ 14)
1601 
1602 #define WM_CAP_FILE_SET_CAPTURE_FILEA (WM_CAP_START+ 20)
1603 #define WM_CAP_FILE_GET_CAPTURE_FILEA (WM_CAP_START+ 21)
1604 #define WM_CAP_FILE_SAVEASA (WM_CAP_START+ 23)
1605 #define WM_CAP_FILE_SAVEDIBA (WM_CAP_START+ 25)
1606 #define WM_CAP_FILE_SET_CAPTURE_FILEW (WM_CAP_UNICODE_START+ 20)
1607 #define WM_CAP_FILE_GET_CAPTURE_FILEW (WM_CAP_UNICODE_START+ 21)
1608 #define WM_CAP_FILE_SAVEASW (WM_CAP_UNICODE_START+ 23)
1609 #define WM_CAP_FILE_SAVEDIBW (WM_CAP_UNICODE_START+ 25)
1610 
1611 #define WM_CAP_FILE_SET_CAPTURE_FILE __MINGW_NAME_AW(WM_CAP_FILE_SET_CAPTURE_FILE)
1612 #define WM_CAP_FILE_GET_CAPTURE_FILE __MINGW_NAME_AW(WM_CAP_FILE_GET_CAPTURE_FILE)
1613 #define WM_CAP_FILE_SAVEAS __MINGW_NAME_AW(WM_CAP_FILE_SAVEAS)
1614 #define WM_CAP_FILE_SAVEDIB __MINGW_NAME_AW(WM_CAP_FILE_SAVEDIB)
1615 
1616 #define WM_CAP_FILE_ALLOCATE (WM_CAP_START+ 22)
1617 #define WM_CAP_FILE_SET_INFOCHUNK (WM_CAP_START+ 24)
1618 
1619 #define WM_CAP_EDIT_COPY (WM_CAP_START+ 30)
1620 
1621 #define WM_CAP_SET_AUDIOFORMAT (WM_CAP_START+ 35)
1622 #define WM_CAP_GET_AUDIOFORMAT (WM_CAP_START+ 36)
1623 
1624 #define WM_CAP_DLG_VIDEOFORMAT (WM_CAP_START+ 41)
1625 #define WM_CAP_DLG_VIDEOSOURCE (WM_CAP_START+ 42)
1626 #define WM_CAP_DLG_VIDEODISPLAY (WM_CAP_START+ 43)
1627 #define WM_CAP_GET_VIDEOFORMAT (WM_CAP_START+ 44)
1628 #define WM_CAP_SET_VIDEOFORMAT (WM_CAP_START+ 45)
1629 #define WM_CAP_DLG_VIDEOCOMPRESSION (WM_CAP_START+ 46)
1630 
1631 #define WM_CAP_SET_PREVIEW (WM_CAP_START+ 50)
1632 #define WM_CAP_SET_OVERLAY (WM_CAP_START+ 51)
1633 #define WM_CAP_SET_PREVIEWRATE (WM_CAP_START+ 52)
1634 #define WM_CAP_SET_SCALE (WM_CAP_START+ 53)
1635 #define WM_CAP_GET_STATUS (WM_CAP_START+ 54)
1636 #define WM_CAP_SET_SCROLL (WM_CAP_START+ 55)
1637 
1638 #define WM_CAP_GRAB_FRAME (WM_CAP_START+ 60)
1639 #define WM_CAP_GRAB_FRAME_NOSTOP (WM_CAP_START+ 61)
1640 
1641 #define WM_CAP_SEQUENCE (WM_CAP_START+ 62)
1642 #define WM_CAP_SEQUENCE_NOFILE (WM_CAP_START+ 63)
1643 #define WM_CAP_SET_SEQUENCE_SETUP (WM_CAP_START+ 64)
1644 #define WM_CAP_GET_SEQUENCE_SETUP (WM_CAP_START+ 65)
1645 
1646 #define WM_CAP_SET_MCI_DEVICEA (WM_CAP_START+ 66)
1647 #define WM_CAP_GET_MCI_DEVICEA (WM_CAP_START+ 67)
1648 #define WM_CAP_SET_MCI_DEVICEW (WM_CAP_UNICODE_START+ 66)
1649 #define WM_CAP_GET_MCI_DEVICEW (WM_CAP_UNICODE_START+ 67)
1650 
1651 #define WM_CAP_SET_MCI_DEVICE __MINGW_NAME_AW(WM_CAP_SET_MCI_DEVICE)
1652 #define WM_CAP_GET_MCI_DEVICE __MINGW_NAME_AW(WM_CAP_GET_MCI_DEVICE)
1653 
1654 #define WM_CAP_STOP (WM_CAP_START+ 68)
1655 #define WM_CAP_ABORT (WM_CAP_START+ 69)
1656 
1657 #define WM_CAP_SINGLE_FRAME_OPEN (WM_CAP_START+ 70)
1658 #define WM_CAP_SINGLE_FRAME_CLOSE (WM_CAP_START+ 71)
1659 #define WM_CAP_SINGLE_FRAME (WM_CAP_START+ 72)
1660 
1661 #define WM_CAP_PAL_OPENA (WM_CAP_START+ 80)
1662 #define WM_CAP_PAL_SAVEA (WM_CAP_START+ 81)
1663 #define WM_CAP_PAL_OPENW (WM_CAP_UNICODE_START+ 80)
1664 #define WM_CAP_PAL_SAVEW (WM_CAP_UNICODE_START+ 81)
1665 
1666 #define WM_CAP_PAL_OPEN __MINGW_NAME_AW(WM_CAP_PAL_OPEN)
1667 #define WM_CAP_PAL_SAVE __MINGW_NAME_AW(WM_CAP_PAL_SAVE)
1668 
1669 #define WM_CAP_PAL_PASTE (WM_CAP_START+ 82)
1670 #define WM_CAP_PAL_AUTOCREATE (WM_CAP_START+ 83)
1671 #define WM_CAP_PAL_MANUALCREATE (WM_CAP_START+ 84)
1672 
1673 #define WM_CAP_SET_CALLBACK_CAPCONTROL (WM_CAP_START+ 85)
1674 
1675 #define WM_CAP_UNICODE_END WM_CAP_PAL_SAVEW
1676 #define WM_CAP_END WM_CAP_UNICODE_END
1677 
1678 #define capSetCallbackOnError(hwnd,fpProc) ((WINBOOL)AVICapSM(hwnd,WM_CAP_SET_CALLBACK_ERROR,(WPARAM)0,(LPARAM)(LPVOID)(fpProc)))
1679 #define capSetCallbackOnStatus(hwnd,fpProc) ((WINBOOL)AVICapSM(hwnd,WM_CAP_SET_CALLBACK_STATUS,(WPARAM)0,(LPARAM)(LPVOID)(fpProc)))
1680 #define capSetCallbackOnYield(hwnd,fpProc) ((WINBOOL)AVICapSM(hwnd,WM_CAP_SET_CALLBACK_YIELD,(WPARAM)0,(LPARAM)(LPVOID)(fpProc)))
1681 #define capSetCallbackOnFrame(hwnd,fpProc) ((WINBOOL)AVICapSM(hwnd,WM_CAP_SET_CALLBACK_FRAME,(WPARAM)0,(LPARAM)(LPVOID)(fpProc)))
1682 #define capSetCallbackOnVideoStream(hwnd,fpProc) ((WINBOOL)AVICapSM(hwnd,WM_CAP_SET_CALLBACK_VIDEOSTREAM,(WPARAM)0,(LPARAM)(LPVOID)(fpProc)))
1683 #define capSetCallbackOnWaveStream(hwnd,fpProc) ((WINBOOL)AVICapSM(hwnd,WM_CAP_SET_CALLBACK_WAVESTREAM,(WPARAM)0,(LPARAM)(LPVOID)(fpProc)))
1684 #define capSetCallbackOnCapControl(hwnd,fpProc) ((WINBOOL)AVICapSM(hwnd,WM_CAP_SET_CALLBACK_CAPCONTROL,(WPARAM)0,(LPARAM)(LPVOID)(fpProc)))
1685 
1686 #define capSetUserData(hwnd,lUser) ((WINBOOL)AVICapSM(hwnd,WM_CAP_SET_USER_DATA,(WPARAM)0,(LPARAM)lUser))
1687 #define capGetUserData(hwnd) (AVICapSM(hwnd,WM_CAP_GET_USER_DATA,(WPARAM)0,(LPARAM)0))
1688 
1689 #define capDriverConnect(hwnd,i) ((WINBOOL)AVICapSM(hwnd,WM_CAP_DRIVER_CONNECT,(WPARAM)(i),(LPARAM)0))
1690 #define capDriverDisconnect(hwnd) ((WINBOOL)AVICapSM(hwnd,WM_CAP_DRIVER_DISCONNECT,(WPARAM)0,(LPARAM)0))
1691 #define capDriverGetName(hwnd,szName,wSize) ((WINBOOL)AVICapSM(hwnd,WM_CAP_DRIVER_GET_NAME,(WPARAM)(wSize),(LPARAM)(LPVOID)(LPTSTR)(szName)))
1692 #define capDriverGetVersion(hwnd,szVer,wSize) ((WINBOOL)AVICapSM(hwnd,WM_CAP_DRIVER_GET_VERSION,(WPARAM)(wSize),(LPARAM)(LPVOID)(LPTSTR)(szVer)))
1693 #define capDriverGetCaps(hwnd,s,wSize) ((WINBOOL)AVICapSM(hwnd,WM_CAP_DRIVER_GET_CAPS,(WPARAM)(wSize),(LPARAM)(LPVOID)(LPCAPDRIVERCAPS)(s)))
1694 
1695 #define capFileSetCaptureFile(hwnd,szName) ((WINBOOL)AVICapSM(hwnd,WM_CAP_FILE_SET_CAPTURE_FILE,(WPARAM)0,(LPARAM)(LPVOID)(LPTSTR)(szName)))
1696 #define capFileGetCaptureFile(hwnd,szName,wSize) ((WINBOOL)AVICapSM(hwnd,WM_CAP_FILE_GET_CAPTURE_FILE,(WPARAM)(wSize),(LPARAM)(LPVOID)(LPTSTR)(szName)))
1697 #define capFileAlloc(hwnd,dwSize) ((WINBOOL)AVICapSM(hwnd,WM_CAP_FILE_ALLOCATE,(WPARAM)0,(LPARAM)(DWORD)(dwSize)))
1698 #define capFileSaveAs(hwnd,szName) ((WINBOOL)AVICapSM(hwnd,WM_CAP_FILE_SAVEAS,(WPARAM)0,(LPARAM)(LPVOID)(LPTSTR)(szName)))
1699 #define capFileSetInfoChunk(hwnd,lpInfoChunk) ((WINBOOL)AVICapSM(hwnd,WM_CAP_FILE_SET_INFOCHUNK,(WPARAM)0,(LPARAM)(LPCAPINFOCHUNK)(lpInfoChunk)))
1700 #define capFileSaveDIB(hwnd,szName) ((WINBOOL)AVICapSM(hwnd,WM_CAP_FILE_SAVEDIB,(WPARAM)0,(LPARAM)(LPVOID)(LPTSTR)(szName)))
1701 
1702 #define capEditCopy(hwnd) ((WINBOOL)AVICapSM(hwnd,WM_CAP_EDIT_COPY,(WPARAM)0,(LPARAM)0))
1703 
1704 #define capSetAudioFormat(hwnd,s,wSize) ((WINBOOL)AVICapSM(hwnd,WM_CAP_SET_AUDIOFORMAT,(WPARAM)(wSize),(LPARAM)(LPVOID)(LPWAVEFORMATEX)(s)))
1705 #define capGetAudioFormat(hwnd,s,wSize) ((DWORD)AVICapSM(hwnd,WM_CAP_GET_AUDIOFORMAT,(WPARAM)(wSize),(LPARAM)(LPVOID)(LPWAVEFORMATEX)(s)))
1706 #define capGetAudioFormatSize(hwnd) ((DWORD)AVICapSM(hwnd,WM_CAP_GET_AUDIOFORMAT,(WPARAM)0,(LPARAM)0))
1707 
1708 #define capDlgVideoFormat(hwnd) ((WINBOOL)AVICapSM(hwnd,WM_CAP_DLG_VIDEOFORMAT,(WPARAM)0,(LPARAM)0))
1709 #define capDlgVideoSource(hwnd) ((WINBOOL)AVICapSM(hwnd,WM_CAP_DLG_VIDEOSOURCE,(WPARAM)0,(LPARAM)0))
1710 #define capDlgVideoDisplay(hwnd) ((WINBOOL)AVICapSM(hwnd,WM_CAP_DLG_VIDEODISPLAY,(WPARAM)0,(LPARAM)0))
1711 #define capDlgVideoCompression(hwnd) ((WINBOOL)AVICapSM(hwnd,WM_CAP_DLG_VIDEOCOMPRESSION,(WPARAM)0,(LPARAM)0))
1712 
1713 #define capGetVideoFormat(hwnd,s,wSize) ((DWORD)AVICapSM(hwnd,WM_CAP_GET_VIDEOFORMAT,(WPARAM)(wSize),(LPARAM)(LPVOID)(s)))
1714 #define capGetVideoFormatSize(hwnd) ((DWORD)AVICapSM(hwnd,WM_CAP_GET_VIDEOFORMAT,(WPARAM)0,(LPARAM)0))
1715 #define capSetVideoFormat(hwnd,s,wSize) ((WINBOOL)AVICapSM(hwnd,WM_CAP_SET_VIDEOFORMAT,(WPARAM)(wSize),(LPARAM)(LPVOID)(s)))
1716 
1717 #define capPreview(hwnd,f) ((WINBOOL)AVICapSM(hwnd,WM_CAP_SET_PREVIEW,(WPARAM)(WINBOOL)(f),(LPARAM)0))
1718 #define capPreviewRate(hwnd,wMS) ((WINBOOL)AVICapSM(hwnd,WM_CAP_SET_PREVIEWRATE,(WPARAM)(wMS),(LPARAM)0))
1719 #define capOverlay(hwnd,f) ((WINBOOL)AVICapSM(hwnd,WM_CAP_SET_OVERLAY,(WPARAM)(WINBOOL)(f),(LPARAM)0))
1720 #define capPreviewScale(hwnd,f) ((WINBOOL)AVICapSM(hwnd,WM_CAP_SET_SCALE,(WPARAM)(WINBOOL)f,(LPARAM)0))
1721 #define capGetStatus(hwnd,s,wSize) ((WINBOOL)AVICapSM(hwnd,WM_CAP_GET_STATUS,(WPARAM)(wSize),(LPARAM)(LPVOID)(LPCAPSTATUS)(s)))
1722 #define capSetScrollPos(hwnd,lpP) ((WINBOOL)AVICapSM(hwnd,WM_CAP_SET_SCROLL,(WPARAM)0,(LPARAM)(LPPOINT)(lpP)))
1723 
1724 #define capGrabFrame(hwnd) ((WINBOOL)AVICapSM(hwnd,WM_CAP_GRAB_FRAME,(WPARAM)0,(LPARAM)0))
1725 #define capGrabFrameNoStop(hwnd) ((WINBOOL)AVICapSM(hwnd,WM_CAP_GRAB_FRAME_NOSTOP,(WPARAM)0,(LPARAM)0))
1726 
1727 #define capCaptureSequence(hwnd) ((WINBOOL)AVICapSM(hwnd,WM_CAP_SEQUENCE,(WPARAM)0,(LPARAM)0))
1728 #define capCaptureSequenceNoFile(hwnd) ((WINBOOL)AVICapSM(hwnd,WM_CAP_SEQUENCE_NOFILE,(WPARAM)0,(LPARAM)0))
1729 #define capCaptureStop(hwnd) ((WINBOOL)AVICapSM(hwnd,WM_CAP_STOP,(WPARAM)0,(LPARAM)0))
1730 #define capCaptureAbort(hwnd) ((WINBOOL)AVICapSM(hwnd,WM_CAP_ABORT,(WPARAM)0,(LPARAM)0))
1731 
1732 #define capCaptureSingleFrameOpen(hwnd) ((WINBOOL)AVICapSM(hwnd,WM_CAP_SINGLE_FRAME_OPEN,(WPARAM)0,(LPARAM)0))
1733 #define capCaptureSingleFrameClose(hwnd) ((WINBOOL)AVICapSM(hwnd,WM_CAP_SINGLE_FRAME_CLOSE,(WPARAM)0,(LPARAM)0))
1734 #define capCaptureSingleFrame(hwnd) ((WINBOOL)AVICapSM(hwnd,WM_CAP_SINGLE_FRAME,(WPARAM)0,(LPARAM)0))
1735 
1736 #define capCaptureGetSetup(hwnd,s,wSize) ((WINBOOL)AVICapSM(hwnd,WM_CAP_GET_SEQUENCE_SETUP,(WPARAM)(wSize),(LPARAM)(LPVOID)(LPCAPTUREPARMS)(s)))
1737 #define capCaptureSetSetup(hwnd,s,wSize) ((WINBOOL)AVICapSM(hwnd,WM_CAP_SET_SEQUENCE_SETUP,(WPARAM)(wSize),(LPARAM)(LPVOID)(LPCAPTUREPARMS)(s)))
1738 
1739 #define capSetMCIDeviceName(hwnd,szName) ((WINBOOL)AVICapSM(hwnd,WM_CAP_SET_MCI_DEVICE,(WPARAM)0,(LPARAM)(LPVOID)(LPTSTR)(szName)))
1740 #define capGetMCIDeviceName(hwnd,szName,wSize) ((WINBOOL)AVICapSM(hwnd,WM_CAP_GET_MCI_DEVICE,(WPARAM)(wSize),(LPARAM)(LPVOID)(LPTSTR)(szName)))
1741 
1742 #define capPaletteOpen(hwnd,szName) ((WINBOOL)AVICapSM(hwnd,WM_CAP_PAL_OPEN,(WPARAM)0,(LPARAM)(LPVOID)(LPTSTR)(szName)))
1743 #define capPaletteSave(hwnd,szName) ((WINBOOL)AVICapSM(hwnd,WM_CAP_PAL_SAVE,(WPARAM)0,(LPARAM)(LPVOID)(LPTSTR)(szName)))
1744 #define capPalettePaste(hwnd) ((WINBOOL)AVICapSM(hwnd,WM_CAP_PAL_PASTE,(WPARAM) 0,(LPARAM)0))
1745 #define capPaletteAuto(hwnd,iFrames,iColors) ((WINBOOL)AVICapSM(hwnd,WM_CAP_PAL_AUTOCREATE,(WPARAM)(iFrames),(LPARAM)(DWORD)(iColors)))
1746 #define capPaletteManual(hwnd,fGrab,iColors) ((WINBOOL)AVICapSM(hwnd,WM_CAP_PAL_MANUALCREATE,(WPARAM)(fGrab),(LPARAM)(DWORD)(iColors)))
1747 
1748   typedef struct tagCapDriverCaps {
1749     UINT wDeviceIndex;
1750     WINBOOL fHasOverlay;
1751     WINBOOL fHasDlgVideoSource;
1752     WINBOOL fHasDlgVideoFormat;
1753     WINBOOL fHasDlgVideoDisplay;
1754     WINBOOL fCaptureInitialized;
1755     WINBOOL fDriverSuppliesPalettes;
1756     HANDLE hVideoIn;
1757     HANDLE hVideoOut;
1758     HANDLE hVideoExtIn;
1759     HANDLE hVideoExtOut;
1760   } CAPDRIVERCAPS,*PCAPDRIVERCAPS,*LPCAPDRIVERCAPS;
1761 
1762   typedef struct tagCapStatus {
1763     UINT uiImageWidth;
1764     UINT uiImageHeight;
1765     WINBOOL fLiveWindow;
1766     WINBOOL fOverlayWindow;
1767     WINBOOL fScale;
1768     POINT ptScroll;
1769     WINBOOL fUsingDefaultPalette;
1770     WINBOOL fAudioHardware;
1771     WINBOOL fCapFileExists;
1772     DWORD dwCurrentVideoFrame;
1773     DWORD dwCurrentVideoFramesDropped;
1774     DWORD dwCurrentWaveSamples;
1775     DWORD dwCurrentTimeElapsedMS;
1776     HPALETTE hPalCurrent;
1777     WINBOOL fCapturingNow;
1778     DWORD dwReturn;
1779     UINT wNumVideoAllocated;
1780     UINT wNumAudioAllocated;
1781   } CAPSTATUS,*PCAPSTATUS,*LPCAPSTATUS;
1782 
1783   typedef struct tagCaptureParms {
1784     DWORD dwRequestMicroSecPerFrame;
1785     WINBOOL fMakeUserHitOKToCapture;
1786     UINT wPercentDropForError;
1787     WINBOOL fYield;
1788     DWORD dwIndexSize;
1789     UINT wChunkGranularity;
1790     WINBOOL fUsingDOSMemory;
1791     UINT wNumVideoRequested;
1792     WINBOOL fCaptureAudio;
1793     UINT wNumAudioRequested;
1794     UINT vKeyAbort;
1795     WINBOOL fAbortLeftMouse;
1796     WINBOOL fAbortRightMouse;
1797     WINBOOL fLimitEnabled;
1798     UINT wTimeLimit;
1799     WINBOOL fMCIControl;
1800     WINBOOL fStepMCIDevice;
1801     DWORD dwMCIStartTime;
1802     DWORD dwMCIStopTime;
1803     WINBOOL fStepCaptureAt2x;
1804     UINT wStepCaptureAverageFrames;
1805     DWORD dwAudioBufferSize;
1806     WINBOOL fDisableWriteCache;
1807     UINT AVStreamMaster;
1808   } CAPTUREPARMS,*PCAPTUREPARMS,*LPCAPTUREPARMS;
1809 
1810 #define AVSTREAMMASTER_AUDIO 0
1811 #define AVSTREAMMASTER_NONE 1
1812 
1813   typedef struct tagCapInfoChunk {
1814     FOURCC fccInfoID;
1815     LPVOID lpData;
1816     LONG cbData;
1817   } CAPINFOCHUNK,*PCAPINFOCHUNK,*LPCAPINFOCHUNK;
1818 
1819   typedef LRESULT (CALLBACK *CAPYIELDCALLBACK)(HWND hWnd);
1820   typedef LRESULT (CALLBACK *CAPSTATUSCALLBACKW)(HWND hWnd,int nID,LPCWSTR lpsz);
1821   typedef LRESULT (CALLBACK *CAPERRORCALLBACKW)(HWND hWnd,int nID,LPCWSTR lpsz);
1822   typedef LRESULT (CALLBACK *CAPSTATUSCALLBACKA)(HWND hWnd,int nID,LPCSTR lpsz);
1823   typedef LRESULT (CALLBACK *CAPERRORCALLBACKA)(HWND hWnd,int nID,LPCSTR lpsz);
1824 
1825 #define CAPSTATUSCALLBACK __MINGW_NAME_AW(CAPSTATUSCALLBACK)
1826 #define CAPERRORCALLBACK __MINGW_NAME_AW(CAPERRORCALLBACK)
1827 
1828   typedef LRESULT (CALLBACK *CAPVIDEOCALLBACK)(HWND hWnd,LPVIDEOHDR lpVHdr);
1829   typedef LRESULT (CALLBACK *CAPWAVECALLBACK)(HWND hWnd,LPWAVEHDR lpWHdr);
1830   typedef LRESULT (CALLBACK *CAPCONTROLCALLBACK)(HWND hWnd,int nState);
1831 
1832 #define CONTROLCALLBACK_PREROLL 1
1833 #define CONTROLCALLBACK_CAPTURING 2
1834 
1835   HWND WINAPI capCreateCaptureWindowA (LPCSTR lpszWindowName,DWORD dwStyle,int x,int y,int nWidth,int nHeight,HWND hwndParent,int nID);
1836   WINBOOL WINAPI capGetDriverDescriptionA (UINT wDriverIndex,LPSTR lpszName,int cbName,LPSTR lpszVer,int cbVer);
1837   HWND WINAPI capCreateCaptureWindowW (LPCWSTR lpszWindowName,DWORD dwStyle,int x,int y,int nWidth,int nHeight,HWND hwndParent,int nID);
1838   WINBOOL WINAPI capGetDriverDescriptionW (UINT wDriverIndex,LPWSTR lpszName,int cbName,LPWSTR lpszVer,int cbVer);
1839 
1840 #define capCreateCaptureWindow __MINGW_NAME_AW(capCreateCaptureWindow)
1841 #define capGetDriverDescription __MINGW_NAME_AW(capGetDriverDescription)
1842 #endif
1843 
1844 #define infotypeDIGITIZATION_TIME mmioFOURCC ('I','D','I','T')
1845 #define infotypeSMPTE_TIME mmioFOURCC ('I','S','M','P')
1846 
1847 #define IDS_CAP_BEGIN 300
1848 #define IDS_CAP_END 301
1849 
1850 #define IDS_CAP_INFO 401
1851 #define IDS_CAP_OUTOFMEM 402
1852 #define IDS_CAP_FILEEXISTS 403
1853 #define IDS_CAP_ERRORPALOPEN 404
1854 #define IDS_CAP_ERRORPALSAVE 405
1855 #define IDS_CAP_ERRORDIBSAVE 406
1856 #define IDS_CAP_DEFAVIEXT 407
1857 #define IDS_CAP_DEFPALEXT 408
1858 #define IDS_CAP_CANTOPEN 409
1859 #define IDS_CAP_SEQ_MSGSTART 410
1860 #define IDS_CAP_SEQ_MSGSTOP 411
1861 
1862 #define IDS_CAP_VIDEDITERR 412
1863 #define IDS_CAP_READONLYFILE 413
1864 #define IDS_CAP_WRITEERROR 414
1865 #define IDS_CAP_NODISKSPACE 415
1866 #define IDS_CAP_SETFILESIZE 416
1867 #define IDS_CAP_SAVEASPERCENT 417
1868 
1869 #define IDS_CAP_DRIVER_ERROR 418
1870 
1871 #define IDS_CAP_WAVE_OPEN_ERROR 419
1872 #define IDS_CAP_WAVE_ALLOC_ERROR 420
1873 #define IDS_CAP_WAVE_PREPARE_ERROR 421
1874 #define IDS_CAP_WAVE_ADD_ERROR 422
1875 #define IDS_CAP_WAVE_SIZE_ERROR 423
1876 
1877 #define IDS_CAP_VIDEO_OPEN_ERROR 424
1878 #define IDS_CAP_VIDEO_ALLOC_ERROR 425
1879 #define IDS_CAP_VIDEO_PREPARE_ERROR 426
1880 #define IDS_CAP_VIDEO_ADD_ERROR 427
1881 #define IDS_CAP_VIDEO_SIZE_ERROR 428
1882 
1883 #define IDS_CAP_FILE_OPEN_ERROR 429
1884 #define IDS_CAP_FILE_WRITE_ERROR 430
1885 #define IDS_CAP_RECORDING_ERROR 431
1886 #define IDS_CAP_RECORDING_ERROR2 432
1887 #define IDS_CAP_AVI_INIT_ERROR 433
1888 #define IDS_CAP_NO_FRAME_CAP_ERROR 434
1889 #define IDS_CAP_NO_PALETTE_WARN 435
1890 #define IDS_CAP_MCI_CONTROL_ERROR 436
1891 #define IDS_CAP_MCI_CANT_STEP_ERROR 437
1892 #define IDS_CAP_NO_AUDIO_CAP_ERROR 438
1893 #define IDS_CAP_AVI_DRAWDIB_ERROR 439
1894 #define IDS_CAP_COMPRESSOR_ERROR 440
1895 #define IDS_CAP_AUDIO_DROP_ERROR 441
1896 #define IDS_CAP_AUDIO_DROP_COMPERROR 442
1897 
1898 #define IDS_CAP_STAT_LIVE_MODE 500
1899 #define IDS_CAP_STAT_OVERLAY_MODE 501
1900 #define IDS_CAP_STAT_CAP_INIT 502
1901 #define IDS_CAP_STAT_CAP_FINI 503
1902 #define IDS_CAP_STAT_PALETTE_BUILD 504
1903 #define IDS_CAP_STAT_OPTPAL_BUILD 505
1904 #define IDS_CAP_STAT_I_FRAMES 506
1905 #define IDS_CAP_STAT_L_FRAMES 507
1906 #define IDS_CAP_STAT_CAP_L_FRAMES 508
1907 #define IDS_CAP_STAT_CAP_AUDIO 509
1908 #define IDS_CAP_STAT_VIDEOCURRENT 510
1909 #define IDS_CAP_STAT_VIDEOAUDIO 511
1910 #define IDS_CAP_STAT_VIDEOONLY 512
1911 #define IDS_CAP_STAT_FRAMESDROPPED 513
1912 #endif
1913 
1914 #ifdef __cplusplus
1915 }
1916 #endif
1917 
1918 #ifndef NOMSACM
1919 #include <msacm.h>
1920 #endif
1921 
1922 #ifdef __cplusplus
1923 extern "C" {
1924 #endif
1925 
1926 #ifdef OFN_READONLY
1927   WINBOOL WINAPI GetOpenFileNamePreviewA(LPOPENFILENAMEA lpofn);
1928   WINBOOL WINAPI GetSaveFileNamePreviewA(LPOPENFILENAMEA lpofn);
1929   WINBOOL WINAPI GetOpenFileNamePreviewW(LPOPENFILENAMEW lpofn);
1930   WINBOOL WINAPI GetSaveFileNamePreviewW(LPOPENFILENAMEW lpofn);
1931 
1932 #define GetOpenFileNamePreview __MINGW_NAME_AW(GetOpenFileNamePreview)
1933 #define GetSaveFileNamePreview __MINGW_NAME_AW(GetSaveFileNamePreview)
1934 #endif
1935 
1936 #ifndef RC_INVOKED
1937 #include "poppack.h"
1938 #endif
1939 
1940 #ifdef __cplusplus
1941 }
1942 #endif
1943 #endif
1944