directshow使用自己写的source filter遇到奇怪的问题,项目急需,高手请进!

ucasliming 2012-11-09 02:27:49
从设备中得到视频流然后保存成AVI文件,这个功能已经实现,测试没有问题。现在想在录制过程中,在视频流的每一帧中添加一个bmp图片文件,我在sdk的filter源代码中发现有一个叫PushSource的示例,实现的功能就是将bmp图片写到DIB流中,然后在fillbuffer中将图片流写到sample的相应位置上。我就想先用这个源过滤器试试(生成ax文件)。然后,我在自己的主程序中作如下的调用(链接文件等都没有问题,程序已经能跑通):

IBaseFilter* m_pBF=NULL;
hr = CoCreateInstance(CLSID_PushSourceBitmap, NULL,
CLSCTX_INPROC,
IID_IBaseFilter,
(LPVOID*)((IBaseFilter**)&m_pBF));
hr = AddDeviceFilter(m_DeviceID, m_pGB, &m_pBF);

AddDeviceFilter就是将设备绑定到源过滤器上,这个方法应该没什么问题。我在PushSource源代码中添加messagebox作为调试,发现filter和bin的初始化都没有问题,只是checkmediatype和fillbuffer等方法没有调用,我上网查阅资料,得知fillbuffer应该是一种回调机制,只要有sample,就可以不断的调用fillbuffer。虽然没有调用fillbuffer,录像还是能正常进行。也就是说这个过滤器走的是父类的fillbuffer。我这是用的sdk里的源代码,为什么会出现这种问题呢??难道我上面代码中初始化对象的方法有问题??请高手赐教!万分感谢,可以加分!
...全文
247 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ucasliming 2012-11-09
  • 打赏
  • 举报
回复
引用 3 楼 wwwllg 的回复:
你可能还没有真正联接上,当联接时才会触发检测格式及,设置BUFF的大小。
谢谢你的回复,我是新手,不知道这种情况下应该怎么调试,怎么才能找到问题所在呢?
UDX协议 2012-11-09
  • 打赏
  • 举报
回复
你可能还没有真正联接上,当联接时才会触发检测格式及,设置BUFF的大小。
ucasliming 2012-11-09
  • 打赏
  • 举报
回复
还有,它们之间的继承关系是这样的 CPushFilter:public CSource,而CSource:public CBaseFilter,CBaseFilter:public CUnknown,public IBaseFilter,public IAMovieSetup,而根据晚绑定的原理,不应该调用父类的fillbuffer啊??
ucasliming 2012-11-09
  • 打赏
  • 举报
回复
怎么没人回复呢 在线等啊

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧