Files
Work/vidcap/SCRAPS.TXT
2024-08-07 09:16:27 -04:00

210 lines
11 KiB
Plaintext

#define capSetCallbackOnError(hwnd, fpProc) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_CALLBACK_ERROR, 0, (LPARAM)(LPVOID)(fpProc)))
#define capSetCallbackOnStatus(hwnd, fpProc) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_CALLBACK_STATUS, 0, (LPARAM)(LPVOID)(fpProc)))
#define capSetCallbackOnYield(hwnd, fpProc) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_CALLBACK_YIELD, 0, (LPARAM)(LPVOID)(fpProc)))
#define capSetCallbackOnFrame(hwnd, fpProc) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_CALLBACK_FRAME, 0, (LPARAM)(LPVOID)(fpProc)))
#define capSetCallbackOnVideoStream(hwnd, fpProc) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_CALLBACK_VIDEOSTREAM, 0, (LPARAM)(LPVOID)(fpProc)))
#define capSetCallbackOnWaveStream(hwnd, fpProc) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_CALLBACK_WAVESTREAM, 0, (LPARAM)(LPVOID)(fpProc)))
#define capSetCallbackOnCapControl(hwnd, fpProc) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_CALLBACK_CAPCONTROL, 0, (LPARAM)(LPVOID)(fpProc)))
#define capSetUserData(hwnd, lUser) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_USER_DATA, 0, (LPARAM)lUser))
#define capGetUserData(hwnd) (AVICapSM(hwnd, WM_CAP_GET_USER_DATA, 0, 0))
#define capDriverConnect(hwnd, i) ((BOOL)AVICapSM(hwnd, WM_CAP_DRIVER_CONNECT, (WPARAM)(i), 0L))
#define capDriverDisconnect(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_DRIVER_DISCONNECT, (WPARAM)0, 0L))
#define capDriverGetName(hwnd, szName, wSize) ((BOOL)AVICapSM(hwnd, WM_CAP_DRIVER_GET_NAME, (WPARAM)(wSize), (LPARAM)(LPVOID)(LPTSTR)(szName)))
#define capDriverGetVersion(hwnd, szVer, wSize) ((BOOL)AVICapSM(hwnd, WM_CAP_DRIVER_GET_VERSION, (WPARAM)(wSize), (LPARAM)(LPVOID)(LPTSTR)(szVer)))
#define capDriverGetCaps(hwnd, s, wSize) ((BOOL)AVICapSM(hwnd, WM_CAP_DRIVER_GET_CAPS, (WPARAM)(wSize), (LPARAM)(LPVOID)(LPCAPDRIVERCAPS)(s)))
#define capFileSetCaptureFile(hwnd, szName) ((BOOL)AVICapSM(hwnd, WM_CAP_FILE_SET_CAPTURE_FILE, 0, (LPARAM)(LPVOID)(LPTSTR)(szName)))
#define capFileGetCaptureFile(hwnd, szName, wSize) ((BOOL)AVICapSM(hwnd, WM_CAP_FILE_GET_CAPTURE_FILE, (WPARAM)(wSize), (LPARAM)(LPVOID)(LPTSTR)(szName)))
#define capFileAlloc(hwnd, dwSize) ((BOOL)AVICapSM(hwnd, WM_CAP_FILE_ALLOCATE, 0, (LPARAM)(DWORD)(dwSize)))
#define capFileSaveAs(hwnd, szName) ((BOOL)AVICapSM(hwnd, WM_CAP_FILE_SAVEAS, 0, (LPARAM)(LPVOID)(LPTSTR)(szName)))
#define capFileSetInfoChunk(hwnd, lpInfoChunk) ((BOOL)AVICapSM(hwnd, WM_CAP_FILE_SET_INFOCHUNK, (WPARAM)0, (LPARAM)(LPCAPINFOCHUNK)(lpInfoChunk)))
#define capFileSaveDIB(hwnd, szName) ((BOOL)AVICapSM(hwnd, WM_CAP_FILE_SAVEDIB, 0, (LPARAM)(LPVOID)(LPTSTR)(szName)))
#define capEditCopy(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_EDIT_COPY, 0, 0L))
#define capSetAudioFormat(hwnd, s, wSize) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_AUDIOFORMAT, (WPARAM)(wSize), (LPARAM)(LPVOID)(LPWAVEFORMATEX)(s)))
#define capGetAudioFormat(hwnd, s, wSize) ((DWORD)AVICapSM(hwnd, WM_CAP_GET_AUDIOFORMAT, (WPARAM)(wSize), (LPARAM)(LPVOID)(LPWAVEFORMATEX)(s)))
#define capGetAudioFormatSize(hwnd) ((DWORD)AVICapSM(hwnd, WM_CAP_GET_AUDIOFORMAT, (WPARAM)0, (LPARAM)0L))
#define capDlgVideoFormat(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_DLG_VIDEOFORMAT, 0, 0L))
#define capDlgVideoSource(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_DLG_VIDEOSOURCE, 0, 0L))
#define capDlgVideoDisplay(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_DLG_VIDEODISPLAY, 0, 0L))
#define capDlgVideoCompression(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_DLG_VIDEOCOMPRESSION, 0, 0L))
#define capGetVideoFormat(hwnd, s, wSize) ((DWORD)AVICapSM(hwnd, WM_CAP_GET_VIDEOFORMAT, (WPARAM)(wSize), (LPARAM)(LPVOID)(s)))
#define capGetVideoFormatSize(hwnd) ((DWORD)AVICapSM(hwnd, WM_CAP_GET_VIDEOFORMAT, 0, 0L))
#define capSetVideoFormat(hwnd, s, wSize) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_VIDEOFORMAT, (WPARAM)(wSize), (LPARAM)(LPVOID)(s)))
#define capOverlay(hwnd, f) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_OVERLAY, (WPARAM)(BOOL)(f), 0L))
#define capPreviewScale(hwnd, f) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_SCALE, (WPARAM)(BOOL)f, 0L))
#define capGetStatus(hwnd, s, wSize) ((BOOL)AVICapSM(hwnd, WM_CAP_GET_STATUS, (WPARAM)(wSize), (LPARAM)(LPVOID)(LPCAPSTATUS)(s)))
#define capSetScrollPos(hwnd, lpP) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_SCROLL, (WPARAM)0, (LPARAM)(LPPOINT)(lpP)))
#define capGrabFrame(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_GRAB_FRAME, (WPARAM)0, (LPARAM)0L))
#define capGrabFrameNoStop(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_GRAB_FRAME_NOSTOP, (WPARAM)0, (LPARAM)0L))
#define capCaptureSequence(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_SEQUENCE, (WPARAM)0, (LPARAM)0L))
#define capCaptureSequenceNoFile(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_SEQUENCE_NOFILE, (WPARAM)0, (LPARAM)0L))
#define capCaptureStop(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_STOP, (WPARAM)0, (LPARAM)0L))
#define capCaptureAbort(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_ABORT, (WPARAM)0, (LPARAM)0L))
#define capCaptureSingleFrameOpen(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_SINGLE_FRAME_OPEN, (WPARAM)0, (LPARAM)0L))
#define capCaptureSingleFrameClose(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_SINGLE_FRAME_CLOSE, (WPARAM)0, (LPARAM)0L))
#define capCaptureSingleFrame(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_SINGLE_FRAME, (WPARAM)0, (LPARAM)0L))
#define capCaptureGetSetup(hwnd, s, wSize) ((BOOL)AVICapSM(hwnd, WM_CAP_GET_SEQUENCE_SETUP, (WPARAM)(wSize), (LPARAM)(LPVOID)(LPCAPTUREPARMS)(s)))
#define capCaptureSetSetup(hwnd, s, wSize) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_SEQUENCE_SETUP, (WPARAM)(wSize), (LPARAM)(LPVOID)(LPCAPTUREPARMS)(s)))
#define capSetMCIDeviceName(hwnd, szName) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_MCI_DEVICE, 0, (LPARAM)(LPVOID)(LPTSTR)(szName)))
#define capGetMCIDeviceName(hwnd, szName, wSize) ((BOOL)AVICapSM(hwnd, WM_CAP_GET_MCI_DEVICE, (WPARAM)(wSize), (LPARAM)(LPVOID)(LPTSTR)(szName)))
#define capPaletteOpen(hwnd, szName) ((BOOL)AVICapSM(hwnd, WM_CAP_PAL_OPEN, 0, (LPARAM)(LPVOID)(LPTSTR)(szName)))
#define capPaletteSave(hwnd, szName) ((BOOL)AVICapSM(hwnd, WM_CAP_PAL_SAVE, 0, (LPARAM)(LPVOID)(LPTSTR)(szName)))
#define capPalettePaste(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_PAL_PASTE, (WPARAM) 0, (LPARAM)0L))
#define capPaletteAuto(hwnd, iFrames, iColors) ((BOOL)AVICapSM(hwnd, WM_CAP_PAL_AUTOCREATE, (WPARAM)(iFrames), (LPARAM)(DWORD)(iColors)))
#define capPaletteManual(hwnd, fGrab, iColors) ((BOOL)AVICapSM(hwnd, WM_CAP_PAL_MANUALCREATE, (WPARAM)(fGrab), (LPARAM)(DWORD)(iColors)))
#if 0
if(mhCaptureWnd)
{
::SendMessage(mhCaptureWnd,WM_CAP_STOP,0,0L);
::SendMessage(mhCaptureWnd,WM_CAP_DRIVER_DISCONNECT,0,0L);
::DestroyWindow(mhCaptureWnd);
}
mhCaptureWnd=capCreateCaptureWindow("My Capture Window",WS_CHILD|WS_VISIBLE,0,0,160,120,*this,101);
::SendMessage(mhCaptureWnd,WM_CAP_DRIVER_CONNECT,0,0L);
::SendMessage(mhCaptureWnd,WM_CAP_SEQUENCE_NOFILE,0,0L);
::SendMessage(mhCaptureWnd,WM_CAP_SEQUENCE,0,0L);
#define capGrabFrame(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_GRAB_FRAME, (WPARAM)0, (LPARAM)0L))
#endif
#if 0
BITMAPINFOHEADER bitmapInfoHeader;
bitmapInfoHeader.biSize = sizeof(BITMAPINFOHEADER);
bitmapInfoHeader.biCompression = BI_RGB;
bitmapInfoHeader.biWidth = 160;
bitmapInfoHeader.biHeight = 120;
bitmapInfoHeader.biPlanes = 1;
bitmapInfoHeader.biBitCount = 8;
bitmapInfoHeader.biSizeImage = bitmapInfoHeader.biWidth * bitmapInfoHeader.biHeight *
bitmapInfoHeader.biPlanes * bitmapInfoHeader.biBitCount / 8;
bitmapInfoHeader.biXPelsPerMeter = 0;
bitmapInfoHeader.biYPelsPerMeter = 0;
bitmapInfoHeader.biClrUsed = 0;
bitmapInfoHeader.biClrImportant = 0;
return ::SendMessage(mhCaptureWnd,WM_CAP_SET_VIDEOFORMAT,(WPARAM)sizeof(BITMAPINFOHEADER),(LPARAM)&bitmapInfoHeader);
#endif
BmpCap::BmpCap(HWND hParentWnd)
: mSequence(0)
{
ICMOpen icmOpen;
create(hParentWnd,320,200);
connect(0);
getVideoFormat(mBitmapInfo);
if(!mVideoCodec.openDriver(mBitmapInfo.compression()))::OutputDebugString("Failed to open decompressor\n");
icmOpen.fccType(CFOURCC("vidc"));
icmOpen.fccHandler(mBitmapInfo.compression());
icmOpen.flags(ICMOpen::DeCompress);
icmOpen.version(0);
if(!mVideoCodec.driverProc(icmOpen)){::OutputDebugString("ICMOpen failed\n");return;};
// if(!mVideoCodec.driverLoad())::OutputDebugString("Failed to load driver\n");
if(!mVideoCodec.driverEnable(true)){::OutputDebugString("DriverEnable failed\n");return;}
getVideoFormat(mBitmapInfo);
// setPreviewRate(500);
// preview(true);
}
STRINGTABLE DISCARDABLE
BEGIN
STRING_OPTIONS "OPTIONS"
STRING_RATE "RATE"
STRING_SAVE "SAVE"
STRING_SITES "SITES"
STRING_NAME "NAME"
STRING_USER "USER"
STRING_PASSWORD "PASSWORD"
STRING_DIRECTORY "DIRECTORY"
STRING_INIFILENAME "BMPCAP.INI"
STRING_UNSET "UNSET"
STRING_DEFAULTRATE "50"
END
#define STRING_OPTIONS 101
#define STRING_RATE 102
#define STRING_SAVE 103
#define STRING_SITES 104
#define STRING_NAME 105
#define STRING_USER 106
#define STRING_PASSWORD 107
#define STRING_DIRECTORY 108
#define STRING_INIFILENAME 109
#define STRING_UNSET 110
#define STRING_DEFAULTRATE 111
#define STRING_DEFAULTSAVEFILE 112
void BmpCap::frameHandler(VIDEOHDR &videoHeader)
{
if(!saveFrames())return;
MovieData movieData(MovieData::DIBCompressed);
MovieData dstMovieData;
DiskInfo diskInfo;
String srcPathFileName;
String dstPathFileName;
String dstPathFileTempName;
String strTime;
SystemTime systemTime;
strTime.reserve(512);
// srcPathFileName.reserve(1024);
::sprintf(strTime,"%04d%02d%02d%02d%02d%02d%02d",
systemTime.year(),systemTime.month(),systemTime.day(),
systemTime.hour(),systemTime.minute(),systemTime.second(),
systemTime.milliseconds());
// ::sprintf(srcPathFileName,"%04d%02d%02d%02d%02d%02d%02d.BMP",
// systemTime.year(),systemTime.month(),systemTime.day(),
// systemTime.hour(),systemTime.minute(),systemTime.second(),
// systemTime.milliseconds());
srcPathFileName=strTime+".bmp";
dstPathFileTempName=strTime+"tmp.jpg";
if(mUseSequence)dstPathFileName=mCaptureFile.betweenString(0,'.')+String().fromInt(mSequence++)+String(".jpg");
else dstPathFileName=mCaptureFile;
movieData.size(videoHeader.dwBufferLength);
::memcpy((BYTE*)&movieData[0],videoHeader.lpData,videoHeader.dwBufferLength);
if(!mVideoCodec.getFormat(mBitmapInfo,mDstBitmapInfo))return;
mDstBitmapInfo.width(mCaptureWidth);
mDstBitmapInfo.height(mCaptureHeight);
if(!mVideoCodec.decompressFrame(mBitmapInfo,mDstBitmapInfo,movieData,dstMovieData))
{
if(!mVideoCodec.decompressFrame(mBitmapInfo,movieData,dstMovieData))return;
if(!mVideoCodec.getFormat(mBitmapInfo,mDstBitmapInfo))return;
}
Bitmap frameBitmap(srcPathFileName,mDstBitmapInfo,dstMovieData);
if(BitmapInfo::Bit8==mDstBitmapInfo.bitCount())
{
PurePalette purePalette(mCaptureStatus.currentPalette());
frameBitmap.setPalette(purePalette.getPalette(),FALSE);
}
frameBitmap.saveBitmap();
// ImageConverter::convert(srcPathFileName,dstPathFileName,mQuality);
ImageConverter::convert(srcPathFileName,dstPathFileTempName,mQuality);
diskInfo.rename(dstPathFileTempName,dstPathFileName);
diskInfo.unlink(srcPathFileName);
}