| #ifndef __WINE_VFW_H | |
| #define __WINE_VFW_H | |
| #include "windef.h" | |
| #include "mmsystem.h" | |
| #include "wingdi.h" | |
| #include "wine/obj_base.h" | |
| #include "unknwn.h" | |
| #define VFWAPI WINAPI | |
| #define VFWAPIV WINAPIV | |
| DWORD VFWAPI VideoForWindowsVersion(void); | |
| #ifndef mmioFOURCC | |
| #define mmioFOURCC( ch0, ch1, ch2, ch3 ) \ | |
| ( (DWORD)(BYTE)(ch0) | ( (DWORD)(BYTE)(ch1) << 8 ) | \ | |
| ( (DWORD)(BYTE)(ch2) << 16 ) | ( (DWORD)(BYTE)(ch3) << 24 ) ) | |
| #endif | |
| #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') | |
| /***************************************************************************** | |
| * Predeclare the interfaces | |
| */ | |
| typedef struct IAVIStream IAVIStream,*PAVISTREAM; | |
| typedef struct IAVIFile IAVIFile,*PAVIFILE; | |
| typedef struct IGetFrame IGetFrame,*PGETFRAME; | |
| /* Installable Compressor M? */ | |
| /* HIC struct (same layout as Win95 one) */ | |
| typedef struct tagWINE_HIC { | |
| DWORD magic; /* 00: 'Smag' */ | |
| HANDLE curthread; /* 04: */ | |
| DWORD type; /* 08: */ | |
| DWORD handler; /* 0C: */ | |
| HDRVR hdrv; /* 10: */ | |
| DWORD private; /* 14:(handled by SendDriverMessage)*/ | |
| FARPROC driverproc; /* 18:(handled by SendDriverMessage)*/ | |
| 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; | |
| #define ICCOMPRESS_KEYFRAME 0x00000001L | |
| typedef struct { | |
| DWORD dwFlags; | |
| LPBITMAPINFOHEADER lpbiOutput; | |
| LPVOID lpOutput; | |
| LPBITMAPINFOHEADER lpbiInput; | |
| LPVOID lpInput; | |
| LPDWORD lpckid; | |
| LPDWORD lpdwFlags; | |
| LONG lFrameNum; | |
| DWORD dwFrameSize; | |
| DWORD dwQuality; | |
| LPBITMAPINFOHEADER lpbiPrev; | |
| LPVOID lpPrev; | |
| } ICCOMPRESS; | |
| DWORD VFWAPIV 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 | |
| ); | |
| #define ICCompressGetFormat(hic, lpbiInput, lpbiOutput) \ | |
| ICSendMessage( \ | |
| hic,ICM_COMPRESS_GET_FORMAT,(DWORD)(LPVOID)(lpbiInput), \ | |
| (DWORD)(LPVOID)(lpbiOutput) \ | |
| ) | |
| #define ICCompressGetFormatSize(hic,lpbi) ICCompressGetFormat(hic,lpbi,NULL) | |
| #define ICCompressBegin(hic, lpbiInput, lpbiOutput) \ | |
| ICSendMessage( \ | |
| hic, ICM_COMPRESS_BEGIN, (DWORD)(LPVOID)(lpbiInput), \ | |
| (DWORD)(LPVOID)(lpbiOutput) \ | |
| ) | |
| #define ICCompressGetSize(hic, lpbiInput, lpbiOutput) \ | |
| ICSendMessage( \ | |
| hic, ICM_COMPRESS_GET_SIZE, (DWORD)(LPVOID)(lpbiInput), \ | |
| (DWORD)(LPVOID)(lpbiOutput) \ | |
| ) | |
| #define ICCompressQuery(hic, lpbiInput, lpbiOutput) \ | |
| ICSendMessage( \ | |
| hic, ICM_COMPRESS_QUERY, (DWORD)(LPVOID)(lpbiInput), \ | |
| (DWORD)(LPVOID)(lpbiOutput) \ | |
| ) | |
| #define ICCompressEnd(hic) ICSendMessage(hic, ICM_COMPRESS_END, 0, 0) | |
| /* ICCOMPRESSFRAMES.dwFlags */ | |
| #define ICCOMPRESSFRAMES_PADDING 0x00000001 | |
| typedef struct { | |
| DWORD dwFlags; | |
| LPBITMAPINFOHEADER lpbiOutput; | |
| LPARAM lOutput; | |
| LPBITMAPINFOHEADER lpbiInput; | |
| LPARAM lInput; | |
| LONG lStartFrame; | |
| LONG lFrameCount; | |
| LONG lQuality; | |
| LONG lDataRate; | |
| LONG lKeyRate; | |
| DWORD dwRate; | |
| DWORD dwScale; | |
| DWORD dwOverheadPerFrame; | |
| DWORD dwReserved2; | |
| LONG (CALLBACK *GetData)(LPARAM lInput,LONG lFrame,LPVOID lpBits,LONG len); | |
| LONG (CALLBACK *PutData)(LPARAM lOutput,LONG lFrame,LPVOID lpBits,LONG len); | |
| } ICCOMPRESSFRAMES; | |
| /* Values for wMode 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: */ | |
| } ICINFO; | |
| /* ICINFO.dwFlags */ | |
| #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 */ | |
| INT xDst; /* destination rectangle */ | |
| INT yDst; | |
| INT dxDst; | |
| INT dyDst; | |
| INT xSrc; /* source rectangle */ | |
| INT ySrc; | |
| INT dxSrc; | |
| INT dySrc; | |
| } ICDECOMPRESSEX; | |
| DWORD VFWAPIV ICDecompress(HIC hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiFormat,LPVOID lpData,LPBITMAPINFOHEADER lpbi,LPVOID lpBits); | |
| #define ICDecompressBegin(hic, lpbiInput, lpbiOutput) \ | |
| ICSendMessage( \ | |
| hic, ICM_DECOMPRESS_BEGIN, (DWORD)(LPVOID)(lpbiInput), \ | |
| (DWORD)(LPVOID)(lpbiOutput) \ | |
| ) | |
| #define ICDecompressQuery(hic, lpbiInput, lpbiOutput) \ | |
| ICSendMessage( \ | |
| hic,ICM_DECOMPRESS_QUERY, (DWORD)(LPVOID)(lpbiInput), \ | |
| (DWORD) (LPVOID)(lpbiOutput) \ | |
| ) | |
| #define ICDecompressGetFormat(hic, lpbiInput, lpbiOutput) \ | |
| ((LONG)ICSendMessage( \ | |
| hic,ICM_DECOMPRESS_GET_FORMAT, (DWORD)(LPVOID)(lpbiInput), \ | |
| (DWORD)(LPVOID)(lpbiOutput) \ | |
| )) | |
| #define ICDecompressGetFormatSize(hic, lpbi) \ | |
| ICDecompressGetFormat(hic, lpbi, NULL) | |
| #define ICDecompressGetPalette(hic, lpbiInput, lpbiOutput) \ | |
| ICSendMessage( \ | |
| hic, ICM_DECOMPRESS_GET_PALETTE, (DWORD)(LPVOID)(lpbiInput), \ | |
| (DWORD)(LPVOID)(lpbiOutput) \ | |
| ) | |
| #define ICDecompressSetPalette(hic,lpbiPalette) \ | |
| ICSendMessage( \ | |
| hic,ICM_DECOMPRESS_SET_PALETTE, \ | |
| (DWORD)(LPVOID)(lpbiPalette),0 \ | |
| ) | |
| #define ICDecompressEnd(hic) ICSendMessage(hic, ICM_DECOMPRESS_END, 0, 0) | |
| #define ICDRAW_QUERY 0x00000001L /* test for support */ | |
| #define ICDRAW_FULLSCREEN 0x00000002L /* draw to full screen */ | |
| #define ICDRAW_HDC 0x00000004L /* draw to a HDC/HWND */ | |
| BOOL VFWAPI ICInfo(DWORD fccType, DWORD fccHandler, ICINFO * lpicinfo); | |
| LRESULT VFWAPI ICGetInfo(HIC hic,ICINFO *picinfo, DWORD cb); | |
| HIC VFWAPI ICOpen(DWORD fccType, DWORD fccHandler, UINT wMode); | |
| HIC VFWAPI ICOpenFunction(DWORD fccType, DWORD fccHandler, UINT wMode, FARPROC lpfnHandler); | |
| LRESULT VFWAPI ICClose(HIC hic); | |
| LRESULT VFWAPI ICSendMessage(HIC hic, UINT msg, DWORD dw1, DWORD dw2); | |
| HIC VFWAPI ICLocate(DWORD fccType, DWORD fccHandler, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut, WORD wFlags); | |
| DWORD VFWAPIV ICDrawBegin( | |
| HIC hic, | |
| DWORD dwFlags,/* flags */ | |
| HPALETTE hpal, /* palette to draw with */ | |
| HWND hwnd, /* window to draw to */ | |
| HDC hdc, /* HDC to draw to */ | |
| INT xDst, /* destination rectangle */ | |
| INT yDst, | |
| INT dxDst, | |
| INT dyDst, | |
| LPBITMAPINFOHEADER lpbi, /* format of frame to draw */ | |
| INT xSrc, /* source rectangle */ | |
| INT ySrc, | |
| INT dxSrc, | |
| INT dySrc, | |
| DWORD dwRate, /* frames/second = (dwRate/dwScale) */ | |
| DWORD dwScale | |
| ); | |
| /* as passed to ICM_DRAW_BEGIN (FIXME: correct only for Win32?) */ | |
| typedef struct { | |
| 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; | |
| } ICDRAWBEGIN; | |
| #define ICDRAW_HURRYUP 0x80000000L /* don't draw just buffer (hurry up!) */ | |
| #define ICDRAW_UPDATE 0x40000000L /* don't draw just update screen */ | |
| #define ICDRAW_PREROLL 0x20000000L /* this frame is before real start */ | |
| #define ICDRAW_NULLFRAME 0x10000000L /* repeat last frame */ | |
| #define ICDRAW_NOTKEYFRAME 0x08000000L /* this frame is not a key frame */ | |
| typedef struct { | |
| DWORD dwFlags; | |
| LPVOID lpFormat; | |
| LPVOID lpData; | |
| DWORD cbData; | |
| LONG lTime; | |
| } ICDRAW; | |
| DWORD VFWAPIV ICDraw(HIC hic,DWORD dwFlags,LPVOID lpFormat,LPVOID lpData,DWORD cbData,LONG lTime); | |
| /********************* AVIFILE function declarations *************************/ | |
| #define streamtypeVIDEO mmioFOURCC('v', 'i', 'd', 's') | |
| #define streamtypeAUDIO mmioFOURCC('a', 'u', 'd', 's') | |
| #define streamtypeMIDI mmioFOURCC('m', 'i', 'd', 's') | |
| #define streamtypeTEXT mmioFOURCC('t', 'x', 't', 's') | |
| /* Basic chunk types */ | |
| #define cktypeDIBbits aviTWOCC('d', 'b') | |
| #define cktypeDIBcompressed aviTWOCC('d', 'c') | |
| #define cktypePALchange aviTWOCC('p', 'c') | |
| #define cktypeWAVEbytes aviTWOCC('w', 'b') | |
| /* Chunk id to use for extra chunks for padding. */ | |
| #define ckidAVIPADDING mmioFOURCC('J', 'U', 'N', 'K') | |
| /* AVIFileHdr.dwFlags */ | |
| #define AVIF_HASINDEX 0x00000010 /* Index at end of file? */ | |
| #define AVIF_MUSTUSEINDEX 0x00000020 | |
| #define AVIF_ISINTERLEAVED 0x00000100 | |
| #define AVIF_TRUSTCKTYPE 0x00000800 /* Use CKType to find key frames*/ | |
| #define AVIF_WASCAPTUREFILE 0x00010000 | |
| #define AVIF_COPYRIGHTED 0x00020000 | |
| #define AVI_HEADERSIZE 2048 | |
| typedef struct _MainAVIHeader | |
| { | |
| DWORD dwMicroSecPerFrame; | |
| DWORD dwMaxBytesPerSec; | |
| DWORD dwPaddingGranularity; | |
| DWORD dwFlags; | |
| DWORD dwTotalFrames; | |
| DWORD dwInitialFrames; | |
| DWORD dwStreams; | |
| DWORD dwSuggestedBufferSize; | |
| DWORD dwWidth; | |
| DWORD dwHeight; | |
| DWORD dwReserved[4]; | |
| } MainAVIHeader; | |
| /* AVIStreamHeader.dwFlags */ | |
| #define AVISF_DISABLED 0x00000001 | |
| #define AVISF_VIDEO_PALCHANGES 0x00010000 | |
| typedef struct { | |
| FOURCC fccType; | |
| FOURCC fccHandler; | |
| DWORD dwFlags; /* AVISF_* */ | |
| WORD wPriority; | |
| WORD wLanguage; | |
| DWORD dwInitialFrames; | |
| DWORD dwScale; | |
| DWORD dwRate; /* dwRate / dwScale == samples/second */ | |
| DWORD dwStart; | |
| DWORD dwLength; /* In units above... */ | |
| DWORD dwSuggestedBufferSize; | |
| DWORD dwQuality; | |
| DWORD dwSampleSize; | |
| RECT16 rcFrame; /* word.word - word.word in file */ | |
| } AVIStreamHeader; | |
| /* AVIINDEXENTRY.dwFlags */ | |
| #define AVIIF_LIST 0x00000001 /* chunk is a 'LIST' */ | |
| #define AVIIF_KEYFRAME 0x00000010 /* this frame is a key frame. */ | |
| #define AVIIF_NOTIME 0x00000100 /* this frame doesn't take any time */ | |
| #define AVIIF_COMPUSE 0x0FFF0000 | |
| typedef struct _AVIINDEXENTRY { | |
| DWORD ckid; | |
| DWORD dwFlags; | |
| DWORD dwChunkOffset; | |
| DWORD dwChunkLength; | |
| } AVIINDEXENTRY; | |
| typedef struct _AVIPALCHANGE { | |
| BYTE bFirstEntry; | |
| BYTE bNumEntries; | |
| WORD wFlags; /* pad */ | |
| PALETTEENTRY peNew[1]; | |
| } AVIPALCHANGE; | |
| #define AVIIF_KEYFRAME 0x00000010 /* this frame is a key frame. */ | |
| #define AVIGETFRAMEF_BESTDISPLAYFMT 1 | |
| typedef struct _AVISTREAMINFOA { | |
| DWORD fccType; | |
| DWORD fccHandler; | |
| DWORD dwFlags; /* AVIIF_* */ | |
| DWORD dwCaps; | |
| WORD wPriority; | |
| WORD wLanguage; | |
| DWORD dwScale; | |
| DWORD dwRate; /* dwRate / dwScale == samples/second */ | |
| DWORD dwStart; | |
| DWORD dwLength; /* In units above... */ | |
| DWORD dwInitialFrames; | |
| DWORD dwSuggestedBufferSize; | |
| DWORD dwQuality; | |
| DWORD dwSampleSize; | |
| RECT rcFrame; | |
| DWORD dwEditCount; | |
| DWORD dwFormatChangeCount; | |
| CHAR szName[64]; | |
| } AVISTREAMINFOA, * LPAVISTREAMINFOA, *PAVISTREAMINFOA; | |
| typedef struct _AVISTREAMINFOW { | |
| DWORD fccType; | |
| DWORD fccHandler; | |
| DWORD dwFlags; | |
| DWORD dwCaps; | |
| WORD wPriority; | |
| WORD wLanguage; | |
| DWORD dwScale; | |
| DWORD dwRate; /* dwRate / dwScale == samples/second */ | |
| DWORD dwStart; | |
| DWORD dwLength; /* In units above... */ | |
| DWORD dwInitialFrames; | |
| DWORD dwSuggestedBufferSize; | |
| DWORD dwQuality; | |
| DWORD dwSampleSize; | |
| RECT rcFrame; | |
| DWORD dwEditCount; | |
| DWORD dwFormatChangeCount; | |
| WCHAR szName[64]; | |
| } AVISTREAMINFOW, * LPAVISTREAMINFOW, *PAVISTREAMINFOW; | |
| DECL_WINELIB_TYPE_AW(AVISTREAMINFO) | |
| DECL_WINELIB_TYPE_AW(LPAVISTREAMINFO) | |
| DECL_WINELIB_TYPE_AW(PAVISTREAMINFO) | |
| #define AVISTREAMINFO_DISABLED 0x00000001 | |
| #define AVISTREAMINFO_FORMATCHANGES 0x00010000 | |
| /* AVIFILEINFO.dwFlags */ | |
| #define AVIFILEINFO_HASINDEX 0x00000010 | |
| #define AVIFILEINFO_MUSTUSEINDEX 0x00000020 | |
| #define AVIFILEINFO_ISINTERLEAVED 0x00000100 | |
| #define AVIFILEINFO_WASCAPTUREFILE 0x00010000 | |
| #define AVIFILEINFO_COPYRIGHTED 0x00020000 | |
| /* AVIFILEINFO.dwCaps */ | |
| #define AVIFILECAPS_CANREAD 0x00000001 | |
| #define AVIFILECAPS_CANWRITE 0x00000002 | |
| #define AVIFILECAPS_ALLKEYFRAMES 0x00000010 | |
| #define AVIFILECAPS_NOCOMPRESSION 0x00000020 | |
| typedef struct _AVIFILEINFOW { | |
| DWORD dwMaxBytesPerSec; | |
| DWORD dwFlags; | |
| DWORD dwCaps; | |
| DWORD dwStreams; | |
| DWORD dwSuggestedBufferSize; | |
| DWORD dwWidth; | |
| DWORD dwHeight; | |
| DWORD dwScale; | |
| DWORD dwRate; | |
| DWORD dwLength; | |
| DWORD dwEditCount; | |
| WCHAR szFileType[64]; | |
| } AVIFILEINFOW, * LPAVIFILEINFOW, *PAVIFILEINFOW; | |
| typedef struct _AVIFILEINFOA { | |
| DWORD dwMaxBytesPerSec; | |
| DWORD dwFlags; | |
| DWORD dwCaps; | |
| DWORD dwStreams; | |
| DWORD dwSuggestedBufferSize; | |
| DWORD dwWidth; | |
| DWORD dwHeight; | |
| DWORD dwScale; | |
| DWORD dwRate; | |
| DWORD dwLength; | |
| DWORD dwEditCount; | |
| CHAR szFileType[64]; | |
| } AVIFILEINFOA, * LPAVIFILEINFOA, *PAVIFILEINFOA; | |
| DECL_WINELIB_TYPE_AW(AVIFILEINFO) | |
| DECL_WINELIB_TYPE_AW(PAVIFILEINFO) | |
| DECL_WINELIB_TYPE_AW(LPAVIFILEINFO) | |
| /* AVICOMPRESSOPTIONS.dwFlags. determines presence of fields in below struct */ | |
| #define AVICOMPRESSF_INTERLEAVE 0x00000001 | |
| #define AVICOMPRESSF_DATARATE 0x00000002 | |
| #define AVICOMPRESSF_KEYFRAMES 0x00000004 | |
| #define AVICOMPRESSF_VALID 0x00000008 | |
| typedef struct { | |
| DWORD fccType; /* stream type, for consistency */ | |
| DWORD fccHandler; /* compressor */ | |
| DWORD dwKeyFrameEvery; /* keyframe rate */ | |
| DWORD dwQuality; /* compress quality 0-10,000 */ | |
| DWORD dwBytesPerSecond; /* bytes per second */ | |
| DWORD dwFlags; /* flags... see below */ | |
| LPVOID lpFormat; /* save format */ | |
| DWORD cbFormat; | |
| LPVOID lpParms; /* compressor options */ | |
| DWORD cbParms; | |
| DWORD dwInterleaveEvery; /* for non-video streams only */ | |
| } AVICOMPRESSOPTIONS, *LPAVICOMPRESSOPTIONS,*PAVICOMPRESSOPTIONS; | |
| #define DEFINE_AVIGUID(name, l, w1, w2) \ | |
| DEFINE_GUID(name, l, w1, w2, 0xC0,0,0,0,0,0,0,0x46) | |
| DEFINE_AVIGUID(IID_IAVIFile, 0x00020020, 0, 0); | |
| DEFINE_AVIGUID(IID_IAVIStream, 0x00020021, 0, 0); | |
| DEFINE_AVIGUID(IID_IAVIStreaming, 0x00020022, 0, 0); | |
| DEFINE_AVIGUID(IID_IGetFrame, 0x00020023, 0, 0); | |
| DEFINE_AVIGUID(IID_IAVIEditStream, 0x00020024, 0, 0); | |
| DEFINE_AVIGUID(CLSID_AVIFile, 0x00020000, 0, 0); | |
| /***************************************************************************** | |
| * IAVIStream interface | |
| */ | |
| #define ICOM_INTERFACE IAVIStream | |
| #define IAVIStream_METHODS \ | |
| ICOM_METHOD2(HRESULT,Create, LPARAM,lParam1, LPARAM,lParam2) \ | |
| ICOM_METHOD2(HRESULT,Info, AVISTREAMINFOW*,psi, LONG,lSize) \ | |
| ICOM_METHOD2(LONG, FindSample, LONG,lPos, LONG,lFlags) \ | |
| ICOM_METHOD3(HRESULT,ReadFormat, LONG,lPos, LPVOID,lpFormat, LONG*,lpcbFormat) \ | |
| ICOM_METHOD3(HRESULT,SetFormat, LONG,lPos, LPVOID,lpFormat, LONG,cbFormat) \ | |
| ICOM_METHOD6(HRESULT,Read, LONG,lStart, LONG,lSamples, LPVOID,lpBuffer, LONG,cbBuffer, LONG*,plBytes, LONG*,plSamples) \ | |
| ICOM_METHOD7(HRESULT,Write, LONG,lStart, LONG,lSamples, LPVOID,lpBuffer, LONG,cbBuffer, DWORD,dwFlags, LONG*,plSampWritten, LONG*,plBytesWritten) \ | |
| ICOM_METHOD2(HRESULT,Delete, LONG,lStart, LONG,lSamples) \ | |
| ICOM_METHOD3(HRESULT,ReadData, DWORD,fcc, LPVOID,lpBuffer, LONG*,lpcbBuffer) \ | |
| ICOM_METHOD3(HRESULT,WriteData, DWORD,fcc, LPVOID,lpBuffer, LONG,cbBuffer) \ | |
| ICOM_METHOD2(HRESULT,SetInfo, AVISTREAMINFOW*,plInfo, LONG,cbInfo) | |
| #define IAVIStream_IMETHODS \ | |
| IUnknown_IMETHODS \ | |
| IAVIStream_METHODS | |
| ICOM_DEFINE(IAVIStream, IUnknown) | |
| #undef ICOM_INTERFACE | |
| /*** IUnknown methods ***/ | |
| #define IAVIStream_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) | |
| #define IAVIStream_AddRef(p) ICOM_CALL (AddRef,p) | |
| #define IAVIStream_Release(p) ICOM_CALL (Release,p) | |
| /*** IAVIStream methods ***/ | |
| #define IAVIStream_Create(p,a,b) ICOM_CALL2(Create,p,a,b) | |
| #define IAVIStream_Info(p,a,b) ICOM_CALL2(Info,p,a,b) | |
| #define IAVIStream_FindSample(p,a,b) ICOM_CALL2(FindSample,p,a,b) | |
| #define IAVIStream_ReadFormat(p,a,b,c) ICOM_CALL3(ReadFormat,p,a,b,c) | |
| #define IAVIStream_SetFormat(p,a,b,c) ICOM_CALL3(SetFormat,p,a,b,c) | |
| #define IAVIStream_Read(p,a,b,c,d,e,f) ICOM_CALL6(Read,p,a,b,c,d,e,f) | |
| #define IAVIStream_Write(p,a,b,c,d,e,f,g) ICOM_CALL7(Write,p,a,b,c,d,e,f,g) | |
| #define IAVIStream_Delete(p,a,b) ICOM_CALL2(Delete,p,a,b) | |
| #define IAVIStream_ReadData(p,a,b,c) ICOM_CALL3(ReadData,p,a,b,c) | |
| #define IAVIStream_WriteData(p,a,b,c) ICOM_CALL3(WriteData,p,a,b,c) | |
| #define IAVIStream_SetInfo(p,a,b) ICOM_CALL2(SetInfo,p,a,b) | |
| HRESULT WINAPI AVIMakeCompressedStream(PAVISTREAM*ppsCompressed,PAVISTREAM ppsSource,AVICOMPRESSOPTIONS *lpOptions,CLSID*pclsidHandler); | |
| HRESULT WINAPI AVIStreamInfoA(PAVISTREAM iface,AVISTREAMINFOA *asi,LONG size); | |
| HRESULT WINAPI AVIStreamInfoW(PAVISTREAM iface,AVISTREAMINFOW *asi,LONG size); | |
| #define AVIStreamInfo WINELIB_NAME_AW(AVIStreamInfo) | |
| LPVOID WINAPI AVIStreamGetFrame(PGETFRAME pg,LONG pos); | |
| HRESULT WINAPI AVIStreamGetFrameClose(PGETFRAME pg); | |
| PGETFRAME WINAPI AVIStreamGetFrameOpen(PAVISTREAM pavi,LPBITMAPINFOHEADER lpbiWanted); | |
| LONG WINAPI AVIStreamLength(PAVISTREAM iface); | |
| HRESULT WINAPI AVIStreamRead(PAVISTREAM iface,LONG start,LONG samples,LPVOID buffer,LONG buffersize,LONG *bytesread,LONG *samplesread); | |
| HRESULT WINAPI AVIStreamReadData(PAVISTREAM iface,DWORD fcc,LPVOID lp,LONG *lpread); | |
| HRESULT WINAPI AVIStreamReadFormat(PAVISTREAM iface,LONG pos,LPVOID format,LONG *formatsize); | |
| ULONG WINAPI AVIStreamRelease(PAVISTREAM iface); | |
| HRESULT WINAPI AVIStreamSetFormat(PAVISTREAM iface,LONG pos,LPVOID format,LONG formatsize); | |
| LONG WINAPI AVIStreamStart(PAVISTREAM iface); | |
| HRESULT WINAPI AVIStreamWrite(PAVISTREAM iface,LONG start,LONG samples,LPVOID buffer,LONG buffersize,DWORD flags,LONG *sampwritten,LONG *byteswritten); | |
| HRESULT WINAPI AVIStreamWriteData(PAVISTREAM iface,DWORD fcc,LPVOID lp,LONG size); | |
| /***************************************************************************** | |
| * IAVIFile interface | |
| */ | |
| /* In Win32 this interface uses UNICODE only */ | |
| #define ICOM_INTERFACE IAVIFile | |
| #define IAVIFile_METHODS \ | |
| ICOM_METHOD2(HRESULT,Info, AVIFILEINFOW*,pfi, LONG,lSize) \ | |
| ICOM_METHOD3(HRESULT,GetStream, PAVISTREAM*,ppStream, DWORD,fccType, LONG,lParam) \ | |
| ICOM_METHOD2(HRESULT,CreateStream, PAVISTREAM*,ppStream, AVISTREAMINFOW*,psi) \ | |
| ICOM_METHOD3(HRESULT,WriteData, DWORD,fcc, LPVOID,lpBuffer, LONG,cbBuffer) \ | |
| ICOM_METHOD3(HRESULT,ReadData, DWORD,fcc, LPVOID,lpBuffer, LONG*,lpcbBuffer) \ | |
| ICOM_METHOD (HRESULT,EndRecord) \ | |
| ICOM_METHOD2(HRESULT,DeleteStream, DWORD,fccType, LONG,lParam) | |
| #define IAVIFile_IMETHODS \ | |
| IUnknown_IMETHODS \ | |
| IAVIFile_METHODS | |
| ICOM_DEFINE(IAVIFile,IUnknown) | |
| #undef ICOM_INTERFACE | |
| /*** IUnknown methods ***/ | |
| #define IAVIFile_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) | |
| #define IAVIFile_AddRef(p) ICOM_CALL (AddRef,p) | |
| #define IAVIFile_Release(p) ICOM_CALL (Release,p) | |
| /*** IAVIFile methods ***/ | |
| #define IAVIFile_Info(p,a,b) ICOM_CALL2(Info,p,a,b) | |
| #define IAVIFile_GetStream(p,a,b,c) ICOM_CALL3(GetStream,p,a,b,c) | |
| #define IAVIFile_CreateStream(p,a,b) ICOM_CALL2(CreateStream,p,a,b) | |
| #define IAVIFile_WriteData(p,a,b,c) ICOM_CALL3(WriteData,p,a,b,c) | |
| #define IAVIFile_ReadData(p,a,b,c) ICOM_CALL3(ReadData,p,a,b,c) | |
| #define IAVIFile_EndRecord(p) ICOM_CALL (EndRecord,p) | |
| #define IAVIFile_DeleteStream(p,a,b) ICOM_CALL2(DeleteStream,p,a,b) | |
| HRESULT WINAPI AVIFileCreateStreamA(PAVIFILE pfile,PAVISTREAM* ppavi,AVISTREAMINFOA* psi); | |
| HRESULT WINAPI AVIFileCreateStreamW(PAVIFILE pfile,PAVISTREAM* ppavi,AVISTREAMINFOW* psi); | |
| #define AVIFileCreateStream WINELIB_NAME_AW(AVIFileCreateStream) | |
| void WINAPI AVIFileExit(void); | |
| HRESULT WINAPI AVIFileGetStream(PAVIFILE pfile,PAVISTREAM* avis,DWORD fccType,LONG lParam); | |
| HRESULT WINAPI AVIFileInfoA(PAVIFILE pfile,PAVIFILEINFOA pfi,LONG lSize); | |
| HRESULT WINAPI AVIFileInfoW(PAVIFILE pfile,PAVIFILEINFOW pfi,LONG lSize); | |
| #define AVIFileInfo WINELIB_NAME_AW(AVIFileInfo) | |
| void WINAPI AVIFileInit(void); | |
| HRESULT WINAPI AVIFileOpenA(PAVIFILE* ppfile,LPCSTR szFile,UINT uMode,LPCLSID lpHandler); | |
| HRESULT WINAPI AVIFileOpenW(PAVIFILE* ppfile,LPCWSTR szFile,UINT uMode,LPCLSID lpHandler); | |
| #define AVIFileOpen WINELIB_NAME_AW(AVIFileOpen) | |
| ULONG WINAPI AVIFileRelease(PAVIFILE iface); | |
| /***************************************************************************** | |
| * IGetFrame interface | |
| */ | |
| #define ICOM_INTERFACE IGetFrame | |
| #define IGetFrame_METHODS \ | |
| ICOM_METHOD1(LPVOID, GetFrame, LONG,lPos) \ | |
| ICOM_METHOD3(HRESULT,Begin, LONG,lStart, LONG,lEnd, LONG,lRate) \ | |
| ICOM_METHOD (HRESULT,End) \ | |
| ICOM_METHOD6(HRESULT,SetFormat, LPBITMAPINFOHEADER,lpbi, LPVOID,lpBits, INT,x, INT,y, INT,dx, INT,dy) | |
| #define IGetFrame_IMETHODS \ | |
| IUnknown_IMETHODS \ | |
| IGetFrame_METHODS | |
| ICOM_DEFINE(IGetFrame,IUnknown) | |
| #undef ICOM_INTERFACE | |
| /*** IUnknown methods ***/ | |
| #define IGetFrame_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) | |
| #define IGetFrame_AddRef(p) ICOM_CALL (AddRef,p) | |
| #define IGetFrame_Release(p) ICOM_CALL (Release,p) | |
| /*** IGetFrame methods ***/ | |
| #define IGetFrame_GetFrame(p,a) ICOM_CALL1(GetFrame,p,a) | |
| #define IGetFrame_Begin(p,a,b,c) ICOM_CALL3(Begin,p,a,b,c) | |
| #define IGetFrame_End(p) ICOM_CALL (End,p) | |
| #define IGetFrame_SetFormat(p,a,b,c,d,e,f) ICOM_CALL6(SetFormat,p,a,b,c,d,e,f) | |
| #define AVIERR_OK 0 | |
| #define MAKE_AVIERR(error) MAKE_SCODE(SEVERITY_ERROR,FACILITY_ITF,0x4000+error) | |
| #define AVIERR_UNSUPPORTED MAKE_AVIERR(101) | |
| #define AVIERR_BADFORMAT MAKE_AVIERR(102) | |
| #define AVIERR_MEMORY MAKE_AVIERR(103) | |
| #define AVIERR_INTERNAL MAKE_AVIERR(104) | |
| #define AVIERR_BADFLAGS MAKE_AVIERR(105) | |
| #define AVIERR_BADPARAM MAKE_AVIERR(106) | |
| #define AVIERR_BADSIZE MAKE_AVIERR(107) | |
| #define AVIERR_BADHANDLE MAKE_AVIERR(108) | |
| #define AVIERR_FILEREAD MAKE_AVIERR(109) | |
| #define AVIERR_FILEWRITE MAKE_AVIERR(110) | |
| #define AVIERR_FILEOPEN MAKE_AVIERR(111) | |
| #define AVIERR_COMPRESSOR MAKE_AVIERR(112) | |
| #define AVIERR_NOCOMPRESSOR MAKE_AVIERR(113) | |
| #define AVIERR_READONLY MAKE_AVIERR(114) | |
| #define AVIERR_NODATA MAKE_AVIERR(115) | |
| #define AVIERR_BUFFERTOOSMALL MAKE_AVIERR(116) | |
| #define AVIERR_CANTCOMPRESS MAKE_AVIERR(117) | |
| #define AVIERR_USERABORT MAKE_AVIERR(198) | |
| #define AVIERR_ERROR MAKE_AVIERR(199) | |
| #endif /* __WINE_VFW_H */ |