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
12extern "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
32extern "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
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
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
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
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
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
760extern "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
903extern "C" {
904#endif
905
906#undef INTERFACE
907#define INTERFACE IAVIStream
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
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
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
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 *
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 *
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
1923extern "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