初始化VFW

* 初始化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]

posted @ 2010-11-07 23:22  hungryMan  阅读(311)  评论(0编辑  收藏  举报