565 lines
19 KiB
C
565 lines
19 KiB
C
/*
|
||
* Header file for comunication with AVI installable compressors/decompressors
|
||
*
|
||
* Copyright (c) 1990-1993, Microsoft Corp. All rights reserved.
|
||
*
|
||
* Win16:
|
||
*
|
||
* Installable compressors should be listed in SYSTEM.INI as
|
||
* follows:
|
||
*
|
||
* [Drivers]
|
||
* VIDC.MSSQ = mssqcomp.drv
|
||
* VIDC.XXXX = foodrv.drv
|
||
*
|
||
* Win32: (NT)
|
||
*
|
||
* Installable compressors should be listed in the registration database
|
||
* under the key
|
||
* HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32
|
||
* VIDC.MSSQ = mssqcomp.dll
|
||
* VIDC.XXXX = foodrv.dll
|
||
*
|
||
*
|
||
* That is, an identifying FOURCC should be the key, and the value
|
||
* should be the driver filename
|
||
*
|
||
*/
|
||
|
||
#ifndef _INC_COMPMAN
|
||
#define _INC_COMPMAN
|
||
|
||
#ifndef VFWAPI
|
||
#ifdef WIN32
|
||
#define VFWAPI __stdcall
|
||
#define VFWAPIV __cdecl
|
||
#else
|
||
#define VFWAPI FAR PASCAL
|
||
#define VFWAPIV FAR CDECL
|
||
#endif
|
||
#endif
|
||
|
||
#ifdef __cplusplus
|
||
extern "C" { /* Assume C declarations for C++ */
|
||
#endif /* __cplusplus */
|
||
|
||
/************************************************************************
|
||
|
||
messages and structures.
|
||
|
||
************************************************************************/
|
||
|
||
#ifndef HTASK
|
||
#define HTASK HANDLE
|
||
#endif
|
||
|
||
#include <compddk.h> // include this file for the messages.
|
||
|
||
/************************************************************************
|
||
|
||
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(HANDLE hic);
|
||
|
||
LRESULT VFWAPI ICSendMessage(HIC hic, UINT msg, DWORD dw1, DWORD dw2);
|
||
LRESULT VFWAPIV ICMessage(HIC hic, UINT msg, UINT cb, ...);
|
||
|
||
#if 0 // Defined in COMPMAN.C
|
||
#ifdef WIN32
|
||
//
|
||
// note NT 1.0 MSVFW32.DLL does not have this function, so fake it
|
||
// with this bad function that will not work except on i386..
|
||
//
|
||
static LRESULT VFWAPIV ICMessage(HIC hic, UINT msg, UINT cb, ...)
|
||
{
|
||
return ICSendMessage(hic, msg, (DWORD)(LPVOID)(&cb+1), cb);
|
||
}
|
||
#endif
|
||
#endif
|
||
|
||
/* Values for wFlags of ICInstall() */
|
||
#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)
|
||
|
||
/************************************************************************
|
||
|
||
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 ouput format, (format of compressed data)
|
||
* if lpbiOuput 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 (lpbiOuput) 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 (lpbiOuput) is supported.
|
||
*
|
||
*/
|
||
#define ICDecompressQuery(hic, lpbiInput, lpbiOutput) \
|
||
ICSendMessage(hic, ICM_DECOMPRESS_QUERY, (DWORD)(LPVOID)(lpbiInput), (DWORD)(LPVOID)(lpbiOutput))
|
||
|
||
/*
|
||
* ICDecompressGetFormat()
|
||
*
|
||
* get the ouput format, (format of un-compressed data)
|
||
* if lpbiOuput 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 ouput 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
|
||
|
||
************************************************************************/
|
||
|
||
/*
|
||
* ICDecompressEx()
|
||
*
|
||
* decompress a single frame
|
||
*
|
||
*/
|
||
#define ICDecompressEx(hic, dwFlags, lpbiSrc, lpSrc, xSrc, ySrc, dxSrc, dySrc, lpbiDst, lpDst, xDst, yDst, dxDst, dyDst) \
|
||
ICMessage(hic, ICM_DECOMPRESSEX, sizeof(ICDECOMPRESSEX), \
|
||
(DWORD)(dwFlags), \
|
||
(LPBITMAPINFOHEADER)(lpbiSrc), (LPVOID)(lpSrc), \
|
||
(LPBITMAPINFOHEADER)(lpbiDst), (LPVOID)(lpDst), \
|
||
(int)(xDst), (int)(yDst), (int)(dxDst), (int)(dyDst), \
|
||
(int)(xSrc), (int)(ySrc), (int)(dxSrc), (int)(dySrc))
|
||
|
||
/*
|
||
* ICDecompressBegin()
|
||
*
|
||
* start compression from a source format (lpbiInput) to a dest
|
||
* format (lpbiOuput) is supported.
|
||
*
|
||
*/
|
||
#define ICDecompressExBegin(hic, dwFlags, lpbiSrc, lpSrc, xSrc, ySrc, dxSrc, dySrc, lpbiDst, lpDst, xDst, yDst, dxDst, dyDst) \
|
||
ICMessage(hic, ICM_DECOMPRESSEX_BEGIN, sizeof(ICDECOMPRESSEX), \
|
||
(DWORD)(dwFlags), \
|
||
(LPBITMAPINFOHEADER)(lpbiSrc), (LPVOID)(lpSrc), \
|
||
(LPBITMAPINFOHEADER)(lpbiDst), (LPVOID)(lpDst), \
|
||
(int)(xDst), (int)(yDst), (int)(dxDst), (int)(dyDst), \
|
||
(int)(xSrc), (int)(ySrc), (int)(dxSrc), (int)(dySrc))
|
||
|
||
/*
|
||
* ICDecompressExQuery()
|
||
*
|
||
*/
|
||
#define ICDecompressExQuery(hic, dwFlags, lpbiSrc, lpSrc, xSrc, ySrc, dxSrc, dySrc, lpbiDst, lpDst, xDst, yDst, dxDst, dyDst) \
|
||
ICMessage(hic, ICM_DECOMPRESSEX_QUERY, sizeof(ICDECOMPRESSEX), \
|
||
(DWORD)(dwFlags), \
|
||
(LPBITMAPINFOHEADER)(lpbiSrc), (LPVOID)(lpSrc), \
|
||
(LPBITMAPINFOHEADER)(lpbiDst), (LPVOID)(lpDst), \
|
||
(int)(xDst), (int)(yDst), (int)(dxDst), (int)(dyDst), \
|
||
(int)(xSrc), (int)(ySrc), (int)(dxSrc), (int)(dySrc))
|
||
|
||
#define ICDecompressExEnd(hic) \
|
||
ICSendMessage(hic, ICM_DECOMPRESSEX_END, 0, 0)
|
||
|
||
/************************************************************************
|
||
|
||
drawing functions
|
||
|
||
************************************************************************/
|
||
|
||
/*
|
||
* ICDrawBegin()
|
||
*
|
||
* start decompressing data with format (lpbiInput) directly to the screen
|
||
*
|
||
* return zero if the decompressor supports drawing.
|
||
*
|
||
*/
|
||
|
||
#define ICDRAW_QUERY 0x00000001L // test for support
|
||
#define ICDRAW_FULLSCREEN 0x00000002L // draw to full screen
|
||
#define ICDRAW_HDC 0x00000004L // draw to a HDC/HWND
|
||
|
||
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);
|
||
|
||
/*
|
||
* ICDraw()
|
||
*
|
||
* decompress data directly to the screen
|
||
*
|
||
*/
|
||
|
||
#define ICDRAW_HURRYUP 0x80000000L // don't draw just buffer (hurry up!)
|
||
#define ICDRAW_UPDATE 0x40000000L // don't draw just update screen
|
||
|
||
DWORD VFWAPIV ICDraw(
|
||
HIC hic,
|
||
DWORD dwFlags, // flags
|
||
LPVOID lpFormat, // format of frame to decompress
|
||
LPVOID lpData, // frame data to decompress
|
||
DWORD cbData, // size of data
|
||
LONG lTime); // time to draw this frame
|
||
|
||
#define ICDrawSuggestFormat(hic,lpbiIn,lpbiOut,dxSrc,dySrc,dxDst,dyDst,hicDecomp) \
|
||
ICMessage(hic, ICM_DRAW_SUGGESTFORMAT, sizeof(ICDRAWSUGGEST), \
|
||
(LPBITMAPINFOHEADER)(lpbiIn),(LPBITMAPINFOHEADER)(lpbiOut), \
|
||
(int)(dxSrc),(int)(dySrc),(int)(dxDst),(int)(dyDst), (HIC)(hicDecomp))
|
||
|
||
/*
|
||
* ICDrawQuery()
|
||
*
|
||
* determines if the compressor is willing to render the specified format.
|
||
*
|
||
*/
|
||
#define ICDrawQuery(hic, lpbiInput) \
|
||
ICSendMessage(hic, ICM_DRAW_QUERY, (DWORD)(LPVOID)(lpbiInput), 0L)
|
||
|
||
#define ICDrawChangePalette(hic, lpbiInput) \
|
||
ICSendMessage(hic, ICM_DRAW_CHANGEPALETTE, (DWORD)(LPVOID)(lpbiInput), 0L)
|
||
|
||
#define ICGetBuffersWanted(hic, lpdwBuffers) \
|
||
ICSendMessage(hic, ICM_GETBUFFERSWANTED, (DWORD)(LPVOID)(lpdwBuffers), 0)
|
||
|
||
#define ICDrawEnd(hic) \
|
||
ICSendMessage(hic, ICM_DRAW_END, 0, 0)
|
||
|
||
#define ICDrawStart(hic) \
|
||
ICSendMessage(hic, ICM_DRAW_START, 0, 0)
|
||
|
||
#define ICDrawStartPlay(hic, lFrom, lTo) \
|
||
ICSendMessage(hic, ICM_DRAW_START_PLAY, (DWORD)(lFrom), (DWORD)(lTo))
|
||
|
||
#define ICDrawStop(hic) \
|
||
ICSendMessage(hic, ICM_DRAW_STOP, 0, 0)
|
||
|
||
#define ICDrawStopPlay(hic) \
|
||
ICSendMessage(hic, ICM_DRAW_STOP_PLAY, 0, 0)
|
||
|
||
#define ICDrawGetTime(hic, lplTime) \
|
||
ICSendMessage(hic, ICM_DRAW_GETTIME, (DWORD)(LPVOID)(lplTime), 0)
|
||
|
||
#define ICDrawSetTime(hic, lTime) \
|
||
ICSendMessage(hic, ICM_DRAW_SETTIME, (DWORD)lTime, 0)
|
||
|
||
#define ICDrawRealize(hic, hdc, fBackground) \
|
||
ICSendMessage(hic, ICM_DRAW_REALIZE, (DWORD)(UINT)(HDC)(hdc), (DWORD)(BOOL)(fBackground))
|
||
|
||
#define ICDrawFlush(hic) \
|
||
ICSendMessage(hic, ICM_DRAW_FLUSH, 0, 0)
|
||
|
||
#define ICDrawRenderBuffer(hic) \
|
||
ICSendMessage(hic, ICM_DRAW_RENDERBUFFER, 0, 0)
|
||
|
||
/************************************************************************
|
||
|
||
Status callback functions
|
||
|
||
************************************************************************/
|
||
|
||
/*
|
||
* ICSetStatusProc()
|
||
*
|
||
* Set the status callback function
|
||
*
|
||
*/
|
||
#define ICSetStatusProc(hic, dwFlags, lParam, fpfnStatus) \
|
||
ICMessage(hic, ICM_SET_STATUS_PROC, sizeof(ICSETSTATUSPROC), \
|
||
(DWORD)(dwFlags), \
|
||
(LRESULT)(lParam), \
|
||
(LONG ((CALLBACK *) ()))(fpfnStatus))
|
||
|
||
/************************************************************************
|
||
|
||
helper routines for DrawDib and MCIAVI...
|
||
|
||
************************************************************************/
|
||
|
||
#define ICDecompressOpen(fccType, fccHandler, lpbiIn, lpbiOut) \
|
||
ICLocate(fccType, fccHandler, lpbiIn, lpbiOut, ICMODE_DECOMPRESS)
|
||
|
||
#define ICDrawOpen(fccType, fccHandler, lpbiIn) \
|
||
ICLocate(fccType, fccHandler, lpbiIn, NULL, ICMODE_DRAW)
|
||
|
||
HIC VFWAPI ICLocate(DWORD fccType, DWORD fccHandler, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut, WORD wFlags);
|
||
HIC VFWAPI ICGetDisplayFormat(HIC hic, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut, int BitDepth, int dx, int dy);
|
||
|
||
/************************************************************************
|
||
Higher level functions
|
||
************************************************************************/
|
||
|
||
HANDLE VFWAPI ICImageCompress(
|
||
HIC hic, // compressor to use
|
||
UINT uiFlags, // flags (none yet)
|
||
LPBITMAPINFO lpbiIn, // format to compress from
|
||
LPVOID lpBits, // data to compress
|
||
LPBITMAPINFO lpbiOut, // compress to this (NULL ==> default)
|
||
LONG lQuality, // quality to use
|
||
LONG FAR * plSize); // compress to this size (0=whatever)
|
||
|
||
HANDLE VFWAPI ICImageDecompress(
|
||
HIC hic, // compressor to use
|
||
UINT uiFlags, // flags (none yet)
|
||
LPBITMAPINFO lpbiIn, // format to decompress from
|
||
LPVOID lpBits, // data to decompress
|
||
LPBITMAPINFO lpbiOut); // decompress to this (NULL ==> default)
|
||
|
||
//
|
||
// Structure used by ICSeqCompressFrame and ICCompressorChoose routines
|
||
// Make sure this matches the autodoc in icm.c!
|
||
//
|
||
typedef struct {
|
||
LONG cbSize; // set to sizeof(COMPVARS) before
|
||
// calling ICCompressorChoose
|
||
DWORD dwFlags; // see below...
|
||
HIC hic; // HIC of chosen compressor
|
||
DWORD fccType; // basically ICTYPE_VIDEO
|
||
DWORD fccHandler; // handler of chosen compressor or
|
||
// "" or "DIB "
|
||
LPBITMAPINFO lpbiIn; // input format
|
||
LPBITMAPINFO lpbiOut; // output format - will compress to this
|
||
LPVOID lpBitsOut;
|
||
LPVOID lpBitsPrev;
|
||
LONG lFrame;
|
||
LONG lKey; // key frames how often?
|
||
LONG lDataRate; // desired data rate KB/Sec
|
||
LONG lQ; // desired quality
|
||
LONG lKeyCount;
|
||
LPVOID lpState; // state of compressor
|
||
LONG cbState; // size of the state
|
||
} COMPVARS, FAR *PCOMPVARS;
|
||
|
||
// FLAGS for dwFlags element of COMPVARS structure:
|
||
// set this flag if you initialize COMPVARS before calling ICCompressorChoose
|
||
#define ICMF_COMPVARS_VALID 0x00000001 // COMPVARS contains valid data
|
||
|
||
//
|
||
// allows user to choose compressor, quality etc...
|
||
//
|
||
BOOL VFWAPI ICCompressorChoose(
|
||
HWND hwnd, // parent window for dialog
|
||
UINT uiFlags, // flags
|
||
LPVOID pvIn, // input format (optional)
|
||
LPVOID lpData, // input data (optional)
|
||
PCOMPVARS pc, // data about the compressor/dlg
|
||
LPSTR lpszTitle); // dialog title (optional)
|
||
|
||
// defines for uiFlags
|
||
#define ICMF_CHOOSE_KEYFRAME 0x0001 // show KeyFrame Every box
|
||
#define ICMF_CHOOSE_DATARATE 0x0002 // show DataRate box
|
||
#define ICMF_CHOOSE_PREVIEW 0x0004 // allow expanded preview dialog
|
||
#define ICMF_CHOOSE_ALLCOMPRESSORS 0x0008 // don't only show those that
|
||
// can handle the input format
|
||
// or input data
|
||
|
||
BOOL VFWAPI ICSeqCompressFrameStart(PCOMPVARS pc, LPBITMAPINFO lpbiIn);
|
||
void VFWAPI ICSeqCompressFrameEnd(PCOMPVARS pc);
|
||
|
||
LPVOID VFWAPI ICSeqCompressFrame(
|
||
PCOMPVARS pc, // set by ICCompressorChoose
|
||
UINT uiFlags, // flags
|
||
LPVOID lpBits, // input DIB bits
|
||
BOOL FAR *pfKey, // did it end up being a key frame?
|
||
LONG FAR *plSize); // size to compress to/of returned image
|
||
|
||
void VFWAPI ICCompressorFree(PCOMPVARS pc);
|
||
|
||
#ifdef __cplusplus
|
||
} /* End of extern "C" { */
|
||
#endif /* __cplusplus */
|
||
|
||
#endif /* _INC_COMPMAN */
|
||
|