// IDCAP.H // // Created 31-Jul-96 [JonT] #ifndef _IDCAP_H #define _IDCAP_H // Set a define saying we're building QKCAP so that // we use the proper DLL import switches #define __DCAP_BUILD__ // Debug stuff #if defined (DEBUG) || defined (_DEBUG) #define Assert(x, msg) { if (!(x)) { char szBuf[256]; \ wsprintf((LPSTR)szBuf, (LPSTR)"DCAP: %s %s(%d)\r\n", (LPSTR)(msg),\ (LPSTR)__FILE__, __LINE__); \ OutputDebugString((LPSTR)szBuf); DebugBreak(); } } #define DebugSpew(msg) { char szBuf[256]; \ wsprintf((LPSTR)szBuf, (LPSTR)"DCAP: %s %s(%d)\r\n", (LPSTR)(msg),\ (LPSTR)__FILE__, __LINE__); \ OutputDebugString((LPSTR)szBuf); } #else #define Assert(x, msg) #define DebugSpew(msg) #endif // Equates #define DCAP_MAX_DEVICES 10 // Arbitrary #define DCAP_MAX_VFW_DEVICES 10 // MSVIDEO's limit // INTERNALCAPDEV flags #define HCAPDEV_STREAMING 0x0001 #define HCAPDEV_STREAMING_INITIALIZED 0x0002 #define HCAPDEV_STREAMING_FRAME_GRAB 0x0004 #define HCAPDEV_STREAMING_FRAME_TIME 0x0008 #define HCAPDEV_STREAMING_PAUSED 0x0010 #define HCAPDEV_IN_DRIVER_DIALOG 0x0020 #define CAPTURE_DEVICE_DISABLED 0x0040 #define CAPTURE_DEVICE_OPEN 0x0080 #define WDM_CAPTURE_DEVICE 0x0100 // LOCKEDINFO flags #define LIF_STOPSTREAM 0x0001 // Structures // CAPTUREDEVICE flags #define MAX_VERSION 80 #ifdef WIN32 typedef struct tagVS_VERSION { WORD wTotLen; WORD wValLen; TCHAR szSig[16]; VS_FIXEDFILEINFO vffInfo; } VS_VERSION; #endif #ifdef __NT_BUILD__ #define LPCAPBUFFER16 DWORD #define LPCAPBUFFER32 LPCAPBUFFER #endif //__NT_BUILD__ typedef struct _CAPBUFFERHDR FAR* LPCAPBUFFER; // We will deal with CAPBUFFER pointers as always 16:16 pointers. So, we // use this #define to make sure that we don't accidentally indirect them on // the 32-bit side. We need to always MapSL them on the 32-bit side before // using. #ifndef WIN32 #define LPCAPBUFFER16 LPCAPBUFFER #define LPCAPBUFFER32 DWORD #else #define LPCAPBUFFER16 DWORD #define LPCAPBUFFER32 LPCAPBUFFER #endif typedef struct _CAPBUFFERHDR { VIDEOHDR vh; LPCAPBUFFER32 lpNext; // Double linked list pointers for ready queue LPCAPBUFFER32 lpPrev; #ifndef __NT_BUILD__ LPCAPBUFFER16 lp1616Next; // Double linked list pointers for ready queue LPCAPBUFFER16 lp1616Prev; #endif } CAPBUFFERHDR, FAR* LPCAPBUFFER; #ifndef __NT_BUILD__ typedef struct _LOCKEDINFO { LPCAPBUFFER16 lp1616Head; // Queue of ready items LPCAPBUFFER16 lp1616Tail; LPCAPBUFFER16 lp1616Current; // Item being used by 32-bit side DWORD pevWait; DWORD dwFlags; } LOCKEDINFO, FAR* LPLOCKEDINFO; #endif #ifdef WIN32 typedef struct _INTERNALCAPDEV { DWORD dwFlags; #ifndef __NT_BUILD__ LOCKEDINFO* lpli; WORD wselLockedInfo; WORD wPad; #endif int nDeviceIndex; HVIDEO hvideoIn; HVIDEO hvideoCapture; HVIDEO hvideoOverlay; LPCAPBUFFER32 lpcbufList; // List of all allocated buffers so we can free them DWORD dwcbBuffers; DWORD dw_usecperframe; UINT timerID; HANDLE hevWait; LONG busyCount; LPCAPBUFFER32 lpHead; LPCAPBUFFER32 lpTail; LPCAPBUFFER32 lpCurrent; CRITICAL_SECTION bufferlistCS; DWORD dwDevNode; char szDeviceName[MAX_PATH]; char szDeviceDescription[MAX_PATH]; char szDeviceVersion[MAX_VERSION]; PVOID pCWDMPin; PVOID pCWDMStreamer; } INTERNALCAPDEV, *HCAPDEV, *LPINTERNALCAPDEV; #define HFRAMEBUF LPCAPBUFFER #define INTERNAL_MAGIC 0x50414344 #define VALIDATE_CAPDEV(h) if (!h || !(h->dwFlags & CAPTURE_DEVICE_OPEN)) { \ SetLastError(ERROR_INVALID_PARAMETER); return FALSE; } #include // Globals extern int g_cDevices; extern LPINTERNALCAPDEV g_aCapDevices[DCAP_MAX_DEVICES]; #ifdef __cplusplus extern "C" { #endif // __cplusplus #ifdef __NT_BUILD__ #define _OpenDriver OpenDriver #define _CloseDriver CloseDriver #define _SendDriverMessage SendDriverMessage #else HANDLE __stdcall _OpenDriver(LPCSTR lpDriverName, LPSTR lpSectionName, LONG lpvop); DWORD __stdcall _CloseDriver(HANDLE h, LPVOID lpReserved1, LPVOID lpReserved2); DWORD __stdcall _SendDriverMessage(HANDLE h, DWORD msg, DWORD param1, DWORD param2); void __stdcall _CloseVxDHandle(DWORD pev); WORD __stdcall _AllocateLockableBuffer(DWORD dwSize); void __stdcall _FreeLockableBuffer(WORD wBuffer); BOOL __stdcall _LockBuffer(WORD wBuffer); void __stdcall _UnlockBuffer(WORD wBuffer); #endif BOOL __stdcall _GetVideoPalette(HVIDEO hvideo, CAPTUREPALETTE* lpcp, DWORD dwcbSize); DWORD _stdcall _GetVideoFormatSize(HDRVR hvideo); BOOL __stdcall _GetVideoFormat(HVIDEO hvideo, LPBITMAPINFOHEADER lpbmih); BOOL __stdcall _SetVideoFormat(HVIDEO hvideoExtIn, HVIDEO hvideoIn, LPBITMAPINFOHEADER lpbmih); BOOL __stdcall _InitializeVideoStream(HVIDEO hvideo, DWORD dwMicroSecPerFrame, DWORD_PTR dwParam); BOOL __stdcall _UninitializeVideoStream(HVIDEO hvideo); BOOL __stdcall _InitializeExternalVideoStream(HVIDEO hvideo); DWORD __stdcall _GetVideoFrame(HVIDEO hvideo, DWORD lpvideohdr); #endif //Win32 #ifdef __cplusplus } // extern "C" #endif // __cplusplus #endif // #ifndef _IDCAP_H