Fork Direct Show 三通过滤器
Fork Direct Show Tee Filter
我需要一个 'Infinite Pin Tee filter' 允许 enable/disable 传送到特定的 pin 实例。
起初,我想以 Windows SDK 中的 "Inifinite Pin Tee Filter" 示例作为基点,并开始从该基点分叉代码。
但这迫使我复制大量 "unecessary" 代码。
其他选项是继承自Direct show Pin Tee filter,只重写必要的方法。
- 添加新的 属性 "IsEnabled" 到 pin。
- 覆盖 Receive(IMediaSample *pSample) 以检查新的 "IsEnabled" 属性.
- 编写一个与过滤器交互的接口。
第二种选择真的可行吗?
除了代码重复,这两个选项的优点和缺点是什么?
InfTee Filter Sample 看起来并不复杂,是一个很好的起点。您提到的另一个选项不包括 "end of stream" 交付的场景,停止到暂停的特定过渡,试图避免不必要的数据复制。尝试修补那些你最终会得到与 InfTee 示例相当的代码。
您的另一个真正的替代选择是构建一个非常简单的 "one in, one out" 过滤器,它根据其 IsEnabled 属性 提供或不提供媒体样本。这使您可以按原样使用现有的 InfTee,并将您自己的阻塞过滤器的几个实例添加到其输出中,以实现数据切割逻辑。两种方法都有意义。
我需要一个 'Infinite Pin Tee filter' 允许 enable/disable 传送到特定的 pin 实例。
起初,我想以 Windows SDK 中的 "Inifinite Pin Tee Filter" 示例作为基点,并开始从该基点分叉代码。 但这迫使我复制大量 "unecessary" 代码。
其他选项是继承自Direct show Pin Tee filter,只重写必要的方法。
- 添加新的 属性 "IsEnabled" 到 pin。
- 覆盖 Receive(IMediaSample *pSample) 以检查新的 "IsEnabled" 属性.
- 编写一个与过滤器交互的接口。
第二种选择真的可行吗? 除了代码重复,这两个选项的优点和缺点是什么?
InfTee Filter Sample 看起来并不复杂,是一个很好的起点。您提到的另一个选项不包括 "end of stream" 交付的场景,停止到暂停的特定过渡,试图避免不必要的数据复制。尝试修补那些你最终会得到与 InfTee 示例相当的代码。
您的另一个真正的替代选择是构建一个非常简单的 "one in, one out" 过滤器,它根据其 IsEnabled 属性 提供或不提供媒体样本。这使您可以按原样使用现有的 InfTee,并将您自己的阻塞过滤器的几个实例添加到其输出中,以实现数据切割逻辑。两种方法都有意义。