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