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