Text of WWN article "The Registry".
[wine.git] / include / vfw.h
blob9ef93d19a10175d85c61dd20ac55bd2c000c1250
1 #ifndef __WINE_VFW_H
2 #define __WINE_VFW_H
4 #include "windef.h"
5 #include "mmsystem.h"
6 #include "wingdi.h"
7 #include "wine/obj_base.h"
8 #include "unknwn.h"
10 #define VFWAPI WINAPI
11 #define VFWAPIV WINAPIV
13 typedef HANDLE16 HDRAWDIB16;
14 typedef HANDLE HDRAWDIB;
16 HWND VFWAPIV MCIWndCreateA(HWND hwndParent, HINSTANCE hInstance, DWORD dwStyle, LPCSTR szFile);
17 HWND VFWAPIV MCIWndCreateW(HWND hwndParent, HINSTANCE hInstance, DWORD dwStyle, LPCWSTR szFile);
18 #define MCIWndCreate WINELIB_NAME_AW(MCIWndCreate)
19 DWORD VFWAPI VideoForWindowsVersion(void);
21 #ifndef mmioFOURCC
22 #define mmioFOURCC( ch0, ch1, ch2, ch3 ) \
23 ( (DWORD)(BYTE)(ch0) | ( (DWORD)(BYTE)(ch1) << 8 ) | \
24 ( (DWORD)(BYTE)(ch2) << 16 ) | ( (DWORD)(BYTE)(ch3) << 24 ) )
25 #endif
27 #ifndef aviTWOCC
28 #define aviTWOCC(ch0, ch1) ((WORD)(BYTE)(ch0) | ((WORD)(BYTE)(ch1) << 8))
29 #endif
31 #define ICTYPE_VIDEO mmioFOURCC('v', 'i', 'd', 'c')
32 #define ICTYPE_AUDIO mmioFOURCC('a', 'u', 'd', 'c')
34 /*****************************************************************************
35 * Predeclare the interfaces
37 typedef struct IAVIStream IAVIStream,*PAVISTREAM;
38 typedef struct IAVIFile IAVIFile,*PAVIFILE;
39 typedef struct IGetFrame IGetFrame,*PGETFRAME;
41 /* Installable Compressor Manager */
43 DECLARE_HANDLE(HIC);
45 #ifdef __WINE__
46 /* HIC struct (same layout as Win95 one) */
47 typedef struct tagWINE_HIC {
48 DWORD magic; /* 00: 'Smag' */
49 HANDLE curthread; /* 04: */
50 DWORD type; /* 08: */
51 DWORD handler; /* 0C: */
52 HDRVR hdrv; /* 10: */
53 DWORD private; /* 14:(handled by SendDriverMessage)*/
54 FARPROC driverproc; /* 18:(handled by SendDriverMessage)*/
55 DWORD x1; /* 1c: name? */
56 WORD x2; /* 20: */
57 DWORD x3; /* 22: */
58 /* 26: */
59 } WINE_HIC;
60 #endif
62 /* error return codes */
63 #define ICERR_OK 0
64 #define ICERR_DONTDRAW 1
65 #define ICERR_NEWPALETTE 2
66 #define ICERR_GOTOKEYFRAME 3
67 #define ICERR_STOPDRAWING 4
69 #define ICERR_UNSUPPORTED -1
70 #define ICERR_BADFORMAT -2
71 #define ICERR_MEMORY -3
72 #define ICERR_INTERNAL -4
73 #define ICERR_BADFLAGS -5
74 #define ICERR_BADPARAM -6
75 #define ICERR_BADSIZE -7
76 #define ICERR_BADHANDLE -8
77 #define ICERR_CANTUPDATE -9
78 #define ICERR_ABORT -10
79 #define ICERR_ERROR -100
80 #define ICERR_BADBITDEPTH -200
81 #define ICERR_BADIMAGESIZE -201
83 #define ICERR_CUSTOM -400
85 /* ICM Messages */
86 #define ICM_USER (DRV_USER+0x0000)
88 /* ICM driver message range */
89 #define ICM_RESERVED_LOW (DRV_USER+0x1000)
90 #define ICM_RESERVED_HIGH (DRV_USER+0x2000)
91 #define ICM_RESERVED ICM_RESERVED_LOW
93 #define ICM_GETSTATE (ICM_RESERVED+0)
94 #define ICM_SETSTATE (ICM_RESERVED+1)
95 #define ICM_GETINFO (ICM_RESERVED+2)
97 #define ICM_CONFIGURE (ICM_RESERVED+10)
98 #define ICM_ABOUT (ICM_RESERVED+11)
99 /* */
101 #define ICM_GETDEFAULTQUALITY (ICM_RESERVED+30)
102 #define ICM_GETQUALITY (ICM_RESERVED+31)
103 #define ICM_SETQUALITY (ICM_RESERVED+32)
105 #define ICM_SET (ICM_RESERVED+40)
106 #define ICM_GET (ICM_RESERVED+41)
108 /* 2 constant FOURCC codes */
109 #define ICM_FRAMERATE mmioFOURCC('F','r','m','R')
110 #define ICM_KEYFRAMERATE mmioFOURCC('K','e','y','R')
112 #define ICM_COMPRESS_GET_FORMAT (ICM_USER+4)
113 #define ICM_COMPRESS_GET_SIZE (ICM_USER+5)
114 #define ICM_COMPRESS_QUERY (ICM_USER+6)
115 #define ICM_COMPRESS_BEGIN (ICM_USER+7)
116 #define ICM_COMPRESS (ICM_USER+8)
117 #define ICM_COMPRESS_END (ICM_USER+9)
119 #define ICM_DECOMPRESS_GET_FORMAT (ICM_USER+10)
120 #define ICM_DECOMPRESS_QUERY (ICM_USER+11)
121 #define ICM_DECOMPRESS_BEGIN (ICM_USER+12)
122 #define ICM_DECOMPRESS (ICM_USER+13)
123 #define ICM_DECOMPRESS_END (ICM_USER+14)
124 #define ICM_DECOMPRESS_SET_PALETTE (ICM_USER+29)
125 #define ICM_DECOMPRESS_GET_PALETTE (ICM_USER+30)
127 #define ICM_DRAW_QUERY (ICM_USER+31)
128 #define ICM_DRAW_BEGIN (ICM_USER+15)
129 #define ICM_DRAW_GET_PALETTE (ICM_USER+16)
130 #define ICM_DRAW_START (ICM_USER+18)
131 #define ICM_DRAW_STOP (ICM_USER+19)
132 #define ICM_DRAW_END (ICM_USER+21)
133 #define ICM_DRAW_GETTIME (ICM_USER+32)
134 #define ICM_DRAW (ICM_USER+33)
135 #define ICM_DRAW_WINDOW (ICM_USER+34)
136 #define ICM_DRAW_SETTIME (ICM_USER+35)
137 #define ICM_DRAW_REALIZE (ICM_USER+36)
138 #define ICM_DRAW_FLUSH (ICM_USER+37)
139 #define ICM_DRAW_RENDERBUFFER (ICM_USER+38)
141 #define ICM_DRAW_START_PLAY (ICM_USER+39)
142 #define ICM_DRAW_STOP_PLAY (ICM_USER+40)
144 #define ICM_DRAW_SUGGESTFORMAT (ICM_USER+50)
145 #define ICM_DRAW_CHANGEPALETTE (ICM_USER+51)
147 #define ICM_GETBUFFERSWANTED (ICM_USER+41)
149 #define ICM_GETDEFAULTKEYFRAMERATE (ICM_USER+42)
151 #define ICM_DECOMPRESSEX_BEGIN (ICM_USER+60)
152 #define ICM_DECOMPRESSEX_QUERY (ICM_USER+61)
153 #define ICM_DECOMPRESSEX (ICM_USER+62)
154 #define ICM_DECOMPRESSEX_END (ICM_USER+63)
156 #define ICM_COMPRESS_FRAMES_INFO (ICM_USER+70)
157 #define ICM_SET_STATUS_PROC (ICM_USER+72)
159 /* structs */
161 /* NOTE: Only the 16 bit structs are packed. Structs that are packed anyway
162 * have not been changed. If a structure is later extended, you may need to create
163 * two versions of it.
166 typedef struct {
167 DWORD dwSize; /* 00: size */
168 DWORD fccType; /* 04: type 'vidc' usually */
169 DWORD fccHandler; /* 08: */
170 DWORD dwVersion; /* 0c: version of compman opening you */
171 DWORD dwFlags; /* 10: LOWORD is type specific */
172 LRESULT dwError; /* 14: */
173 LPVOID pV1Reserved; /* 18: */
174 LPVOID pV2Reserved; /* 1c: */
175 DWORD dnDevNode; /* 20: */
176 /* 24: */
177 } ICOPEN,*LPICOPEN;
179 #define ICCOMPRESS_KEYFRAME 0x00000001L
181 typedef struct {
182 DWORD dwFlags;
183 LPBITMAPINFOHEADER lpbiOutput;
184 LPVOID lpOutput;
185 LPBITMAPINFOHEADER lpbiInput;
186 LPVOID lpInput;
187 LPDWORD lpckid;
188 LPDWORD lpdwFlags;
189 LONG lFrameNum;
190 DWORD dwFrameSize;
191 DWORD dwQuality;
192 LPBITMAPINFOHEADER lpbiPrev;
193 LPVOID lpPrev;
194 } ICCOMPRESS;
196 DWORD VFWAPIV ICCompress(
197 HIC hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiOutput,LPVOID lpData,
198 LPBITMAPINFOHEADER lpbiInput,LPVOID lpBits,LPDWORD lpckid,
199 LPDWORD lpdwFlags,LONG lFrameNum,DWORD dwFrameSize,DWORD dwQuality,
200 LPBITMAPINFOHEADER lpbiPrev,LPVOID lpPrev
203 #define ICCompressGetFormat(hic, lpbiInput, lpbiOutput) \
204 ICSendMessage( \
205 hic,ICM_COMPRESS_GET_FORMAT,(DWORD)(LPVOID)(lpbiInput), \
206 (DWORD)(LPVOID)(lpbiOutput) \
209 #define ICCompressGetFormatSize(hic,lpbi) ICCompressGetFormat(hic,lpbi,NULL)
211 #define ICCompressBegin(hic, lpbiInput, lpbiOutput) \
212 ICSendMessage( \
213 hic, ICM_COMPRESS_BEGIN, (DWORD)(LPVOID)(lpbiInput), \
214 (DWORD)(LPVOID)(lpbiOutput) \
217 #define ICCompressGetSize(hic, lpbiInput, lpbiOutput) \
218 ICSendMessage( \
219 hic, ICM_COMPRESS_GET_SIZE, (DWORD)(LPVOID)(lpbiInput), \
220 (DWORD)(LPVOID)(lpbiOutput) \
223 #define ICCompressQuery(hic, lpbiInput, lpbiOutput) \
224 ICSendMessage( \
225 hic, ICM_COMPRESS_QUERY, (DWORD)(LPVOID)(lpbiInput), \
226 (DWORD)(LPVOID)(lpbiOutput) \
230 #define ICCompressEnd(hic) ICSendMessage(hic, ICM_COMPRESS_END, 0, 0)
232 /* ICCOMPRESSFRAMES.dwFlags */
233 #define ICCOMPRESSFRAMES_PADDING 0x00000001
234 typedef struct {
235 DWORD dwFlags;
236 LPBITMAPINFOHEADER lpbiOutput;
237 LPARAM lOutput;
238 LPBITMAPINFOHEADER lpbiInput;
239 LPARAM lInput;
240 LONG lStartFrame;
241 LONG lFrameCount;
242 LONG lQuality;
243 LONG lDataRate;
244 LONG lKeyRate;
245 DWORD dwRate;
246 DWORD dwScale;
247 DWORD dwOverheadPerFrame;
248 DWORD dwReserved2;
249 LONG CALLBACK (*GetData)(LPARAM lInput,LONG lFrame,LPVOID lpBits,LONG len);
250 LONG CALLBACK (*PutData)(LPARAM lOutput,LONG lFrame,LPVOID lpBits,LONG len);
251 } ICCOMPRESSFRAMES;
253 /* Values for wMode of ICOpen() */
254 #define ICMODE_COMPRESS 1
255 #define ICMODE_DECOMPRESS 2
256 #define ICMODE_FASTDECOMPRESS 3
257 #define ICMODE_QUERY 4
258 #define ICMODE_FASTCOMPRESS 5
259 #define ICMODE_DRAW 8
261 /* quality flags */
262 #define ICQUALITY_LOW 0
263 #define ICQUALITY_HIGH 10000
264 #define ICQUALITY_DEFAULT -1
266 typedef struct {
267 DWORD dwSize; /* 00: */
268 DWORD fccType; /* 04:compressor type 'vidc' 'audc' */
269 DWORD fccHandler; /* 08:compressor sub-type 'rle ' 'jpeg' 'pcm '*/
270 DWORD dwFlags; /* 0c:flags LOWORD is type specific */
271 DWORD dwVersion; /* 10:version of the driver */
272 DWORD dwVersionICM; /* 14:version of the ICM used */
274 * under Win32, the driver always returns UNICODE strings.
276 WCHAR szName[16]; /* 18:short name */
277 WCHAR szDescription[128]; /* 38:long name */
278 WCHAR szDriver[128]; /* 138:driver that contains compressor*/
279 /* 238: */
280 } ICINFO;
282 #include "pshpack1.h"
284 typedef struct {
285 DWORD dwSize;
286 DWORD fccType;
287 DWORD fccHandler;
288 DWORD dwFlags;
289 DWORD dwVersion;
290 DWORD dwVersionICM;
292 * under Win16, normal chars are used
294 CHAR szName[16];
295 CHAR szDescription[128];
296 CHAR szDriver[128];
297 } ICINFO16;
299 #include "poppack.h"
301 /* ICINFO.dwFlags */
302 #define VIDCF_QUALITY 0x0001 /* supports quality */
303 #define VIDCF_CRUNCH 0x0002 /* supports crunching to a frame size */
304 #define VIDCF_TEMPORAL 0x0004 /* supports inter-frame compress */
305 #define VIDCF_COMPRESSFRAMES 0x0008 /* wants the compress all frames message */
306 #define VIDCF_DRAW 0x0010 /* supports drawing */
307 #define VIDCF_FASTTEMPORALC 0x0020 /* does not need prev frame on compress */
308 #define VIDCF_FASTTEMPORALD 0x0080 /* does not need prev frame on decompress */
309 #define VIDCF_QUALITYTIME 0x0040 /* supports temporal quality */
311 #define VIDCF_FASTTEMPORAL (VIDCF_FASTTEMPORALC|VIDCF_FASTTEMPORALD)
314 /* function shortcuts */
315 /* ICM_ABOUT */
316 #define ICMF_ABOUT_QUERY 0x00000001
318 #define ICQueryAbout(hic) \
319 (ICSendMessage(hic,ICM_ABOUT,(DWORD)-1,ICMF_ABOUT_QUERY)==ICERR_OK)
321 #define ICAbout(hic, hwnd) ICSendMessage(hic,ICM_ABOUT,(DWORD)(UINT)(hwnd),0)
323 /* ICM_CONFIGURE */
324 #define ICMF_CONFIGURE_QUERY 0x00000001
325 #define ICQueryConfigure(hic) \
326 (ICSendMessage(hic,ICM_CONFIGURE,(DWORD)-1,ICMF_CONFIGURE_QUERY)==ICERR_OK)
328 #define ICConfigure(hic,hwnd) \
329 ICSendMessage(hic,ICM_CONFIGURE,(DWORD)(UINT)(hwnd),0)
331 /* Decompression stuff */
332 #define ICDECOMPRESS_HURRYUP 0x80000000 /* don't draw just buffer (hurry up!) */
333 #define ICDECOMPRESS_UPDATE 0x40000000 /* don't draw just update screen */
334 #define ICDECOMPRESS_PREROL 0x20000000 /* this frame is before real start */
335 #define ICDECOMPRESS_NULLFRAME 0x10000000 /* repeat last frame */
336 #define ICDECOMPRESS_NOTKEYFRAME 0x08000000 /* this frame is not a key frame */
338 typedef struct {
339 DWORD dwFlags; /* flags (from AVI index...) */
340 LPBITMAPINFOHEADER lpbiInput; /* BITMAPINFO of compressed data */
341 LPVOID lpInput; /* compressed data */
342 LPBITMAPINFOHEADER lpbiOutput; /* DIB to decompress to */
343 LPVOID lpOutput;
344 DWORD ckid; /* ckid from AVI file */
345 } ICDECOMPRESS;
347 typedef struct {
348 DWORD dwFlags;
349 LPBITMAPINFOHEADER lpbiSrc;
350 LPVOID lpSrc;
351 LPBITMAPINFOHEADER lpbiDst;
352 LPVOID lpDst;
354 /* changed for ICM_DECOMPRESSEX */
355 INT xDst; /* destination rectangle */
356 INT yDst;
357 INT dxDst;
358 INT dyDst;
360 INT xSrc; /* source rectangle */
361 INT ySrc;
362 INT dxSrc;
363 INT dySrc;
364 } ICDECOMPRESSEX;
366 #include "pshpack1.h"
368 typedef struct {
369 DWORD dwFlags;
370 LPBITMAPINFOHEADER lpbiSrc;
371 LPVOID lpSrc;
372 LPBITMAPINFOHEADER lpbiDst;
373 LPVOID lpDst;
375 INT16 xDst; /* destination rectangle */
376 INT16 yDst;
377 INT16 dxDst;
378 INT16 dyDst;
380 INT16 xSrc; /* source rectangle */
381 INT16 ySrc;
382 INT16 dxSrc;
383 INT16 dySrc;
384 } ICDECOMPRESSEX16;
386 #include "poppack.h"
388 DWORD VFWAPIV ICDecompress(HIC hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiFormat,LPVOID lpData,LPBITMAPINFOHEADER lpbi,LPVOID lpBits);
390 #define ICDecompressBegin(hic, lpbiInput, lpbiOutput) \
391 ICSendMessage( \
392 hic, ICM_DECOMPRESS_BEGIN, (DWORD)(LPVOID)(lpbiInput), \
393 (DWORD)(LPVOID)(lpbiOutput) \
396 #define ICDecompressQuery(hic, lpbiInput, lpbiOutput) \
397 ICSendMessage( \
398 hic,ICM_DECOMPRESS_QUERY, (DWORD)(LPVOID)(lpbiInput), \
399 (DWORD) (LPVOID)(lpbiOutput) \
402 #define ICDecompressGetFormat(hic, lpbiInput, lpbiOutput) \
403 ((LONG)ICSendMessage( \
404 hic,ICM_DECOMPRESS_GET_FORMAT, (DWORD)(LPVOID)(lpbiInput), \
405 (DWORD)(LPVOID)(lpbiOutput) \
408 #define ICDecompressGetFormatSize(hic, lpbi) \
409 ICDecompressGetFormat(hic, lpbi, NULL)
411 #define ICDecompressGetPalette(hic, lpbiInput, lpbiOutput) \
412 ICSendMessage( \
413 hic, ICM_DECOMPRESS_GET_PALETTE, (DWORD)(LPVOID)(lpbiInput), \
414 (DWORD)(LPVOID)(lpbiOutput) \
417 #define ICDecompressSetPalette(hic,lpbiPalette) \
418 ICSendMessage( \
419 hic,ICM_DECOMPRESS_SET_PALETTE, \
420 (DWORD)(LPVOID)(lpbiPalette),0 \
423 #define ICDecompressEnd(hic) ICSendMessage(hic, ICM_DECOMPRESS_END, 0, 0)
426 #define ICDRAW_QUERY 0x00000001L /* test for support */
427 #define ICDRAW_FULLSCREEN 0x00000002L /* draw to full screen */
428 #define ICDRAW_HDC 0x00000004L /* draw to a HDC/HWND */
430 BOOL VFWAPI ICInfo(DWORD fccType, DWORD fccHandler, ICINFO * lpicinfo);
431 LRESULT VFWAPI ICGetInfo(HIC hic,ICINFO *picinfo, DWORD cb);
432 HIC VFWAPI ICOpen(DWORD fccType, DWORD fccHandler, UINT wMode);
433 HIC16 VFWAPI ICOpen16(DWORD fccType, DWORD fccHangler, UINT16 wMode);
434 HIC VFWAPI ICOpenFunction(DWORD fccType, DWORD fccHandler, UINT wMode, FARPROC lpfnHandler);
436 LRESULT VFWAPI ICClose(HIC hic);
437 LRESULT VFWAPI ICSendMessage(HIC hic, UINT msg, DWORD dw1, DWORD dw2);
438 LRESULT VFWAPI ICSendMessage16(HIC16 hic, UINT16 msg, DWORD dw1, DWORD dw2);
439 HIC VFWAPI ICLocate(DWORD fccType, DWORD fccHandler, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut, WORD wFlags);
440 HIC16 VFWAPI ICLocate16(DWORD fccType, DWORD fccHandler, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut, WORD wFlags);
442 /* As passed to ICM_DRAW_SUGGESTFORMAT */
443 typedef struct {
444 DWORD dwFlags;
445 LPBITMAPINFOHEADER lpbiIn;
446 LPBITMAPINFOHEADER lpbiSuggest;
447 INT dxSrc;
448 INT dySrc;
449 INT dxDst;
450 INT dyDst;
451 HIC hicDecompressor;
452 } ICDRAWSUGGEST;
454 typedef struct {
455 DWORD dwFlags;
456 LPBITMAPINFOHEADER lpbiIn;
457 LPBITMAPINFOHEADER lpbiSuggest;
458 INT16 dxSrc;
459 INT16 dySrc;
460 INT16 dxDst;
461 INT16 dyDst;
462 HIC16 hicDecompressor;
463 } ICDRAWSUGGEST16;
465 DWORD VFWAPIV ICDrawBegin(
466 HIC hic,
467 DWORD dwFlags,/* flags */
468 HPALETTE hpal, /* palette to draw with */
469 HWND hwnd, /* window to draw to */
470 HDC hdc, /* HDC to draw to */
471 INT xDst, /* destination rectangle */
472 INT yDst,
473 INT dxDst,
474 INT dyDst,
475 LPBITMAPINFOHEADER lpbi, /* format of frame to draw */
476 INT xSrc, /* source rectangle */
477 INT ySrc,
478 INT dxSrc,
479 INT dySrc,
480 DWORD dwRate, /* frames/second = (dwRate/dwScale) */
481 DWORD dwScale
484 DWORD VFWAPIV ICDrawBegin16(
485 HIC16 hic,
486 DWORD dwFlags,/* flags */
487 HPALETTE16 hpal, /* palette to draw with */
488 HWND16 hwnd, /* window to draw to */
489 HDC16 hdc, /* HDC to draw to */
490 INT16 xDst, /* destination rectangle */
491 INT16 yDst,
492 INT16 dxDst,
493 INT16 dyDst,
494 LPBITMAPINFOHEADER lpbi, /* format of frame to draw */
495 INT16 xSrc, /* source rectangle */
496 INT16 ySrc,
497 INT16 dxSrc,
498 INT16 dySrc,
499 DWORD dwRate, /* frames/second = (dwRate/dwScale) */
500 DWORD dwScale
503 /* as passed to ICM_DRAW_BEGIN */
504 typedef struct {
505 DWORD dwFlags;
506 HPALETTE hpal;
507 HWND hwnd;
508 HDC hdc;
509 INT xDst;
510 INT yDst;
511 INT dxDst;
512 INT dyDst;
513 LPBITMAPINFOHEADER lpbi;
514 INT xSrc;
515 INT ySrc;
516 INT dxSrc;
517 INT dySrc;
518 DWORD dwRate;
519 DWORD dwScale;
520 } ICDRAWBEGIN;
522 #include "pshpack1.h"
524 typedef struct {
525 DWORD dwFlags;
526 HPALETTE16 hpal;
527 HWND16 hwnd;
528 HDC16 hdc;
529 INT16 xDst;
530 INT16 yDst;
531 INT16 dxDst;
532 INT16 dyDst;
533 LPBITMAPINFOHEADER lpbi;
534 INT16 xSrc;
535 INT16 ySrc;
536 INT16 dxSrc;
537 INT16 dySrc;
538 DWORD dwRate;
539 DWORD dwScale;
540 } ICDRAWBEGIN16;
542 #include "poppack.h"
544 #define ICDRAW_HURRYUP 0x80000000L /* don't draw just buffer (hurry up!) */
545 #define ICDRAW_UPDATE 0x40000000L /* don't draw just update screen */
546 #define ICDRAW_PREROLL 0x20000000L /* this frame is before real start */
547 #define ICDRAW_NULLFRAME 0x10000000L /* repeat last frame */
548 #define ICDRAW_NOTKEYFRAME 0x08000000L /* this frame is not a key frame */
550 typedef struct {
551 DWORD dwFlags;
552 LPVOID lpFormat;
553 LPVOID lpData;
554 DWORD cbData;
555 LONG lTime;
556 } ICDRAW;
558 DWORD VFWAPIV ICDraw(HIC hic,DWORD dwFlags,LPVOID lpFormat,LPVOID lpData,DWORD cbData,LONG lTime);
560 /********************* AVIFILE function declarations *************************/
562 #define streamtypeVIDEO mmioFOURCC('v', 'i', 'd', 's')
563 #define streamtypeAUDIO mmioFOURCC('a', 'u', 'd', 's')
564 #define streamtypeMIDI mmioFOURCC('m', 'i', 'd', 's')
565 #define streamtypeTEXT mmioFOURCC('t', 'x', 't', 's')
567 /* Basic chunk types */
568 #define cktypeDIBbits aviTWOCC('d', 'b')
569 #define cktypeDIBcompressed aviTWOCC('d', 'c')
570 #define cktypePALchange aviTWOCC('p', 'c')
571 #define cktypeWAVEbytes aviTWOCC('w', 'b')
573 /* Chunk id to use for extra chunks for padding. */
574 #define ckidAVIPADDING mmioFOURCC('J', 'U', 'N', 'K')
576 /* AVIFileHdr.dwFlags */
577 #define AVIF_HASINDEX 0x00000010 /* Index at end of file? */
578 #define AVIF_MUSTUSEINDEX 0x00000020
579 #define AVIF_ISINTERLEAVED 0x00000100
580 #define AVIF_TRUSTCKTYPE 0x00000800 /* Use CKType to find key frames*/
581 #define AVIF_WASCAPTUREFILE 0x00010000
582 #define AVIF_COPYRIGHTED 0x00020000
584 #define AVI_HEADERSIZE 2048
586 typedef struct _MainAVIHeader
588 DWORD dwMicroSecPerFrame;
589 DWORD dwMaxBytesPerSec;
590 DWORD dwPaddingGranularity;
591 DWORD dwFlags;
592 DWORD dwTotalFrames;
593 DWORD dwInitialFrames;
594 DWORD dwStreams;
595 DWORD dwSuggestedBufferSize;
596 DWORD dwWidth;
597 DWORD dwHeight;
598 DWORD dwReserved[4];
599 } MainAVIHeader;
601 /* AVIStreamHeader.dwFlags */
602 #define AVISF_DISABLED 0x00000001
603 #define AVISF_VIDEO_PALCHANGES 0x00010000
605 typedef struct {
606 FOURCC fccType;
607 FOURCC fccHandler;
608 DWORD dwFlags; /* AVISF_* */
609 WORD wPriority;
610 WORD wLanguage;
611 DWORD dwInitialFrames;
612 DWORD dwScale;
613 DWORD dwRate; /* dwRate / dwScale == samples/second */
614 DWORD dwStart;
615 DWORD dwLength; /* In units above... */
616 DWORD dwSuggestedBufferSize;
617 DWORD dwQuality;
618 DWORD dwSampleSize;
619 RECT16 rcFrame; /* word.word - word.word in file */
620 } AVIStreamHeader;
622 /* AVIINDEXENTRY.dwFlags */
623 #define AVIIF_LIST 0x00000001 /* chunk is a 'LIST' */
624 #define AVIIF_KEYFRAME 0x00000010 /* this frame is a key frame. */
626 #define AVIIF_NOTIME 0x00000100 /* this frame doesn't take any time */
627 #define AVIIF_COMPUSE 0x0FFF0000
629 typedef struct _AVIINDEXENTRY {
630 DWORD ckid;
631 DWORD dwFlags;
632 DWORD dwChunkOffset;
633 DWORD dwChunkLength;
634 } AVIINDEXENTRY;
636 typedef struct _AVIPALCHANGE {
637 BYTE bFirstEntry;
638 BYTE bNumEntries;
639 WORD wFlags; /* pad */
640 PALETTEENTRY peNew[1];
641 } AVIPALCHANGE;
643 #define AVIIF_KEYFRAME 0x00000010 /* this frame is a key frame. */
645 #define AVIGETFRAMEF_BESTDISPLAYFMT 1
647 typedef struct _AVISTREAMINFOA {
648 DWORD fccType;
649 DWORD fccHandler;
650 DWORD dwFlags; /* AVIIF_* */
651 DWORD dwCaps;
652 WORD wPriority;
653 WORD wLanguage;
654 DWORD dwScale;
655 DWORD dwRate; /* dwRate / dwScale == samples/second */
656 DWORD dwStart;
657 DWORD dwLength; /* In units above... */
658 DWORD dwInitialFrames;
659 DWORD dwSuggestedBufferSize;
660 DWORD dwQuality;
661 DWORD dwSampleSize;
662 RECT rcFrame;
663 DWORD dwEditCount;
664 DWORD dwFormatChangeCount;
665 CHAR szName[64];
666 } AVISTREAMINFOA, * LPAVISTREAMINFOA, *PAVISTREAMINFOA;
668 typedef struct _AVISTREAMINFOW {
669 DWORD fccType;
670 DWORD fccHandler;
671 DWORD dwFlags;
672 DWORD dwCaps;
673 WORD wPriority;
674 WORD wLanguage;
675 DWORD dwScale;
676 DWORD dwRate; /* dwRate / dwScale == samples/second */
677 DWORD dwStart;
678 DWORD dwLength; /* In units above... */
679 DWORD dwInitialFrames;
680 DWORD dwSuggestedBufferSize;
681 DWORD dwQuality;
682 DWORD dwSampleSize;
683 RECT rcFrame;
684 DWORD dwEditCount;
685 DWORD dwFormatChangeCount;
686 WCHAR szName[64];
687 } AVISTREAMINFOW, * LPAVISTREAMINFOW, *PAVISTREAMINFOW;
688 DECL_WINELIB_TYPE_AW(AVISTREAMINFO)
689 DECL_WINELIB_TYPE_AW(LPAVISTREAMINFO)
690 DECL_WINELIB_TYPE_AW(PAVISTREAMINFO)
692 #define AVISTREAMINFO_DISABLED 0x00000001
693 #define AVISTREAMINFO_FORMATCHANGES 0x00010000
695 /* AVIFILEINFO.dwFlags */
696 #define AVIFILEINFO_HASINDEX 0x00000010
697 #define AVIFILEINFO_MUSTUSEINDEX 0x00000020
698 #define AVIFILEINFO_ISINTERLEAVED 0x00000100
699 #define AVIFILEINFO_WASCAPTUREFILE 0x00010000
700 #define AVIFILEINFO_COPYRIGHTED 0x00020000
702 /* AVIFILEINFO.dwCaps */
703 #define AVIFILECAPS_CANREAD 0x00000001
704 #define AVIFILECAPS_CANWRITE 0x00000002
705 #define AVIFILECAPS_ALLKEYFRAMES 0x00000010
706 #define AVIFILECAPS_NOCOMPRESSION 0x00000020
708 typedef struct _AVIFILEINFOW {
709 DWORD dwMaxBytesPerSec;
710 DWORD dwFlags;
711 DWORD dwCaps;
712 DWORD dwStreams;
713 DWORD dwSuggestedBufferSize;
714 DWORD dwWidth;
715 DWORD dwHeight;
716 DWORD dwScale;
717 DWORD dwRate;
718 DWORD dwLength;
719 DWORD dwEditCount;
720 WCHAR szFileType[64];
721 } AVIFILEINFOW, * LPAVIFILEINFOW, *PAVIFILEINFOW;
722 typedef struct _AVIFILEINFOA {
723 DWORD dwMaxBytesPerSec;
724 DWORD dwFlags;
725 DWORD dwCaps;
726 DWORD dwStreams;
727 DWORD dwSuggestedBufferSize;
728 DWORD dwWidth;
729 DWORD dwHeight;
730 DWORD dwScale;
731 DWORD dwRate;
732 DWORD dwLength;
733 DWORD dwEditCount;
734 CHAR szFileType[64];
735 } AVIFILEINFOA, * LPAVIFILEINFOA, *PAVIFILEINFOA;
736 DECL_WINELIB_TYPE_AW(AVIFILEINFO)
737 DECL_WINELIB_TYPE_AW(PAVIFILEINFO)
738 DECL_WINELIB_TYPE_AW(LPAVIFILEINFO)
740 /* AVICOMPRESSOPTIONS.dwFlags. determines presence of fields in below struct */
741 #define AVICOMPRESSF_INTERLEAVE 0x00000001
742 #define AVICOMPRESSF_DATARATE 0x00000002
743 #define AVICOMPRESSF_KEYFRAMES 0x00000004
744 #define AVICOMPRESSF_VALID 0x00000008
746 typedef struct {
747 DWORD fccType; /* stream type, for consistency */
748 DWORD fccHandler; /* compressor */
749 DWORD dwKeyFrameEvery; /* keyframe rate */
750 DWORD dwQuality; /* compress quality 0-10,000 */
751 DWORD dwBytesPerSecond; /* bytes per second */
752 DWORD dwFlags; /* flags... see below */
753 LPVOID lpFormat; /* save format */
754 DWORD cbFormat;
755 LPVOID lpParms; /* compressor options */
756 DWORD cbParms;
757 DWORD dwInterleaveEvery; /* for non-video streams only */
758 } AVICOMPRESSOPTIONS, *LPAVICOMPRESSOPTIONS,*PAVICOMPRESSOPTIONS;
762 #define DEFINE_AVIGUID(name, l, w1, w2) \
763 DEFINE_GUID(name, l, w1, w2, 0xC0,0,0,0,0,0,0,0x46)
765 DEFINE_AVIGUID(IID_IAVIFile, 0x00020020, 0, 0);
766 DEFINE_AVIGUID(IID_IAVIStream, 0x00020021, 0, 0);
767 DEFINE_AVIGUID(IID_IAVIStreaming, 0x00020022, 0, 0);
768 DEFINE_AVIGUID(IID_IGetFrame, 0x00020023, 0, 0);
769 DEFINE_AVIGUID(IID_IAVIEditStream, 0x00020024, 0, 0);
771 DEFINE_AVIGUID(CLSID_AVIFile, 0x00020000, 0, 0);
773 /*****************************************************************************
774 * IAVIStream interface
776 #define ICOM_INTERFACE IAVIStream
777 #define IAVIStream_METHODS \
778 ICOM_METHOD2(HRESULT,Create, LPARAM,lParam1, LPARAM,lParam2) \
779 ICOM_METHOD2(HRESULT,Info, AVISTREAMINFOW*,psi, LONG,lSize) \
780 ICOM_METHOD2(LONG, FindSample, LONG,lPos, LONG,lFlags) \
781 ICOM_METHOD3(HRESULT,ReadFormat, LONG,lPos, LPVOID,lpFormat, LONG*,lpcbFormat) \
782 ICOM_METHOD3(HRESULT,SetFormat, LONG,lPos, LPVOID,lpFormat, LONG,cbFormat) \
783 ICOM_METHOD6(HRESULT,Read, LONG,lStart, LONG,lSamples, LPVOID,lpBuffer, LONG,cbBuffer, LONG*,plBytes, LONG*,plSamples) \
784 ICOM_METHOD7(HRESULT,Write, LONG,lStart, LONG,lSamples, LPVOID,lpBuffer, LONG,cbBuffer, DWORD,dwFlags, LONG*,plSampWritten, LONG*,plBytesWritten) \
785 ICOM_METHOD2(HRESULT,Delete, LONG,lStart, LONG,lSamples) \
786 ICOM_METHOD3(HRESULT,ReadData, DWORD,fcc, LPVOID,lpBuffer, LONG*,lpcbBuffer) \
787 ICOM_METHOD3(HRESULT,WriteData, DWORD,fcc, LPVOID,lpBuffer, LONG,cbBuffer) \
788 ICOM_METHOD2(HRESULT,SetInfo, AVISTREAMINFOW*,plInfo, LONG,cbInfo)
789 #define IAVIStream_IMETHODS \
790 IUnknown_IMETHODS \
791 IAVIStream_METHODS
792 ICOM_DEFINE(IAVIStream, IUnknown)
793 #undef ICOM_INTERFACE
795 /*** IUnknown methods ***/
796 #define IAVIStream_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
797 #define IAVIStream_AddRef(p) ICOM_CALL (AddRef,p)
798 #define IAVIStream_Release(p) ICOM_CALL (Release,p)
799 /*** IAVIStream methods ***/
800 #define IAVIStream_Create(p,a,b) ICOM_CALL2(Create,p,a,b)
801 #define IAVIStream_Info(p,a,b) ICOM_CALL2(Info,p,a,b)
802 #define IAVIStream_FindSample(p,a,b) ICOM_CALL2(FindSample,p,a,b)
803 #define IAVIStream_ReadFormat(p,a,b,c) ICOM_CALL3(ReadFormat,p,a,b,c)
804 #define IAVIStream_SetFormat(p,a,b,c) ICOM_CALL3(SetFormat,p,a,b,c)
805 #define IAVIStream_Read(p,a,b,c,d,e,f) ICOM_CALL6(Read,p,a,b,c,d,e,f)
806 #define IAVIStream_Write(p,a,b,c,d,e,f,g) ICOM_CALL7(Write,p,a,b,c,d,e,f,g)
807 #define IAVIStream_Delete(p,a,b) ICOM_CALL2(Delete,p,a,b)
808 #define IAVIStream_ReadData(p,a,b,c) ICOM_CALL3(ReadData,p,a,b,c)
809 #define IAVIStream_WriteData(p,a,b,c) ICOM_CALL3(WriteData,p,a,b,c)
810 #define IAVIStream_SetInfo(p,a,b) ICOM_CALL2(SetInfo,p,a,b)
812 HRESULT WINAPI AVIMakeCompressedStream(PAVISTREAM*ppsCompressed,PAVISTREAM ppsSource,AVICOMPRESSOPTIONS *lpOptions,CLSID*pclsidHandler);
814 HRESULT WINAPI AVIStreamInfoA(PAVISTREAM iface,AVISTREAMINFOA *asi,LONG size);
815 HRESULT WINAPI AVIStreamInfoW(PAVISTREAM iface,AVISTREAMINFOW *asi,LONG size);
816 #define AVIStreamInfo WINELIB_NAME_AW(AVIStreamInfo)
817 LPVOID WINAPI AVIStreamGetFrame(PGETFRAME pg,LONG pos);
818 HRESULT WINAPI AVIStreamGetFrameClose(PGETFRAME pg);
819 PGETFRAME WINAPI AVIStreamGetFrameOpen(PAVISTREAM pavi,LPBITMAPINFOHEADER lpbiWanted);
820 LONG WINAPI AVIStreamLength(PAVISTREAM iface);
821 HRESULT WINAPI AVIStreamRead(PAVISTREAM iface,LONG start,LONG samples,LPVOID buffer,LONG buffersize,LONG *bytesread,LONG *samplesread);
822 HRESULT WINAPI AVIStreamReadData(PAVISTREAM iface,DWORD fcc,LPVOID lp,LONG *lpread);
823 HRESULT WINAPI AVIStreamReadFormat(PAVISTREAM iface,LONG pos,LPVOID format,LONG *formatsize);
824 ULONG WINAPI AVIStreamRelease(PAVISTREAM iface);
825 HRESULT WINAPI AVIStreamSetFormat(PAVISTREAM iface,LONG pos,LPVOID format,LONG formatsize);
826 LONG WINAPI AVIStreamStart(PAVISTREAM iface);
827 HRESULT WINAPI AVIStreamWrite(PAVISTREAM iface,LONG start,LONG samples,LPVOID buffer,LONG buffersize,DWORD flags,LONG *sampwritten,LONG *byteswritten);
828 HRESULT WINAPI AVIStreamWriteData(PAVISTREAM iface,DWORD fcc,LPVOID lp,LONG size);
831 /*****************************************************************************
832 * IAVIFile interface
834 /* In Win32 this interface uses UNICODE only */
835 #define ICOM_INTERFACE IAVIFile
836 #define IAVIFile_METHODS \
837 ICOM_METHOD2(HRESULT,Info, AVIFILEINFOW*,pfi, LONG,lSize) \
838 ICOM_METHOD3(HRESULT,GetStream, PAVISTREAM*,ppStream, DWORD,fccType, LONG,lParam) \
839 ICOM_METHOD2(HRESULT,CreateStream, PAVISTREAM*,ppStream, AVISTREAMINFOW*,psi) \
840 ICOM_METHOD3(HRESULT,WriteData, DWORD,fcc, LPVOID,lpBuffer, LONG,cbBuffer) \
841 ICOM_METHOD3(HRESULT,ReadData, DWORD,fcc, LPVOID,lpBuffer, LONG*,lpcbBuffer) \
842 ICOM_METHOD (HRESULT,EndRecord) \
843 ICOM_METHOD2(HRESULT,DeleteStream, DWORD,fccType, LONG,lParam)
844 #define IAVIFile_IMETHODS \
845 IUnknown_IMETHODS \
846 IAVIFile_METHODS
847 ICOM_DEFINE(IAVIFile,IUnknown)
848 #undef ICOM_INTERFACE
850 /*** IUnknown methods ***/
851 #define IAVIFile_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
852 #define IAVIFile_AddRef(p) ICOM_CALL (AddRef,p)
853 #define IAVIFile_Release(p) ICOM_CALL (Release,p)
854 /*** IAVIFile methods ***/
855 #define IAVIFile_Info(p,a,b) ICOM_CALL2(Info,p,a,b)
856 #define IAVIFile_GetStream(p,a,b,c) ICOM_CALL3(GetStream,p,a,b,c)
857 #define IAVIFile_CreateStream(p,a,b) ICOM_CALL2(CreateStream,p,a,b)
858 #define IAVIFile_WriteData(p,a,b,c) ICOM_CALL3(WriteData,p,a,b,c)
859 #define IAVIFile_ReadData(p,a,b,c) ICOM_CALL3(ReadData,p,a,b,c)
860 #define IAVIFile_EndRecord(p) ICOM_CALL (EndRecord,p)
861 #define IAVIFile_DeleteStream(p,a,b) ICOM_CALL2(DeleteStream,p,a,b)
863 HRESULT WINAPI AVIFileCreateStreamA(PAVIFILE pfile,PAVISTREAM* ppavi,AVISTREAMINFOA* psi);
864 HRESULT WINAPI AVIFileCreateStreamW(PAVIFILE pfile,PAVISTREAM* ppavi,AVISTREAMINFOW* psi);
865 #define AVIFileCreateStream WINELIB_NAME_AW(AVIFileCreateStream)
866 void WINAPI AVIFileExit(void);
867 HRESULT WINAPI AVIFileGetStream(PAVIFILE pfile,PAVISTREAM* avis,DWORD fccType,LONG lParam);
868 HRESULT WINAPI AVIFileInfoA(PAVIFILE pfile,PAVIFILEINFOA pfi,LONG lSize);
869 HRESULT WINAPI AVIFileInfoW(PAVIFILE pfile,PAVIFILEINFOW pfi,LONG lSize);
870 #define AVIFileInfo WINELIB_NAME_AW(AVIFileInfo)
871 void WINAPI AVIFileInit(void);
872 HRESULT WINAPI AVIFileOpenA(PAVIFILE* ppfile,LPCSTR szFile,UINT uMode,LPCLSID lpHandler);
873 HRESULT WINAPI AVIFileOpenW(PAVIFILE* ppfile,LPCWSTR szFile,UINT uMode,LPCLSID lpHandler);
874 #define AVIFileOpen WINELIB_NAME_AW(AVIFileOpen)
875 ULONG WINAPI AVIFileRelease(PAVIFILE iface);
878 /*****************************************************************************
879 * IGetFrame interface
881 #define ICOM_INTERFACE IGetFrame
882 #define IGetFrame_METHODS \
883 ICOM_METHOD1(LPVOID, GetFrame, LONG,lPos) \
884 ICOM_METHOD3(HRESULT,Begin, LONG,lStart, LONG,lEnd, LONG,lRate) \
885 ICOM_METHOD (HRESULT,End) \
886 ICOM_METHOD6(HRESULT,SetFormat, LPBITMAPINFOHEADER,lpbi, LPVOID,lpBits, INT,x, INT,y, INT,dx, INT,dy)
887 #define IGetFrame_IMETHODS \
888 IUnknown_IMETHODS \
889 IGetFrame_METHODS
890 ICOM_DEFINE(IGetFrame,IUnknown)
891 #undef ICOM_INTERFACE
893 /*** IUnknown methods ***/
894 #define IGetFrame_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
895 #define IGetFrame_AddRef(p) ICOM_CALL (AddRef,p)
896 #define IGetFrame_Release(p) ICOM_CALL (Release,p)
897 /*** IGetFrame methods ***/
898 #define IGetFrame_GetFrame(p,a) ICOM_CALL1(GetFrame,p,a)
899 #define IGetFrame_Begin(p,a,b,c) ICOM_CALL3(Begin,p,a,b,c)
900 #define IGetFrame_End(p) ICOM_CALL (End,p)
901 #define IGetFrame_SetFormat(p,a,b,c,d,e,f) ICOM_CALL6(SetFormat,p,a,b,c,d,e,f)
903 #define AVIERR_OK 0
904 #define MAKE_AVIERR(error) MAKE_SCODE(SEVERITY_ERROR,FACILITY_ITF,0x4000+error)
906 #define AVIERR_UNSUPPORTED MAKE_AVIERR(101)
907 #define AVIERR_BADFORMAT MAKE_AVIERR(102)
908 #define AVIERR_MEMORY MAKE_AVIERR(103)
909 #define AVIERR_INTERNAL MAKE_AVIERR(104)
910 #define AVIERR_BADFLAGS MAKE_AVIERR(105)
911 #define AVIERR_BADPARAM MAKE_AVIERR(106)
912 #define AVIERR_BADSIZE MAKE_AVIERR(107)
913 #define AVIERR_BADHANDLE MAKE_AVIERR(108)
914 #define AVIERR_FILEREAD MAKE_AVIERR(109)
915 #define AVIERR_FILEWRITE MAKE_AVIERR(110)
916 #define AVIERR_FILEOPEN MAKE_AVIERR(111)
917 #define AVIERR_COMPRESSOR MAKE_AVIERR(112)
918 #define AVIERR_NOCOMPRESSOR MAKE_AVIERR(113)
919 #define AVIERR_READONLY MAKE_AVIERR(114)
920 #define AVIERR_NODATA MAKE_AVIERR(115)
921 #define AVIERR_BUFFERTOOSMALL MAKE_AVIERR(116)
922 #define AVIERR_CANTCOMPRESS MAKE_AVIERR(117)
923 #define AVIERR_USERABORT MAKE_AVIERR(198)
924 #define AVIERR_ERROR MAKE_AVIERR(199)
926 /********************************************
927 * DrawDib declarations
930 HDRAWDIB VFWAPI DrawDibOpen( void );
931 UINT VFWAPI DrawDibRealize(HDRAWDIB hdd, HDC hdc, BOOL fBackground);
933 BOOL VFWAPI DrawDibBegin(HDRAWDIB hdd,
934 HDC hdc,
935 INT dxDst,
936 INT dyDst,
937 LPBITMAPINFOHEADER lpbi,
938 INT dxSrc,
939 INT dySrc,
940 UINT wFlags);
942 BOOL VFWAPI DrawDibDraw(HDRAWDIB hdd,
943 HDC hdc,
944 INT xDst,
945 INT yDst,
946 INT dxDst,
947 INT dyDst,
948 LPBITMAPINFOHEADER lpbi,
949 LPVOID lpBits,
950 INT xSrc,
951 INT ySrc,
952 INT dxSrc,
953 INT dySrc,
954 UINT wFlags);
956 /* DrawDibDraw flags */
958 #define DDF_UPDATE 0x0002
959 #define DDF_SAME_HDC 0x0004
960 #define DDF_SAME_DRAW 0x0008
961 #define DDF_DONTDRAW 0x0010
962 #define DDF_ANIMATE 0x0020
963 #define DDF_BUFFER 0x0040
964 #define DDF_JUSTDRAWIT 0x0080
965 #define DDF_FULLSCREEN 0x0100
966 #define DDF_BACKGROUNDPAL 0x0200
967 #define DDF_NOTKEYFRAME 0x0400
968 #define DDF_HURRYUP 0x0800
969 #define DDF_HALFTONE 0x1000
971 BOOL VFWAPI DrawDibSetPalette(HDRAWDIB hdd, HPALETTE hpal);
972 HPALETTE VFWAPI DrawDibGetPalette(HDRAWDIB hdd);
974 BOOL VFWAPI DrawDibEnd(HDRAWDIB hdd);
975 BOOL VFWAPI DrawDibClose(HDRAWDIB hdd);
977 #endif /* __WINE_VFW_H */