连接正常。就是黒屏///*
m_bInit=FALSE;
CWnd *pWnd=AfxGetMainWnd()->GetDlgItem(IDC_VIDEO);//得到预示窗口指针
CRect rect;
pWnd->GetWindowRect(&rect); // 得到窗口大小
m_hCapWnd=capCreateCaptureWindow((LPTSTR)TEXT("视频捕捉测试程序"),
WS_CHILD|WS_VISIBLE|WS_EX_CLIENTEDGE|WS_EX_DLGMODALFRAME,
0,0,rect.Width(),rect.Height(),
pWnd->GetSafeHwnd(),5); // 设置预示窗口
ASSERT(m_hCapWnd); if(capDriverConnect(m_hCapWnd,0))
{
CAPTUREPARMS CapParms = {0};
capCaptureGetSetup(m_hCapWnd, &CapParms, sizeof(CapParms));
CapParms.fCaptureAudio = FALSE;
CapParms.fYield = TRUE;
CapParms.wPercentDropForError = 50;
CapParms.fAbortLeftMouse =FALSE;
CapParms.fAbortRightMouse = FALSE;
capCaptureSetSetup(m_hCapWnd, &CapParms, sizeof(CapParms)); BITMAPINFO m_BmpInfo;
capGetVideoFormat(m_hCapWnd, &m_BmpInfo, sizeof(m_BmpInfo)); // 连接第0 号驱动器
m_bInit=TRUE; //得到驱动器的性能
capDriverGetCaps(m_hCapWnd,sizeof(CAPDRIVERCAPS), &m_CapDrvCap); if(m_CapDrvCap.fCaptureInitialized)
{// 如果初始化成功
capGetStatus(m_hCapWnd, &m_CapStatus,sizeof(m_CapStatus)); // 得到驱动器状态
capPreviewRate(m_hCapWnd,30); // 设置预示帧频
capPreview(m_hCapWnd,TRUE); // 设置预示方式
}
m_bInit=FALSE;
CWnd *pWnd=AfxGetMainWnd()->GetDlgItem(IDC_VIDEO);//得到预示窗口指针
CRect rect;
pWnd->GetWindowRect(&rect); // 得到窗口大小
m_hCapWnd=capCreateCaptureWindow((LPTSTR)TEXT("视频捕捉测试程序"),
WS_CHILD|WS_VISIBLE|WS_EX_CLIENTEDGE|WS_EX_DLGMODALFRAME,
0,0,rect.Width(),rect.Height(),
pWnd->GetSafeHwnd(),5); // 设置预示窗口
ASSERT(m_hCapWnd); if(capDriverConnect(m_hCapWnd,0))
{
CAPTUREPARMS CapParms = {0};
capCaptureGetSetup(m_hCapWnd, &CapParms, sizeof(CapParms));
CapParms.fCaptureAudio = FALSE;
CapParms.fYield = TRUE;
CapParms.wPercentDropForError = 50;
CapParms.fAbortLeftMouse =FALSE;
CapParms.fAbortRightMouse = FALSE;
capCaptureSetSetup(m_hCapWnd, &CapParms, sizeof(CapParms)); BITMAPINFO m_BmpInfo;
capGetVideoFormat(m_hCapWnd, &m_BmpInfo, sizeof(m_BmpInfo)); // 连接第0 号驱动器
m_bInit=TRUE; //得到驱动器的性能
capDriverGetCaps(m_hCapWnd,sizeof(CAPDRIVERCAPS), &m_CapDrvCap); if(m_CapDrvCap.fCaptureInitialized)
{// 如果初始化成功
capGetStatus(m_hCapWnd, &m_CapStatus,sizeof(m_CapStatus)); // 得到驱动器状态
capPreviewRate(m_hCapWnd,30); // 设置预示帧频
capPreview(m_hCapWnd,TRUE); // 设置预示方式
}
看一下设备是不是正常(能否用WINDOWS自带的那个看视频),驱动是不是正常.是不是"0号驱动器", m_CapDrvCap, m_CapStatus正不正常
if(capDriverConnect(m_hWndVideo,0))
{
::SetParent(m_hWndVideo,*this);
::SetWindowLong(m_hWndVideo,GWL_STYLE,WS_CHILD);
CRect wndRc;
m_Panel.GetClientRect(wndRc);
m_Panel.MapWindowPoints(this,wndRc);
wndRc.DeflateRect(1,1,1,1); ::SetWindowPos(m_hWndVideo,NULL,wndRc.left,wndRc.top,wndRc.Width(),
wndRc.Height(),SWP_NOZORDER);
::ShowWindow(m_hWndVideo,SW_SHOW);
capSetCallbackOnFrame(m_hWndVideo,PreviewCallback);
capPreviewRate(m_hWndVideo,30);
capPreview(m_hWndVideo,TRUE);
}
WS_CHILD|WS_VISIBLE|WS_EX_CLIENTEDGE|WS_EX_DLGMODALFRAME,
0,0,rect.Width(),rect.Height(),
pWnd->GetSafeHwnd(),5); // 设置预示窗口 为什么要用5呢?
{
CAPTUREPARMS CapParms = {0};
capCaptureGetSetup(m_hCapWnd, &CapParms, sizeof(CapParms));
CapParms.fCaptureAudio = FALSE;
CapParms.fYield = TRUE;
CapParms.wPercentDropForError = 50;
CapParms.fAbortLeftMouse =FALSE;
CapParms.fAbortRightMouse = FALSE;
capCaptureSetSetup(m_hCapWnd, &CapParms, sizeof(CapParms)); BITMAPINFO m_BmpInfo;
capGetVideoFormat(m_hCapWnd, &m_BmpInfo, sizeof(m_BmpInfo)); 这些是做什么用的呢?我的程序里没有这些,可以使用
// 连接第0 号驱动器
m_bInit=TRUE; //得到驱动器的性能
capDriverGetCaps(m_hCapWnd,sizeof(CAPDRIVERCAPS), &m_CapDrvCap); if(m_CapDrvCap.fCaptureInitialized)
{// 如果初始化成功
capGetStatus(m_hCapWnd, &m_CapStatus,sizeof(m_CapStatus)); // 得到驱动器状态
capPreviewRate(m_hCapWnd,30); // 设置预示帧频
capPreview(m_hCapWnd,TRUE); // 设置预示方式
}
ret = capDriverGetCaps(hwnd_Cam, &CapDriverCaps, sizeof (CAPDRIVERCAPS));
if (CapDriverCaps.fHasDlgVideoFormat)
ret = capDlgVideoFormat(hwnd_Cam);在格式对话框里面换着选YUV2或者MJPG格式的试一下看看,YUV2可以正常预览,但MJPG格式的用来录像更合适……
应该就是视频格式的问题,苦恼死我了,yuy2不知道怎么处理了,数据帧大小知道了,yuy2每个像素占2个字节,怎么处理????
应该就是视频格式的问题,苦恼死我了,yuy2不知道怎么处理了,数据帧大小知道了,yuy2每个像素占2个字节,怎么处理????