#ifndef __WINE_VFW_H #define __WINE_VFW_H #include #include #define VFWAPI WINAPI #define VFWAPIV WINAPIV DWORD VFWAPI VideoForWindowsVersion(void); #ifndef aviTWOCC #define aviTWOCC(ch0, ch1) ((WORD)(BYTE)(ch0) | ((WORD)(BYTE)(ch1) << 8)) #endif #define ICTYPE_VIDEO mmioFOURCC('v', 'i', 'd', 'c') #define ICTYPE_AUDIO mmioFOURCC('a', 'u', 'd', 'c') /* Installable Compressor M? */ /* HIC32 struct (same layout as Win95 one) */ typedef struct tagWINE_HIC { DWORD magic; /* 00: 'Smag' */ HANDLE32 curthread; /* 04: */ DWORD type; /* 08: */ DWORD handler; /* 0C: */ HDRVR32 hdrv; /* 10: */ DWORD private; /* 14: private data passed to drv */ FARPROC32 driverproc; /* 18: */ DWORD x1; /* 1c: name? */ WORD x2; /* 20: */ DWORD x3; /* 22: */ /* 26: */ } WINE_HIC; /* error return codes */ #define ICERR_OK 0 #define ICERR_DONTDRAW 1 #define ICERR_NEWPALETTE 2 #define ICERR_GOTOKEYFRAME 3 #define ICERR_STOPDRAWING 4 #define ICERR_UNSUPPORTED -1 #define ICERR_BADFORMAT -2 #define ICERR_MEMORY -3 #define ICERR_INTERNAL -4 #define ICERR_BADFLAGS -5 #define ICERR_BADPARAM -6 #define ICERR_BADSIZE -7 #define ICERR_BADHANDLE -8 #define ICERR_CANTUPDATE -9 #define ICERR_ABORT -10 #define ICERR_ERROR -100 #define ICERR_BADBITDEPTH -200 #define ICERR_BADIMAGESIZE -201 #define ICERR_CUSTOM -400 /* ICM Messages */ #define ICM_USER (DRV_USER+0x0000) /* ICM driver message range */ #define ICM_RESERVED_LOW (DRV_USER+0x1000) #define ICM_RESERVED_HIGH (DRV_USER+0x2000) #define ICM_RESERVED ICM_RESERVED_LOW #define ICM_GETSTATE (ICM_RESERVED+0) #define ICM_SETSTATE (ICM_RESERVED+1) #define ICM_GETINFO (ICM_RESERVED+2) #define ICM_CONFIGURE (ICM_RESERVED+10) #define ICM_ABOUT (ICM_RESERVED+11) /* */ #define ICM_GETDEFAULTQUALITY (ICM_RESERVED+30) #define ICM_GETQUALITY (ICM_RESERVED+31) #define ICM_SETQUALITY (ICM_RESERVED+32) #define ICM_SET (ICM_RESERVED+40) #define ICM_GET (ICM_RESERVED+41) /* 2 constant FOURCC codes */ #define ICM_FRAMERATE mmioFOURCC('F','r','m','R') #define ICM_KEYFRAMERATE mmioFOURCC('K','e','y','R') #define ICM_COMPRESS_GET_FORMAT (ICM_USER+4) #define ICM_COMPRESS_GET_SIZE (ICM_USER+5) #define ICM_COMPRESS_QUERY (ICM_USER+6) #define ICM_COMPRESS_BEGIN (ICM_USER+7) #define ICM_COMPRESS (ICM_USER+8) #define ICM_COMPRESS_END (ICM_USER+9) #define ICM_DECOMPRESS_GET_FORMAT (ICM_USER+10) #define ICM_DECOMPRESS_QUERY (ICM_USER+11) #define ICM_DECOMPRESS_BEGIN (ICM_USER+12) #define ICM_DECOMPRESS (ICM_USER+13) #define ICM_DECOMPRESS_END (ICM_USER+14) #define ICM_DECOMPRESS_SET_PALETTE (ICM_USER+29) #define ICM_DECOMPRESS_GET_PALETTE (ICM_USER+30) #define ICM_DRAW_QUERY (ICM_USER+31) #define ICM_DRAW_BEGIN (ICM_USER+15) #define ICM_DRAW_GET_PALETTE (ICM_USER+16) #define ICM_DRAW_START (ICM_USER+18) #define ICM_DRAW_STOP (ICM_USER+19) #define ICM_DRAW_END (ICM_USER+21) #define ICM_DRAW_GETTIME (ICM_USER+32) #define ICM_DRAW (ICM_USER+33) #define ICM_DRAW_WINDOW (ICM_USER+34) #define ICM_DRAW_SETTIME (ICM_USER+35) #define ICM_DRAW_REALIZE (ICM_USER+36) #define ICM_DRAW_FLUSH (ICM_USER+37) #define ICM_DRAW_RENDERBUFFER (ICM_USER+38) #define ICM_DRAW_START_PLAY (ICM_USER+39) #define ICM_DRAW_STOP_PLAY (ICM_USER+40) #define ICM_DRAW_SUGGESTFORMAT (ICM_USER+50) #define ICM_DRAW_CHANGEPALETTE (ICM_USER+51) #define ICM_GETBUFFERSWANTED (ICM_USER+41) #define ICM_GETDEFAULTKEYFRAMERATE (ICM_USER+42) #define ICM_DECOMPRESSEX_BEGIN (ICM_USER+60) #define ICM_DECOMPRESSEX_QUERY (ICM_USER+61) #define ICM_DECOMPRESSEX (ICM_USER+62) #define ICM_DECOMPRESSEX_END (ICM_USER+63) #define ICM_COMPRESS_FRAMES_INFO (ICM_USER+70) #define ICM_SET_STATUS_PROC (ICM_USER+72) /* structs */ typedef struct { DWORD dwSize; /* 00: size */ DWORD fccType; /* 04: type 'vidc' usually */ DWORD fccHandler; /* 08: */ DWORD dwVersion; /* 0c: version of compman opening you */ DWORD dwFlags; /* 10: LOWORD is type specific */ LRESULT dwError; /* 14: */ LPVOID pV1Reserved; /* 18: */ LPVOID pV2Reserved; /* 1c: */ DWORD dnDevNode; /* 20: */ /* 24: */ } ICOPEN,*LPICOPEN; /* Values for dwFlags of ICOpen() */ #define ICMODE_COMPRESS 1 #define ICMODE_DECOMPRESS 2 #define ICMODE_FASTDECOMPRESS 3 #define ICMODE_QUERY 4 #define ICMODE_FASTCOMPRESS 5 #define ICMODE_DRAW 8 /* quality flags */ #define ICQUALITY_LOW 0 #define ICQUALITY_HIGH 10000 #define ICQUALITY_DEFAULT -1 typedef struct { DWORD dwSize; /* 00: */ DWORD fccType; /* 04:compressor type 'vidc' 'audc' */ DWORD fccHandler; /* 08:compressor sub-type 'rle ' 'jpeg' 'pcm '*/ DWORD dwFlags; /* 0c:flags LOWORD is type specific */ DWORD dwVersion; /* 10:version of the driver */ DWORD dwVersionICM; /* 14:version of the ICM used */ /* * under Win32, the driver always returns UNICODE strings. */ WCHAR szName[16]; /* 18:short name */ WCHAR szDescription[128]; /* 38:long name */ WCHAR szDriver[128]; /* 138:driver that contains compressor*/ /* 238: */ } ICINFO32; /* Flags for the field of the structure. */ #define VIDCF_QUALITY 0x0001 /* supports quality */ #define VIDCF_CRUNCH 0x0002 /* supports crunching to a frame size */ #define VIDCF_TEMPORAL 0x0004 /* supports inter-frame compress */ #define VIDCF_COMPRESSFRAMES 0x0008 /* wants the compress all frames message */ #define VIDCF_DRAW 0x0010 /* supports drawing */ #define VIDCF_FASTTEMPORALC 0x0020 /* does not need prev frame on compress */ #define VIDCF_FASTTEMPORALD 0x0080 /* does not need prev frame on decompress */ #define VIDCF_QUALITYTIME 0x0040 /* supports temporal quality */ #define VIDCF_FASTTEMPORAL (VIDCF_FASTTEMPORALC|VIDCF_FASTTEMPORALD) /* function shortcuts */ /* ICM_ABOUT */ #define ICMF_ABOUT_QUERY 0x00000001 #define ICQueryAbout(hic) \ (ICSendMessage(hic,ICM_ABOUT,(DWORD)-1,ICMF_ABOUT_QUERY)==ICERR_OK) #define ICAbout(hic, hwnd) \ ICSendMessage(hic,ICM_ABOUT,(DWORD)(UINT)(hwnd),0) /* ICM_CONFIGURE */ #define ICMF_CONFIGURE_QUERY 0x00000001 #define ICQueryConfigure(hic) \ (ICSendMessage(hic,ICM_CONFIGURE,(DWORD)-1,ICMF_CONFIGURE_QUERY)==ICERR_OK) #define ICConfigure(hic,hwnd) \ ICSendMessage(hic,ICM_CONFIGURE,(DWORD)(UINT)(hwnd),0) /* Decompression stuff */ #define ICDECOMPRESS_HURRYUP 0x80000000 /* don't draw just buffer (hurry up!) */ #define ICDECOMPRESS_UPDATE 0x40000000 /* don't draw just update screen */ #define ICDECOMPRESS_PREROL 0x20000000 /* this frame is before real start */ #define ICDECOMPRESS_NULLFRAME 0x10000000 /* repeat last frame */ #define ICDECOMPRESS_NOTKEYFRAME 0x08000000 /* this frame is not a key frame */ typedef struct { DWORD dwFlags; /* flags (from AVI index...) */ LPBITMAPINFOHEADER lpbiInput; /* BITMAPINFO of compressed data */ LPVOID lpInput; /* compressed data */ LPBITMAPINFOHEADER lpbiOutput; /* DIB to decompress to */ LPVOID lpOutput; DWORD ckid; /* ckid from AVI file */ } ICDECOMPRESS; typedef struct { DWORD dwFlags; LPBITMAPINFOHEADER lpbiSrc; LPVOID lpSrc; LPBITMAPINFOHEADER lpbiDst; LPVOID lpDst; /* changed for ICM_DECOMPRESSEX */ INT32 xDst; /* destination rectangle */ INT32 yDst; INT32 dxDst; INT32 dyDst; INT32 xSrc; /* source rectangle */ INT32 ySrc; INT32 dxSrc; INT32 dySrc; } ICDECOMPRESSEX; #define ICDRAW_QUERY 0x00000001L // test for support #define ICDRAW_FULLSCREEN 0x00000002L // draw to full screen #define ICDRAW_HDC 0x00000004L // draw to a HDC/HWND BOOL32 VFWAPI ICInfo32(DWORD fccType, DWORD fccHandler, ICINFO32 * lpicinfo); LRESULT VFWAPI ICGetInfo32(HIC32 hic,ICINFO32 *picinfo, DWORD cb); HIC32 VFWAPI ICOpen32(DWORD fccType, DWORD fccHandler, UINT32 wMode); LRESULT VFWAPI ICSendMessage32(HIC32 hic, UINT32 msg, DWORD dw1, DWORD dw2); DWORD VFWAPIV ICDrawBegin32( HIC32 hic, DWORD dwFlags,/* flags */ HPALETTE32 hpal, /* palette to draw with */ HWND32 hwnd, /* window to draw to */ HDC32 hdc, /* HDC to draw to */ INT32 xDst, /* destination rectangle */ INT32 yDst, INT32 dxDst, INT32 dyDst, LPBITMAPINFOHEADER lpbi, /* format of frame to draw */ INT32 xSrc, /* source rectangle */ INT32 ySrc, INT32 dxSrc, INT32 dySrc, DWORD dwRate, /* frames/second = (dwRate/dwScale) */ DWORD dwScale); #endif