CSource过滤器问题

时间:2014-09-13 08:42:58

标签: c++ directshow

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

  1. 实现 CreateInstance

  2. 的CSource子类
  3. 一个CSourceStream子类,它实现了以下功能:

    • DecideBufferSize
    • GetMediaType
    • 通知
    • FillBuffer
  4. 请注意,我目前没有实施任何寻求处理。

    目前我的过滤器可以通过graphstudio实例化,并公开1个视频输出引脚。我可以通过VMR7一直渲染它。

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

    有谁能告诉我这里我做错了什么?看起来基本引脚的:: Active()方法存在某种问题,但我不确定究竟是什么。

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

    提前致谢。

2 个答案:

答案 0 :(得分:1)

好的,所以我终于开始工作了。

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

答案 1 :(得分:0)

问题可能是由于您覆盖基类方法的方式造成的。

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