首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > 多媒体 >

VMR9智能连接有关问题,请进来看看!【附程序源代码与注释】

2012-04-08 
VMR9智能连接问题,急,请进来看看!【附程序源代码与注释】我用VMR9进行视频的采集,目前已经能够显示画面了 而

VMR9智能连接问题,急,请进来看看!【附程序源代码与注释】
我用VMR9进行视频的采集,目前已经能够显示画面了 而且也比较流畅,但问题是摄像头启动的速度非常慢 大概5-8秒时间,根本无法使用。我原来用的ISampleGrabberCB进行采集启动只用2秒内,用VMR7也不过是4秒。请问我该怎么解决这个问题呢?
我的代码如下
HRESULT hr;
// Get the interface for DirectShow's GraphBuilder
  hr=CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, 
  IID_IGraphBuilder, (void **)&m_pGB);

  if(SUCCEEDED(hr))
  {
  // Create the Video Mixing Renderer and add it to the graph
  InitializeWindowlessVMR(hWnd);  
// Bind Device Filter. We know the device because the id was passed in
if(!BindFilter(iDeviceID, &m_pDF))
return S_FALSE;

hr=m_pGB->AddFilter(m_pDF, L"Video Capture");
if (FAILED(hr))
return hr;

CComPtr<IEnumPins> pEnum;
m_pDF->EnumPins(&pEnum);

hr = pEnum->Reset();
hr = pEnum->Next(1, &m_pCamOutPin, NULL);

  // QueryInterface for DirectShow interfaces
  hr = m_pGB->QueryInterface(IID_IMediaControl, (void **)&m_pMC);
  hr = m_pGB->QueryInterface(IID_IMediaEventEx, (void **)&m_pME);  

hr = InitVideoWindow(hWnd,iWidth, iHeight);

m_nFramelen=iWidth*iHeight*3;
m_pFrame=(BYTE*) new BYTE[m_nFramelen];
   
// Run the graph to play the media file
 
hr = m_pGB->Render(m_pCamOutPin);
//m_pGB->RenderFile(path,0);//tian

hr = m_pMC->Run();
}
就是到m_pGB->Render(m_pCamOutPin);这句的时候非常耗时,我知道他提供了2个渲染接口,有RenderFile和Render,我用RenderFile读取文件时候就比较快,大概3秒,但用Render就非常非常慢,我才接触DS不到一周,请有经验的前辈指点一下,感激不尽!

[解决办法]
这是学习directshow的基础,创建filter,枚举pin,媒体匹配,连接。学习directshow没有那么快的,慢慢来。
[解决办法]
Graph的建立需要时间,可能是你的电脑太慢。
尝试优化一下Filter的连接,如智能连接,枚举,看你的graph里有多少filter。

热点排行