DirectShow

DirectShow的一些思考
 
DirectX?DirectShow?
 
DirectX是由微软公司推出的一种用途广泛的API,从推出至今,已经出现了DirectX 11,DirectX它包含有Direct Graphics(Direct 3D+Direct Draw)、Direct Input、Direct Play、Direct Sound、Direct Show、Direct Setup、Direct Media Objects等多个组件,它提供了一整套的多媒体接口方案。只是其在3D图形方面的优秀表现,让它的其它方面显得暗淡无光。DirectX开发之初是为了弥补Windows 3.1系统对图形、声音处理能力的不足,而今已发展成为对整个多媒体系统的各个方面都有决定性影响的接口。
Directshow是属于DirectX中的一种,DirectShow是微软公司在ActiveMovie和Video for Windows的基础上推出的新一代基于COM(Component Object Model)的流媒体处理的开发包,与DirectX开发包一起发布。目前,DirectX最新版本为11。DirectShow为多媒体流的捕捉和回放提供了强有力的支持。运用DirectShow,我们可以很方便地从支持WDM驱动模型的采集卡上捕获数据,并且进行相应的后期处理乃至存储到文件中。这样使在多媒体数据库管理系统(MDBMS)中多媒体数据的存取变得更加方便。
 
上面是网络上对两者的概念介绍 ,看以上的描述,很容易产生一个观念,即DirectShow是DirectX的一个分支,实际上DirectShow是由DirectX 6.0中DirectMedia发展而来的,随着架构的日趋成熟,DirectShow也日渐庞大,到了2004年,微软把DirectShow从DirectX中分离出来,打包进windows SDK中。 现在最新的DirectX2010 SDK中并没有DirectShow,要使用DirectShow 的SDK,得安装Windows SDK。
 
DirectShow的功能
  1. 高效处理多媒体数据;
  2. 让音频视频同步;
  3. 用简单的方法处理复杂的媒体源(本地文件、计算机网络、广播电视以及其他的一些数码产品);
  4. 统一处理各种媒体格式(AVI、ASF、MPEG、DV、MOV等);
  5. 支持目标系统中不可预知的硬件(自己实现filter)。
DirectShow设计的初衷就是让应用开发程序员从复杂的数据传输、硬件差异、同步性等工作中解脱出来,总体应用框架和底层工作由DirectShow完成,理论上来说,这样开发多媒体的应用程序会变得简单!
 
DirectShow架构:
DirectShow_第1张图片
上图是DirectShow系统图,通过上面的图我们可以假设一下没有DirectShow的话,我们开发一个多媒体处理程序要干些什么:
我们是用摄像机采集图像,并把采集的图像传入到PC,再在PC中显示出来。
摄像机Driver(基于CVBS)<=> In 接口 <=> 操作系统得到数据 <=> 格式化数据 <=> 送入到显卡 <=> 处理后输出显示设备
用DirectShow的步骤:
摄像机<=>DirectShow <=> 显示设备
实际上DirectShow应该是把很多的硬件的驱动的 ioctl 封装在一起了?
这个无疑是降低了应用开发的难度,这样做也有个好处,统一了各个硬件,不管用什么硬件,要想在windows上运行,硬件驱动就必须按照DirectShow框架来写,这样无疑也绑定了很多硬件厂商。
 
DirectShow缺点?
接触下来,DirectShow给人的感觉却不太亲民,SDK太过庞大,或者叫冗余。里面的SDK很多看起来都是一副高高在上的样子,大量的filter、使用之前的步骤繁多的初始化工作,还有数据输出的Config操作,以及必须的一些COM组件知识,还要懂一些设计模式方面的知识这些都让初学者有种使用简单,但是完全搞懂一点都不简单的感觉,也许设计者的初衷并不是让你研究它的实现细节,只是让你快速的上手使用而已。

你可能感兴趣的:(图像处理)