从设备中得到视频流然后保存成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里的源代码,为什么会出现这种问题呢??难道我上面代码中初始化对象的方法有问题??请高手赐教!万分感谢,可以加分!