📄 vfwmod.h
字号:
// return nonzero means abort operation in progress LONG (CALLBACK *Status) (LPARAM lParam, UINT message, LONG l);} ICSETSTATUSPROC;/************************************************************************************************************************************************/#define ICDECOMPRESS_HURRYUP 0x80000000L // don't draw just buffer (hurry up!)#define ICDECOMPRESS_UPDATE 0x40000000L // don't draw just update screen#define ICDECOMPRESS_PREROLL 0x20000000L // this frame is before real start#define ICDECOMPRESS_NULLFRAME 0x10000000L // repeat last frame#define ICDECOMPRESS_NOTKEYFRAME 0x08000000L // this frame is not a key frametypedef struct { DWORD dwFlags; // flags (from AVI index...) LPBITMAPINFOHEADER lpbiInput; // BITMAPINFO of compressed data // biSizeImage has the chunk size LPVOID lpInput; // compressed data LPBITMAPINFOHEADER lpbiOutput; // DIB to decompress to LPVOID lpOutput; DWORD ckid; // ckid from AVI file} ICDECOMPRESS;typedef struct { // // same as ICM_DECOMPRESS // DWORD dwFlags; LPBITMAPINFOHEADER lpbiSrc; // BITMAPINFO of compressed data LPVOID lpSrc; // compressed data LPBITMAPINFOHEADER lpbiDst; // DIB to decompress to LPVOID lpDst; // output data // // new for ICM_DECOMPRESSEX // int xDst; // destination rectangle int yDst; int dxDst; int dyDst; int xSrc; // source rectangle int ySrc; int dxSrc; int 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#define ICDRAW_ANIMATE 0x00000008L // expect palette animation#define ICDRAW_CONTINUE 0x00000010L // draw is a continuation of previous draw#define ICDRAW_MEMORYDC 0x00000020L // DC is offscreen, by the way#define ICDRAW_UPDATING 0x00000040L // We're updating, as opposed to playing#define ICDRAW_RENDER 0x00000080L // used to render data not draw it#define ICDRAW_BUFFER 0x00000100L // please buffer this data offscreen, we will need to update ittypedef struct { 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;} 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 frametypedef struct { DWORD dwFlags; // flags LPVOID lpFormat; // format of frame to decompress LPVOID lpData; // frame data to decompress DWORD cbData; LONG lTime; // time in drawbegin units (see dwRate and dwScale)} ICDRAW;typedef struct { LPBITMAPINFOHEADER lpbiIn; // format to be drawn LPBITMAPINFOHEADER lpbiSuggest; // location for suggested format (or NULL to get size) int dxSrc; // source extent or 0 int dySrc; int dxDst; // dest extent or 0 int dyDst; HIC hicDecompressor;// decompressor you can talk to} ICDRAWSUGGEST;/************************************************************************************************************************************************/typedef struct { DWORD dwFlags; // flags (from AVI index...) int iStart; // first palette to change int iLen; // count of entries to change. LPPALETTEENTRY lppe; // palette} ICPALETTE;/************************************************************************ ICM function declarations ************************************************************************/BOOL VFWAPI ICInfo(DWORD fccType, DWORD fccHandler, ICINFO FAR * lpicinfo);BOOL VFWAPI ICInstall(DWORD fccType, DWORD fccHandler, LPARAM lParam, LPSTR szDesc, UINT wFlags);BOOL VFWAPI ICRemove(DWORD fccType, DWORD fccHandler, UINT wFlags);LRESULT VFWAPI ICGetInfo(HIC hic, ICINFO FAR *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);#ifndef _WIN32//this function is unsupported on Win32 as it is non-portable.LRESULT VFWAPIV ICMessage(HIC hic, UINT msg, UINT cb, ...);#endif/* Values for wFlags of ICInstall() */#define ICINSTALL_UNICODE 0x8000#define ICINSTALL_FUNCTION 0x0001 // lParam is a DriverProc (function ptr)#define ICINSTALL_DRIVER 0x0002 // lParam is a driver name (string)#define ICINSTALL_HDRV 0x0004 // lParam is a HDRVR (driver handle)#define ICINSTALL_DRIVERW 0x8002 // lParam is a unicode driver name/************************************************************************ query macros************************************************************************/#define ICMF_CONFIGURE_QUERY 0x00000001#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)#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)/************************************************************************ get/set state macros ************************************************************************/#define ICGetState(hic, pv, cb) \ ICSendMessage(hic, ICM_GETSTATE, (DWORD)(LPVOID)(pv), (DWORD)(cb))#define ICSetState(hic, pv, cb) \ ICSendMessage(hic, ICM_SETSTATE, (DWORD)(LPVOID)(pv), (DWORD)(cb))#define ICGetStateSize(hic) \ ICGetState(hic, NULL, 0)/************************************************************************ get value macros************************************************************************/static DWORD dwICValue;#define ICGetDefaultQuality(hic) \ (ICSendMessage(hic, ICM_GETDEFAULTQUALITY, (DWORD)(LPVOID)&dwICValue, sizeof(DWORD)), dwICValue)#define ICGetDefaultKeyFrameRate(hic) \ (ICSendMessage(hic, ICM_GETDEFAULTKEYFRAMERATE, (DWORD)(LPVOID)&dwICValue, sizeof(DWORD)), dwICValue)/************************************************************************ draw window macro ************************************************************************/#define ICDrawWindow(hic, prc) \ ICSendMessage(hic, ICM_DRAW_WINDOW, (DWORD)(LPVOID)(prc), sizeof(RECT))/************************************************************************ compression functions************************************************************************//* * ICCompress() * * compress a single frame * */DWORD VFWAPIV ICCompress( HIC hic, DWORD dwFlags, // flags LPBITMAPINFOHEADER lpbiOutput, // output format LPVOID lpData, // output data LPBITMAPINFOHEADER lpbiInput, // format of frame to compress LPVOID lpBits, // frame data to compress LPDWORD lpckid, // ckid for data in AVI file LPDWORD lpdwFlags, // flags in the AVI index. LONG lFrameNum, // frame number of seq. DWORD dwFrameSize, // reqested size in bytes. (if non zero) DWORD dwQuality, // quality within one frame LPBITMAPINFOHEADER lpbiPrev, // format of previous frame LPVOID lpPrev); // previous frame/* * ICCompressBegin() * * start compression from a source format (lpbiInput) to a dest * format (lpbiOuput) is supported. * */#define ICCompressBegin(hic, lpbiInput, lpbiOutput) \ ICSendMessage(hic, ICM_COMPRESS_BEGIN, (DWORD)(LPVOID)(lpbiInput), (DWORD)(LPVOID)(lpbiOutput))/* * ICCompressQuery() * * determines if compression from a source format (lpbiInput) to a dest * format (lpbiOuput) is supported. * */#define ICCompressQuery(hic, lpbiInput, lpbiOutput) \ ICSendMessage(hic, ICM_COMPRESS_QUERY, (DWORD)(LPVOID)(lpbiInput), (DWORD)(LPVOID)(lpbiOutput))/* * ICCompressGetFormat() * * get the output format, (format of compressed data) * if lpbiOutput is NULL return the size in bytes needed for format. * */#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)/* * ICCompressSize() * * return the maximal size of a compressed frame * */#define ICCompressGetSize(hic, lpbiInput, lpbiOutput) \ ICSendMessage(hic, ICM_COMPRESS_GET_SIZE, (DWORD)(LPVOID)(lpbiInput), (DWORD)(LPVOID)(lpbiOutput))#define ICCompressEnd(hic) \ ICSendMessage(hic, ICM_COMPRESS_END, 0, 0)/************************************************************************ decompression functions************************************************************************//* * ICDecompress() * * decompress a single frame * */#define ICDECOMPRESS_HURRYUP 0x80000000L // don't draw just buffer (hurry up!)DWORD VFWAPIV ICDecompress( HIC hic, DWORD dwFlags, // flags (from AVI index...) LPBITMAPINFOHEADER lpbiFormat, // BITMAPINFO of compressed data // biSizeImage has the chunk size LPVOID lpData, // data LPBITMAPINFOHEADER lpbi, // DIB to decompress to LPVOID lpBits);/* * ICDecompressBegin() * * start compression from a source format (lpbiInput) to a dest * format (lpbiOutput) is supported. * */#define ICDecompressBegin(hic, lpbiInput, lpbiOutput) \ ICSendMessage(hic, ICM_DECOMPRESS_BEGIN, (DWORD)(LPVOID)(lpbiInput), (DWORD)(LPVOID)(lpbiOutput))/* * ICDecompressQuery() * * determines if compression from a source format (lpbiInput) to a dest * format (lpbiOutput) is supported. * */#define ICDecompressQuery(hic, lpbiInput, lpbiOutput) \ ICSendMessage(hic, ICM_DECOMPRESS_QUERY, (DWORD)(LPVOID)(lpbiInput), (DWORD)(LPVOID)(lpbiOutput))/* * ICDecompressGetFormat() * * get the output format, (format of un-compressed data) * if lpbiOutput is NULL return the size in bytes needed for format. * */#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)/* * ICDecompressGetPalette() * * get the output palette * */#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)/************************************************************************ decompression (ex) functions************************************************************************///// on Win16 these functions are macros that call ICMessage. ICMessage will// not work on NT. rather than add new entrypoints we have given// them as static inline functions///* * ICDecompressEx() * * decompress a single frame * */static __inline LRESULT VFWAPIICDecompressEx( HIC hic, DWORD dwFlags, LPBITMAPINFOHEADER lpbiSrc, LPVOID lpSrc, int xSrc, int ySrc, int dxSrc, int dySrc, LPBITMAPINFOHEADER lpbiDst, LPVOID lpDst,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -