DirectShow 视频捕获(9) 生成新的采样

 

Generating New Samples

生成新的采样

网址:http://msdn.microsoft.com/en-us/library/ms899448.aspx

 

这部分描述源过滤器如何生成新的采样

推模式

在推模式,源过滤器启动过程,步骤如下:

  • 源过滤器调用IMemAllocator::GetBuffer获取一个空的媒体采样
  • 源过滤器填充这个采样。如何填充完全决定于来源的性质。
  • 源过滤器调用下游输入引脚的IMemInputPin::Receive,传递一个指向采样的IMediaSample接口的指针。
  • 下游过滤器不是在Receive返回之前处理采样就是保留采样后面再处理。如果下游过滤器保留采样,需要调用采样对象的IUnknown::AddRef方法。

 

在这个时候,下游的过滤器也许保留采样的计数,所以源过滤器不能简单的重复使用采样。为传递下一个采样,它必须下步骤1一样再次调用IMemAlloctor::GetBuffer。

注意:为传递多个采样,在步骤3源过滤器可以调用IMemInputPin::ReceiveMultiple

拉模式

在拉模式,解析过滤器向源过滤器请求数据。解析过滤器使用源过滤器输出引脚上的IAsyncReader接口,步骤如下:

1.       解析过滤器调用IMemAllocator::GetBuffer获取一个空的媒体采样。

2.       它调用IAsyncReader::Request方法向源过滤器请求数据。

3.       源数据在获取数据的过程中,解析器调用IAsyncReader::WaitForNext。直到步骤2的请求完成。

4.       解析过滤器处理数据(可能调用自己输入引脚的IMemInputPin::Receive方法)并传递到下游。

步骤2和3执行异步读操作。解析器可以通过使用IAsyncReader::SyncRead或者IAsyncReader::SyncReadAligned方法,请求一个同步读操作。

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值