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。