* 初始化VFW, 完成如下操作
* 创建捕获窗口;
* 注册回调函数;
* 加载及设置设备驱动;
* 开始预览;
* 获得位图格式
1.创建捕获窗口(子窗口),该窗口为VFW制定窗口
// HWND m_WndCap;
m_hWndCap = capCreateCaptureWindow(
_T("Capture Window"),
WS_CHILD|WS_VISIBLE,
0,0,352,288,
m_wndSource.m_hWnd // 设置父窗口
,0);
2.注册回调函数, 回调函数的定义为全局函数,在下面有定义
capSetCallbackOnError( m_hWndCap, (FARPROC)ErrorCallbackProc);
capSetCallbackOnStatus( m_hWndCap,(FARPROC)StatusCallbackProc);
capSetCallbackOnVideoStream( m_hWndCap,(FARPROC)VideoCallbackProc);
3. 连结捕获窗口到捕获设备驱动
// 方法一
capDriverConnect(
m_hWndCap, // 捕获窗口
0); // Index of the capture driver.
// 方法二发送
WM_CAP_DIRVER_CONNECT消息wParam=(WPARAM) (iIndex);lParam=0L;
4. 获得驱动器参数
// CAPDRIVERCAPS m_caps定义为全局变量,其用来接收设备驱动信息
capDriverGetCaps(m_hWndCap,&m_caps,sizeof(CAPDRIVERCAPS));
// 在overlay模式中,视频的显示是以硬件重叠的方式,或者发送call the WM_CAP_SET_OVERLAY message
if ( m_caps.fHasOverlay )
capOverlay( m_hWndCap, TRUE);
5.开始预览
~设置预览rate
capPreviewRate(m_hWndCap,1000/25);// 毫秒为单位
~开始预览
capPreview( m_hWndCap, TRUE );
6.* 获得位图信息在设备开始预览后,可以侦测到视频位图的格式信息,其保存在BITMAPINFO结构体中;注意,是在视频已经打开后才能获得视频源的位图格式信息。视频捕获设备的不同可能视频格式也不同,所以首先获得视频格式体大小,通过调用capGetVideoFormatSize(), 然后调用capGetVideoFormat
//全局变量: LPBITMAPINFO lpbiIn;
fsize = capGetVideoFormatSize(m_hWndCap);
capGetVideoFormat(m_hWndCap, lpbiIn, fsize);// lpbiIn 的初始化
7. 初始化成功
[POST BY Leon Chan,suse,2010/11]