我目前正在尝试实现自己的源过滤器,以便解码作为输入提供的MOV文件。 我一直在关注网络上和WinSDK 7.1示例文件夹中的各种示例,最后我得到了以下内容:
实现 CreateInstance
一个CSourceStream子类,它实现了以下功能:
请注意,我目前没有实施任何寻求处理。
目前我的过滤器可以通过graphstudio实例化,并公开1个视频输出引脚。我可以通过VMR7一直渲染它。
当我点击播放时,我的问题就来了。我的FillBuffer方法被调用一次,graphstudio无法报告source.cpp @ line 317中的断言失败: ASSERT(!ThreadExists())。
有谁能告诉我这里我做错了什么?看起来基本引脚的:: Active()方法存在某种问题,但我不确定究竟是什么。
如果需要,我很乐意提供更详细的源代码。
提前致谢。
答案 0 :(得分:1)
好的,所以我终于开始工作了。
如果有人遇到同样的问题,这来自CSource过滤器的引脚注册。 我正在使用AddPin方法注册我的pin。这在某种程度上导致CSource内部状态以某种方式失败。像directshow示例中那样直接访问m_paStreams数组解决了我的问题。
答案 1 :(得分:0)
问题可能是由于您覆盖基类方法的方式造成的。
断言失败表明执行到达了它根本不应该出现的地方,直到过滤器停止然后再次重新启动。我会说它应该返回更高的几行(第303行),但由于某种原因它没有。 IsActive
的错误值并不表示方法本身是错误的,而是可能是覆盖的东西。