【问题标题】:Fork Direct Show Tee Filter叉直接显示三通过滤器
【发布时间】:2015-09-23 08:49:14
【问题描述】:

我需要一个“无限引脚 Tee 过滤器”,它允许启用/禁用对特定引脚实例的传递。

首先,我将 Windows SDK 中的“Inifinite Pin Tee Filter”示例作为基点,并开始从该基点分叉代码。 但这迫使我复制了很多“不必要”的代码。

其他选项继承自 Direct show Pin Tee 过滤器,仅覆盖必要的方法。

  • 将新属性“IsEnabled”添加到 pin。
  • 覆盖 Receive(IMediaSample *pSample) 以检查新的“IsEnabled”属性。
  • 编写一个与过滤器交互的接口。

第二个选项真的可行吗? 除了代码重复,两种方案的优缺点是什么?

【问题讨论】:

    标签: c++ directshow


    【解决方案1】:

    InfTee Filter Sample 看起来并不太复杂,是一个很好的起点。您提到的另一个选项不包括“流结束”传递的场景,停止到特定的暂停转换,试图避免不必要的数据复制。无论如何,尝试修补那些您最终会得到与 InfTee 示例相当的代码。

    您的另一个真正的替代选择是构建一个非常简单的“一进一出”过滤器,该过滤器根据其 IsEnabled 属性提供或不提供媒体样本。这使您可以按原样使用股票 InfTee,并将您自己的阻塞过滤器的一些实例添加到其输出中,以实现数据切除逻辑。这两种方法都有意义。

    【讨论】:

    • “一进一出”过滤器看起来很有趣,但我需要一些相同过滤器的实例。这对性能有何影响?这种新过滤器的理由是提高当前开发的性能
    • 不影响性能的最佳方法是在不修改的情况下重复使用库存 Inf Tee。这个过滤器做得很好,实现了重要的代码来共享内存分配器,避免数据复制,同时运行良好,并且兼容与其他过滤器的连接。不过,无论您选择哪种方式,您都可以取得出色的表现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    • 1970-01-01
    • 1970-01-01
    • 2014-09-06
    • 1970-01-01
    相关资源
    最近更新 更多