directshow过滤器图表-graph builder使用时的几点注意事项(易犯错误解析)

下面提到的几点注意事项是我用directshow做项目时遇到的问题和解决了这些问题之后相应的理解及心得,希望与正在学习directshow的同伴们互勉,尽量少走点弯路,由于小弟也是新手,菜鸟一个,所以下面提到的一些理解也可能有疏漏之处,还请前辈们不吝赐教。

1.尽量不要将不再使用的filter留在过滤器图表中。因为很多莫名其妙的错误都是在这种情况下发生的,具体原因是大家在做directshow开发时不可避免的会遇到很多智能连接的情况,如果有游离的filter存在graph builder中,而且其merit值为可用,那么智能连接很可能会使用这些filter,自定义的filter更容易出现这些问题。所以,不要有这些无用的filter的对象,使用完就释放掉,不要使其游离。最彻底的方法是先removefilter,然后将其对象指针置为NULL。因为removefilter只是断开其与上、下游filter的连接,这在某些情况下也是有用的,比如你不想彻底释放该filter,以后还会用到。

2.Smart Tee的使用需谨慎。Smart Tee共有三个引脚:Input、Preview、Capture,一个输入,两个输出。其中Preview是会去掉时间戳的。我们经常会使用RenderStream做视频采集的智能连接,那么就要注意了,如果第一个参数使用了&PIN_CATEGORY_PREVIEW、&PIN_CATEGORY_CAPTURE,那么这个过滤器链上会自动加上smart Tee的对象。这种情况下也会产生很多莫名其妙的问题。而且注意第三个参数一定是源,绝对的源,而不仅仅只是有一个输出pin就可以。那么对于smart Tee的使用上不能完全依赖于RenderStream,需要做一些手动连接,无非就是调用graph builder的Connect、ConnectDirect方法,也不是很麻烦。

3.有时在使用vmr时会遇到视频流的帧交互闪烁问题。这里我只提一种情况,那就是使用多个过滤器图表的情况下。我们可能有多个vmr渲染器,如果这几个vmr都绑定到一个特定的窗口上,而且不止一个vmr正处在运行状态下,那么就会发生刚才提到的问题。可能你会说,既然这样,我们何不在多个过滤器图表中使用同一个vmr。呵呵,你就要好好想清楚了,这种情况下,该vmr的状态怎么维持呢,都使用同一个vmr,有的过滤器图表处在运行状态下,有的是暂停、停止,这对于同一个指针是无法办到的,换句话说,这种情况下,使用多个过滤器图表是没什么意义的。所以,在设计多过滤器图表时要充分考虑类似这种问题。

先说这几点吧,以后有什么感悟再添上去,希望这篇文章对大家有所帮助。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值