




已阅读5页,还剩51页未读, 继续免费阅读
(通信与信息系统专业论文)基于directshow技术的多路立体视频实时显示研究.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要 随着科学技术的发展,人们对视觉的要求不断深化,传统的媒体已不能满 足需求,立体视频的研究应运而生。作为新兴的数字媒体,立体视频被称为自音 频、图像、视频之后的第四代媒体形式。相对于传统媒体,其突出优势在于给人 身临其境的感觉,具有很强的视觉冲击力,能为观众创造更加直观真实的场景感 受。立体视频按视点个数可分为双视点视频和多视点视频。多视点立体视频的数 据量很大,如何实时高效地处理这些数据并为合成显示作准备是立体视频研究中 必须面对的问题。 d n c t x 是微软公司提供的一套基于w 证d o w s 平台的编程接口,它能高效地 完成实时动画渲染、交互式音乐和环境音效、多媒体数据处理等一般a p i 很难完 成的任务。作为d i r e c t x 家族的一员,d h c t s h o w 正是为了适应多媒体面临的新 挑战而设计的开发工具,它的优势在于不仅能够处理复杂的多媒体流数据格式和 巨大的数据量,更重要的是运用它可以不必考虑抽象的底层工作和总体应用框 架,不必过多考虑复杂的数据传输同步问题,使程序开发人员解放出来,使开发 多媒体应用程序变得轻松快捷。 本文以d i r e c t s h o w 技术为基础,开发了源过滤器和变换过滤器,分别实现了 从硬盘读取文件和从网络接收八路视频并经一系列处理后合成显示。进行的处理 包括格式转换、图像缩放和拼接等。庞大的数据量使得实时性成为设计的重点。 因此为尽可能地提高代码的执行效率,本文对代码进行了优化,大大减少了处理 时间。经过调试,运行结果流畅、清晰,基本达到了预期效果。 关键词:立体视频 d i i e c t s h o w多路视频代码优化 a b s t r a c t w 池t 1 1 e d e v e l o p m e n to fs c i 胁c e锄dt e c h n 0 1 0 9 y ,p e o p l ed e m 锄dv i 叭a l d e 印e n i n g 锄dt h e 仃a d i t i o n a lm e d i ac a nn o tm e e tt h en e e d s s os t e r e o s c o p i cv i d e 0 锄e r g e d a san e w d i g i t a lm e d i a ,m r c e - d i m 吼s i o n a l v i d e oi sc a l l e d也e f o u n l l 唱e r a t i o nm e d i af 1 0 加1 a t a r e r 也ea u d i o ,i m a g e ,v i d c 0 c o m p 躺dw i 也 仃a d i t i o n a lm e d i a ,血ea d v a n t a g eo fs t e r v i d c 0i sg i v i n g 岫e r s i v e f 的l ,w i m s t r o n gv i 叭a li m p t ,锄dc r e a t j h gm o r ei n t u i t i v ef o rt l l e 肌d i e n c ee x p e r i e n c et 1 1 er e a l s c e a 心c o r d i n gt o 也e 删m b e ro fs t e 啪v i d c 0v i e w i tc 锄b ed i v i d c di n t ot 、7 i r o 一髓d m u l t i - p e r s p e c t i v ev i e w p o i l l t b e c a u s eo fg r e a t 锄o m l to fd a t a ,h o wt 0e f r e c 缸v e l yd e a l w i mr e a l - t i m ed a 脑i np r 印盯a t i o nf o rt 1 1 es y n t l l e s i sa n dp r e s 锄t a t i o na r et 1 1 ep r o b l e m s w l l i c hm u s tb ef a c e d m i c r o s o f id c t ) ( ,aw i i l d o w s - b 嬲酣p l a t f 0 mp r o v i d i n gp r o 舒a 伽n i n gi n t e r f a c e , c 姐 e m c i c n t l yc o m p l e t er c a l - t i m e 纽血撕o n 崩1 d e 血g , i n t e r a c t i v em u s i c嬲d e n v i r 0 姗e n ts o m l de f f 托t s ,m u l t i m e d i ad a t ap r o c e s s i n g 锄do 也c rg e n 锨la p ii s d i m c u l tt 0 c o m p l i s h a sam e m b e ro ft l l ef 锄i l yd 打c c t x ,d i r e c t s h o wi st h em e d i a i i lo r d e rt 0m e e t 也en e wc h a l l g e sf a c i l l gt l l ed e s i g no fd e v e l o p m 锄t o o l s ,i t s a d v 锄t a g ei s n o tl i m i t 酣t 0d 髓l i n gw i 也c o m p l 懿d a t af b 彻a t s 硒rm u l d m e d i a 妣a i n i n g 锄dl a 玛e 锄o u n t so fd a t a m o r ei m p o n 锄t l y u s i n gi tw ec o n s i d e r e dn e i t h e r 也eb o t t o mo f 也ea _ b s 仇i c tw o r k a n dt h eo v e m l la p p l i c a l t i o n 董 a m e w o f kn o rt o om u c h d b o u tc 0 m p l e xd a t as y n c h r 0 1 1 i z a t i o np r o b l e m s d e v e l o p i l l gm u l t i m e d i aa p p l i c a t i o 璐 b e c o m e s q u i c k 锄de a s y 丘e e i n gd e v e l o p e 璐 b 勰e do nd i r e c t s h o w 慨h n o l o g y ,d e v e l o p i n gm es o u r c ef i n e ra n d 仃a n s f 0 眦 f i l t e 娼w e 陀r e a l i z e d 丘d mt h eh 踟d “v et 0r e a df i l e sa n de i g h t w a yv i d e or e c e i v e d 丘d mt t l en e t w o r k 觚dp r o c e s s e db yas 耐e so fs y n t l l e t i c 锄dd i s p l a y t h ep r o c e s s i l l gi s f 0 珊a tc o n v e r s i o n ,i m a g e a l i n g 锄db l e n d i l l gs o l a r g e 锄o u mo fd a t am a k e s r e a l t i m eb e c o m et h ef b c u so ft h ed e s i g n s o 嬲m u c h 嬲p o s s i b l et 0i m p r 0 v et h e e m c i c yo fc o d e ,t l l i s d ei so p t 妇i z e d ,g r e a t l yr e d u c i i l gt h ep r o c e s s i n gt i m e a r e r d e b u g g i l l g ,t h er e s u l t ss m o o t l l ,c l e a r r e a c h e sn l ed e s i r e de f i e c t k e yw o r d s : s t e r e o s c o p i cv i d e o ,d i r e c t s h o w ,m u l t i - w a yv i d e 0 ,c o d eo p t i n l i z a t i o n 第一章绪论 第一章绪论 众所周知,现实世界是真正的三维立体世界,而人们日常生活中所看到的视 频、图像等都还只是二维的,现有的显示设备绝大多数也都只能显示二维信息, 并不能给人以深度感觉。为了使显示的场景和物体具有深度感觉,人们在各方面 进行了尝试。立体显示技术的研究经历了十几年的发展,取得了十分丰硕的成果。 随着技术的发展和人们对视觉要求的不断深化,传统的媒体己不能满足需求,立 体显示必将成为未来的发展趋势。 1 1 立体成像原理概述 现实中,我们看到的景物是立体的,是因为我们的双眼相距6 7 厘米( 平均 值为6 5 毫米) ,双眼分别从不同角度观察到两个稍有差别的图像,这两幅有视差 的图像经大脑综合处理后产生精确的三维物体感知以及该物体在场景中的定位, 这就是具有深度的立体剧1 1 。所以立体成像系统的工作就是对每个场景至少产生 两幅图像,一幅代表左眼所看到的图像,另一幅代表右眼所看到的图像。 立体图像就是利用人们双眼视觉差别和光学折射原理使人们可以在一个平 面内直接看到一幅三维立体图,画中景物既可以凸出于画面之外,也可以深藏于 画面之后【2 】。我们平常见到的平面图,由于进入眼睛的是一幅角度完全相同的图 像,所以视觉和大脑无法提取画面上物体真实意义上的空间立体感,不能体现其 三维关系。立体影像与平面图像有着本质的区别,平面图像反映了物体上下、左 右二维关系,人们看到的平面图也有立体感,这主要是运用光影、虚实、明暗对 比来体现的,而真正的立体画是模拟人眼看世界的原理,利用光学折射制作出来, 它可以使眼睛感观上看到物体的上下、左右、前后三维关系。 要想制作出一幅完美的立体图,可以用多镜头相机或单镜头相机加滑轨依 次拍照出近似的多幅图象,再进行图像合成冲印和光栅处理,冲印装裱即成。这 种方法制作工艺复杂,制作的图片价格昂贵,因此不易推广。也可以采用先进的 数码合成技术制作立体图像,只需选择清晰的照片或底片将其扫描到电脑里,直 接在电脑里利用专业的制图软件进行配图和数字处理,用高精度彩喷机打印出 来,再用冷裱机装裱即可【3 】。 立体显示技术就是根据人眼的立体视觉原理,利用一定的技术或设备,使 左眼只看到左视图。右眼只看到右视图,从而使人观看到立体景物【4 】。根据在观 看时是否需要使用辅助视具,立体显示技术可分为戴眼镜立体显示和不戴眼镜立 第一章绪论 体显示。其中,戴眼镜立体显示方式包括立体眼镜和立体头盔显示器,不戴眼镜 立体显示方式包括双视点立体显示方式和多视点立体显示方式。而不戴眼镜的立 体显示方式又称自由立体显示方式。 1 2 课题的研究背景 作为新兴的数字媒体,立体视频被称为自音频、图像、视频之后的第四代媒 体形式。相对于传统媒体,其突出优势在于给人呼之欲出、身临其境的感觉,具 有很强的视觉冲击力,能为观众创造更加直观真实的场景感受,提供更多样化全 方位的媒体交互能力p 】。立体视频根据其原始视频源的多少可以分为双视点立体 视频和多视点立体视频。多视点立体视频由于图像信息多、立体感更强、更真实, 越来越受到青睐。 美国、欧洲、日本、韩国等主要发达国家对立体显示技术十分重视,投入了 大量的物力、财力与人力资源,开始了立体视频的产业化推进工作,其中尤以日 本和韩国最为积极。日本主要以扩大相关产品的市场规模为主。韩国则由政府出 面筹组了产学研研发联盟积极运作。欧美的研发主要以中、大面积为主,同时兼 顾长远性的全像式技术研究。各国正把立体视频产业作为未来视听产业发展的重 点【6 】。 近几年来,国内立体视频技术日渐得到关注,技术创新有所突破,但整体来 看,技术创新和产业仍处于起步阶段,研发和产业化基础比较薄弱,在技术和产 品研发上与其他国家仍有较大差距。 总结现有的立体视频传输系统,存在着以下不足:( 1 ) 视频质量差。目前的 立体视频传输系统,或者是基于静态图像的传输,或者是基于双路视频源的传输。 后者的视频质量受限于网络条件,普遍的只能达到3 5 2 2 8 8 。而d v ( 7 2 0 4 8 0 ) 和h d v ( 1 0 2 4 7 6 8 或更高) 视频质量的立体视频传输系统没有得到广泛的开发和 应用。( 2 ) 缺少在广域网上大规模运行的能力。目前的立体视频传输系统,多 应用于点到点的特定应用,如远程医疗、机器人遥感控制。从应用网络条件看, 多数处在只能在局域网内运行的原型系统阶段;缺少一套能够利用高性能网络的 条件,在广域网上运行的立体视频传输系统【_ 7 1 。 1 3 课题研究的可行性分析 首先是理论基础。本课题所在的项目组成员已经做了大量关于立体视频理论 的研究,包括立体视频的采集、压缩、传输及合成等,并且已经实现了一部分功 能,为本课题的开展打下了基础。 第一章绪论 其次是有优秀的开发工具。微软公司提供d h c t s h o w 技术是专门针对流媒 体处理而开发的,它能高效完成多种格式的视频、音频、图像数据的采集、回放 等。运用d i 删s h o w 技术,开发人员不用考虑底层的硬件和复杂的数据传输, 能很大程度地简化开发过程。 再次是有标准的立体视频源。实验室不仅有标准的立体视频文件源,而且搭 建有专门的采集设备能实时获取多路立体视频源。采集的视频源可以存储成文 件,也可以直接送给后端进行合成显示。 最后是立体显示设备。实验室提供有专用的立体显示设备,能直观地看到合 成后的立体效果,便于检查错误、分析并改正。在当下还没有一个通用的针对立 体图像的评价标准的情况下,立体显示设备对于开发人员是必需的。 1 4 本文的主要工作和结构 本项目框图如图1 1 所示。 圈日 e 蛩 图1 1 项目框图 本文解决的是其中格式匹配环节,设计了读取八路文件源和实时源的 模块,为合成显示作准备,完成的主要工作有: v c 下d i r e c t s h o w 编程环境的设置和调试 完成了读取八路y u v 视频文件并合成显示的源过滤器设计 完成了接收八路y u v 实时视频并合成显示的传输过滤器设计 对过滤器代码进行了优化 3 第一章绪论 本文的结构: 第一章绪论。简要介绍了立体成像原理,阐述了课题的研究背景、研究目的和 任务,分析了研究条件和可行性。 第二章d h c t s h o w 概述。简单介绍了d n c t s h o w 系统的框架,详细介绍了 d i r e c t s h o w 最重要的功能模块一过滤器,包括引脚、数据传输、工作 模式、媒体类型等。分析了d h c t s h o ws d k 的基类和过滤器设计过程。 第三章源过滤器的设计。配置了d c t s h o w 开发环境,详细叙述了源过滤器的 框架函数和功能函数的实现,给出了调试结果。 第四章传输过滤器设计。叙述了传输过滤器的设计过程,包括框架函数的实现 及设计难点分析。 第五章过滤器优化。对过滤器功能函数的实现做了进一步优化,提高了执行效 率,提高了播放帧率和过滤器的稳定性。 第六章结束语。对本文做了全面总结,并指出不足。 4 第二章d c t s h o w 概述 第二章d i r e c t s h o w 概述 随着信息技术的发展,多媒体技术迎来新的挑战:多媒体流的数据量巨大, 实时性要求高:流的来源多种多样,包括本地计算机存储的文件、i n t e m e t 网络、 摄像头、视频采集卡和电视广播网等;流的格式繁多,包括a 、a s f 、m p e g 、 d v 等。所有这些使得流媒体的处理变得更加复杂、困难。d i r e c t x 就是在这种 环境下应运而生的。 作为d 硫c t ) ( 家族的一员,d 抵t s h o w 正是为了适应多媒体面临的新挑战而 设计的开发工具,它的优势在于不仅能够处理复杂的多媒体流数据格式和巨大 的数据量,更重要的是运用它可以不必考虑抽象的底层工作和总体应用框架,不 必考虑不同终端设备和硬件差异,不必过多考虑复杂的数据传输同步问题,使程 序开发人员解放出来,使开发多媒体应用程序变得轻松快捷。 2 1d i r e c t s h o w 简介 d 抵是微软公司提供的一套基于w 协d o w s 平台的编程接口( a p i ) ,它能 高效地完成实时动画渲染、交互式音乐和环境音效、多媒体数据处理等一般a p i 很难完成的任务。d 慨t x 大家族包含的成员很多,而且都有各自出众的本领, 如d i i 优t d 豫w 和d i i 优t 3 d 分别负责二维图形图像和三维动画加速、d i r c c t m u s i c 和d n c t s o 岫d 负责交互式音乐和环境音效处理等。作为d 掀家族的一员, d i r e c :t s h o w 为w i l l d o w s 平台上处理各种格式的媒体文件播放、音视频采集等高 性能要求的多媒体应用,提供了完整的解决方案【引。 d i r e c t s h o w 是一个开放性的应用框架,也是一套基于c o m 的编程接口。它 的系统功能框图参见图2 1 。 5 第二章d h c t s h o w 概述 图2 一ld 哦t s h o w 系统框图 可以看到,图中最大的一块即是d i 删s h o w 系统,以虚线为界,以下是r j n g 0 特权级别的硬件设备,以上是弛g3 特权级别的应用层。d i 删s h o w 系统位于 应用层中,完成数据处理的各功能模块叫做过滤器( f i l t c r ) ,各个过滤器按一 定顺序连接在一起组成过滤器图表( f i l t e rg 瑚【p h ) ,由过滤器图表管理器( f i l t e r g r a p hm 锄a g e r ) 统一控制。d i c t s h o w 的基本工作原理就是在过滤器图表管理 器控制下,数据在过滤器图表中像“流水线”一样依次通过各个过滤器,完成数 据流的处理过程。 d i r e c t s h o w 在处理多媒体流方面的优势非常明显。首先,应用范围非常广泛, 计算机应用领域中的很多模块都可以和d 掀t s h o w 系统交互。单纯从本地系统 来说,d i r c c t s h o w 可以实现不同格式的媒体文件的解码播放、或格式之间的相互 转换,可以从本地机器中的采集设备采集音视频数据并保存为文件,可以接收、 观看模拟电视等。而从网络应用的角度来说,d i r e c t s h o w 更可用于视频点播、视 频会议、视频监控等领埘9 1 。其次,d i r e c t s h o w 系统适合于一切流式数据的处理, 这些数据可以是音频、视频这样的多媒体数据,但又不局限于多媒体数据。再次, 建立在d n c t d r a w 和d i r o c t s o u n d 的基础之上的d c t s h o w 技术可以通过 d i r 。c t d r a w 对显卡进行控制以显示视频,通过d i c t s o u n d 对声卡进行控制以播 放声音。为了最大限度提高效率而允许用户直接访问硬件,允许用户直接读写显 存,同样具有实时、快速的优势【1 0 1 。 6 第二章d c t s h o w 概述 2 2 过滤器 作为d i r e c t s h o w 最基本的概念,过滤器是d i r e c t s h o w 中最:重要的单元。过 滤器是完成一定功能的模块,它的相关特征有过滤器所属的类型、媒体类型 ( m e d i a 聊e ) 、引脚( p i n ) 、工作模式( m o d e l ) 、所处状态( s t a t e ) 等。 2 2 1 过滤器的类型 按照引脚数量和种类,过滤器可以大致分为三种类型【l l 】: ( 1 ) 源过滤器( s o u r c ef i l t 盯) 源过滤器没有输入引脚,只有输出引脚。它负责把要处理的数据载入到过滤 器图表中,经简单处理后把数据往下传输。数据的来源可以是文件、采集卡、网 络、数字摄像机等。 ( 2 ) 变换过滤器( t r 趾s f o n nf i l t c r ) 变换过滤器既有输入引脚,也有输出引脚。它负责对来自上流过滤器的数据 进行一些处理,如格式转换、数据流分离或合成、解码或编码、压缩或解压缩等, 再把数据继续往下传输。 - 按照实现的功能不同,变换过滤器还可以分为分割过滤器( s p l i t t 盱f i l t e r ) 和混合过滤器( m u xf i l t e r ) 。分割过滤器的功能是把输入流分割成多个输出。 例如把a 格式的字节流分割成视频流和音频流的a 过滤器就是分割过滤器; 混合过滤器实现的是把多个输入流组合成一个单独的输出数据流。例如把视频流 和音频流组合成一个a v i 格式字节流的a v i 混合过滤器就是混合过滤器。 ( 3 ) 渲染过滤器( r 朗d e 血gf i l t e r ) 渲染过滤器( 或称提交过滤器) 只有输入引脚,没有输出引脚。它负责数据 的最终去向,它位于过滤器图表中的最后一级,它接收数据并把数据送给显卡、 声卡等进行多媒体演示,或者送到网卡经网络发送出去,或者输出到文件进行存 储等。 图2 2 是三种基本过滤器的示意图。 图2 2 过滤器类型示意图 过滤器是一种c o m 组件,使用前必须注册,注册程序为心g s w 3 2 e x e 【1 2 】。 7 j 第二章d 打c c t s h o w 概述 假如过滤器路径为d :f i l t e r g f i l t e r e x 锄p l e 默,则其注册方法为命令行状态下, 执行r e g s v r 3 2d :f i l t e r s f i l t e r e x 锄p l e a x 。 2 2 2 媒体类型 过滤器是处理一定格式数据的单元,使用媒体类型来描述数据格式。媒体类 型是一种很普遍的,可以扩展的用来描述数字媒体格式的方法,当两个过滤器连 接的时候,他们会就采用某一种媒体类型达成一致的协议。媒体类型定义了处于 上游的过滤器将要给下游的过滤器发送什么样的数据。如果两个过滤器不能够支 持同一种的媒体类型,那么他们就没法连接起来。 d i i c c t s h o w 定义了一个媒体类型的数据结构a mm e d i at y p e : t ) ,p e d e fs 仇l c t m c d i a l 卯e g u 玎) m 匈o r t y p e ; g u i d 鲫b t y p e ; b o o lb f 政e d s 娩e s a m p l e s ; b o o lb t e m p o m l c o m p r e s s i o n ; u l o n g l s 锄p l e s 讥; g u i df 0 咖a t t y p e ; 砌i l i m o w n p u n k ; u l o n gc b f o m l a t ; b y t e p b f o m i a t ; ) a m m e d 认j y p e ; 各成员变量作用为: m a j o n y p e ( 主类型) 是一个g u d ,用来定性描述媒体类型,其常见取值为 m e d 队v i d e 0 ( 视频) 、砸d 队a u d i o ( 音频) 、m e d 队t c x t ( 文本) 、 m e d 队i n t 刚e a v e d ( 数码摄像机输入的d v 数据类型) 、m e d ns 仃e a m ( 字节 流) 等。 s u b t y p e ( 辅助说明类型) 也是一个g u i d ,用来进一步指明具体是哪种格式。 如m 句。哟,p e 取m e d i a _ d e 0 时,蚍b t ) ,p e 可以取m e d i a s u b t y p e j 己g b 2 4 ( r g b 2 4 ) 、 m e d i a s u b t y p e j r v l 2( w 1 2 ) 、m e d 认s u b t y p e j m ( i7 y v y )等。 m a j o r 帅e取m e d i u u d i o 时, s u b t y p e 可以取 m e d i a s u b t y p e 、7 l 酗帆( w :l d i :v e ) 、m e d i a s u b t y | p i w p e g 1a u d i o ( m p e gl 音频数据) 等。 b f i x e d s i z e s a m p l e s ,缓冲区大小是否固定的标识,当这个值为t r u e 时,表 示s a m p l e 大小固定。 b t e m p o r a l c o m p r c s s i o n 当这个值为t r u e 时,表示s 锄p l e 采用了临时压缩 8 第二章d 的c t s h o w 概述 格式,表明不是所有的帧都是关键帧,如果为f a l s e ,表明所有的都是关键帧。 l s 锄p l e s i z e 表示s 锄p l e 的大小。对于压缩的数据,这个值可能为零。 p u n l 【,指向接口类i u l l l ( 1 1 0 w n 的指针。 c b f o 眦a t ,内存块的大小。 p b f o 册a t ,指向内存块的指针。 f o m a t t y p e 是一个g u i d 值,进一步描述格式的细节,取值包括 f o r m a = rn o n e ,f o r m a = rd v i n f o ( 描述d v 数据) 、f o 砌儿虹m p e g d e o ( 描 述m p e g l数据) 、f o r m a tm p e g 2 v i d e 0 ( 描述m p e g 2 数据) 、 f o 砌儿盯v i d e o i l l f 0 ( 描述一般视频数据) 、f o r m a = rv i d e o i n f 0 2 ( 描述扩展的 视频数据) 、f o 眦w 打e f o m a t e x ( 描述音频数据) 。每一种取值都有相应的 数据结构来定义格式细节,如f o r m a t d e 0 i n f 0 使用v i d e o i n f o h e a d e r 数据结构来设置图像的大小、帧率、采样频率等。 为方便使用,d n c t s h o w 提供了另外一个c + + 类c m e d i a 聊e 来操作媒 体类型。该类从a mm e d 认t y p e 数据结构派生而来,并增加了一些有用的接 口。 2 2 3 引脚 过滤器只是单个的功能单元,需要通过引脚( p i n ) 连接起来形成数据传输 的链路。过滤器一般有个或多个引脚组成,引脚是一种c o m 组件,每一个引 脚都是从i p i n 这个c o m 对象派生出来的。每个引脚都是过滤器的私有对象, 过滤器可以动态地创建引脚,撤销引脚,自由地控制引脚的生存时间。引脚分为 输入引脚和输出引脚,两个相连的引脚必须是不同种类的,就是输入引脚只能同 输出引脚相连。数据就从相连的引脚中流动,从上一级过滤器到下一级过滤器。 引脚之间传递数据的内存叫做s a m p l e ,也是一个c o m 组件。两个过滤器的引脚 相连的时候,有一个协商的过程,两者必须统一数据流的类型、缓存的大小、数 据传送的机制等。如果协商没有统一,这两个过滤器就无法连接。 过滤器的连接过程可用图2 3 表示: 9 第二章d i r c c t s h o w 概述 图2 3 引脚连接过程 输人p i n k i c “、c ( i i n n - c f “n 连接一般必须在过滤器的停止状态下进行,连接时需要进行媒体类型的检 查,采用一种双方都接受的媒体类型。连接时首先在上一级过滤器的输出引脚调 用i p i n :c o i l n e c t 函数,该函数的参数是下一级过滤器的输入p i l l 指针和指定的连 接所用的媒体类型。它通过a t t 锄p t c o i l i l e c t i o n 函数进行试连接。 a n e m p t c o i l n e c t i o n 函数调用c h e c k c o 皿e c t 函数进行连接检查,如果失败, 调用b r c a l c c o n n e c t ,成功则继续调用c h e c k m e d i a l e 函数进行媒体类型检查。 如成功则表明输入引脚接受了这次连接,然后调用输入引脚上的 r e c e i v e c o 皿e c t i o n 函数进行接口、媒体类型等的检查,成功则说明本次连接成功, 最后调用输出引脚上的c o m p l e t e c o 衄e c t 函数确定s a m p l e 的内存大小、数量等, 至此整个引脚的连接过程才算真正完成。 2 2 4 过滤器的两种数据传送模式 数据在过滤器之间的流动是以s a m p l e 的形式进行的,s a m p l e 是一段被封装 好的数据内存,其内部传送数据的格式、大小等是在双方过滤器连接时分配的。 根据数据源的不同,过滤器的数据传送可分为两种模式:推模式( p u s hm o d e l ) 和拉模式( p u l lm o d e l ) 【l3 l 。一般情况下,数据源足实时源时,过滤器工作在推 模式;数据源是文件源时,过滤器工作在拉模式。 实时源是指数据是由源实时产生的。数据可以是采集卡、摄像头等采集得到 的,也可以南计算机模拟得到。推模式是d i r e c t s h o w 最常见的一种数据传送方 1 0 第二章d 讹c t s h o w 概述 式,它使用专门的线程将数据传送出去。推模式源过滤器的下一级过滤器的输入 引脚上实现了i m e m i n p u t p i n 接口,传送时由源过滤器调用下一级过滤器的输入 引脚的接口方法i m e m i n p u t p i n :r c c e i v e ,将s 锄印l e 传给下一级过滤器。 文件源的数据是固定的,传送时由下一级过滤器来“拉”数据。拉模式源过 滤器的输出引脚上实现了队s y n c r e a d e r 接口,下级过滤器不断调用该接口取得 数据。实际上,如果把拉模式的源过滤器和它下一级的过滤器合在一起看作一个 新的源过滤器,那么这个“源过滤器”就相当于一个推模式的过滤器了。 2 3 过滤器图表 在d i 删s h o w 中,过滤器只是实现单一功能的模块,它必须与其他过滤器连 接起来才能组成一条完整的数据链路【1 4 】。过滤器通过引脚相互连接起来,数据通 过引脚从一个过滤器传递到另一个过滤器中,从而使数据在链路中流动。这样的 一个播放链路就称为过滤器图表。过滤器图表中的各过滤器各司其职、相互联系。 如图2 - 4 所示就是一个过滤器图表,它的功能是播放那个一个a 的视频文 件。各过滤器功能是:源过滤器从一个文件读取数据,形成字节流:a v is p l i t t e r 检查a 数据流的头格式,然后将视频流和音频流分开;a v id c c o m p r e s s o r 解码 视频流,根据压缩格式的不同,选取不同的译码过滤器;v i d c 0r 锄d 部c r 重画视 频图像,送到显示器进行显示;d i i i c c t s o u n dd e v i c cf i l t e r 将音频流送到声卡进行 播放。 图2 _ 4a 视频播放链路 过滤器具有三个状态,运行,停止,暂停。当一个过滤器运行时,它就处理 媒体数据流,当停止时,过滤器就不再处理数据,暂停状态常用来给运行状态之 前准备数据。绝大多数情况下,过滤器图表中的所有过滤器的状态的改变都是统 一的,也就说,过滤器图表中的所有的过滤器的状态改变是一致协调的。也就是 说,我们也可以认为过滤器图表有运行,停止,暂停三种状态。 过滤器图表由过滤器图表管理器来控制。过滤器图表管理器也是一个c o m 匝器田黼 日 日 第二章d c t s h o w 概述 对象,用来控制过滤器图表中的所有的过滤器,主要有以下的功能【1 5 】: ( a ) 用来协调过滤器之间的状态改变,从而使过滤器图表中的所有的过滤 器的状态的改变应该一致。 状态改变时,应用程序并不将状态改变的命令直接发给过滤器,而是将相应 的状态改变的命令发送给过滤器图表管理器,由管理器将命令分发给过滤器图表 中每一个过滤器。s e e l ( i n g 也是同样的方式工作,首先由应用程序将s e e k 命令发 送到过滤器管理器,然后由其分发给每个过滤器。 ( b ) 建立一个参考时钟。 过滤器图表中的过滤器都采用的同一个时钟,称为参考时钟( r e 向c e c l o c k ) ,参考时钟可以确保所有的数据流同步。过滤器图表管理器应该选择一个 参考时钟,可以选择声卡上的时钟,也可以选择系统时钟。 ( c ) 将过滤器的消息通知返回给应用程序 过滤器图表管理器采用事件机制将链路中发生的事件通知给应用程序,这个 机制类似于w i n d o w s 的消息循环机制。 ( d ) 提供用来建立播放链路的方法。 过滤器图表管理器给应用程序提供了将过滤器添加进播放链路的方法、连接 过滤器的方法和断开过滤器连接的方法。但是,过滤器管理器没有提供如何将数 据从一个过滤器发送到另一个过滤器的方法,这个工作是由过滤器在内部通过引 脚来独立完成的。 2 4d 的c t s h o ws d k 基类 d i i 优t s h o ws d k 提供了一套基类源代码用于f i l t e r 开发,使用这些基类将大 大降低开发难度。d 慨t s h o ws d k 主要基类的过滤器类继承关系如图2 5 ,引脚 类的继承关系如图2 6 所示。 由图知,c b 嬲c o b j c c t 类是最基本的类,大部分s d k 类都从它中继承而来。 c un l | 洫o w n 类是最基本的接口类,s d k 中实现了c o m 接口的类都是直接或简接 从这个类继承而来【1 6 1 。c u n k o w n 类实现了i n o i d e l e g a t i n g u n l m o w n 接口,用于 支持引用计数、接口查询等。从c u i 妇o 、n 类继承的c b 嬲e f i l t e r 类是最基本的 过滤器类,它实现了i b a s e f i l t c r 接口。c b a s e p i n 类是最基本的引脚类,它实现 了i p i n 接口。从c b a s e p i n 类继承的c b a s e i n p u t p i n 类和c b a s e o u t p u t p i i l 类分别 是最基本输入引脚类和输出引脚类。从c b a s e f i l t e r 类继承而来的c s o u r c e 、 c t r 跹s f o m f i l t c r 、c b a s e r 吼d e r 分别是源过滤器、变换过滤器、渲染过滤器的重 要基类,从c b a s e i i l p u t p i n 和c b a s e o u t p u t p i l l 继承而来的c s o u r c e s 仃e 锄、 c t r 觚s f o 珊i n p u t p i n 、c t r 锄s f 0 珊o u t p u t p i i l 是其上的引脚类。 1 2 第二章d h c t s h o w 概述 过滤器类和引脚类都有其对应的框架函数,其上实现的接口也有相应的接口 函数。利用这些基类开发过滤器必须实现其部分框架函数和纯虚接口函数。实际 上,这些函数的实现在过滤器设计中占有相当大的工作量。 过滤器设计时应根据要求选择合适的基类作为父类,各基类并没有严格的界 限,应灵活选择。如使用c s o u r c e 作为过滤器父类的不一定都是源过滤器,在开 发一些变换过滤器时,输出引脚需要使用独立的线程传送数据时,就可以考虑使 用c s o u r c e 。 一c t n - n t o n 一t l r j , 口嘲嘲蛔、。 1 - - 一,j j r 图2 5d 的c t s h o ws d k 基类继承关系图一 1 3 第一章d 沁c t s h o w 概述 i n o n 二i 甘e 臼n 4 j n k n o w ? il 1 一 2 竺型三- j_ 图2 6d 的c t s h o ws d k 基类继承关系图二 2 5 过滤器设计的一般过程 过滤器是一个独立的功能单元,通过指定的接口和外界进行数据交互。过滤 器设计的一般过程如下: ( 1 ) 功能分析 首先需要了解你的过滤器需要完成的功能,你可以把所有的功能集合在一起 由一个过滤器来完成,但不提倡这么做。过滤器应该是一个功能单一的单元( 比 如过滤器a 负责接收数据,然后按一定规律组织好,传送出去;过滤器b 负责 数据格式的转换) ,这样在实践中便于调试,再加卜一个项目总是由一个团队来 完成,功能划分详细有利于团队成员之间合作。当然,过滤器的功能划分也不能 过于琐细,否则就适得其反了。 ( 2 ) 注册信息 1 4 第二章d h c t s h o w 概述 同很多软件一样,过滤器使用之前须先注册,注册信息的内容包括过滤器的 唯一标识码c l s i d 、过滤器的名字、引脚的数量和种类、媒体类型等,格式都 是固定的。 ( 3 ) 选择合适的过滤器父类 d i r e c t s h o ws d k 提供了很多的基类, 如c b a s e f i l t e r 、c s o u r c e 、 c t r 距s f o m f i l t e r 、c 1 肌s i i 巾l a c e f i l t e r 、c b 弱e r d e r 等。父类的选择对f i l t e r 的 开发非常重要,一个合适的父类能使开发过程简单、清晰。父类的选择要依据过 滤器的类型和处理数据的方式来定:当需要一个能把数据推出去的源过滤器r 时, 一般用c s o u r c e 类:当需要一个能接收数据经处理后输出的变换过滤器时,一般 用c t r 锄s f o m i f i l t e r 类;当需要多个输入引脚或输出引脚时,一般选择 c b a s e f i l t e r 。 ( 4 ) 定义引脚类 过滤器的父类确定了,引脚类一般也就相应地确定了。如过滤器父类选择 c s o u r c e 类,则引脚类继承自c s o u r c e s 舵a m 类;过滤器父类为c t r a n s f 0 咖f i l t e r , 则引脚类继承自c t r 孤s f 0 加i 印u t p 洫和c t r 趾f o m o u t p u t p i n 类;过滤器父类为 c b 嬲e f i l t e r ,则引脚类继承自c b 勰e p i l l 、c b 淞e i 印u t p i l l 、c b 弱e o u t p u t p i n 类。有 时候根据实际应用,引脚类不一定要重新实现。 ( 5 ) 框架函数实现 d i r e c t s h o w 为过滤器固定了应用框架,其中定义了一系列操作函数,如 c h e c k m e d i a l i y p e 、g 洲e d i a l 卯e 、f i l l b u 妇衙、t r 髓s f o m 等,完成媒体类型检查、 s 锄p l e 分配、数据填充等工作,过滤器的设计过程很大一部分工作就是这些框 架函数的实现。 ( 6 ) 接口定义 过滤器通过接口与用户交互。通过接口,用户可以得到过滤器的一些属性、 状态等参数,也可以对过滤器进行控制或设置。过滤器基类定义了很多接口方法, 也可以自定义接口。设计中要根据实际需要来定义接口方法。 ( 7 ) 其他特殊需求 过滤器的框架是固定的,但其功能是多样的。在实际应用中,用户的需求是 多种多样的。比如输入和输出s 锄p l e 不是完全对应的,那么就要考虑对输入引 脚进来的数据进行缓存和给输出s 锄p l e 打时间戳;再比如过滤器可能有多个输 入引脚,需要等各引脚数据都到达了才能进行处理,这时就需要考虑数据的同步 问题等。 1 5 第二章d 的c t s h o w 概述 2 6 本章小结 本章介绍了d i r e c t s h o w 的作用和d n c t s h o w 系统的基本组成,重点介绍了 d i r e c t s h o w 中最基本的概念过滤器,包括过滤器的分类、引脚、媒体类型、 工作模式等。多个过滤器通过引脚连在一起组成过滤器图表,介绍了过滤器图表 中的数据流动及过滤器图表管理器的作用。介绍了d n c t s h o ws d k 的一些重要 基类,利用这些基类可以大大简化开发过程。最后讲解了过滤器开发的一般过程。 第三章y u v 源过滤器的设计 第三章y u v 源过滤器的设计 该源过滤器接收八路视频数据,处理后输出1 9 2 0 宰1 0 2 4 的r g b 图像。 以7 2 0 3 8 4 的y u v 4 2 0 视频为例,输入的每帧图像数据量
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 游戏行业全景解析
- 手指课件内容
- 智能采收能耗优化-洞察及研究
- 不锈钢楼梯安装安全协议书7篇
- 统编版2025-2026学年语文六年级上册第一、二单元综合测试卷(有答案)
- 内蒙古锡林郭勒盟二连浩特市第一中学2024-2025学年九年级上学期期末检测化学试卷(无答案)
- 2025届安徽省安庆市安庆九一六高级中学高三下学期第5次强化训练物理试卷(含答案)
- 欧美医耗市场准入策略-洞察及研究
- 学生手机安全培训心得课件
- 扇形统计图说课稿课件
- 2025湖南生物机电职业技术学院单招《语文》考试历年机考真题集【必考】附答案详解
- 2024年齐齐哈尔市公安局招聘警务辅助人员真题
- 4.2《让家更美好》 课件 2025-2026道德与法治七年级上册 统编版
- 2025耿马傣族佤族自治县司法局面向社会公开招聘司法协理员(10人)考试参考题库及答案解析
- 北师大版三年级上册第八单元8.1《评选吉祥物》课时练(含答案)
- ERCP护理题库及答案解析
- 2025年百里香酚行业研究报告及未来行业发展趋势预测
- 2025年网络信息安全技术岗位专业知识试卷及答案解析
- 2025四川广元市园区建设投资集团有限公司招聘13人考试模拟试题及答案解析
- 检验员技能测试题及答案
- 化学原电池教学课件
评论
0/150
提交评论