www.gusucode.com > VC++ 网络视频语音系统-源码程序 > VC++ 网络视频语音系统-源码程序/code/PROJECT/AVIO/VideoCapture.cpp
//NetTalk /*------------------------------------------------------------------------------*\ ============================= 模块名称: VideoCapture.cpp ============================= [版权] 2000-2002 115软件工厂 版权所有 \*------------------------------------------------------------------------------*/ //该模块访问摄像头,很有参考意义 #include "WndX.h" #include <vfw.h> #include "VideoCapture.h" #include "AVIOMgr.h" #pragma comment(lib,"vfw32") /*------------------------------------------------------------------------------*/ CVideoCapture::CVideoCapture() { m_hWndCap = NULL; } /*------------------------------------------------------------------------------*/ CVideoCapture::~CVideoCapture() { Destroy(); } /*------------------------------------------------------------------------------*/ BOOL CVideoCapture::Init() { BOOL bRet = FALSE; int i; Destroy(); m_hWndCap=capCreateCaptureWindow(0,0,0,0,0,0,0,0); if(!m_hWndCap) goto RET; for(i=0;i<MAX_VFW_DEVICES;i++) m_DriverIndex[i]=-1; capSetUserData(m_hWndCap,this); bRet=TRUE; RET: return bRet; } /*------------------------------------------------------------------------------*/ HWND CVideoCapture::GetCapWindow() { return m_hWndCap; } /*------------------------------------------------------------------------------*/ VOID CVideoCapture::Destroy() { if (m_hWndCap) { if(IsWindow(m_hWndCap)) capCaptureAbort(m_hWndCap); capSetCallbackOnVideoStream(m_hWndCap, NULL); DisconnectFromDriver(); } DestroyWindow(m_hWndCap); m_hWndCap = NULL; } /*------------------------------------------------------------------------------*/ //连接设备驱动 BOOL CVideoCapture::ConnectToDriver(SHORT DriverIndex) { BOOL bRet = FALSE; CAPTUREPARMS CapParms = {0}; if(DriverIndex>=MAX_VFW_DEVICES) { goto RET; } if (m_hWndCap==NULL||m_DriverIndex[DriverIndex]==-1) goto RET; capCaptureAbort(m_hWndCap); if(!capDriverConnect(m_hWndCap, m_DriverIndex[DriverIndex])) goto RET; capCaptureGetSetup(m_hWndCap,&CapParms,sizeof(CapParms)); CapParms.vKeyAbort=0; CapParms.fAbortLeftMouse = FALSE; CapParms.fAbortRightMouse = FALSE; CapParms.fYield = TRUE; CapParms.fCaptureAudio=FALSE; CapParms.wPercentDropForError = 100; capCaptureSetSetup(m_hWndCap,&CapParms,sizeof(CapParms)); bRet=TRUE; RET: return bRet; } /*------------------------------------------------------------------------------*/ //得到设备数 int CVideoCapture::GetDriverNum() { int iDriverNum=0; char achDeviceVersion[80] ; char achDeviceAndVersion[160] ; for(int i=0;i<MAX_VFW_DEVICES;i++) { if(capGetDriverDescription(i, achDeviceAndVersion, sizeof(achDeviceAndVersion), achDeviceVersion, sizeof(achDeviceVersion)))//buf fixed:the 2\4 param should not be null in win98 { m_DriverIndex[iDriverNum]=(SHORT)i; iDriverNum++; } } return iDriverNum; } /*------------------------------------------------------------------------------*/ //断开与驱动程序的连接 BOOL CVideoCapture::DisconnectFromDriver() { BOOL bRet=FALSE; if(!m_hWndCap) goto RET; if(!capDriverDisconnect(m_hWndCap)) goto RET; bRet=TRUE; RET: return bRet; }