AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > VC编程

DirectSwho入门之动态构建Filter Graph

51自学网 2015-08-30 http://www.wanshiok.com

 

  Filter Chain的使用规则

  当你使用IFilterChain的方法时,你一定要确保graph中的filter都支持这个接口,否则的话你也可能会造成死锁和graph错误。

  下面将教给你如何正确使用filter chain

  
  图3

  1、在链条的状态改变之前,在链条边界的数据处理必须完成。下面的函数可以完成这些事情:IMemInputPin::Receive, IPin::NewSegment, and IPin::EndOfStream。

  Filters in the chain must return from calls to these methods made by filters outside the chain; and filters outside the chain must return from calls made by filters within the chain.

  例如:上面图中,filter B必须将从filter A中请求的数据处理完毕,filter E必须完成对filter D请求的数据的处理。

  2、上游的filter必须能够察觉filter 链表的状态改变。例如,在上图中,假如chain停止,但是filter A却调用B上的输入pin上的IMemInputPin::Receive方法,调用肯定是失败的,并且返回的信息是stream 停止。如果当应用程序重新启动chain的时候,filter A就没有数据流了。

  3、chain下游的filter也应该能够察觉链表状态的改变。如果不能够察觉的话,如果E阻塞等待上游的D传递sample,但是上游的chain的状态已经改变成停止状态,容易造成死锁。

  4、所有和链表内的filter 相连的filter都应该有自己独立的allocator,因为如果chain的状态改变或者被删除,它的allocator就会被销毁,和它们相连的filter就没法处理sample了。

  5、只有链表支持动态断开才能将一个链表从graph中移走。

 
 
说明
:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。

上一篇:用Windows消息循环实现消息延迟和合并  下一篇:用VC获取其它程序的命令行参数