WEB开发网
开发学院软件开发VC VC+DirectShow对视频进行图片处理之六 阅读

VC+DirectShow对视频进行图片处理之六

 2007-03-15 21:52:28 来源:WEB开发网   
核心提示: 第二点直接体现灵活性弱点,想想我需要在回调函数中干些什么,VC+DirectShow对视频进行图片处理之六(2),我需要调用函数设置D3D纹理吧,那我就要处理纹理在Filter还运作过程中发生参数改变或被释放的问题,并把处理后的数据作为摄像头数据传送下来!我惊呆了,好像要从摄像头的WDM

第二点直接体现灵活性弱点。想想我需要在回调函数中干些什么,我需要调用函数设置D3D纹理吧,那我就要处理纹理在Filter还运作过程中发生参数改变或被释放的问题,在播放过程中打开新文件或关闭程序都有可能发生这种情况。打开新文件时我们会先释放旧的Filter Graph再重建,释放并创建新的纹理会在启动播放后才进行,因为要得到视频参数,所以有可能Filter已经运作了而使用的纹理还是旧的,引起访问错误。DirectShow 的Filter Chain 有自己的线程,调用IMediaControl 的Stop 并不能让它一下子停下来,突然关闭程序就有可能使纹理释放比真正结束播放早,因为我们不会在回调函数中管理纹理而在D3D类中进行管理,关闭时纹理会随D3D类的释放而释放。

我刚解决问题的办法很稀奇古怪,也许任何一个大虾都反对,不过它工作的很好。定义一个BOOL变量,在打开文件时先把它设为FALSE,结束打开时再设为TRUE,并重载对话框的OnDestroy函数,在该函数中把BOOL变量设为FALSE,这样在回调函数开始处检查此变量,为FALSE时直接返回。后来发现把回调函数设为NULL也可,而且似乎更好。

3.与其他实用程序相比

其实微软为DirectShow新配备的VMR9可以无缝与D3D结合,更有很多强大的功能,绝非我写的Filter可比,不过我懒于学习使用它,自认为写Filter比学习它更容易。从VMR9可以自动提供纹理给D3D使用,我萌生一个想法:能不能在一个D3D中创建纹理给另一个D3D 使用呢?我要进行验证。

最近得到一个叫做“CamTrack”的软件,它很厉害,自带的人脸跟踪功能自不必说,它还能自动侦测到摄像头的使用,在比Filter更低的层级就接收并处理了数据,并把处理后的数据作为摄像头数据传送下来!我惊呆了,好像要从摄像头的WDM 驱动模型去找突破口,但完全没有头绪。

Tags:VC DirectShow 视频

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接