CSource筛选器出现问题

Issue with CSource filter

本文关键字:问题 筛选 CSource      更新时间:2023-10-16

我目前正在尝试实现我自己的源过滤器,以便解码作为输入的MOV文件。我一直在关注网络上和WinSDK7.1示例文件夹中的各种示例,最终我得到了以下内容:

  1. 实现CreateInstance的CSource子类

  2. CSourceStream子类实现了以下功能:

    • 决定缓冲区大小
    • GetMediaType
    • 通知
    • FillBuffer

请注意,我目前没有实现任何类型的寻求处理。

目前,我的过滤器可以通过graphstudio实例化,并公开1个视频输出引脚。我能够通过VMR7全程呈现它。

当我点击播放时,我的问题就来了。我的FillBuffer方法被调用一次,graphstudio无法报告source.cpp@line 317:assert(!ThreadExists())内的断言失败

有人能告诉我我在这里做错了什么吗?基本引脚的::Active()方法似乎有某种问题,但我不确定具体是什么。

如果需要,我很乐意提供更详细的源代码。

提前谢谢。

好的,所以我终于让它工作了。

如果有人遇到同样的问题,这来自CSource过滤器的pin注册。我使用AddPin方法注册我的pin。这以某种方式导致CSource内部状态失败。按照directshow示例中的操作直接访问m_paStreams数组解决了我的问题。

这个问题可能是由重写基类方法的方式引起的。

断言失败表明执行到达了根本不应该到达的位置,直到过滤器停止,然后再次启动。我想说,它应该返回更高的几行(第303行),但由于某种原因,它没有返回。IsActive的错误值并不表示方法本身是错误的,相反,它很可能是带有重写的东西。