Fixed header dependencies to be fully compatible with the Windows
[wine] / include / vfw.h
1 /*
2  * Copyright (C) the Wine project
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17  */
18
19 #ifndef __WINE_VFW_H
20 #define __WINE_VFW_H
21
22 #include <mmsystem.h>
23 #include <mmreg.h>
24 #include <msacm.h>
25
26 #define VFWAPI  WINAPI
27 #define VFWAPIV WINAPIV
28
29 #ifdef __cplusplus
30 extern "C" {
31 #endif  /* __cplusplus */
32
33 typedef HANDLE HDRAWDIB;
34
35 DWORD       VFWAPI  VideoForWindowsVersion(void);
36 LONG        VFWAPI  InitVFW(void);
37 LONG        VFWAPI  TermVFW(void);
38
39 /*****************************************************************************
40  * Predeclare the interfaces
41  */
42 typedef struct IAVIStream IAVIStream,*PAVISTREAM;
43 typedef struct IAVIFile IAVIFile,*PAVIFILE;
44 typedef struct IGetFrame IGetFrame,*PGETFRAME;
45 typedef struct IAVIEditStream IAVIEditStream, *PAVIEDITSTREAM;
46 typedef struct IAVIStreaming  IAVIStreaming;
47
48 /* Installable Compressor Manager */
49
50 DECLARE_HANDLE(HIC);
51
52 /* error return codes */
53 #define ICERR_OK                0
54 #define ICERR_DONTDRAW          1
55 #define ICERR_NEWPALETTE        2
56 #define ICERR_GOTOKEYFRAME      3
57 #define ICERR_STOPDRAWING       4
58
59 #define ICERR_UNSUPPORTED       -1
60 #define ICERR_BADFORMAT         -2
61 #define ICERR_MEMORY            -3
62 #define ICERR_INTERNAL          -4
63 #define ICERR_BADFLAGS          -5
64 #define ICERR_BADPARAM          -6
65 #define ICERR_BADSIZE           -7
66 #define ICERR_BADHANDLE         -8
67 #define ICERR_CANTUPDATE        -9
68 #define ICERR_ABORT             -10
69 #define ICERR_ERROR             -100
70 #define ICERR_BADBITDEPTH       -200
71 #define ICERR_BADIMAGESIZE      -201
72
73 #define ICERR_CUSTOM            -400
74
75 /* ICM Messages */
76 #define ICM_USER                (DRV_USER+0x0000)
77
78 /* ICM driver message range */
79 #define ICM_RESERVED_LOW        (DRV_USER+0x1000)
80 #define ICM_RESERVED_HIGH       (DRV_USER+0x2000)
81 #define ICM_RESERVED            ICM_RESERVED_LOW
82
83 #define ICM_GETSTATE            (ICM_RESERVED+0)
84 #define ICM_SETSTATE            (ICM_RESERVED+1)
85 #define ICM_GETINFO             (ICM_RESERVED+2)
86
87 #define ICM_CONFIGURE           (ICM_RESERVED+10)
88 #define ICM_ABOUT               (ICM_RESERVED+11)
89 /* */
90
91 #define ICM_GETDEFAULTQUALITY   (ICM_RESERVED+30)
92 #define ICM_GETQUALITY          (ICM_RESERVED+31)
93 #define ICM_SETQUALITY          (ICM_RESERVED+32)
94
95 #define ICM_SET                 (ICM_RESERVED+40)
96 #define ICM_GET                 (ICM_RESERVED+41)
97
98 /* 2 constant FOURCC codes */
99 #define ICM_FRAMERATE           mmioFOURCC('F','r','m','R')
100 #define ICM_KEYFRAMERATE        mmioFOURCC('K','e','y','R')
101
102 #define ICM_COMPRESS_GET_FORMAT         (ICM_USER+4)
103 #define ICM_COMPRESS_GET_SIZE           (ICM_USER+5)
104 #define ICM_COMPRESS_QUERY              (ICM_USER+6)
105 #define ICM_COMPRESS_BEGIN              (ICM_USER+7)
106 #define ICM_COMPRESS                    (ICM_USER+8)
107 #define ICM_COMPRESS_END                (ICM_USER+9)
108
109 #define ICM_DECOMPRESS_GET_FORMAT       (ICM_USER+10)
110 #define ICM_DECOMPRESS_QUERY            (ICM_USER+11)
111 #define ICM_DECOMPRESS_BEGIN            (ICM_USER+12)
112 #define ICM_DECOMPRESS                  (ICM_USER+13)
113 #define ICM_DECOMPRESS_END              (ICM_USER+14)
114 #define ICM_DECOMPRESS_SET_PALETTE      (ICM_USER+29)
115 #define ICM_DECOMPRESS_GET_PALETTE      (ICM_USER+30)
116
117 #define ICM_DRAW_QUERY                  (ICM_USER+31)
118 #define ICM_DRAW_BEGIN                  (ICM_USER+15)
119 #define ICM_DRAW_GET_PALETTE            (ICM_USER+16)
120 #define ICM_DRAW_START                  (ICM_USER+18)
121 #define ICM_DRAW_STOP                   (ICM_USER+19)
122 #define ICM_DRAW_END                    (ICM_USER+21)
123 #define ICM_DRAW_GETTIME                (ICM_USER+32)
124 #define ICM_DRAW                        (ICM_USER+33)
125 #define ICM_DRAW_WINDOW                 (ICM_USER+34)
126 #define ICM_DRAW_SETTIME                (ICM_USER+35)
127 #define ICM_DRAW_REALIZE                (ICM_USER+36)
128 #define ICM_DRAW_FLUSH                  (ICM_USER+37)
129 #define ICM_DRAW_RENDERBUFFER           (ICM_USER+38)
130
131 #define ICM_DRAW_START_PLAY             (ICM_USER+39)
132 #define ICM_DRAW_STOP_PLAY              (ICM_USER+40)
133
134 #define ICM_DRAW_SUGGESTFORMAT          (ICM_USER+50)
135 #define ICM_DRAW_CHANGEPALETTE          (ICM_USER+51)
136
137 #define ICM_GETBUFFERSWANTED            (ICM_USER+41)
138
139 #define ICM_GETDEFAULTKEYFRAMERATE      (ICM_USER+42)
140
141 #define ICM_DECOMPRESSEX_BEGIN          (ICM_USER+60)
142 #define ICM_DECOMPRESSEX_QUERY          (ICM_USER+61)
143 #define ICM_DECOMPRESSEX                (ICM_USER+62)
144 #define ICM_DECOMPRESSEX_END            (ICM_USER+63)
145
146 #define ICM_COMPRESS_FRAMES_INFO        (ICM_USER+70)
147 #define ICM_SET_STATUS_PROC             (ICM_USER+72)
148
149 /* structs */
150
151 /* NOTE: Only the 16 bit structs are packed. Structs that are packed anyway
152  * have not been changed. If a structure is later extended, you may need to create
153  * two versions of it.
154  */
155
156 typedef struct {
157         DWORD   dwSize;         /* 00: size */
158         DWORD   fccType;        /* 04: type 'vidc' usually */
159         DWORD   fccHandler;     /* 08: */
160         DWORD   dwVersion;      /* 0c: version of compman opening you */
161         DWORD   dwFlags;        /* 10: LOWORD is type specific */
162         LRESULT dwError;        /* 14: */
163         LPVOID  pV1Reserved;    /* 18: */
164         LPVOID  pV2Reserved;    /* 1c: */
165         DWORD   dnDevNode;      /* 20: */
166                                 /* 24: */
167 } ICOPEN,*LPICOPEN;
168
169 #define ICCOMPRESS_KEYFRAME     0x00000001L
170
171 typedef struct {
172     DWORD               dwFlags;
173     LPBITMAPINFOHEADER  lpbiOutput;
174     LPVOID              lpOutput;
175     LPBITMAPINFOHEADER  lpbiInput;
176     LPVOID              lpInput;
177     LPDWORD             lpckid;
178     LPDWORD             lpdwFlags;
179     LONG                lFrameNum;
180     DWORD               dwFrameSize;
181     DWORD               dwQuality;
182     LPBITMAPINFOHEADER  lpbiPrev;
183     LPVOID              lpPrev;
184 } ICCOMPRESS;
185
186 DWORD VFWAPIV ICCompress(
187         HIC hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiOutput,LPVOID lpData,
188         LPBITMAPINFOHEADER lpbiInput,LPVOID lpBits,LPDWORD lpckid,
189         LPDWORD lpdwFlags,LONG lFrameNum,DWORD dwFrameSize,DWORD dwQuality,
190         LPBITMAPINFOHEADER lpbiPrev,LPVOID lpPrev
191 );
192
193 #define ICCompressGetFormat(hic, lpbiInput, lpbiOutput)                 \
194         ICSendMessage(                                                  \
195             hic,ICM_COMPRESS_GET_FORMAT,(DWORD)(LPVOID)(lpbiInput),     \
196             (DWORD)(LPVOID)(lpbiOutput)                                 \
197         )
198
199 #define ICCompressGetFormatSize(hic,lpbi) ICCompressGetFormat(hic,lpbi,NULL)
200
201 #define ICCompressBegin(hic, lpbiInput, lpbiOutput)                     \
202     ICSendMessage(                                                      \
203         hic, ICM_COMPRESS_BEGIN, (DWORD)(LPVOID)(lpbiInput),            \
204         (DWORD)(LPVOID)(lpbiOutput)                                     \
205     )
206
207 #define ICCompressGetSize(hic, lpbiInput, lpbiOutput)                   \
208     ICSendMessage(                                                      \
209         hic, ICM_COMPRESS_GET_SIZE, (DWORD)(LPVOID)(lpbiInput),         \
210         (DWORD)(LPVOID)(lpbiOutput)                                     \
211     )
212
213 #define ICCompressQuery(hic, lpbiInput, lpbiOutput)             \
214     ICSendMessage(                                              \
215         hic, ICM_COMPRESS_QUERY, (DWORD)(LPVOID)(lpbiInput),    \
216         (DWORD)(LPVOID)(lpbiOutput)                             \
217     )
218
219 #define ICCompressEnd(hic) ICSendMessage(hic, ICM_COMPRESS_END, 0, 0)
220
221 /* ICCOMPRESSFRAMES.dwFlags */
222 #define ICCOMPRESSFRAMES_PADDING        0x00000001
223 typedef struct {
224     DWORD               dwFlags;
225     LPBITMAPINFOHEADER  lpbiOutput;
226     LPARAM              lOutput;
227     LPBITMAPINFOHEADER  lpbiInput;
228     LPARAM              lInput;
229     LONG                lStartFrame;
230     LONG                lFrameCount;
231     LONG                lQuality;
232     LONG                lDataRate;
233     LONG                lKeyRate;
234     DWORD               dwRate;
235     DWORD               dwScale;
236     DWORD               dwOverheadPerFrame;
237     DWORD               dwReserved2;
238     LONG (CALLBACK *GetData)(LPARAM lInput,LONG lFrame,LPVOID lpBits,LONG len);
239     LONG (CALLBACK *PutData)(LPARAM lOutput,LONG lFrame,LPVOID lpBits,LONG len);
240 } ICCOMPRESSFRAMES;
241
242 typedef struct {
243     DWORD               dwFlags;
244     LPARAM              lParam;
245    /* messages for Status callback */
246 #define ICSTATUS_START      0
247 #define ICSTATUS_STATUS     1
248 #define ICSTATUS_END        2
249 #define ICSTATUS_ERROR      3
250 #define ICSTATUS_YIELD      4
251     /* FIXME: some X11 libs define Status as int... */
252     /* LONG (CALLBACK *zStatus)(LPARAM lParam, UINT message, LONG l); */
253     LONG (CALLBACK *zStatus)(LPARAM lParam, UINT message, LONG l);
254 } ICSETSTATUSPROC;
255
256 /* Values for wMode of ICOpen() */
257 #define ICMODE_COMPRESS         1
258 #define ICMODE_DECOMPRESS       2
259 #define ICMODE_FASTDECOMPRESS   3
260 #define ICMODE_QUERY            4
261 #define ICMODE_FASTCOMPRESS     5
262 #define ICMODE_DRAW             8
263
264 /* quality flags */
265 #define ICQUALITY_LOW       0
266 #define ICQUALITY_HIGH      10000
267 #define ICQUALITY_DEFAULT   -1
268
269 typedef struct {
270         DWORD   dwSize;         /* 00: */
271         DWORD   fccType;        /* 04:compressor type     'vidc' 'audc' */
272         DWORD   fccHandler;     /* 08:compressor sub-type 'rle ' 'jpeg' 'pcm '*/
273         DWORD   dwFlags;        /* 0c:flags LOWORD is type specific */
274         DWORD   dwVersion;      /* 10:version of the driver */
275         DWORD   dwVersionICM;   /* 14:version of the ICM used */
276         /*
277          * under Win32, the driver always returns UNICODE strings.
278          */
279         WCHAR   szName[16];             /* 18:short name */
280         WCHAR   szDescription[128];     /* 38:long name */
281         WCHAR   szDriver[128];          /* 138:driver that contains compressor*/
282                                         /* 238: */
283 } ICINFO;
284
285 /* ICINFO.dwFlags */
286 #define VIDCF_QUALITY           0x0001  /* supports quality */
287 #define VIDCF_CRUNCH            0x0002  /* supports crunching to a frame size */
288 #define VIDCF_TEMPORAL          0x0004  /* supports inter-frame compress */
289 #define VIDCF_COMPRESSFRAMES    0x0008  /* wants the compress all frames message */
290 #define VIDCF_DRAW              0x0010  /* supports drawing */
291 #define VIDCF_FASTTEMPORALC     0x0020  /* does not need prev frame on compress */
292 #define VIDCF_FASTTEMPORALD     0x0080  /* does not need prev frame on decompress */
293 #define VIDCF_QUALITYTIME       0x0040  /* supports temporal quality */
294
295 #define VIDCF_FASTTEMPORAL      (VIDCF_FASTTEMPORALC|VIDCF_FASTTEMPORALD)
296
297
298 /* function shortcuts */
299 /* ICM_ABOUT */
300 #define ICMF_ABOUT_QUERY         0x00000001
301
302 #define ICQueryAbout(hic) \
303         (ICSendMessage(hic,ICM_ABOUT,(DWORD)-1,ICMF_ABOUT_QUERY)==ICERR_OK)
304
305 #define ICAbout(hic, hwnd) ICSendMessage(hic,ICM_ABOUT,(DWORD)(UINT)(hwnd),0)
306
307 /* ICM_CONFIGURE */
308 #define ICMF_CONFIGURE_QUERY    0x00000001
309 #define ICQueryConfigure(hic) \
310         (ICSendMessage(hic,ICM_CONFIGURE,(DWORD)-1,ICMF_CONFIGURE_QUERY)==ICERR_OK)
311
312 #define ICConfigure(hic,hwnd) \
313         ICSendMessage(hic,ICM_CONFIGURE,(DWORD)(UINT)(hwnd),0)
314
315 /* Decompression stuff */
316 #define ICDECOMPRESS_HURRYUP            0x80000000      /* don't draw just buffer (hurry up!) */
317 #define ICDECOMPRESS_UPDATE             0x40000000      /* don't draw just update screen */
318 #define ICDECOMPRESS_PREROLL            0x20000000      /* this frame is before real start */
319 #define ICDECOMPRESS_NULLFRAME          0x10000000      /* repeat last frame */
320 #define ICDECOMPRESS_NOTKEYFRAME        0x08000000      /* this frame is not a key frame */
321
322 typedef struct {
323     DWORD               dwFlags;        /* flags (from AVI index...) */
324     LPBITMAPINFOHEADER  lpbiInput;      /* BITMAPINFO of compressed data */
325     LPVOID              lpInput;        /* compressed data */
326     LPBITMAPINFOHEADER  lpbiOutput;     /* DIB to decompress to */
327     LPVOID              lpOutput;
328     DWORD               ckid;           /* ckid from AVI file */
329 } ICDECOMPRESS;
330
331 typedef struct {
332     DWORD               dwFlags;
333     LPBITMAPINFOHEADER  lpbiSrc;
334     LPVOID              lpSrc;
335     LPBITMAPINFOHEADER  lpbiDst;
336     LPVOID              lpDst;
337
338     /* changed for ICM_DECOMPRESSEX */
339     INT                 xDst;       /* destination rectangle */
340     INT                 yDst;
341     INT                 dxDst;
342     INT                 dyDst;
343
344     INT                 xSrc;       /* source rectangle */
345     INT                 ySrc;
346     INT                 dxSrc;
347     INT                 dySrc;
348 } ICDECOMPRESSEX;
349
350 DWORD VFWAPIV ICDecompress(HIC hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiFormat,LPVOID lpData,LPBITMAPINFOHEADER lpbi,LPVOID lpBits);
351
352 #define ICDecompressBegin(hic, lpbiInput, lpbiOutput)   \
353     ICSendMessage(                                              \
354         hic, ICM_DECOMPRESS_BEGIN, (DWORD)(LPVOID)(lpbiInput),  \
355         (DWORD)(LPVOID)(lpbiOutput)                             \
356     )
357
358 #define ICDecompressQuery(hic, lpbiInput, lpbiOutput)   \
359     ICSendMessage(                                              \
360         hic,ICM_DECOMPRESS_QUERY, (DWORD)(LPVOID)(lpbiInput),   \
361         (DWORD) (LPVOID)(lpbiOutput)                            \
362     )
363
364 #define ICDecompressGetFormat(hic, lpbiInput, lpbiOutput)               \
365     ((LONG)ICSendMessage(                                               \
366         hic,ICM_DECOMPRESS_GET_FORMAT, (DWORD)(LPVOID)(lpbiInput),      \
367         (DWORD)(LPVOID)(lpbiOutput)                                     \
368     ))
369
370 #define ICDecompressGetFormatSize(hic, lpbi)                            \
371         ICDecompressGetFormat(hic, lpbi, NULL)
372
373 #define ICDecompressGetPalette(hic, lpbiInput, lpbiOutput)              \
374     ICSendMessage(                                                      \
375         hic, ICM_DECOMPRESS_GET_PALETTE, (DWORD)(LPVOID)(lpbiInput),    \
376         (DWORD)(LPVOID)(lpbiOutput)                                     \
377     )
378
379 #define ICDecompressSetPalette(hic,lpbiPalette) \
380         ICSendMessage(                          \
381                 hic,ICM_DECOMPRESS_SET_PALETTE,         \
382                 (DWORD)(LPVOID)(lpbiPalette),0          \
383         )
384
385 #define ICDecompressEnd(hic) ICSendMessage(hic, ICM_DECOMPRESS_END, 0, 0)
386
387 LRESULT VFWAPI  ICSendMessage(HIC hic, UINT msg, DWORD dw1, DWORD dw2);
388
389 inline static LRESULT VFWAPI ICDecompressEx(HIC hic, DWORD dwFlags,
390                                             LPBITMAPINFOHEADER lpbiSrc, LPVOID lpSrc,
391                                             int xSrc, int ySrc, int dxSrc, int dySrc,
392                                             LPBITMAPINFOHEADER lpbiDst, LPVOID lpDst,
393                                             int xDst, int yDst, int dxDst, int dyDst)
394 {
395     ICDECOMPRESSEX ic;
396
397     ic.dwFlags = dwFlags;
398     ic.lpbiSrc = lpbiSrc;
399     ic.lpSrc = lpSrc;
400     ic.xSrc = xSrc;
401     ic.ySrc = ySrc;
402     ic.dxSrc = dxSrc;
403     ic.dySrc = dySrc;
404     ic.lpbiDst = lpbiDst;
405     ic.lpDst = lpDst;
406     ic.xDst = xDst;
407     ic.yDst = yDst;
408     ic.dxDst = dxDst;
409     ic.dyDst = dyDst;
410     return ICSendMessage(hic, ICM_DECOMPRESSEX, (DWORD)&ic, sizeof(ic));
411 }
412
413 inline static LRESULT VFWAPI ICDecompressExBegin(HIC hic, DWORD dwFlags,
414                                                  LPBITMAPINFOHEADER lpbiSrc,
415                                                  LPVOID lpSrc,
416                                                  int xSrc, int ySrc, int dxSrc, int dySrc,
417                                                  LPBITMAPINFOHEADER lpbiDst,
418                                                  LPVOID lpDst,
419                                                  int xDst,
420                                                  int yDst,
421                                                  int dxDst,
422                                                  int dyDst)
423 {
424     ICDECOMPRESSEX ic;
425
426     ic.dwFlags = dwFlags;
427     ic.lpbiSrc = lpbiSrc;
428     ic.lpSrc = lpSrc;
429     ic.xSrc = xSrc;
430     ic.ySrc = ySrc;
431     ic.dxSrc = dxSrc;
432     ic.dySrc = dySrc;
433     ic.lpbiDst = lpbiDst;
434     ic.lpDst = lpDst;
435     ic.xDst = xDst;
436     ic.yDst = yDst;
437     ic.dxDst = dxDst;
438     ic.dyDst = dyDst;
439     return ICSendMessage(hic, ICM_DECOMPRESSEX_BEGIN, (DWORD)&ic, sizeof(ic));
440 }
441 inline static LRESULT VFWAPI ICDecompressExQuery(HIC hic, DWORD dwFlags,
442                                                  LPBITMAPINFOHEADER lpbiSrc,
443                                                  LPVOID lpSrc,
444                                                  int xSrc, int ySrc, int dxSrc, int dySrc,
445                                                  LPBITMAPINFOHEADER lpbiDst,
446                                                  LPVOID lpDst,
447                                                  int xDst,
448                                                  int yDst,
449                                                  int dxDst,
450                                                  int dyDst)
451 {
452     ICDECOMPRESSEX ic;
453
454     ic.dwFlags = dwFlags;
455     ic.lpbiSrc = lpbiSrc;
456     ic.lpSrc = lpSrc;
457     ic.xSrc = xSrc;
458     ic.ySrc = ySrc;
459     ic.dxSrc = dxSrc;
460     ic.dySrc = dySrc;
461     ic.lpbiDst = lpbiDst;
462     ic.lpDst = lpDst;
463     ic.xDst = xDst;
464     ic.yDst = yDst;
465     ic.dxDst = dxDst;
466     ic.dyDst = dyDst;
467     return ICSendMessage(hic, ICM_DECOMPRESSEX_QUERY, (DWORD)&ic, sizeof(ic));
468 }
469
470 #define ICDecompressExEnd(hic) \
471     ICSendMessage(hic, ICM_DECOMPRESSEX_END, 0, 0)
472
473 #define ICDRAW_QUERY        0x00000001L   /* test for support */
474 #define ICDRAW_FULLSCREEN   0x00000002L   /* draw to full screen */
475 #define ICDRAW_HDC          0x00000004L   /* draw to a HDC/HWND */
476 #define ICDRAW_ANIMATE      0x00000008L   /* expect palette animation */
477 #define ICDRAW_CONTINUE     0x00000010L   /* draw is a continuation of previous draw */
478 #define ICDRAW_MEMORYDC     0x00000020L   /* DC is offscreen, by the way */
479 #define ICDRAW_UPDATING     0x00000040L   /* We're updating, as opposed to playing */
480 #define ICDRAW_RENDER       0x00000080L   /* used to render data not draw it */
481 #define ICDRAW_BUFFER       0x00000100L   /* buffer data offscreen, we will need to update it */
482
483 #define ICDecompressOpen(fccType, fccHandler, lpbiIn, lpbiOut) \
484     ICLocate(fccType, fccHandler, lpbiIn, lpbiOut, ICMODE_DECOMPRESS)
485
486 #define ICDrawOpen(fccType, fccHandler, lpbiIn) \
487     ICLocate(fccType, fccHandler, lpbiIn, NULL, ICMODE_DRAW)
488
489 HANDLE VFWAPI ICImageCompress(HIC hic, UINT uiFlags, LPBITMAPINFO lpbiIn,
490                               LPVOID lpBits, LPBITMAPINFO lpbiOut, LONG lQuality,
491                               LONG* plSize);
492
493 HANDLE VFWAPI ICImageDecompress(HIC hic, UINT uiFlags, LPBITMAPINFO lpbiIn,
494                                 LPVOID lpBits, LPBITMAPINFO lpbiOut);
495
496 BOOL    VFWAPI  ICInfo(DWORD fccType, DWORD fccHandler, ICINFO * lpicinfo);
497 BOOL    VFWAPI  ICInstall(DWORD fccType, DWORD fccHandler, LPARAM lParam, LPSTR szDesc, UINT wFlags);
498 BOOL    VFWAPI  ICRemove(DWORD fccType, DWORD fccHandler, UINT wFlags);
499 LRESULT VFWAPI  ICGetInfo(HIC hic,ICINFO *picinfo, DWORD cb);
500 HIC     VFWAPI  ICOpen(DWORD fccType, DWORD fccHandler, UINT wMode);
501 HIC     VFWAPI  ICOpenFunction(DWORD fccType, DWORD fccHandler, UINT wMode, FARPROC lpfnHandler);
502
503 LRESULT VFWAPI  ICClose(HIC hic);
504 HIC     VFWAPI  ICLocate(DWORD fccType, DWORD fccHandler, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut, WORD wFlags);
505 HIC     VFWAPI  ICGetDisplayFormat(HIC hic, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut, int BitDepth, int dx, int dy);
506
507 /* Values for wFlags of ICInstall() */
508 #define ICINSTALL_UNICODE       0x8000
509 #define ICINSTALL_FUNCTION      0x0001
510 #define ICINSTALL_DRIVER        0x0002
511 #define ICINSTALL_HDRV          0x0004
512 #define ICINSTALL_DRIVERW       0x8002
513
514 #define ICGetState(hic, pv, cb) \
515     ICSendMessage(hic, ICM_GETSTATE, (DWORD)(LPVOID)(pv), (DWORD)(cb))
516 #define ICSetState(hic, pv, cb) \
517     ICSendMessage(hic, ICM_SETSTATE, (DWORD)(LPVOID)(pv), (DWORD)(cb))
518 #define ICGetStateSize(hic) \
519     ICGetState(hic, NULL, 0)
520
521 inline static DWORD ICGetDefaultQuality(HIC hic)
522 {
523    DWORD dwICValue;
524    ICSendMessage(hic, ICM_GETDEFAULTQUALITY, (DWORD)(LPVOID)&dwICValue, sizeof(DWORD));
525    return dwICValue;
526 }
527
528 inline static DWORD ICGetDefaultKeyFrameRate(HIC hic)
529 {
530    DWORD dwICValue;
531    ICSendMessage(hic, ICM_GETDEFAULTKEYFRAMERATE, (DWORD)(LPVOID)&dwICValue, sizeof(DWORD));
532    return dwICValue;
533 }
534
535 #define ICDrawWindow(hic, prc) \
536     ICSendMessage(hic, ICM_DRAW_WINDOW, (DWORD)(LPVOID)(prc), sizeof(RECT))
537
538 /* As passed to ICM_DRAW_SUGGESTFORMAT */
539 typedef struct {
540         DWORD dwFlags;
541         LPBITMAPINFOHEADER lpbiIn;
542         LPBITMAPINFOHEADER lpbiSuggest;
543         INT dxSrc;
544         INT dySrc;
545         INT dxDst;
546         INT dyDst;
547         HIC hicDecompressor;
548 } ICDRAWSUGGEST;
549
550 typedef struct {
551     DWORD               dwFlags;
552     int                 iStart;
553     int                 iLen;
554     LPPALETTEENTRY      lppe;
555 } ICPALETTE;
556
557 DWORD   VFWAPIV ICDrawBegin(
558         HIC                     hic,
559         DWORD                   dwFlags,/* flags */
560         HPALETTE                hpal,   /* palette to draw with */
561         HWND                    hwnd,   /* window to draw to */
562         HDC                     hdc,    /* HDC to draw to */
563         INT                     xDst,   /* destination rectangle */
564         INT                     yDst,
565         INT                     dxDst,
566         INT                     dyDst,
567         LPBITMAPINFOHEADER      lpbi,   /* format of frame to draw */
568         INT                     xSrc,   /* source rectangle */
569         INT                     ySrc,
570         INT                     dxSrc,
571         INT                     dySrc,
572         DWORD                   dwRate, /* frames/second = (dwRate/dwScale) */
573         DWORD                   dwScale
574 );
575
576 /* as passed to ICM_DRAW_BEGIN */
577 typedef struct {
578         DWORD           dwFlags;
579         HPALETTE        hpal;
580         HWND            hwnd;
581         HDC             hdc;
582         INT             xDst;
583         INT             yDst;
584         INT             dxDst;
585         INT             dyDst;
586         LPBITMAPINFOHEADER      lpbi;
587         INT             xSrc;
588         INT             ySrc;
589         INT             dxSrc;
590         INT             dySrc;
591         DWORD           dwRate;
592         DWORD           dwScale;
593 } ICDRAWBEGIN;
594
595 #define ICDRAW_HURRYUP      0x80000000L   /* don't draw just buffer (hurry up!) */
596 #define ICDRAW_UPDATE       0x40000000L   /* don't draw just update screen */
597 #define ICDRAW_PREROLL      0x20000000L   /* this frame is before real start */
598 #define ICDRAW_NULLFRAME    0x10000000L   /* repeat last frame */
599 #define ICDRAW_NOTKEYFRAME  0x08000000L   /* this frame is not a key frame */
600
601 typedef struct {
602         DWORD   dwFlags;
603         LPVOID  lpFormat;
604         LPVOID  lpData;
605         DWORD   cbData;
606         LONG    lTime;
607 } ICDRAW;
608
609 DWORD VFWAPIV ICDraw(HIC hic,DWORD dwFlags,LPVOID lpFormat,LPVOID lpData,DWORD cbData,LONG lTime);
610
611 inline static LRESULT VFWAPI ICDrawSuggestFormat(HIC hic, LPBITMAPINFOHEADER lpbiIn,
612                                                  LPBITMAPINFOHEADER lpbiOut,
613                                                  int dxSrc, int dySrc,
614                                                  int dxDst, int dyDst,
615                                                  HIC hicDecomp)
616 {
617     ICDRAWSUGGEST ic;
618
619     ic.lpbiIn = lpbiIn;
620     ic.lpbiSuggest = lpbiOut;
621     ic.dxSrc = dxSrc;
622     ic.dySrc = dySrc;
623     ic.dxDst = dxDst;
624     ic.dyDst = dyDst;
625     ic.hicDecompressor = hicDecomp;
626     return ICSendMessage(hic, ICM_DRAW_SUGGESTFORMAT, (DWORD)&ic, sizeof(ic));
627 }
628
629 #define ICDrawQuery(hic, lpbiInput) \
630     ICSendMessage(hic, ICM_DRAW_QUERY, (DWORD)(LPVOID)(lpbiInput), 0L)
631
632 #define ICDrawChangePalette(hic, lpbiInput) \
633     ICSendMessage(hic, ICM_DRAW_CHANGEPALETTE, (DWORD)(LPVOID)(lpbiInput), 0L)
634
635 #define ICGetBuffersWanted(hic, lpdwBuffers) \
636     ICSendMessage(hic, ICM_GETBUFFERSWANTED, (DWORD)(LPVOID)(lpdwBuffers), 0)
637
638 #define ICDrawEnd(hic) \
639     ICSendMessage(hic, ICM_DRAW_END, 0, 0)
640
641 #define ICDrawStart(hic) \
642     ICSendMessage(hic, ICM_DRAW_START, 0, 0)
643
644 #define ICDrawStartPlay(hic, lFrom, lTo) \
645     ICSendMessage(hic, ICM_DRAW_START_PLAY, (DWORD)(lFrom), (DWORD)(lTo))
646
647 #define ICDrawStop(hic) \
648     ICSendMessage(hic, ICM_DRAW_STOP, 0, 0)
649
650 #define ICDrawStopPlay(hic) \
651     ICSendMessage(hic, ICM_DRAW_STOP_PLAY, 0, 0)
652
653 #define ICDrawGetTime(hic, lplTime) \
654     ICSendMessage(hic, ICM_DRAW_GETTIME, (DWORD)(LPVOID)(lplTime), 0)
655
656 #define ICDrawSetTime(hic, lTime) \
657     ICSendMessage(hic, ICM_DRAW_SETTIME, (DWORD)lTime, 0)
658
659 #define ICDrawRealize(hic, hdc, fBackground) \
660     ICSendMessage(hic, ICM_DRAW_REALIZE, (DWORD)(UINT)(HDC)(hdc), (DWORD)(BOOL)(fBackground))
661
662 #define ICDrawFlush(hic) \
663     ICSendMessage(hic, ICM_DRAW_FLUSH, 0, 0)
664
665 #define ICDrawRenderBuffer(hic) \
666     ICSendMessage(hic, ICM_DRAW_RENDERBUFFER, 0, 0)
667
668 inline static LRESULT VFWAPI ICSetStatusProc(HIC hic, DWORD dwFlags, LRESULT lParam,
669                                              LONG (CALLBACK *fpfnStatus)(LPARAM, UINT, LONG))
670 {
671     ICSETSTATUSPROC ic;
672
673     ic.dwFlags = dwFlags;
674     ic.lParam = lParam;
675     /* FIXME: see comment in ICSETSTATUSPROC definition */
676     ic.zStatus = fpfnStatus;
677
678     return ICSendMessage(hic, ICM_SET_STATUS_PROC, (DWORD)&ic, sizeof(ic));
679 }
680
681 typedef struct {
682     LONG                cbSize;
683     DWORD               dwFlags;
684     HIC                 hic;
685     DWORD               fccType;
686     DWORD               fccHandler;
687     LPBITMAPINFO        lpbiIn;
688     LPBITMAPINFO        lpbiOut;
689     LPVOID              lpBitsOut;
690     LPVOID              lpBitsPrev;
691     LONG                lFrame;
692     LONG                lKey;
693     LONG                lDataRate;
694     LONG                lQ;
695     LONG                lKeyCount;
696     LPVOID              lpState;
697     LONG                cbState;
698 } COMPVARS, *PCOMPVARS;
699
700 #define ICMF_COMPVARS_VALID     0x00000001
701
702 BOOL VFWAPI ICCompressorChoose(HWND hwnd, UINT uiFlags, LPVOID pvIn, LPVOID lpData,
703                                PCOMPVARS pc, LPSTR lpszTitle);
704
705 #define ICMF_CHOOSE_KEYFRAME            0x0001
706 #define ICMF_CHOOSE_DATARATE            0x0002
707 #define ICMF_CHOOSE_PREVIEW             0x0004
708 #define ICMF_CHOOSE_ALLCOMPRESSORS      0x0008
709
710 BOOL VFWAPI ICSeqCompressFrameStart(PCOMPVARS pc, LPBITMAPINFO lpbiIn);
711 void VFWAPI ICSeqCompressFrameEnd(PCOMPVARS pc);
712
713 LPVOID VFWAPI ICSeqCompressFrame(PCOMPVARS pc, UINT uiFlags, LPVOID lpBits,
714                                  BOOL *pfKey, LONG *plSize);
715 void VFWAPI ICCompressorFree(PCOMPVARS pc);
716
717 /********************* AVIFILE function declarations *************************/
718
719 #ifndef mmioFOURCC
720 #define mmioFOURCC( ch0, ch1, ch2, ch3 )                                \
721         ( (DWORD)(BYTE)(ch0) | ( (DWORD)(BYTE)(ch1) << 8 ) |            \
722         ( (DWORD)(BYTE)(ch2) << 16 ) | ( (DWORD)(BYTE)(ch3) << 24 ) )
723 #endif
724
725 #ifndef aviTWOCC
726 #define aviTWOCC(ch0, ch1) ((WORD)(BYTE)(ch0) | ((WORD)(BYTE)(ch1) << 8))
727 #endif
728
729 typedef WORD TWOCC;
730
731 #define ICTYPE_VIDEO            mmioFOURCC('v', 'i', 'd', 'c')
732 #define ICTYPE_AUDIO            mmioFOURCC('a', 'u', 'd', 'c')
733
734 #define formtypeAVI             mmioFOURCC('A', 'V', 'I', ' ')
735 #define listtypeAVIHEADER       mmioFOURCC('h', 'd', 'r', 'l')
736 #define ckidAVIMAINHDR          mmioFOURCC('a', 'v', 'i', 'h')
737 #define listtypeSTREAMHEADER    mmioFOURCC('s', 't', 'r', 'l')
738 #define ckidSTREAMHEADER        mmioFOURCC('s', 't', 'r', 'h')
739 #define ckidSTREAMFORMAT        mmioFOURCC('s', 't', 'r', 'f')
740 #define ckidSTREAMHANDLERDATA   mmioFOURCC('s', 't', 'r', 'd')
741 #define ckidSTREAMNAME          mmioFOURCC('s', 't', 'r', 'n')
742
743 #define listtypeAVIMOVIE        mmioFOURCC('m', 'o', 'v', 'i')
744 #define listtypeAVIRECORD       mmioFOURCC('r', 'e', 'c', ' ')
745
746 #define ckidAVINEWINDEX         mmioFOURCC('i', 'd', 'x', '1')
747
748 #define streamtypeANY           0UL
749 #define streamtypeVIDEO         mmioFOURCC('v', 'i', 'd', 's')
750 #define streamtypeAUDIO         mmioFOURCC('a', 'u', 'd', 's')
751 #define streamtypeMIDI          mmioFOURCC('m', 'i', 'd', 's')
752 #define streamtypeTEXT          mmioFOURCC('t', 'x', 't', 's')
753
754 /* Basic chunk types */
755 #define cktypeDIBbits           aviTWOCC('d', 'b')
756 #define cktypeDIBcompressed     aviTWOCC('d', 'c')
757 #define cktypePALchange         aviTWOCC('p', 'c')
758 #define cktypeWAVEbytes         aviTWOCC('w', 'b')
759
760 /* Chunk id to use for extra chunks for padding. */
761 #define ckidAVIPADDING          mmioFOURCC('J', 'U', 'N', 'K')
762
763 #define FromHex(n)              (((n) >= 'A') ? ((n) + 10 - 'A') : ((n) - '0'))
764 #define StreamFromFOURCC(fcc)   ((WORD)((FromHex(LOBYTE(LOWORD(fcc))) << 4) + \
765                                         (FromHex(HIBYTE(LOWORD(fcc))))))
766 #define TWOCCFromFOURCC(fcc)    HIWORD(fcc)
767 #define ToHex(n)                ((BYTE)(((n) > 9) ? ((n) - 10 + 'A') : ((n) + '0')))
768 #define MAKEAVICKID(tcc, stream) \
769                                 MAKELONG((ToHex((stream) & 0x0f) << 8) | \
770                                          (ToHex(((stream) & 0xf0) >> 4)), tcc)
771
772 /* AVIFileHdr.dwFlags */
773 #define AVIF_HASINDEX           0x00000010      /* Index at end of file? */
774 #define AVIF_MUSTUSEINDEX       0x00000020
775 #define AVIF_ISINTERLEAVED      0x00000100
776 #define AVIF_TRUSTCKTYPE        0x00000800      /* Use CKType to find key frames*/
777 #define AVIF_WASCAPTUREFILE     0x00010000
778 #define AVIF_COPYRIGHTED        0x00020000
779
780 #define AVI_HEADERSIZE  2048
781
782 typedef BOOL (CALLBACK *AVISAVECALLBACK)(INT);
783
784 typedef struct _MainAVIHeader
785 {
786     DWORD       dwMicroSecPerFrame;
787     DWORD       dwMaxBytesPerSec;
788     DWORD       dwPaddingGranularity;
789     DWORD       dwFlags;
790     DWORD       dwTotalFrames;
791     DWORD       dwInitialFrames;
792     DWORD       dwStreams;
793     DWORD       dwSuggestedBufferSize;
794     DWORD       dwWidth;
795     DWORD       dwHeight;
796     DWORD       dwReserved[4];
797 } MainAVIHeader;
798
799 /* AVIStreamHeader.dwFlags */
800 #define AVISF_DISABLED                  0x00000001
801 #define AVISF_VIDEO_PALCHANGES          0x00010000
802
803 typedef struct {
804     FOURCC      fccType;
805     FOURCC      fccHandler;
806     DWORD       dwFlags;        /* AVISF_* */
807     WORD        wPriority;
808     WORD        wLanguage;
809     DWORD       dwInitialFrames;
810     DWORD       dwScale;
811     DWORD       dwRate; /* dwRate / dwScale == samples/second */
812     DWORD       dwStart;
813     DWORD       dwLength; /* In units above... */
814     DWORD       dwSuggestedBufferSize;
815     DWORD       dwQuality;
816     DWORD       dwSampleSize;
817     struct { SHORT left, top, right, bottom; } rcFrame; /* word.word - word.word in file */
818 } AVIStreamHeader;
819
820 /* AVIINDEXENTRY.dwFlags */
821 #define AVIIF_LIST      0x00000001      /* chunk is a 'LIST' */
822 #define AVIIF_TWOCC     0x00000002
823 #define AVIIF_KEYFRAME  0x00000010      /* this frame is a key frame. */
824
825 #define AVIIF_NOTIME    0x00000100      /* this frame doesn't take any time */
826 #define AVIIF_COMPUSE   0x0FFF0000
827
828 typedef struct _AVIINDEXENTRY {
829     DWORD       ckid;
830     DWORD       dwFlags;
831     DWORD       dwChunkOffset;
832     DWORD       dwChunkLength;
833 } AVIINDEXENTRY;
834
835 typedef struct _AVIPALCHANGE {
836     BYTE                bFirstEntry;
837     BYTE                bNumEntries;
838     WORD                wFlags;         /* pad */
839     PALETTEENTRY        peNew[1];
840 } AVIPALCHANGE;
841
842 #define AVIIF_KEYFRAME  0x00000010      /* this frame is a key frame. */
843
844 #define AVIGETFRAMEF_BESTDISPLAYFMT     1
845
846 typedef struct _AVISTREAMINFOA {
847     DWORD       fccType;
848     DWORD       fccHandler;
849     DWORD       dwFlags;        /* AVIIF_* */
850     DWORD       dwCaps;
851     WORD        wPriority;
852     WORD        wLanguage;
853     DWORD       dwScale;
854     DWORD       dwRate;         /* dwRate / dwScale == samples/second */
855     DWORD       dwStart;
856     DWORD       dwLength;       /* In units above... */
857     DWORD       dwInitialFrames;
858     DWORD       dwSuggestedBufferSize;
859     DWORD       dwQuality;
860     DWORD       dwSampleSize;
861     RECT        rcFrame;
862     DWORD       dwEditCount;
863     DWORD       dwFormatChangeCount;
864     CHAR        szName[64];
865 } AVISTREAMINFOA, * LPAVISTREAMINFOA, *PAVISTREAMINFOA;
866
867 typedef struct _AVISTREAMINFOW {
868     DWORD       fccType;
869     DWORD       fccHandler;
870     DWORD       dwFlags;
871     DWORD       dwCaps;
872     WORD        wPriority;
873     WORD        wLanguage;
874     DWORD       dwScale;
875     DWORD       dwRate;         /* dwRate / dwScale == samples/second */
876     DWORD       dwStart;
877     DWORD       dwLength;       /* In units above... */
878     DWORD       dwInitialFrames;
879     DWORD       dwSuggestedBufferSize;
880     DWORD       dwQuality;
881     DWORD       dwSampleSize;
882     RECT        rcFrame;
883     DWORD       dwEditCount;
884     DWORD       dwFormatChangeCount;
885     WCHAR       szName[64];
886 } AVISTREAMINFOW, * LPAVISTREAMINFOW, *PAVISTREAMINFOW;
887 DECL_WINELIB_TYPE_AW(AVISTREAMINFO)
888 DECL_WINELIB_TYPE_AW(LPAVISTREAMINFO)
889 DECL_WINELIB_TYPE_AW(PAVISTREAMINFO)
890
891 #define AVISTREAMINFO_DISABLED          0x00000001
892 #define AVISTREAMINFO_FORMATCHANGES     0x00010000
893
894 /* AVIFILEINFO.dwFlags */
895 #define AVIFILEINFO_HASINDEX            0x00000010
896 #define AVIFILEINFO_MUSTUSEINDEX        0x00000020
897 #define AVIFILEINFO_ISINTERLEAVED       0x00000100
898 #define AVIFILEINFO_TRUSTCKTYPE         0x00000800
899 #define AVIFILEINFO_WASCAPTUREFILE      0x00010000
900 #define AVIFILEINFO_COPYRIGHTED         0x00020000
901
902 /* AVIFILEINFO.dwCaps */
903 #define AVIFILECAPS_CANREAD             0x00000001
904 #define AVIFILECAPS_CANWRITE            0x00000002
905 #define AVIFILECAPS_ALLKEYFRAMES        0x00000010
906 #define AVIFILECAPS_NOCOMPRESSION       0x00000020
907
908 typedef struct _AVIFILEINFOW {
909     DWORD               dwMaxBytesPerSec;
910     DWORD               dwFlags;
911     DWORD               dwCaps;
912     DWORD               dwStreams;
913     DWORD               dwSuggestedBufferSize;
914     DWORD               dwWidth;
915     DWORD               dwHeight;
916     DWORD               dwScale;
917     DWORD               dwRate;
918     DWORD               dwLength;
919     DWORD               dwEditCount;
920     WCHAR               szFileType[64];
921 } AVIFILEINFOW, * LPAVIFILEINFOW, *PAVIFILEINFOW;
922 typedef struct _AVIFILEINFOA {
923     DWORD               dwMaxBytesPerSec;
924     DWORD               dwFlags;
925     DWORD               dwCaps;
926     DWORD               dwStreams;
927     DWORD               dwSuggestedBufferSize;
928     DWORD               dwWidth;
929     DWORD               dwHeight;
930     DWORD               dwScale;
931     DWORD               dwRate;
932     DWORD               dwLength;
933     DWORD               dwEditCount;
934     CHAR                szFileType[64];
935 } AVIFILEINFOA, * LPAVIFILEINFOA, *PAVIFILEINFOA;
936 DECL_WINELIB_TYPE_AW(AVIFILEINFO)
937 DECL_WINELIB_TYPE_AW(PAVIFILEINFO)
938 DECL_WINELIB_TYPE_AW(LPAVIFILEINFO)
939
940 /* AVICOMPRESSOPTIONS.dwFlags. determines presence of fields in below struct */
941 #define AVICOMPRESSF_INTERLEAVE 0x00000001
942 #define AVICOMPRESSF_DATARATE   0x00000002
943 #define AVICOMPRESSF_KEYFRAMES  0x00000004
944 #define AVICOMPRESSF_VALID      0x00000008
945
946 typedef struct {
947     DWORD       fccType;                /* stream type, for consistency */
948     DWORD       fccHandler;             /* compressor */
949     DWORD       dwKeyFrameEvery;        /* keyframe rate */
950     DWORD       dwQuality;              /* compress quality 0-10,000 */
951     DWORD       dwBytesPerSecond;       /* bytes per second */
952     DWORD       dwFlags;                /* flags... see below */
953     LPVOID      lpFormat;               /* save format */
954     DWORD       cbFormat;
955     LPVOID      lpParms;                /* compressor options */
956     DWORD       cbParms;
957     DWORD       dwInterleaveEvery;      /* for non-video streams only */
958 } AVICOMPRESSOPTIONS, *LPAVICOMPRESSOPTIONS,*PAVICOMPRESSOPTIONS;
959
960 #define FIND_DIR        0x0000000FL     /* direction mask */
961 #define FIND_NEXT       0x00000001L     /* search forward */
962 #define FIND_PREV       0x00000004L     /* search backward */
963 #define FIND_FROM_START 0x00000008L     /* start at the logical beginning */
964
965 #define FIND_TYPE       0x000000F0L     /* type mask */
966 #define FIND_KEY        0x00000010L     /* find a key frame */
967 #define FIND_ANY        0x00000020L     /* find any (non-empty) sample */
968 #define FIND_FORMAT     0x00000040L     /* find a formatchange */
969
970 #define FIND_RET        0x0000F000L     /* return mask */
971 #define FIND_POS        0x00000000L     /* return logical position */
972 #define FIND_LENGTH     0x00001000L     /* return logical size */
973 #define FIND_OFFSET     0x00002000L     /* return physical position */
974 #define FIND_SIZE       0x00003000L     /* return physical size */
975 #define FIND_INDEX      0x00004000L     /* return physical index position */
976
977 #include <ole2.h>
978
979 #define DEFINE_AVIGUID(name, l, w1, w2) \
980     DEFINE_GUID(name, l, w1, w2, 0xC0,0,0,0,0,0,0,0x46)
981
982 DEFINE_AVIGUID(IID_IAVIFile,            0x00020020, 0, 0);
983 DEFINE_AVIGUID(IID_IAVIStream,          0x00020021, 0, 0);
984 DEFINE_AVIGUID(IID_IAVIStreaming,       0x00020022, 0, 0);
985 DEFINE_AVIGUID(IID_IGetFrame,           0x00020023, 0, 0);
986 DEFINE_AVIGUID(IID_IAVIEditStream,      0x00020024, 0, 0);
987
988 DEFINE_AVIGUID(CLSID_AVIFile,           0x00020000, 0, 0);
989
990 /*****************************************************************************
991  * IAVIStream interface
992  */
993 #define INTERFACE IAVIStream
994 #define IAVIStream_METHODS \
995     IUnknown_METHODS \
996     STDMETHOD(Create)(THIS_ LPARAM lParam1, LPARAM lParam2) PURE; \
997     STDMETHOD(Info)(THIS_ AVISTREAMINFOW *psi, LONG lSize) PURE; \
998     STDMETHOD_(LONG,FindSample)(THIS_ LONG lPos, LONG lFlags) PURE; \
999     STDMETHOD(ReadFormat)(THIS_ LONG lPos, LPVOID lpFormat, LONG *lpcbFormat) PURE; \
1000     STDMETHOD(SetFormat)(THIS_ LONG lPos, LPVOID lpFormat, LONG cbFormat) PURE; \
1001     STDMETHOD(Read)(THIS_ LONG lStart, LONG lSamples, LPVOID lpBuffer, LONG cbBuffer, LONG *plBytes, LONG *plSamples) PURE; \
1002     STDMETHOD(Write)(THIS_ LONG lStart, LONG lSamples, LPVOID lpBuffer, LONG cbBuffer, DWORD dwFlags, LONG *plSampWritten, LONG *plBytesWritten) PURE; \
1003     STDMETHOD(Delete)(THIS_ LONG lStart, LONG lSamples) PURE; \
1004     STDMETHOD(ReadData)(THIS_ DWORD fcc, LPVOID lpBuffer, LONG *lpcbBuffer) PURE; \
1005     STDMETHOD(WriteData)(THIS_ DWORD fcc, LPVOID lpBuffer, LONG cbBuffer) PURE; \
1006     STDMETHOD(SetInfo)(THIS_ AVISTREAMINFOW *plInfo, LONG cbInfo) PURE;
1007 ICOM_DEFINE(IAVIStream, IUnknown)
1008 #undef INTERFACE
1009
1010 #ifdef COBJMACROS
1011 /*** IUnknown methods ***/
1012 #define IAVIStream_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
1013 #define IAVIStream_AddRef(p)             (p)->lpVtbl->AddRef(p)
1014 #define IAVIStream_Release(p)            (p)->lpVtbl->Release(p)
1015 /*** IAVIStream methods ***/
1016 #define IAVIStream_Create(p,a,b)          (p)->lpVtbl->Create(p,a,b)
1017 #define IAVIStream_Info(p,a,b)            (p)->lpVtbl->Info(p,a,b)
1018 #define IAVIStream_FindSample(p,a,b)      (p)->lpVtbl->FindSample(p,a,b)
1019 #define IAVIStream_ReadFormat(p,a,b,c)    (p)->lpVtbl->ReadFormat(p,a,b,c)
1020 #define IAVIStream_SetFormat(p,a,b,c)     (p)->lpVtbl->SetFormat(p,a,b,c)
1021 #define IAVIStream_Read(p,a,b,c,d,e,f)    (p)->lpVtbl->Read(p,a,b,c,d,e,f)
1022 #define IAVIStream_Write(p,a,b,c,d,e,f,g) (p)->lpVtbl->Write(p,a,b,c,d,e,f,g)
1023 #define IAVIStream_Delete(p,a,b)          (p)->lpVtbl->Delete(p,a,b)
1024 #define IAVIStream_ReadData(p,a,b,c)      (p)->lpVtbl->ReadData(p,a,b,c)
1025 #define IAVIStream_WriteData(p,a,b,c)     (p)->lpVtbl->WriteData(p,a,b,c)
1026 #define IAVIStream_SetInfo(p,a,b)         (p)->lpVtbl->SetInfo(p,a,b)
1027 #endif
1028
1029 ULONG WINAPI AVIStreamAddRef(PAVISTREAM iface);
1030 ULONG WINAPI AVIStreamRelease(PAVISTREAM iface);
1031 HRESULT WINAPI AVIStreamCreate(PAVISTREAM*,LONG,LONG,CLSID*);
1032 HRESULT WINAPI AVIStreamInfoA(PAVISTREAM iface,AVISTREAMINFOA *asi,LONG size);
1033 HRESULT WINAPI AVIStreamInfoW(PAVISTREAM iface,AVISTREAMINFOW *asi,LONG size);
1034 #define AVIStreamInfo WINELIB_NAME_AW(AVIStreamInfo)
1035 HRESULT WINAPI AVIStreamFindSample(PAVISTREAM pstream, LONG pos, DWORD flags);
1036 HRESULT WINAPI AVIStreamReadFormat(PAVISTREAM iface,LONG pos,LPVOID format,LONG *formatsize);
1037 HRESULT WINAPI AVIStreamSetFormat(PAVISTREAM iface,LONG pos,LPVOID format,LONG formatsize);
1038 HRESULT WINAPI AVIStreamRead(PAVISTREAM iface,LONG start,LONG samples,LPVOID buffer,LONG buffersize,LONG *bytesread,LONG *samplesread);
1039 HRESULT WINAPI AVIStreamWrite(PAVISTREAM iface,LONG start,LONG samples,LPVOID buffer,LONG buffersize,DWORD flags,LONG *sampwritten,LONG *byteswritten);
1040 HRESULT WINAPI AVIStreamReadData(PAVISTREAM iface,DWORD fcc,LPVOID lp,LONG *lpread);
1041 HRESULT WINAPI AVIStreamWriteData(PAVISTREAM iface,DWORD fcc,LPVOID lp,LONG size);
1042
1043 PGETFRAME WINAPI AVIStreamGetFrameOpen(PAVISTREAM pavi,LPBITMAPINFOHEADER lpbiWanted);
1044 LPVOID  WINAPI AVIStreamGetFrame(PGETFRAME pg,LONG pos);
1045 HRESULT WINAPI AVIStreamGetFrameClose(PGETFRAME pg);
1046
1047 HRESULT WINAPI AVIMakeCompressedStream(PAVISTREAM*ppsCompressed,PAVISTREAM ppsSource,AVICOMPRESSOPTIONS *lpOptions,CLSID*pclsidHandler);
1048 HRESULT WINAPI AVIMakeFileFromStreams(PAVIFILE *ppfile, int nStreams, PAVISTREAM *ppStreams);
1049
1050 HRESULT WINAPI AVIStreamOpenFromFileA(PAVISTREAM *ppavi, LPCSTR szFile,
1051                                       DWORD fccType, LONG lParam,
1052                                       UINT mode, CLSID *pclsidHandler);
1053 HRESULT WINAPI AVIStreamOpenFromFileW(PAVISTREAM *ppavi, LPCWSTR szFile,
1054                                       DWORD fccType, LONG lParam,
1055                                       UINT mode, CLSID *pclsidHandler);
1056 #define AVIStreamOpenFromFile WINELIB_NAME_AW(AVIStreamOpenFromFile)
1057
1058 HRESULT WINAPI AVIBuildFilterA(LPSTR szFilter, LONG cbFilter, BOOL fSaving);
1059 HRESULT WINAPI AVIBuildFilterW(LPWSTR szFilter, LONG cbFilter, BOOL fSaving);
1060 #define AVIBuildFilter WINELIB_NAME_AW(AVIBuildFilter)
1061
1062 BOOL WINAPI AVISaveOptions(HWND hWnd,UINT uFlags,INT nStream,
1063                            PAVISTREAM *ppavi,LPAVICOMPRESSOPTIONS *ppOptions);
1064 HRESULT WINAPI AVISaveOptionsFree(INT nStreams,LPAVICOMPRESSOPTIONS*ppOptions);
1065
1066 HRESULT WINAPI AVISaveVA(LPCSTR szFile, CLSID *pclsidHandler,
1067                          AVISAVECALLBACK lpfnCallback, int nStream,
1068                          PAVISTREAM *ppavi, LPAVICOMPRESSOPTIONS *plpOptions);
1069 HRESULT WINAPI AVISaveVW(LPCWSTR szFile, CLSID *pclsidHandler,
1070                          AVISAVECALLBACK lpfnCallback, int nStream,
1071                          PAVISTREAM *ppavi, LPAVICOMPRESSOPTIONS *plpOptions);
1072 #define AVISaveV WINELIB_NAME_AW(AVISaveV)
1073
1074 LONG WINAPI AVIStreamStart(PAVISTREAM iface);
1075 LONG WINAPI AVIStreamLength(PAVISTREAM iface);
1076 LONG WINAPI AVIStreamSampleToTime(PAVISTREAM pstream, LONG lSample);
1077 LONG WINAPI AVIStreamTimeToSample(PAVISTREAM pstream, LONG lTime);
1078
1079 #define AVIFileClose(pavi) \
1080     AVIFileRelease(pavi)
1081 #define AVIStreamClose(pavi) \
1082     AVIStreamRelease(pavi);
1083 #define AVIStreamEnd(pavi) \
1084     (AVIStreamStart(pavi) + AVIStreamLength(pavi))
1085 #define AVIStreamEndTime(pavi) \
1086     AVIStreamSampleToTime(pavi, AVIStreamEnd(pavi))
1087 #define AVIStreamFormatSize(pavi, lPos, plSize) \
1088     AVIStreamReadFormat(pavi, lPos, NULL, plSize)
1089 #define AVIStreamLengthTime(pavi) \
1090     AVIStreamSampleToTime(pavi, AVIStreamLength(pavi))
1091 #define AVIStreamSampleSize(pavi,pos,psize) \
1092     AVIStreamRead(pavi,pos,1,NULL,0,psize,NULL)
1093 #define AVIStreamSampleToSample(pavi1, pavi2, samp2) \
1094     AVIStreamTimeToSample(pavi1, AVIStreamSampleToTime(pavi2, samp2))
1095 #define AVIStreamStartTime(pavi) \
1096     AVIStreamSampleToTime(pavi, AVIStreamStart(pavi))
1097
1098 #define AVIStreamNextSample(pavi, pos) \
1099     AVIStreamFindSample(pavi, pos + 1, FIND_NEXT | FIND_ANY)
1100 #define AVIStreamPrevSample(pavi, pos) \
1101     AVIStreamFindSample(pavi, pos - 1, FIND_PREV | FIND_ANY)
1102 #define AVIStreamNearestSample(pavi, pos) \
1103     AVIStreamFindSample(pavi, pos, FIND_PREV | FIND_ANY)
1104 #define AVStreamNextKeyFrame(pavi,pos) \
1105     AVIStreamFindSample(pavi, pos + 1, FIND_NEXT | FIND_KEY)
1106 #define AVStreamPrevKeyFrame(pavi,pos) \
1107     AVIStreamFindSample(pavi, pos - 1, FIND_NEXT | FIND_KEY)
1108 #define AVIStreamNearestKeyFrame(pavi,pos) \
1109     AVIStreamFindSample(pavi, pos, FIND_PREV | FIND_KEY)
1110 #define AVIStreamIsKeyFrame(pavi, pos) \
1111     (AVIStreamNearestKeyFrame(pavi, pos) == pos)
1112
1113 /*****************************************************************************
1114  * IAVIStreaming interface
1115  */
1116 #define INTERFACE IAVIStreaming
1117 #define IAVIStreaming_METHODS \
1118     IUnknown_METHODS \
1119     STDMETHOD(Begin)(IAVIStreaming*iface,LONG lStart,LONG lEnd,LONG lRate) PURE; \
1120     STDMETHOD(End)(IAVIStreaming*iface) PURE;
1121 ICOM_DEFINE(IAVIStreaming, IUnknown)
1122 #undef INTERFACE
1123
1124 #ifdef COBJMACROS
1125 /*** IUnknown methods ***/
1126 #define IAVIStreaming_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
1127 #define IAVIStreaming_AddRef(p)             (p)->lpVtbl->AddRef(p)
1128 #define IAVIStreaming_Release(p)            (p)->lpVtbl->Release(p)
1129 /*** IAVIStreaming methods ***/
1130 #define IAVIStreaming_Begin(p,a,b,c)        (p)->lpVtbl->Begin(p,a,b,c)
1131 #define IAVIStreaming_End(p)                (p)->lpVtbl->End(p)
1132 #endif
1133
1134 /*****************************************************************************
1135  * IAVIEditStream interface
1136  */
1137 #define INTERFACE IAVIEditStream
1138 #define IAVIEditStream_METHODS \
1139     IUnknown_METHODS \
1140     STDMETHOD(Cut)(IAVIEditStream*iface,LONG*plStart,LONG*plLength,PAVISTREAM*ppResult) PURE; \
1141     STDMETHOD(Copy)(IAVIEditStream*iface,LONG*plStart,LONG*plLength,PAVISTREAM*ppResult) PURE; \
1142     STDMETHOD(Paste)(IAVIEditStream*iface,LONG*plStart,LONG*plLength,PAVISTREAM pSource,LONG lStart,LONG lEnd) PURE; \
1143     STDMETHOD(Clone)(IAVIEditStream*iface,PAVISTREAM*ppResult) PURE; \
1144     STDMETHOD(SetInfo)(IAVIEditStream*iface,LPAVISTREAMINFOW asi, LONG size) PURE;
1145 ICOM_DEFINE(IAVIEditStream,IUnknown)
1146 #undef INTERFACE
1147
1148 #ifdef COBJMACROS
1149 /*** IUnknown methods ***/
1150 #define IAVIEditStream_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
1151 #define IAVIEditStream_AddRef(p)             (p)->lpVtbl->AddRef(p)
1152 #define IAVIEditStream_Release(p)            (p)->lpVtbl->Release(p)
1153 /*** IAVIEditStream methods ***/
1154 #define IAVIEditStream_Cut(p,a,b,c)          (p)->lpVtbl->Cut(p,a,b,c)
1155 #define IAVIEditStream_Copy(p,a,b,c)         (p)->lpVtbl->Copy(p,a,b,c)
1156 #define IAVIEditStream_Paste(p,a,b,c,d,e)    (p)->lpVtbl->Paste(p,a,b,c,d,e)
1157 #define IAVIEditStream_Clone(p,a)            (p)->lpVtbl->Clone(p,a)
1158 #define IAVIEditStream_SetInfo(p,a,b)        (p)->lpVtbl->SetInfo(p,a,b)
1159 #endif
1160
1161 HRESULT WINAPI CreateEditableStream(PAVISTREAM *ppEditable,PAVISTREAM pSource);
1162 HRESULT WINAPI EditStreamClone(PAVISTREAM pStream, PAVISTREAM *ppResult);
1163 HRESULT WINAPI EditStreamCopy(PAVISTREAM pStream, LONG *plStart,
1164                               LONG *plLength, PAVISTREAM *ppResult);
1165 HRESULT WINAPI EditStreamCut(PAVISTREAM pStream, LONG *plStart,
1166                              LONG *plLength, PAVISTREAM *ppResult);
1167 HRESULT WINAPI EditStreamPaste(PAVISTREAM pDest, LONG *plStart, LONG *plLength,
1168                                PAVISTREAM pSource, LONG lStart, LONG lEnd);
1169
1170 HRESULT WINAPI EditStreamSetInfoA(PAVISTREAM pstream, LPAVISTREAMINFOA asi,
1171                                   LONG size);
1172 HRESULT WINAPI EditStreamSetInfoW(PAVISTREAM pstream, LPAVISTREAMINFOW asi,
1173                                   LONG size);
1174 #define EditStreamSetInfo WINELIB_NAME_AW(EditStreamSetInfo)
1175
1176 HRESULT WINAPI EditStreamSetNameA(PAVISTREAM pstream, LPCSTR szName);
1177 HRESULT WINAPI EditStreamSetNameW(PAVISTREAM pstream, LPCWSTR szName);
1178 #define EditStreamSetName WINELIB_NAME_AW(EditStreamSetName)
1179
1180 /*****************************************************************************
1181  * IAVIFile interface
1182  */
1183 /* In Win32 this interface uses UNICODE only */
1184 #define INTERFACE IAVIFile
1185 #define IAVIFile_METHODS \
1186     IUnknown_METHODS \
1187     STDMETHOD(Info)(THIS_ AVIFILEINFOW *pfi, LONG lSize) PURE; \
1188     STDMETHOD(GetStream)(THIS_ PAVISTREAM *ppStream, DWORD fccType, LONG lParam) PURE; \
1189     STDMETHOD(CreateStream)(THIS_ PAVISTREAM *ppStream, AVISTREAMINFOW *psi) PURE; \
1190     STDMETHOD(WriteData)(THIS_ DWORD fcc, LPVOID lpBuffer, LONG cbBuffer) PURE; \
1191     STDMETHOD(ReadData)(THIS_ DWORD fcc, LPVOID lpBuffer, LONG *lpcbBuffer) PURE; \
1192     STDMETHOD(EndRecord)(THIS) PURE; \
1193     STDMETHOD(DeleteStream)(THIS_ DWORD fccType, LONG lParam) PURE;
1194 ICOM_DEFINE(IAVIFile,IUnknown)
1195 #undef INTERFACE
1196
1197 #ifdef COBJMACROS
1198 /*** IUnknown methods ***/
1199 #define IAVIFile_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
1200 #define IAVIFile_AddRef(p)             (p)->lpVtbl->AddRef(p)
1201 #define IAVIFile_Release(p)            (p)->lpVtbl->Release(p)
1202 /*** IAVIFile methods ***/
1203 #define IAVIFile_Info(p,a,b)         (p)->lpVtbl->Info(p,a,b)
1204 #define IAVIFile_GetStream(p,a,b,c)  (p)->lpVtbl->GetStream(p,a,b,c)
1205 #define IAVIFile_CreateStream(p,a,b) (p)->lpVtbl->CreateStream(p,a,b)
1206 #define IAVIFile_WriteData(p,a,b,c)  (p)->lpVtbl->WriteData(p,a,b,c)
1207 #define IAVIFile_ReadData(p,a,b,c)   (p)->lpVtbl->ReadData(p,a,b,c)
1208 #define IAVIFile_EndRecord(p)        (p)->lpVtbl->EndRecord(p)
1209 #define IAVIFile_DeleteStream(p,a,b) (p)->lpVtbl->DeleteStream(p,a,b)
1210 #endif
1211
1212 void WINAPI AVIFileInit(void);
1213 void WINAPI AVIFileExit(void);
1214
1215 HRESULT WINAPI AVIFileOpenA(PAVIFILE* ppfile,LPCSTR szFile,UINT uMode,LPCLSID lpHandler);
1216 HRESULT WINAPI AVIFileOpenW(PAVIFILE* ppfile,LPCWSTR szFile,UINT uMode,LPCLSID lpHandler);
1217 #define AVIFileOpen WINELIB_NAME_AW(AVIFileOpen)
1218
1219 ULONG   WINAPI AVIFileAddRef(PAVIFILE pfile);
1220 ULONG   WINAPI AVIFileRelease(PAVIFILE pfile);
1221 HRESULT WINAPI AVIFileInfoA(PAVIFILE pfile,PAVIFILEINFOA pfi,LONG lSize);
1222 HRESULT WINAPI AVIFileInfoW(PAVIFILE pfile,PAVIFILEINFOW pfi,LONG lSize);
1223 #define AVIFileInfo WINELIB_NAME_AW(AVIFileInfo)
1224 HRESULT WINAPI AVIFileGetStream(PAVIFILE pfile,PAVISTREAM* avis,DWORD fccType,LONG lParam);
1225 HRESULT WINAPI AVIFileCreateStreamA(PAVIFILE pfile,PAVISTREAM* ppavi,AVISTREAMINFOA* psi);
1226 HRESULT WINAPI AVIFileCreateStreamW(PAVIFILE pfile,PAVISTREAM* ppavi,AVISTREAMINFOW* psi);
1227 #define AVIFileCreateStream WINELIB_NAME_AW(AVIFileCreateStream)
1228 HRESULT WINAPI AVIFileWriteData(PAVIFILE pfile,DWORD fcc,LPVOID lp,LONG size);
1229 HRESULT WINAPI AVIFileReadData(PAVIFILE pfile,DWORD fcc,LPVOID lp,LPLONG size);
1230 HRESULT WINAPI AVIFileEndRecord(PAVIFILE pfile);
1231
1232 /*****************************************************************************
1233  * IGetFrame interface
1234  */
1235 #define INTERFACE IGetFrame
1236 #define IGetFrame_METHODS \
1237     IUnknown_METHODS \
1238     STDMETHOD_(LPVOID,GetFrame)(THIS_ LONG lPos) PURE; \
1239     STDMETHOD(Begin)(THIS_ LONG lStart, LONG lEnd, LONG lRate) PURE; \
1240     STDMETHOD(End)(THIS) PURE; \
1241     STDMETHOD(SetFormat)(THIS_ LPBITMAPINFOHEADER lpbi, LPVOID lpBits, INT x, INT y, INT dx, INT dy) PURE;
1242 ICOM_DEFINE(IGetFrame,IUnknown)
1243 #undef INTERFACE
1244
1245 #ifdef COBJMACROS
1246 /*** IUnknown methods ***/
1247 #define IGetFrame_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
1248 #define IGetFrame_AddRef(p)             (p)->lpVtbl->AddRef(p)
1249 #define IGetFrame_Release(p)            (p)->lpVtbl->Release(p)
1250 /*** IGetFrame methods ***/
1251 #define IGetFrame_GetFrame(p,a)            (p)->lpVtbl->GetFrame(p,a)
1252 #define IGetFrame_Begin(p,a,b,c)           (p)->lpVtbl->Begin(p,a,b,c)
1253 #define IGetFrame_End(p)                   (p)->lpVtbl->End(p)
1254 #define IGetFrame_SetFormat(p,a,b,c,d,e,f) (p)->lpVtbl->SetFormat(p,a,b,c,d,e,f)
1255 #endif
1256
1257 HRESULT WINAPI AVIClearClipboard(void);
1258 HRESULT WINAPI AVIGetFromClipboard(PAVIFILE *ppfile);
1259 HRESULT WINAPI AVIPutFileOnClipboard(PAVIFILE pfile);
1260
1261 #ifdef _WIN32
1262 #ifdef OFN_READONLY
1263 BOOL WINAPI GetOpenFileNamePreviewA(LPOPENFILENAMEA lpofn);
1264 BOOL WINAPI GetOpenFileNamePreviewW(LPOPENFILENAMEW lpofn);
1265 #define GetOpenFileNamePreview WINELIB_NAME_AW(GetOpenFileNamePreview)
1266
1267 BOOL WINAPI GetSaveFileNamePreviewA(LPOPENFILENAMEA lpofn);
1268 BOOL WINAPI GetSaveFileNamePreviewW(LPOPENFILENAMEW lpofn);
1269 #define GetSaveFileNamePreview WINELIB_NAME_AW(GetSaveFileNamePreview)
1270
1271 #endif
1272 #endif
1273
1274 #define AVIERR_OK               0
1275 #define MAKE_AVIERR(error)      MAKE_SCODE(SEVERITY_ERROR,FACILITY_ITF,0x4000+error)
1276
1277 #define AVIERR_UNSUPPORTED      MAKE_AVIERR(101)
1278 #define AVIERR_BADFORMAT        MAKE_AVIERR(102)
1279 #define AVIERR_MEMORY           MAKE_AVIERR(103)
1280 #define AVIERR_INTERNAL         MAKE_AVIERR(104)
1281 #define AVIERR_BADFLAGS         MAKE_AVIERR(105)
1282 #define AVIERR_BADPARAM         MAKE_AVIERR(106)
1283 #define AVIERR_BADSIZE          MAKE_AVIERR(107)
1284 #define AVIERR_BADHANDLE        MAKE_AVIERR(108)
1285 #define AVIERR_FILEREAD         MAKE_AVIERR(109)
1286 #define AVIERR_FILEWRITE        MAKE_AVIERR(110)
1287 #define AVIERR_FILEOPEN         MAKE_AVIERR(111)
1288 #define AVIERR_COMPRESSOR       MAKE_AVIERR(112)
1289 #define AVIERR_NOCOMPRESSOR     MAKE_AVIERR(113)
1290 #define AVIERR_READONLY         MAKE_AVIERR(114)
1291 #define AVIERR_NODATA           MAKE_AVIERR(115)
1292 #define AVIERR_BUFFERTOOSMALL   MAKE_AVIERR(116)
1293 #define AVIERR_CANTCOMPRESS     MAKE_AVIERR(117)
1294 #define AVIERR_USERABORT        MAKE_AVIERR(198)
1295 #define AVIERR_ERROR            MAKE_AVIERR(199)
1296
1297 HWND        VFWAPIV MCIWndCreateA(HWND hwndParent, HINSTANCE hInstance, DWORD dwStyle, LPCSTR szFile);
1298 HWND        VFWAPIV MCIWndCreateW(HWND hwndParent, HINSTANCE hInstance, DWORD dwStyle, LPCWSTR szFile);
1299 #define     MCIWndCreate WINELIB_NAME_AW(MCIWndCreate)
1300
1301 #define MCIWNDOPENF_NEW                 0x0001
1302
1303 #define MCIWNDF_NOAUTOSIZEWINDOW        0x0001
1304 #define MCIWNDF_NOPLAYBAR               0x0002
1305 #define MCIWNDF_NOAUTOSIZEMOVIE         0x0004
1306 #define MCIWNDF_NOMENU                  0x0008
1307 #define MCIWNDF_SHOWNAME                0x0010
1308 #define MCIWNDF_SHOWPOS                 0x0020
1309 #define MCIWNDF_SHOWMODE                0x0040
1310 #define MCIWNDF_SHOWALL                 0x0070
1311
1312 #define MCIWNDF_NOTIFYMODE              0x0100
1313 #define MCIWNDF_NOTIFYPOS               0x0200
1314 #define MCIWNDF_NOTIFYSIZE              0x0400
1315 #define MCIWNDF_NOTIFYERROR             0x1000
1316 #define MCIWNDF_NOTIFYALL               0x1F00
1317
1318 #define MCIWNDF_NOTIFYANSI              0x0080
1319
1320 #define MCIWNDF_NOTIFYMEDIAA            0x0880
1321 #define MCIWNDF_NOTIFYMEDIAW            0x0800
1322 #define MCIWNDF_NOTIFYMEDIA WINELIB_NAME_AW(MCIWNDF_NOTIFYMEDIA)
1323
1324 #define MCIWNDF_RECORD                  0x2000
1325 #define MCIWNDF_NOERRORDLG              0x4000
1326 #define MCIWNDF_NOOPEN                  0x8000
1327
1328 #ifdef __cplusplus
1329 #define MCIWndSM ::SendMessage
1330 #else
1331 #define MCIWndSM SendMessage
1332 #endif
1333
1334 #define MCIWndCanPlay(hWnd)         (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_PLAY,0,0)
1335 #define MCIWndCanRecord(hWnd)       (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_RECORD,0,0)
1336 #define MCIWndCanSave(hWnd)         (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_SAVE,0,0)
1337 #define MCIWndCanWindow(hWnd)       (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_WINDOW,0,0)
1338 #define MCIWndCanEject(hWnd)        (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_EJECT,0,0)
1339 #define MCIWndCanConfig(hWnd)       (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_CONFIG,0,0)
1340 #define MCIWndPaletteKick(hWnd)     (BOOL)MCIWndSM(hWnd,MCIWNDM_PALETTEKICK,0,0)
1341
1342 #define MCIWndSave(hWnd,szFile)     (LONG)MCIWndSM(hWnd,MCI_SAVE,0,(LPARAM)(LPVOID)(szFile))
1343 #define MCIWndSaveDialog(hWnd)      MCIWndSave(hWnd,-1)
1344
1345 #define MCIWndNew(hWnd,lp)          (LONG)MCIWndSM(hWnd,MCIWNDM_NEW,0,(LPARAM)(LPVOID)(lp))
1346
1347 #define MCIWndRecord(hWnd)          (LONG)MCIWndSM(hWnd,MCI_RECORD,0,0)
1348 #define MCIWndOpen(hWnd,sz,f)       (LONG)MCIWndSM(hWnd,MCIWNDM_OPEN,(WPARAM)(UINT)(f),(LPARAM)(LPVOID)(sz))
1349 #define MCIWndOpenDialog(hWnd)      MCIWndOpen(hWnd,-1,0)
1350 #define MCIWndClose(hWnd)           (LONG)MCIWndSM(hWnd,MCI_CLOSE,0,0)
1351 #define MCIWndPlay(hWnd)            (LONG)MCIWndSM(hWnd,MCI_PLAY,0,0)
1352 #define MCIWndStop(hWnd)            (LONG)MCIWndSM(hWnd,MCI_STOP,0,0)
1353 #define MCIWndPause(hWnd)           (LONG)MCIWndSM(hWnd,MCI_PAUSE,0,0)
1354 #define MCIWndResume(hWnd)          (LONG)MCIWndSM(hWnd,MCI_RESUME,0,0)
1355 #define MCIWndSeek(hWnd,lPos)       (LONG)MCIWndSM(hWnd,MCI_SEEK,0,(LPARAM)(LONG)(lPos))
1356 #define MCIWndEject(hWnd)           (LONG)MCIWndSM(hWnd,MCIWNDM_EJECT,0,0)
1357
1358 #define MCIWndHome(hWnd)            MCIWndSeek(hWnd,MCIWND_START)
1359 #define MCIWndEnd(hWnd)             MCIWndSeek(hWnd,MCIWND_END)
1360
1361 #define MCIWndGetSource(hWnd,prc)   (LONG)MCIWndSM(hWnd,MCIWNDM_GET_SOURCE,0,(LPARAM)(LPRECT)(prc))
1362 #define MCIWndPutSource(hWnd,prc)   (LONG)MCIWndSM(hWnd,MCIWNDM_PUT_SOURCE,0,(LPARAM)(LPRECT)(prc))
1363
1364 #define MCIWndGetDest(hWnd,prc)     (LONG)MCIWndSM(hWnd,MCIWNDM_GET_DEST,0,(LPARAM)(LPRECT)(prc))
1365 #define MCIWndPutDest(hWnd,prc)     (LONG)MCIWndSM(hWnd,MCIWNDM_PUT_DEST,0,(LPARAM)(LPRECT)(prc))
1366
1367 #define MCIWndPlayReverse(hWnd)     (LONG)MCIWndSM(hWnd,MCIWNDM_PLAYREVERSE,0,0)
1368 #define MCIWndPlayFrom(hWnd,lPos)   (LONG)MCIWndSM(hWnd,MCIWNDM_PLAYFROM,0,(LPARAM)(LONG)(lPos))
1369 #define MCIWndPlayTo(hWnd,lPos)     (LONG)MCIWndSM(hWnd,MCIWNDM_PLAYTO,  0,(LPARAM)(LONG)(lPos))
1370 #define MCIWndPlayFromTo(hWnd,lStart,lEnd) (MCIWndSeek(hWnd,lStart),MCIWndPlayTo(hWnd,lEnd))
1371
1372 #define MCIWndGetDeviceID(hWnd)     (UINT)MCIWndSM(hWnd,MCIWNDM_GETDEVICEID,0,0)
1373 #define MCIWndGetAlias(hWnd)        (UINT)MCIWndSM(hWnd,MCIWNDM_GETALIAS,0,0)
1374 #define MCIWndGetMode(hWnd,lp,len)  (LONG)MCIWndSM(hWnd,MCIWNDM_GETMODE,(WPARAM)(UINT)(len),(LPARAM)(LPTSTR)(lp))
1375 #define MCIWndGetPosition(hWnd)     (LONG)MCIWndSM(hWnd,MCIWNDM_GETPOSITION,0,0)
1376 #define MCIWndGetPositionString(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETPOSITION,(WPARAM)(UINT)(len),(LPARAM)(LPTSTR)(lp))
1377 #define MCIWndGetStart(hWnd)        (LONG)MCIWndSM(hWnd,MCIWNDM_GETSTART,0,0)
1378 #define MCIWndGetLength(hWnd)       (LONG)MCIWndSM(hWnd,MCIWNDM_GETLENGTH,0,0)
1379 #define MCIWndGetEnd(hWnd)          (LONG)MCIWndSM(hWnd,MCIWNDM_GETEND,0,0)
1380
1381 #define MCIWndStep(hWnd,n)          (LONG)MCIWndSM(hWnd,MCI_STEP,0,(LPARAM)(long)(n))
1382
1383 #define MCIWndDestroy(hWnd)         (VOID)MCIWndSM(hWnd,WM_CLOSE,0,0)
1384 #define MCIWndSetZoom(hWnd,iZoom)   (VOID)MCIWndSM(hWnd,MCIWNDM_SETZOOM,0,(LPARAM)(UINT)(iZoom))
1385 #define MCIWndGetZoom(hWnd)         (UINT)MCIWndSM(hWnd,MCIWNDM_GETZOOM,0,0)
1386 #define MCIWndSetVolume(hWnd,iVol)  (LONG)MCIWndSM(hWnd,MCIWNDM_SETVOLUME,0,(LPARAM)(UINT)(iVol))
1387 #define MCIWndGetVolume(hWnd)       (LONG)MCIWndSM(hWnd,MCIWNDM_GETVOLUME,0,0)
1388 #define MCIWndSetSpeed(hWnd,iSpeed) (LONG)MCIWndSM(hWnd,MCIWNDM_SETSPEED,0,(LPARAM)(UINT)(iSpeed))
1389 #define MCIWndGetSpeed(hWnd)        (LONG)MCIWndSM(hWnd,MCIWNDM_GETSPEED,0,0)
1390 #define MCIWndSetTimeFormat(hWnd,lp) (LONG)MCIWndSM(hWnd,MCIWNDM_SETTIMEFORMAT,0,(LPARAM)(LPTSTR)(lp))
1391 #define MCIWndGetTimeFormat(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETTIMEFORMAT,(WPARAM)(UINT)(len),(LPARAM)(LPTSTR)(lp))
1392 #define MCIWndValidateMedia(hWnd)   (VOID)MCIWndSM(hWnd,MCIWNDM_VALIDATEMEDIA,0,0)
1393
1394 #define MCIWndSetRepeat(hWnd,f)     (void)MCIWndSM(hWnd,MCIWNDM_SETREPEAT,0,(LPARAM)(BOOL)(f))
1395 #define MCIWndGetRepeat(hWnd)       (BOOL)MCIWndSM(hWnd,MCIWNDM_GETREPEAT,0,0)
1396
1397 #define MCIWndUseFrames(hWnd)       MCIWndSetTimeFormat(hWnd,TEXT("frames"))
1398 #define MCIWndUseTime(hWnd)         MCIWndSetTimeFormat(hWnd,TEXT("ms"))
1399
1400 #define MCIWndSetActiveTimer(hWnd,active)                               \
1401         (VOID)MCIWndSM(hWnd,MCIWNDM_SETACTIVETIMER,                     \
1402         (WPARAM)(UINT)(active),0L)
1403 #define MCIWndSetInactiveTimer(hWnd,inactive)                           \
1404         (VOID)MCIWndSM(hWnd,MCIWNDM_SETINACTIVETIMER,                   \
1405         (WPARAM)(UINT)(inactive),0L)
1406 #define MCIWndSetTimers(hWnd,active,inactive)                           \
1407             (VOID)MCIWndSM(hWnd,MCIWNDM_SETTIMERS,(WPARAM)(UINT)(active),\
1408             (LPARAM)(UINT)(inactive))
1409 #define MCIWndGetActiveTimer(hWnd)                                      \
1410         (UINT)MCIWndSM(hWnd,MCIWNDM_GETACTIVETIMER,0,0L);
1411 #define MCIWndGetInactiveTimer(hWnd)                                    \
1412         (UINT)MCIWndSM(hWnd,MCIWNDM_GETINACTIVETIMER,0,0L);
1413
1414 #define MCIWndRealize(hWnd,fBkgnd) (LONG)MCIWndSM(hWnd,MCIWNDM_REALIZE,(WPARAM)(BOOL)(fBkgnd),0)
1415
1416 #define MCIWndSendString(hWnd,sz)  (LONG)MCIWndSM(hWnd,MCIWNDM_SENDSTRING,0,(LPARAM)(LPTSTR)(sz))
1417 #define MCIWndReturnString(hWnd,lp,len)  (LONG)MCIWndSM(hWnd,MCIWNDM_RETURNSTRING,(WPARAM)(UINT)(len),(LPARAM)(LPVOID)(lp))
1418 #define MCIWndGetError(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETERROR,(WPARAM)(UINT)(len),(LPARAM)(LPVOID)(lp))
1419
1420 #define MCIWndGetPalette(hWnd)      (HPALETTE)MCIWndSM(hWnd,MCIWNDM_GETPALETTE,0,0)
1421 #define MCIWndSetPalette(hWnd,hpal) (LONG)MCIWndSM(hWnd,MCIWNDM_SETPALETTE,(WPARAM)(HPALETTE)(hpal),0)
1422
1423 #define MCIWndGetFileName(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETFILENAME,(WPARAM)(UINT)(len),(LPARAM)(LPVOID)(lp))
1424 #define MCIWndGetDevice(hWnd,lp,len)   (LONG)MCIWndSM(hWnd,MCIWNDM_GETDEVICE,(WPARAM)(UINT)(len),(LPARAM)(LPVOID)(lp))
1425
1426 #define MCIWndGetStyles(hWnd) (UINT)MCIWndSM(hWnd,MCIWNDM_GETSTYLES,0,0L)
1427 #define MCIWndChangeStyles(hWnd,mask,value) (LONG)MCIWndSM(hWnd,MCIWNDM_CHANGESTYLES,(WPARAM)(UINT)(mask),(LPARAM)(LONG)(value))
1428
1429 #define MCIWndOpenInterface(hWnd,pUnk)  (LONG)MCIWndSM(hWnd,MCIWNDM_OPENINTERFACE,0,(LPARAM)(LPUNKNOWN)(pUnk))
1430
1431 #define MCIWndSetOwner(hWnd,hWndP)  (LONG)MCIWndSM(hWnd,MCIWNDM_SETOWNER,(WPARAM)(hWndP),0)
1432
1433 #define MCIWNDM_GETDEVICEID     (WM_USER + 100)
1434 #define MCIWNDM_GETSTART        (WM_USER + 103)
1435 #define MCIWNDM_GETLENGTH       (WM_USER + 104)
1436 #define MCIWNDM_GETEND          (WM_USER + 105)
1437 #define MCIWNDM_EJECT           (WM_USER + 107)
1438 #define MCIWNDM_SETZOOM         (WM_USER + 108)
1439 #define MCIWNDM_GETZOOM         (WM_USER + 109)
1440 #define MCIWNDM_SETVOLUME       (WM_USER + 110)
1441 #define MCIWNDM_GETVOLUME       (WM_USER + 111)
1442 #define MCIWNDM_SETSPEED        (WM_USER + 112)
1443 #define MCIWNDM_GETSPEED        (WM_USER + 113)
1444 #define MCIWNDM_SETREPEAT       (WM_USER + 114)
1445 #define MCIWNDM_GETREPEAT       (WM_USER + 115)
1446 #define MCIWNDM_REALIZE         (WM_USER + 118)
1447 #define MCIWNDM_VALIDATEMEDIA   (WM_USER + 121)
1448 #define MCIWNDM_PLAYFROM        (WM_USER + 122)
1449 #define MCIWNDM_PLAYTO          (WM_USER + 123)
1450 #define MCIWNDM_GETPALETTE      (WM_USER + 126)
1451 #define MCIWNDM_SETPALETTE      (WM_USER + 127)
1452 #define MCIWNDM_SETTIMERS       (WM_USER + 129)
1453 #define MCIWNDM_SETACTIVETIMER  (WM_USER + 130)
1454 #define MCIWNDM_SETINACTIVETIMER (WM_USER + 131)
1455 #define MCIWNDM_GETACTIVETIMER  (WM_USER + 132)
1456 #define MCIWNDM_GETINACTIVETIMER (WM_USER + 133)
1457 #define MCIWNDM_CHANGESTYLES    (WM_USER + 135)
1458 #define MCIWNDM_GETSTYLES       (WM_USER + 136)
1459 #define MCIWNDM_GETALIAS        (WM_USER + 137)
1460 #define MCIWNDM_PLAYREVERSE     (WM_USER + 139)
1461 #define MCIWNDM_GET_SOURCE      (WM_USER + 140)
1462 #define MCIWNDM_PUT_SOURCE      (WM_USER + 141)
1463 #define MCIWNDM_GET_DEST        (WM_USER + 142)
1464 #define MCIWNDM_PUT_DEST        (WM_USER + 143)
1465 #define MCIWNDM_CAN_PLAY        (WM_USER + 144)
1466 #define MCIWNDM_CAN_WINDOW      (WM_USER + 145)
1467 #define MCIWNDM_CAN_RECORD      (WM_USER + 146)
1468 #define MCIWNDM_CAN_SAVE        (WM_USER + 147)
1469 #define MCIWNDM_CAN_EJECT       (WM_USER + 148)
1470 #define MCIWNDM_CAN_CONFIG      (WM_USER + 149)
1471 #define MCIWNDM_PALETTEKICK     (WM_USER + 150)
1472 #define MCIWNDM_OPENINTERFACE   (WM_USER + 151)
1473 #define MCIWNDM_SETOWNER        (WM_USER + 152)
1474
1475 #define MCIWNDM_SENDSTRINGA     (WM_USER + 101)
1476 #define MCIWNDM_GETPOSITIONA    (WM_USER + 102)
1477 #define MCIWNDM_GETMODEA        (WM_USER + 106)
1478 #define MCIWNDM_SETTIMEFORMATA  (WM_USER + 119)
1479 #define MCIWNDM_GETTIMEFORMATA  (WM_USER + 120)
1480 #define MCIWNDM_GETFILENAMEA    (WM_USER + 124)
1481 #define MCIWNDM_GETDEVICEA      (WM_USER + 125)
1482 #define MCIWNDM_GETERRORA       (WM_USER + 128)
1483 #define MCIWNDM_NEWA            (WM_USER + 134)
1484 #define MCIWNDM_RETURNSTRINGA   (WM_USER + 138)
1485 #define MCIWNDM_OPENA           (WM_USER + 153)
1486
1487 #define MCIWNDM_SENDSTRINGW     (WM_USER + 201)
1488 #define MCIWNDM_GETPOSITIONW    (WM_USER + 202)
1489 #define MCIWNDM_GETMODEW        (WM_USER + 206)
1490 #define MCIWNDM_SETTIMEFORMATW  (WM_USER + 219)
1491 #define MCIWNDM_GETTIMEFORMATW  (WM_USER + 220)
1492 #define MCIWNDM_GETFILENAMEW    (WM_USER + 224)
1493 #define MCIWNDM_GETDEVICEW      (WM_USER + 225)
1494 #define MCIWNDM_GETERRORW       (WM_USER + 228)
1495 #define MCIWNDM_NEWW            (WM_USER + 234)
1496 #define MCIWNDM_RETURNSTRINGW   (WM_USER + 238)
1497 #define MCIWNDM_OPENW           (WM_USER + 252)
1498
1499 #define MCIWNDM_SENDSTRING      WINELIB_NAME_AW(MCIWNDM_SENDSTRING)
1500 #define MCIWNDM_GETPOSITION     WINELIB_NAME_AW(MCIWNDM_GETPOSITION)
1501 #define MCIWNDM_GETMODE         WINELIB_NAME_AW(MCIWNDM_GETMODE)
1502 #define MCIWNDM_SETTIMEFORMAT   WINELIB_NAME_AW(MCIWNDM_SETTIMEFORMAT)
1503 #define MCIWNDM_GETTIMEFORMAT   WINELIB_NAME_AW(MCIWNDM_GETTIMEFORMAT)
1504 #define MCIWNDM_GETFILENAME     WINELIB_NAME_AW(MCIWNDM_GETFILENAME)
1505 #define MCIWNDM_GETDEVICE       WINELIB_NAME_AW(MCIWNDM_GETDEVICE)
1506 #define MCIWNDM_GETERROR        WINELIB_NAME_AW(MCIWNDM_GETERROR)
1507 #define MCIWNDM_NEW             WINELIB_NAME_AW(MCIWNDM_NEW)
1508 #define MCIWNDM_RETURNSTRING    WINELIB_NAME_AW(MCIWNDM_RETURNSTRING)
1509 #define MCIWNDM_OPEN            WINELIB_NAME_AW(MCIWNDM_OPEN)
1510
1511 #define MCIWNDM_NOTIFYMODE      (WM_USER + 200)
1512 #define MCIWNDM_NOTIFYPOS       (WM_USER + 201)
1513 #define MCIWNDM_NOTIFYSIZE      (WM_USER + 202)
1514 #define MCIWNDM_NOTIFYMEDIA     (WM_USER + 203)
1515 #define MCIWNDM_NOTIFYERROR     (WM_USER + 205)
1516
1517 #define MCIWND_START                -1
1518 #define MCIWND_END                  -2
1519
1520 /********************************************
1521  * DrawDib declarations
1522  */
1523
1524 HDRAWDIB VFWAPI DrawDibOpen( void );
1525 UINT VFWAPI DrawDibRealize(HDRAWDIB hdd, HDC hdc, BOOL fBackground);
1526
1527 BOOL VFWAPI DrawDibBegin(HDRAWDIB hdd, HDC hdc, INT dxDst, INT dyDst,
1528                          LPBITMAPINFOHEADER lpbi, INT dxSrc, INT dySrc, UINT wFlags);
1529
1530 BOOL VFWAPI DrawDibDraw(HDRAWDIB hdd, HDC hdc, INT xDst, INT yDst, INT dxDst, INT dyDst,
1531                         LPBITMAPINFOHEADER lpbi, LPVOID lpBits,
1532                         INT xSrc, INT ySrc, INT dxSrc, INT dySrc, UINT wFlags);
1533
1534 /* DrawDibDraw flags */
1535
1536 #define DDF_UPDATE                      0x0002
1537 #define DDF_SAME_HDC                    0x0004
1538 #define DDF_SAME_DRAW                   0x0008
1539 #define DDF_DONTDRAW                    0x0010
1540 #define DDF_ANIMATE                     0x0020
1541 #define DDF_BUFFER                      0x0040
1542 #define DDF_JUSTDRAWIT                  0x0080
1543 #define DDF_FULLSCREEN                  0x0100
1544 #define DDF_BACKGROUNDPAL               0x0200
1545 #define DDF_NOTKEYFRAME                 0x0400
1546 #define DDF_HURRYUP                     0x0800
1547 #define DDF_HALFTONE                    0x1000
1548
1549 #define DDF_PREROLL                     DDF_DONTDRAW
1550 #define DDF_SAME_DIB                    DDF_SAME_DRAW
1551 #define DDF_SAME_SIZE                   DDF_SAME_DRAW
1552
1553 BOOL VFWAPI DrawDibSetPalette(HDRAWDIB hdd, HPALETTE hpal);
1554 HPALETTE VFWAPI DrawDibGetPalette(HDRAWDIB hdd);
1555 BOOL VFWAPI DrawDibChangePalette(HDRAWDIB hdd, int iStart, int iLen, LPPALETTEENTRY lppe);
1556 LPVOID VFWAPI DrawDibGetBuffer(HDRAWDIB hdd, LPBITMAPINFOHEADER lpbi, DWORD dwSize, DWORD dwFlags);
1557
1558 BOOL VFWAPI DrawDibStart(HDRAWDIB hdd, DWORD rate);
1559 BOOL VFWAPI DrawDibStop(HDRAWDIB hdd);
1560 #define DrawDibUpdate(hdd, hdc, x, y) \
1561         DrawDibDraw(hdd, hdc, x, y, 0, 0, NULL, NULL, 0, 0, 0, 0, DDF_UPDATE)
1562
1563 BOOL VFWAPI DrawDibEnd(HDRAWDIB hdd);
1564 BOOL VFWAPI DrawDibClose(HDRAWDIB hdd);
1565
1566 /* display profiling */
1567 #define PD_CAN_DRAW_DIB         0x0001
1568 #define PD_CAN_STRETCHDIB       0x0002
1569 #define PD_STRETCHDIB_1_1_OK    0x0004
1570 #define PD_STRETCHDIB_1_2_OK    0x0008
1571 #define PD_STRETCHDIB_1_N_OK    0x0010
1572
1573 DWORD VFWAPI DrawDibProfileDisplay(LPBITMAPINFOHEADER lpbi);
1574
1575 #ifdef __cplusplus
1576 }
1577 #endif  /* __cplusplus */
1578
1579 #endif /* __WINE_VFW_H */