当前位置: 代码迷 >> 多媒体/流媒体开发 >> 编写source filter的有关问题
  详细解决方案

编写source filter的有关问题

热度:2520   发布时间:2013-02-26 00:00:00.0
编写source filter的问题
我刚接触directshow不久,用ATL写了一个source filter,但是在graphedit中连接时总是弹出“未找到可用于建立连接的的介质筛选器组合”的对话框。

  为了找到原因我把上面写的那个source filter的代码一点一点的替换掉directx 例子中的Async的代码,
包括class factory和
DllMain  
DllGetClassObject  
DllCanUnloadNow  
DllRegisterServer  
DllUnregisterServer
这些函数的代码都换成我自己的了,但是问题就出来了,

  Async一直都可以连接上,而我原来的那个一直都连接不上,代码替换前后一直就是这样,具体表现就是,Async的IPin接口的Connect
方法会被调用,但是我原来那个的Connect方法就总是不被调用。

  有好心人遇到过这类情况吗?我现在真是没办法了,能替换的函数都替换了,基本都是我写的代码了。

------解决方案--------------------------------------------------------
注册只需要个GUID即可注册,还是编译器调试环境的问题,

相同的程序在VS2005或是VC6.0就有能运行,有的不能

就是SDK里面自带的例子,在你安装的路径下也许可以编译成功

但是你把它拷到其他地方再编译说不定就不行了

你说的那些函数都不是主要的,应该不是什么问题


------解决方案--------------------------------------------------------
我觉得可以这样调试:
1. 将你的代码加到async sample code中,看看整个过程的flow
2. 用你自己的code,将上面的flow经过的函数都设一下断点,看看具体是在哪里失败的。

------解决方案--------------------------------------------------------
“ Async一直都可以连接上,而我原来的那个一直都连接不上,代码替换前后一直就是这样,具体表现就是,Async的IPin接口的Connect
方法会被调用,但是我原来那个的Connect方法就总是不被调用。 ”

可以一级一级的查上去,看调用connect方法的函数有没有被调用,然后继续往上查。直到找到元凶。
------解决方案--------------------------------------------------------
刚开始不就看pull的Async啊,建议开始看ball那个例子,我觉得比较适合
------解决方案--------------------------------------------------------
给我感觉你声明filter的类型不正确。
可以查看一下AMOVIESETUP_MEDIATYPE,AMOVIESETUP_FILTER 相关结构
另外可以查看一下你的Outpin中的 CheckMediaType 是定义的格式范围过窄?
------解决方案--------------------------------------------------------
楼主的问题估计还是在自已写的IPin接口类及BaseFilter类上。
我用ATL建了一个小球的Filter实例运行还正常,基类用的还是DShow的。
感觉用ATL 写Filter最大的优势还是在写属性页上,用ATL建个属性页确实很方便。
  相关解决方案