当前位置:首页 > 摄像头图像采集程序与分析
registered?\ return hr; }
CComQIPtr < IBaseFilter, &IID_IBaseFilter > pGrabBase( m_pGrabber ); //设置视频格式 AM_MEDIA_TYPE mt;
ZeroMemory(&mt, sizeof(AM_MEDIA_TYPE)); mt.majortype = MEDIATYPE_Video; mt.subtype = MEDIASUBTYPE_RGB24; hr = m_pGrabber-> SetMediaType(&mt); if( FAILED( hr ) ){
AfxMessageBox(\ return hr; }
hr = m_pGB-> AddFilter( pGrabBase, L\ 14 / 17
if( FAILED( hr ) ){
AfxMessageBox(\ return hr; }
// try to render preview/capture pin
hr = m_pCapture-> RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video,m_pBF,pGrabBase,NULL); if( FAILED( hr ) )
hr = m_pCapture-> RenderStream(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video,m_pBF,pGrabBase,NULL); if( FAILED( hr ) ){
AfxMessageBox(\ return hr; }
hr = m_pGrabber-> GetConnectedMediaType( &mt );
if ( FAILED( hr) ){
AfxMessageBox(\ return hr; }
VIDEOINFOHEADER * vih = (VIDEOINFOHEADER*) mt.pbFormat; mCB.lWidth = vih-> bmiHeader.biWidth; mCB.lHeight = vih-> bmiHeader.biHeight; FreeMediaType(mt);
hr = m_pGrabber-> SetBufferSamples( FALSE ); hr = m_pGrabber-> SetOneShot( FALSE ); hr = m_pGrabber-> SetCallback( &mCB, 1 ); //设置视频捕捉窗口 m_hWnd = hWnd ; SetupVideoWindow();
hr = m_pMC-> Run();//开始视频捕捉
if(FAILED(hr)){AfxMessageBox(\ return S_OK; }
bool CCaptureVideo::BindFilter(int deviceId, IBaseFilter **pFilter) {
if (deviceId < 0) return false;
// enumerate all video capture devices CComPtr pCreateDevEnum;
HRESULT hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER,
IID_ICreateDevEnum, (void**)&pCreateDevEnum); if (hr != NOERROR) 15 / 17 {
return false; } CComPtr pEm; hr
=
pCreateDevEnum->
CreateClassEnumerator(CLSID_VideoInputDeviceCategory,&pEm, 0);
if (hr != NOERROR) {
return false; }
pEm-> Reset(); ULONG cFetched; IMoniker *pM; int index = 0;
while(hr = pEm-> Next(1, &pM, &cFetched), hr==S_OK, index <= deviceId) {
IPropertyBag *pBag;
hr = pM-> BindToStorage(0, 0, IID_IPropertyBag, (void **)&pBag); if(SUCCEEDED(hr)) {
VARIANT var; var.vt = VT_BSTR;
hr = pBag-> Read(L\ if (hr == NOERROR) {
if (index == deviceId) {
pM-> BindToObject(0, 0, IID_IBaseFilter, (void**)pFilter); }
SysFreeString(var.bstrVal);
}
pBag-> Release(); }
pM-> Release(); index++; }
return true; }
HRESULT CCaptureVideo::InitCaptureGraphBuilder() {
HRESULT hr;
// 创建 IGraphBuilder 接口
hr=CoCreateInstance(CLSID_FilterGraph, CLSCTX_INPROC_SERVER, 16 / 17
IID_IGraphBuilder, (void **)&m_pGB); // 创建 ICaptureGraphBuilder2接口 hr
=
CoCreateInstance
(CLSID_CaptureGraphBuilder2
,
NULL, NULL,
CLSCTX_INPROC,
IID_ICaptureGraphBuilder2, (void **) &m_pCapture); if (FAILED(hr))return hr;
m_pCapture-> SetFiltergraph(m_pGB);
hr = m_pGB-> QueryInterface(IID_IMediaControl, (void **)&m_pMC); if (FAILED(hr))return hr;
hr = m_pGB-> QueryInterface(IID_IVideoWindow, (LPVOID *) &m_pVW); if (FAILED(hr))return hr; return hr; }
HRESULT CCaptureVideo::SetupVideoWindow() {
HRESULT hr;
共分享92篇相关文档