提取DirectShow中视频采集的数据
来源:互联网 发布:重庆软件开发 编辑:程序博客网 时间:2024/04/29 15:24
DirectShow中,数据流(Data Flow)都是依次流过各个Filter的.它对数据的管理也有自己的方法,而且并没有向用户提供一个统一的接口,供用户操作数据流.这里以提取视频采集在的每帧为位图数据为例,说说如何在Directshow中提取数据.
这里我们用到了DirectShow提供给我们的接口ISampleGrabber,并定义了一个供它回调的CSampleGrabberCB对象(继承ISampleGrabberCB接口).
我们知道,DirectShow中的数据存储是通过Sample完成的,所以提取数据也需要通过SampleGrabber.
步骤如下:
1.建立CSampleGrabberCB对象.
class CSampleGrabberCB : public ISampleGrabberCB
{
STDMETHODIMP BufferCB( double dblSampleTime, BYTE * pBuffer, long lBufferSize )
{
//Callback method that receives a pointer to the sample buffer.
}
STDMETHODIMP SampleCB( double SampleTime, IMediaSample * pSample )
{
//Callback method that receives a pointer to the media sample.
}
}
2.定义ISampleGrabber接口并初始化
CComPtr< ISampleGrabber > m_pGrabber;
HRESULT hr;
hr = m_pGrabber.CoCreateInstance( CLSID_SampleGrabber );
if(FAILED(hr))
//error action;
3.定义Grabber Filter,设置它的媒体类型,并将它加入Graph中
CComQIPtr< IBaseFilter, &IID_IBaseFilter > pGrabBase( m_pGrabber );
CMediaType VideoType;
VideoType.SetType(&MEDIATYPE_Video);
VideoType.SetSubtype(&MEDIASUBTYPE_RGB24);
hr = m_pGrabber->SetMediaType(&VideoType);
hr = pGraph->AddFilter(pGrabBase,L"Grabber");
4.设置回调(CallBack),使Grabber能够通过BufferCB自动完成采集数据.
// don't buffer the samples as they pass through
//
hr = m_pGrabber->SetBufferSamples( FALSE );
// only grab one at a time, stop stream after
// grabbing one sample
//
hr = m_pGrabber->SetOneShot( FALSE );
// set the callback, so we can grab the one sample
//
hr = m_pGrabber->SetCallback( &mCB, 1 ); //mCB为CSampleGrabber对象
这样,在DirectShow数据流动过程中,mCB.bufferCB会自动执行,提取Graph中的数据.
- 提取DirectShow中视频采集的数据
- directshow的视频采集
- directshow和vfw采集并转发视频数据的接口
- 怎样改变DirectShow中采集的视频大小.
- 【opencv + Directshow + VC2005】视频采集中遇到的问题
- DirectShow基础编程 采集视频数据
- DirectShow视频采集方案
- directshow 采集视频
- directshow 采集视频
- Directshow视频采集保存
- DirectShow视频采集(重要)
- Directshow采集到的视频BYTE数据转成IplImage数据并保存出去
- DirectShow采集YUV数据
- 用DirectShow实现视频采集
- 用DirectShow实现视频采集
- 用DirectShow实现视频采集
- opencv+directshow采集视频图像
- 用DirectShow实现视频采集
- 写给自己的话
- 公交路线查询文档
- 傾城之戀
- 比较器原理和应用
- 穿透Socks5 代理的UDP编程
- 提取DirectShow中视频采集的数据
- C++ sizeof 使用规则及陷阱分析
- android 事件处理机制——requestDisallowInterceptTouchEvent
- 曾经的“约炮神器”陌陌12月或赴美上市
- dtgfku
- 2015网易Java开发工程师(技术架构)笔试题
- 利用正则表达式将字符串“2014-09-29 14:35:36” 转换成“20140929143536”
- ps常用选项
- 继承中的super.getclass().getName()