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

ucasliming team_terminal 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里的源代码,为什么会出现这种问题呢??难道我上面代码中初始化对象的方法有问题??请高手赐教!万分感谢,可以加分!
...全文
184 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
怎么没人回复呢 在线等啊
回复
相关推荐
发帖
ATL
创建于2007-09-28

3218

社区成员

ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
申请成为版主
帖子事件
创建了帖子
2012-11-09 02:27
社区公告
暂无公告