DirectShow 预览时抓数据的问题

原创 2017年01月02日 22:12:17
我现在用directshow在手机上作拍摄预览功能,为了能够在预览的画面上画东西我需要捕获每桢数据.我下了个demo,它里面实现了ISampleGrabber,能提供抓桢的功能。我现在的问题是无法建立流链接,在调用renderstream函数时,程序出错退出。以下是代码,请高手分析一下:
HRESULT
CGraphManager::CreateCaptureGraphInternal()
{
FILE* pFile = _tfopen(TEXT("ds_log.txt"), TEXT("a+w"));

HRESULT       hr = S_OK;
CComVariant   varCamName;
CPropertyBag  PropBag;
OAEVENT       oaEvent;
WCHAR wzDeviceName[ MAX_PATH + 1 ];

CComPtr<IMediaEvent>            pMediaEvent;
CComPtr<IPersistPropertyBag>    pPropertyBag;
CComPtr<IBaseFilter> pH263Transform;

//
// Create the capture graph builder and register the filtergraph manager. 
//
CHK( m_pCaptureGraphBuilder.CoCreateInstance( CLSID_CaptureGraphBuilder ));
CHK( m_pFilterGraph.CoCreateInstance( CLSID_FilterGraph ));
CHK( m_pCaptureGraphBuilder->SetFiltergraph( m_pFilterGraph ));

// Get IMediaControl interface
CHK( m_pFilterGraph->QueryInterface( IID_IMediaControl, (void**)&m_pMediaControl ) );
fprintf(pFile, "QueryInterface m_pMediaControl\n");
//
// Create and initialize the video capture filter
//
CHK( m_pVideoCaptureFilter.CoCreateInstance( CLSID_VideoCapture ));
CHK( m_pVideoCaptureFilter.QueryInterface( &pPropertyBag ));

// We are loading the driver CAM1 in the video capture filter. 
CHK( GetFirstCameraDriver( wzDeviceName ));
varCamName = wzDeviceName;
if( varCamName.vt != VT_BSTR )
{
ERR( E_OUTOFMEMORY );
}

CHK( PropBag.Write( L"VCapName", &varCamName ));
CHK( pPropertyBag->Load( &PropBag, NULL ));

// Everything succeeded, the video capture filter is added to the filtergraph
CHK( m_pFilterGraph->AddFilter( m_pVideoCaptureFilter, L"Video Capture Filter Source" ));

//
// Create and initialize the frame grabber filter
//
CHK( CoCreateInstance( CLSID_SampleGrabber, NULL, CLSCTX_INPROC, IID_IBaseFilter, (void**)&pH263Transform ) );
CHK( m_pFilterGraph->AddFilter( pH263Transform, FILTERNAME ) );
CHK( pH263Transform->QueryInterface( IID_ISampleGrabber, (void**)&m_pISampleGrabber ) );

// render stream
fprintf(pFile, "before RenderStream\n");

CHK( m_pCaptureGraphBuilder->RenderStream( &PIN_CATEGORY_PREVIEW, 
&MEDIATYPE_Video, m_pVideoCaptureFilter, pH263Transform, NULL ) );

fprintf(pFile, "after RenderStream\n");
//
// Let's get the handle for DShow events. The main loop will listen to both notifications from 
// the UI thread and for DShow notifications
//
CHK( m_pFilterGraph->QueryInterface( IID_IMediaEvent, (void**) &pMediaEvent ));
CHK( pMediaEvent->GetEventHandle( &oaEvent ));
m_handle[1] = (HANDLE) oaEvent;

m_fGraphBuilt = TRUE;
NotifyMessage( MESSAGE_CREATE_FRAMECAPTUREGRAPH_OK, L"Framegraph created" );
return hr;

Cleanup:
if( FAILED( hr ))
{
NotifyMessage( MESSAGE_ERROR, L"Builing the graph failed" );
}
fprintf(pFile, "\n");
fclose(pFile);
return hr;
}

DirectSHOW中的视频捕捉 (乱七八糟整理)

DIRECTSHOW中的视频捕捉 -------------------------DirectSHOW 真不好玩............ 本篇文档主要描述关于用Directsho...
  • yulinxx
  • yulinxx
  • 2015年11月10日 11:12
  • 2604

MFC DirectShow视频预览 [大三TJB_708]

1 简介 本文的主要内容是如何在MFC程序中实现DirectShow视频预览。 DirectShow是微软共公司在ActiveMove和Video for Windows 的基础上推出的新一代基于CO...
  • misskissC
  • misskissC
  • 2013年03月16日 19:34
  • 5137

Delphi的DirectShow开发概述

Delphi的DirectShow开发概述 第一部分:背景知识 DirectShow是微软公司提供的一套在Windows平台上进行流媒体处理的开发包,与DirectX开...
  • spd260
  • spd260
  • 2013年02月24日 20:23
  • 689

DirectShow的配置及从摄像头读取视频并预览

配置DirectShow和简单的读取摄像头视频的代码实现
  • yangghuannn
  • yangghuannn
  • 2015年10月15日 20:50
  • 1577

directshow视频旋转90度

想做一个transform filter完成视频数据的旋转,参考了SDK sample里的EZRGB24那个例子,现在对视频数据修改没问题了。现在的问题是:在transform filter 中如何改...
  • guoguojune
  • guoguojune
  • 2016年08月29日 11:21
  • 969

directshow学习笔记三-----视频预览(还未播放到指定窗口或控件,个人学习所用,仅供参考)

一、首先获取视频采集设备列表 //获取视频采集设备列表 void CTestPreviewDlg::GetDeviceList() { // Create the System Device Enum...
  • afu1972715000
  • afu1972715000
  • 2015年01月08日 10:29
  • 870

VS2010基于DirectShows实现视频预览控件

之前用VFW实现视频预览控件,使用的时候经常会弹出视频源选择窗口,为了解决这个问题,采用最新的DirectShow来实现视频预览,而且VFW目前基本上已经不使用了,DirectX的功能比较强大。因需求...
  • wu_tongyu
  • wu_tongyu
  • 2014年12月16日 23:14
  • 1103

DirectShow抓拍图片

“源于DirectShow自带的例子StillCap” DirectShow抓拍图片需要用到两个接口:ISampleGrabberCB和ISampleGrabber。"CB"的意思就是 Ca...
  • l5201314131413141314
  • l5201314131413141314
  • 2011年12月28日 15:33
  • 1389

机器视觉学习笔记(2)——基于DirectShow的多摄像头视频采集

机器视觉学习笔记(2)——基于DirectShow的多摄像头视频采集标签: 机器视觉 博客1.为什么使用DirectShow笔者使用的是两个USB摄像头,单摄像头视频采集使用OpenCV的VideoC...
  • xuelabizp
  • xuelabizp
  • 2015年12月03日 11:09
  • 4064

DirectShow下视频显示窗口设置

显示视频 DirectShow 提供了如下过滤器来显示视频: l         Video Renderer 过滤器. 该过滤器可用于所有的支持DirectX的平台,它对平台没有其它特殊的要求。可...
  • CtiyMan
  • CtiyMan
  • 2015年09月11日 11:11
  • 1128
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:DirectShow 预览时抓数据的问题
举报原因:
原因补充:

(最多只允许输入30个字)