文档详情

文件系统驱动编程基础篇之6-DirectShow.doc

发布:2017-03-12约6.49千字共8页下载文档
文本预览下载声明
一、前略 /document/viewdoc/?id=1483) 阅读基础:少量的COM编程的基础知识,了解如何调用COM组件的方法,最好掌握哪怕一丁点的ATL。 本章目的:了解DirectX组件架构,学习编写简单的DirectShow程序。 二、DirectX与DirectShow ????首先看下面两段关于DirectX和DirectShow相关内容的摘要: ????Windows系统的架构下,我们不能如Dos般随心所欲的控制硬件,而希望游戏、影像开发人员对内核的理解都达到驱动编程人员的水平,是一件苛求的事情,但是为此将失去广大市场的关键问题必然要产生解决的办法,因此,DirectX或其他不同名的相同技术的出现是件必然的。 ????有些读者可能会对驱动编程的基础文章涉及DirectX的必要性有所疑问,确实,DirectX并不是学习驱动编程的一个障碍,笔者在初次的学习中也从未意识过要了解这方面的内容。但是换一个角度,如果你看到鸡窝里的五个鸡蛋,我们是不是很有理由猜测这是由五只母鸡组成的五好家庭?因此我们可很牵强的认为DirectX如同内核的外部据点,如果我们拔除了,必然有更大的把握向内核发动总攻。 ????笔者把DirectX加入本系列文章的另一个重要原因是——DirectX确实有值得炫耀的资本。对于编程人员来说,它的COM接口简直可用“优雅”来评价,当你用着如苦瓜般的IMarshal接口时,不妨来看看什么样的接口值得这样的评价。我挑选了DirectX里一个很有意思的部分——DirecShow来作为突破口,讲述如何“Direct”——直接的控制视频设备。 ????学习的进阶大略上可分为四个部分:学习调用组件、捕获和编辑影像、学习编写过滤器、掌握媒体格式的高阶部分。限于能力,只介绍前两个部分。读者不要满足于学会使用DirctShow,而是通过DirctShow的具体功能猜测系统驱动的功能,甚至设备的构成,减轻将来主攻驱动时的负担,此即由外而内的学习方法。 ????笔者将掠人之美,使用参考资料1提供的示例阐明编程的基本思路。三、DirectShow基础和GraphEdit ????在Windows系统中,DirectShow以COM组件的形式存在,下图描绘了DirectShow组件、硬件以及系统组件的关系(Leagcy为传统或遗留,旧的之意)。 ????现在我们只需了解DirectShow里包含了两大类型的对象:三类“Filter”(源、转换、渲染过滤器),以及由这些过滤器集组成提供特定功能的“Filter Graph”,这个Graph不妨看成是包含Filter的一个容器。 ????为了从可视化的角度理解DirectShow工作的方式,我们可使用SDK附带的GraphEdit工具。它最基本的功能是利用系统里已经安装的解码器,使用DirectShow组件来播放媒体文件,并直观的显示播放流程。下面演示一下如何播放一个媒体文件。 ????GraphEdit的界面如图: ? ????从菜单文件——渲染媒体文件…里选择你要播放的文件,这里我们选择一个微软支持的avi格式文件ff8-full-ending.avi,则界面上出现: ????每一个DirectShow组件都以矩形框表示,Input、Output针(pin)作为每个过滤器的输入或输出。通常情况下,源(左上角的ffi_full_ending.avi)、渲染过滤器(Video Renderer和Default DirectSound Device)是必须的,转换过滤器根据实际情况可选。从菜单图表——插入过滤器…可以看到所有可用的过滤器。 ????上图隐含了DirctShow的“智能选择”功能,即如果你提供了任何两个逻辑关联的渲染器(如MPC – Avi Splitter和Video Renderer),DirectShow会自动查找之间的可用组件,形成一个正常的播放流程。读者如果想真正掌握DirectShow,应该学会手工添加、连接合适的过滤器而不仅仅依赖于“智能选择”功能。 ????由图可知,avi文件被播放前,经过分离器的分离,形成视频和音频两个部分,它们再选择合适的解码器,最后分别送到系统默认的渲染过滤器上进行渲染,影像就显现于屏幕上了。 ????点一下界面上绿色三角的播放键,则可以欣赏我们的影片了。 ????这一切出乎意料的简单,这使我们不由产生了这么一个想法——DirctShow的初级应用也是非常简单的,事实正是如此。在进价的第一部分,我们学习如何通过调用组件,完成一个媒体文件的播放。 四、进价之一——组件的调用 ????本篇将要接触到下表组件的调用,详细的信息可参考Msdn上的说明,这些基础工作留给有心的读者来完成吧: IID CREATE CLSI
显示全部
相似文档