为什么这个过滤器不起作用?

时间:2014-03-03 15:17:40

标签: c++ directshow

我正在使用CBaseFilter作为基类编写过滤器。 我试图让输入媒体样本转发到图中的outputp。

我创建了两个引脚类,一个用于输出,另一个用于输入。 我通过方法Receive将数据从输入引脚转发到输出引脚,然后使用Deliver转发它。 实际调用这些方法是因为每次调用这些方法时我都会写入日志文件条目。

但是当我在graphedt中使用过滤器时,结果是在停止图形之前没有数据写入文件。然后它总是将64KB的东西写入文件。

生成的avi文件当然无法播放。

这些64KB的数据是什么? 我是否必须定义除CBaseInputPin :: Receive和CBaseOutputpin :: deliver之外的其他方法以使数据流有效?

2 个答案:

答案 0 :(得分:1)

为什么使用CBaseFilter?对于具有输入和输出的过滤器,有一个directshow基类可用:CTransformFilter或者如果您只有一个输入和一个输出引脚CTransInPlaceFilter

还有一个DirectShow示例如何实现CTransformFilter,“EZRGB24 Filter Sample”。

我认为64Kb数据是Avi-Header,它是在您停止图表后编写的。

答案 1 :(得分:0)

如果您不了解图表的外观以及您尝试编写的数据类型,则无法回答您的问题。您可以使用GraphEditPlus查看图表中的数据,而无需写入文件。只需插入一些示例抓取器实例,然后在上下文菜单(右键单击)中为它们选择“观察抓取的样本”。

相关问题