C++ 为什么这个过滤器不工作?

C++ 为什么这个过滤器不工作?,c++,directshow,C++,Directshow,我正在使用CBaseFilter作为基类编写一个过滤器。 我正在尝试将输入媒体样本转发到图形中的outputp 我创建了两个pin类,一个用于输出,一个用于输入。 我通过Receive方法将数据从输入引脚转发到输出引脚,然后使用Deliver进行转发。 这些方法实际上是被调用的,因为每次调用这些方法时,我都会编写日志文件条目 但是,当我在graphedt中使用过滤器时,结果是在停止图形之前,没有数据写入文件。然后它总是将64KB的内容写入文件 生成的avi文件当然不可播放 那么这些64KB的数据

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

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

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

生成的avi文件当然不可播放

那么这些64KB的数据是什么呢?
我是否必须定义CBaseInputPin::Receive和CBaseOutputpin::deliver以外的其他方法才能使数据流正常工作?

为什么要使用CBaseFilter?对于具有输入和输出的筛选器,有一个directshow基类可用:或者,如果您只有一个输入和一个输出引脚,则可以使用该基类

还有一个DirectShow示例,介绍如何实现CTransformFilter,即“”


我认为64Kb的数据是Avi头,它是在停止图形后写入的。

如果不知道图形的外观以及您试图写入的数据类型,就无法回答您的问题。您可以使用GraphEdit Plus查看图形中的数据流,而无需写入文件。只需插入一些示例抓取器实例,并在关联菜单(右键单击)中为它们选择“监视抓取的示例”。

我使用CBaseFilter,因为我的最终过滤器至少有3个输入管脚