科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件DirectShow入门之动态构建Filter Graph

DirectShow入门之动态构建Filter Graph

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文档主要讲述了Filter graph的动态构建技术。

作者:智慧的鱼 来源:天极开发 2007年10月16日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
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中移走。

查看本文源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章