




已阅读5页,还剩47页未读, 继续免费阅读
(计算机系统结构专业论文)通过系统优化提高龙芯2号视频播放性能.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要 在龙芯2 号c p u 的众多应用中,视频播放是最重要的应用之一。提高龙芯 2 号的视频播放性能无论对于现在还是将来都有十分重要的意义。 视频播放的总时间分为视频解码、视频输出、音频解码与输出、系统开销四 个部分,其中视频输出部分占有相当的比重。龙芯2 号实现的用于加速显卡显存 访问的u n c a c h e da c c e l e r a t i n g 技术可以大幅减少视频输出部分的时间,但龙芯2 号主要使用的操作系统l i n u x 对该技术尚未提供支持。l i n u x 主流视频播放软件 m p l a y e r 中的新型高速视频输出库v i d i x 也可以大幅减少视频输出部分的时间, 但该库尚不能在龙芯2 号平台上运行。 本文分析了l i n u x 主流视频播放软件m p l a y e r 的视频输出部分的工作过程, 通过系统优化,包括为l i n u x 增加u n c a c h e da c c e l e r a t i n g 支持和将v i d i x 库移植 至龙芯2 号平台,使无声音全速播放m p e g - 1 视频时的视频输出部分时间减少约 7 1 、播放总时间减少约2 0 ,有效地提高了龙芯2 号的视频播放性能,并给今 后的进一步优化工作提供了基础。另外,增加u n c a c h e da c c e l e r a t in g 支持使系 统显示带宽大部分情况下提高到原来的两倍以上,最高接近三倍。 关键词:龙芯2 号;视频播放;l i n u x :u n c a c h e da c c e l e r a t i n g ;m p l a y e r i m p r o v i n g p e r f o r m a n c eo f v i d e o p l a y b a c k o ng o d s o n 2 b ys y s t e mo p t i m i z a t i o n z h u a n gs i h u a ( c o m p u t e r a r c h i t e c t u r e ) d i r e c t e db yx i ap e i s ua n dh uw e i w u v i d e op l a y b a c ki so n eo ft h em o s ti m p o r t a n ta p p l i c a t i o n so ng o d s o n 2c p u i t sv e r y i m p o r t a n t t oi m p r o v et h e p e r f o r m a n c eo f v i d e op l a y b a c ko ng o d s o n 2 t h et o t a lt i m eo fv i d e op l a y b a c kc o n s i s t so f4 p a r t s :v i d e od e c o d i n g , v i d e o o u t p u t ,a u d i od e c o d i n g o u t p u t ,a n ds y s t e m o v e r h e a d v i d e oo u t p u t o c c u p i e s a c o n s i d e r a b l ep a r to ft h et o t a lt i m e g o d s o n 2 i m p l e m e n t e d “u n c a c h e da c c e l e r a t i n g t e c h n o l o g y , w h i c hc a na c c e l e r a t ed i s p l a ym e m o r ya c c e s sa n dd e c r e a s et h et i m eo f v i d e o o u t p u tg r e a t l y b u tl i n u x ,w h i c hi st h em a j o ro s o ng o d s o n 2 ,d o e s n t s u p p o r t t h i s t e c h n o l o g yy e t ah i 曲p e r f o r m a n c ev i d e oo u t p u tl i b r a r yc a l l e d “v i d i x ”i n m p l a y e r ,w h i c hi st h em a j o rs o f t w a r ef o rv i d e op l a y b a c k o nl i n u x , c a na l s od e c r e a s e t h et i m eo f v i d e o o u t p u tg r e a t l y b u t i tc a l l tr u no ng o d s o n 2 y e t t h i st h e s i sa n a l y z e dt h ep r o c e d u r eo fv i d e oo u t p u ti n m p l a y e r , i m p r o v e dt h e p e r f o r m a n c e o fv i d e o p l a y b a c ko ng o d s o n 2b ys y s t e mo p t i m i z a t i o n ( i n c l u d i n g s u p p o r t i n g “u n c a c h e da c c e l e r a t i n g i n l i n u xa n dp o r t i n gv i d i xo ng o d s o n 2 ) r e s u l t ss h o wt h a tt h et i m eo fv i d e o o u t p u ti sr e d u c e db y a b o u t7 1 a n dt h et o t a lt i m e i sr e d u c e db ya b o u t2 0 w h e np l a y i n gm p e g 一1v i d e oa sf a s ta sp o s s i b l ew i t h o u t s o u n d ;a n dt h ed i s p l a yb a n d w i d t hi si n c r e a s e db y2t i m e st o3t i m e si nm o s tc a s e s k e y w o r d s :g o d s o n 2 ,v i d e 9p l a y b a c k , l i n u x ,u n c a c h e da c c e l e r a t i n g , m p l a y e r 1 1 声明 本人声明所呈交的论文是我个人在导师指导下进行的研究工作及取得 的研究成果。就我所知,除了文中特别加以标注和致谢的地方外,论文中不 包含其他人已经发表或撰写过的研究成果。与我一同工作的同志对本研究所 做的任何贡献均已在论文中作了明确的说明并表示了谢意。 作者签名:应阚乒日期:2 矿口仁乒卵 关于论文使用授权的说明 中国科学院计算技术研究所有权处理、保留送交论文的复印件,允许论 文被查阅和借阅:并可以公布论文的全部或部分内容,可以采用影印、缩印 或其它复制手段保存该论文。 作者签名:症徊笋 导师签名:拥咋武日期:功口f ;乒卵 第一章引言 第一章引言 拥有自主知识产权的高性能通用c p u 对于我国的国家安全和经济发展都具 有非常重要的意义。作为我国第一款自主知识产权的高性能通用c p i 卜一龙芯1 号的后续,龙芯2 号c p u 的性能大大提高,应用范围也更加广泛。在龙芯2 号 c p u 的众多应用中,视频播放是最重要的应用之一。 现在,龙芯2 号的m p e g 1 视频播放性能尚可以提高;以后,新版本龙芯2 号在性能继续提高的同时,也必然对视频播放提出更高的要求( 比如更高的清晰 度等) 。因此,提高龙芯2 号的视频播放性能无论对于现在还是将来都有十分重 要的意义。 视频播放的总时间分为视频解码、视频输出、音频解码与输出、系统开销四 个部分,其中视频解码部分比重最大,视频输出部分也占有相当大比重。龙芯2 号实现的多媒体指令集可以用于减少视频解码和音频解码与输出两部分的时间: 而本文是通过系统优化,减少视频输出部分的时间,从而提高视频播放性能。 龙芯2 号实现的用于加速显卡显存访问的u n c a c h e d a c c e l e r a t i n g 技术【1 】可以 大幅减少视频输出部分的时间,但龙芯2 号主要使用的操作系统l i n u x 2 3 1 1 4 】 对该技术尚未提供支持。l i n u x 主流视频播放软件m p l a y e r 中的新型高速视频输 出库v i d i x 5 也可以大幅减少视频输出部分的时间,但该库尚不能在龙芯2 号平 台上运行。 本文分析了i j n u x 主流视频播放软件m p l a y e r 的视频输出部分的工作过程, 通过系统优化,包括为l i n u x 增加u n c a c h e da c c e l e r a t i n g 支持和将v i d i x 库移植 至龙芯2 号平台,使无声音全速播放m p e g - 1 视频时的视频输出部分时间减少约 7 1 、播放总时间减少约2 0 ,有效地提高了龙芯2 号的视频播放性能,并给今 后的进一步优化工作提供了基础。另外,增加u n c a e h e da o c e i e r a t j n g 支持使系 统显示带宽大部分情况下提高到原来的两倍以上,最高接近三倍。 以下分别介绍相关内容。 1 1 龙芯2 号上的视频播放软件 在龙芯2 号的实际应用中,视频播放是一个非常重要的应用。在龙芯2 号主 要使用的操作系统l i n u x 上,视频播放软件包括s m p e g 6 、m p l a y e r 5 等在这 些软件中,s m p e g 等软件结构简单、播放速度快,在系统性能不高时可以作为播 放m p e g 1 视频的首选,但是它们支持的视频格式较少( 比如s m p e g 只支持 m p e g 一1 视频格式,不支持其他格式) ;m p l a y e r 的结构较复杂,播放m p e g 一1 文件时速度比s m p e g 慢,但是支持的视频文件和编码格式最多,业已成为l i n u x 通过系统优化提高龙芯2 号视频播放性能 上的主流视频播放软件。 随着性能的逐步提高,今后的龙芯2 号及其后续型号c p u 必然需要播放其 他格式的视频文件( 特别是m p e g 一2 、m p e g 一4 等高清晰度的文件) ,因此m p l a y e r 必然成为今后龙芯平台上的主要视频播放软件。可见,以m p l a y e r 作为对象进行 龙芯2 号视频播放的优化是非常必要的。 1 2 u n c a c h e da c c e l e r a t i n g 技术 传统上,访问外设资源时,c p u 都是使用u n c a c h e d ( 以下简称u c ) 方式, 该方式效率低,严重影响系统性能。另一方面,显卡显存由于自身的特殊性,可 以允许较为宽松的访存方式。为提高显示性能,龙芯2 号实现了m i p s 体系定义 的u n c a c h e da c c e l e r a t i n g ( 以下简称u a ) 技术f 1 】,通过改变访存方式加速显存 访问。但是,l i n u x 操作系统对该技术尚未提供软件支持,导致l i n u x 上运行的 软件不能获得u a 技术的好处。特别是,视频播放软件在播放视频时不可避免地 会大量、频繁地写显卡显存,因而能从u a 技术获益良多。另外,其他图像应用 也能或多或少地从u a 技术获益。因此,在l i n u x 中加入对u a 技术的支持是非 常必要的。 1 3 龙芯2 号多媒体指令集 龙芯2 号实现了一个多媒体指令集【7 】,其中包括多条6 4 位定点s i m d ( 单 指令流多数据流) 指令,支持并行对8 个8 位二进制数、4 个1 6 位二进制数或2 个3 2 位二进制数的定点操作。为支持这些多媒体指令的运行,龙芯2 号定义了 3 2 个6 4 位多媒体寄存器,具体实现时重用浮点寄存器为多媒体寄存器。 在视频解码、音频解码的过程中,许多操作是对同样类型的多个数据进行同 样的运算,而且这些运算对各自的结果互不依赖,因此可以通过使用上述s i m d 指令增加数据并行性,从而减少视频解码、音频解码与输出两个部分的时间。 本文对使用龙芯2 号多媒体指令集提高视频播放性能的工作不予涉及。该工 作的情况可以参考文献【8 】及相关文档。 1 4 本文的工作 围绕优化m p l a y e r 的视频播放,本文主要做了以下几项工作: 1 分析m p l a y e r 的视频播放过程,特别是其中的视频输出过程,并 给出提高视频播放性能的若干建议和优化构想。 2 第一章引言 m p l a y e r 的结构较为复杂,为了对其进行优化,先期的分析工作是必需的。 本文较为详细地分析和比较了在几种不同情况( 两个视频输出库、使用或不使用 直接渲染、使用或不使用双缓冲) 下m p l a y e r 的视频输出过程,即把解码后的视 频数据从内存送到显卡显存的过程,为本文和今后的优化工作打下基础。 在以上分析和比较的基础上,本文给出了加速视频播放的几个一般性建议 ( 包括对显卡、片源、m p i a y e r 命令行参数的要求等) ;给出了两个优化构想( 加 入u a 支持、移植v i d i x 库) ,即本文优化工作的源头。 2 在l i n u x 中加入对u a 技术的软件支持。 本文通过分析l i n u x 的显示支持机制,给出u a 支持方案的关键点,并在此 基础上设计实现了两个u a 支持方案:第一个是需要修改应用程序的专用方案, 额外开销最小,适用于n c 环境等应用程序较少的情况;第二个是只需修改内核 无需修改应用程序的通用方案,额外开销稍大,适用于其他大部分情况。 本项工作有效地提高了系统的显示带宽并减少了m p l a y e r 视频输出部分的 时间。( 具体见下文第四项工作。) 3 移植m p ia y e r 的新型高速视频输出库v i d i x 。 v i d i x 是m p l a y e r 新版本中刚出现的较为通用的高速视频输出库,该库支持 多平台,但是尚未支持m i p s 平台。本文分析了v i d i x 库通过m p l a y e r 自带的l i b d h a 库访问硬件的过程,并在此基础上设计实现了与l i b d h a 库功能一样的m j p sl i b d h a 库以及配套的内核接口p r o c m i p s d h a ,从而使v i d i x 库可以在龙芯平台上运行。 本项工作有效地减少了m p l a y e r 视频输出部分的时间。( 具体见下文第四项 工作。) 4 对以上工作的效果进行性能评测和比较。 u a 技术对显示性能的影响首先直接体现在显示带宽的提高上。本文通过图 像块拷贝这一典型的图像操作,对u a 技术给显示带宽带来的影响进行了测试, 给出了显示带宽与图像块宽度的关系曲线,表明 大部分情况下有u a 支持时的显示带宽都提高到没有u a 支持时的两倍以上, 最高接近三倍。 加入u a 软件支持和移植v i d i x 库都能有效提高m p l a y e r 的视频播放性能。 本文通过无声音全速播放合并后m p e g 1 标准流文件c i l m p g ,对m p l a y e r 的视 频播放性能进行测试和比较。测试表明 通过系统优化工作,包括为l i n u x 增加u n c a c h e da c c e i e r a t in g 支持和将 v i d i x 库移植至龙芯2 号平台,使无声音全速播放m p e g 一1 视频时的视频输出部 分时间减少约7 1 、播放总时间减少约2 0 。 3 通过系统优化提高龙芯2 号视频播放性能 1 5 本文的组织 第二章介绍在龙芯2 号上进行视频播放的相关技术,包括龙芯2 号c p u 、 m p l a y e r 播放软件、l i n u x 显示机制、u n c a c h e d a c c e l e r a t i n g 及相关技术等。 第三章分析m p l a y e r 的视频播放过程,特别是其中的视频输出过程,并给出 提高视频播放性能的若干建议和优化构想。其中的两个优化构想分别在第四、第 五两章设计实现。 第四章根据第三章的其中一个优化构想,设计并实现l i n u x 操作系统的u a 软件支持方案。加入u a 支持后,系统显示带宽大部分情况下提高到没有u a 支 持时的两倍以上,最高接近三倍,并且m p l a y e r 视频输出部分的时间得到有效减 少。 第五章根据第三章的其中另外一个优化构想,将m p l a y e r 的新型高速视频输 出库v i d i x 移植到龙芯2 号平台上。使用该库后,视频输出部分的时间得到有效 减少。 第六章对以上工作的效果进行性能评测与比较,包括u a 技术对显示带宽的 影响、以上工作对m p l a y e r 视频播放性能的影响。测试结果显示,加入u a 支持 后,系统显示带宽大部分情况下提高到没有u a 支持时的两倍以上,最高接近三 倍;通过第四、第五两章的工作,使无声音全速播放m p e g - 1 视频时的视频输出 部分时间减少约7 1 、播放总时间减少约2 0 。 第七章总结全文,并给出以后的进一步研究方向。 4 第二章龙芯2 号上视频播放的相关技术 第二章龙芯2 号上视频播放的相关技术 本章简单介绍与在龙芯2 号平台上进行视频播放有关的一些技术,包括龙芯 2 号c p u 、m p l a y e r 播放软件、l i n u x 系统显示机制、u n c a c h e d a c c e l e r a t i n g 及相 关技术等。 2 1 龙芯2 号c p u 龙芯2 号【7 】c p u 是我所研制的拥有自主知识产权的高性能通用c p u ,主要 技术特点包括:m i p s 体系【1 】f 9 】兼容、字长6 4 位、r i s c 结构、多级动态流水线、 四发射、乱序执行。在龙芯2 号上主要运行的操作系统为l i n u x 2 3 4 。l i n u x 上绝大部分应用软件都可以在龙芯2 号上运行。 2 2 m p i a y e r 播放软件 m p l a y e r 5 是l i n u x 上最常用的视频播放软件,能运行在不同体系结构的 c p u 上。m p l a y e r 功能强大:一方面能播放多种格式的视频文件,另一方面支持 多种视频图像输出驱动。 在x 8 6 平台上,m p l a y e r 能播放m p e g 、v o b 、a v i 、o g g 、v i v o 、a s f w m v 、 q t m o v 、f l i 、r m 、n u p p e l v i d e o 、y u v 4 m p e g 、f i l m 、r o q 等多种格式的视频 文件【5 】;在非x 8 6 平台( 比如m i p s 平台) 上,m p l a y e r 也能播放其中常用格式 ( 包括m p e g 一1 、m p e g 一2 、m p e g 一4 等) 的视频文件。 m p l a y e r 支持多种视频图像输出驱动:既支持x l l 、x v 、d g a 、o p e n g l 、 s v g a l i b 、f b d e v 、a a l i b 、d i r e c t f b 等普通的视频图像输出驱动;也支持一些 低级的硬件相关的驱动( 比如m a t r o x 、3 d f x 、r a d e o n 、m a c h 6 4 、p e r m e d i a 3 等) ; 还能通过硬件m p e g 解码卡( 比如d v b 、d x r 3 、h o l l y w o o d + 等) 播放m p e g 视频。 从上可见,m p l a y e r 一定会成为龙芯2 号上主要的视频播放软件。因此本文 以m p l a y e r 作为对象进行视频播放的优化。 2 3 l i n u x 系统显示机制 l i n u x 系统中,需要显示图形图像的应用基本上都需要x w i n d o w 系统【1 0 】的 支持。x w i n d o w 有多种实现,在l i n u x 系统中使用的一般是x f r e e 8 6 1 1 。l i n u x + x f r e e 8 6 架构下,具体应用( 即x c l i e n t ) 一般通过x s e r v e r 进行显示,但也可 通过系统优化提高龙芯2 号视频播放性能 以使用d g a 技术【1 1 】通过调用l i n u x 内核的系统调用直接访问显卡;而x s e r v e r 则通过自带的各种显卡驱动程序调用内核系统调用直接访问显卡。 上述会直接访问显卡的程序访问显存时需要通过m m a p 、i o c t l 、r e a d 、w r i t e 等系统调用【2 】【3 】【4 】,其中m m a p 使用最多。通过m m a p 访问显存时,l i n u x 内 核会在该程序的虚存空间中建立一块映射到显存物理地址的区域,然后该程序就 可以白行执行访存指令访问显存了。 x f r e e 8 6 下的显卡驱动分为通用驱动和各种专用驱动,前者只访问显存,后 者既访问显存又访问显卡控制寄存器。使用d g a 技术的x c l i e n t 大多访问显存。 u a 技术能大幅提高通用驱动的显示性能、部分使用d g a 技术的x c l i e n t 的显示 性能、以及虽使用专用驱动但频繁进行图像显示的应用( 比如媒体播放) 的性能。 2 4 u n c a c h e da c c e i e r a t i n g 及相关技术 本节先简单介绍m i p s 平台上的用于加速显存访问的u n c a c h e da c c e l e r a t i n g 技术,然后介绍x 8 6 平台上的同类技术w r i t ec o m b i n i n g 及其软件支持现状。 2 4 1 u n c a c h e da c c e i e r a t i n g 技术 传统上,访问外设资源时,c p u 都是使用u n c a c h e d ( 以下简称u c ) 方式。 一条u c 访存指令必然带来一个系统总线事件,导致系统总线负担重效率低。而 且,很多c p u 的流水线在执行u c 写指令时会阻塞后面的u c 写指令:一个u c 写请求在发出后要经过数个模块的处理和反馈,数个外频拍后下个u c 写请求才 能发出。可见u c 方式严重影响系统性能。 大部分外设资源( 包括显卡控制寄存器) 实际上是硬件寄存器,访问时只能 使用u c 方式,但是显卡显存是一个重要例外,对其的访问可以宽松一些。为提 高显示性能,m i p s 体系定义了u n c a c h e d a c c e l e r a t i n g ( 以下简称u a ) 技术【1 】。 该技术在c p u 流水线内部设置硬件缓冲区,收集写往显存中相近地址的数据, 直到遇到u c 访存指令、缓冲区满、u a 访问地址突变、发生中断等某一种特定 情况,再将缓冲区中的数据发往系统总线。如果此时缓冲区己满,c p u 就可以 用突发写( b u r s tw r i t e ) 模式将这些数据写到系统总线上,该模式只在一开始给 出写入地址,后面就连续发送数据,效率比每次都需要给出地址和数据的普通写 模式高很多。另外,u a 指令对同一地址的多次写操作会覆盖,最后发往系统总 线的只有最后一次写操作的数据。实际应用写显存时地址大多连续或相同,因此 c p u 只用少量总线操作就完成了大量访存请求。而且一个u a 写请求发出后只 需简单处理,下个u a 写请求很快就能发出。可见,u a 技术能大幅提高系统写 显存的性能。 第二章龙芯2 号上视频播放的相关技术 u a 技术的软件界面是t l b 表项【1 】【9 】的访问方式( 又称c a c h e 算法) 域, c p u 执行访存指令时会根据该域决定访存方式,如果是u a 方式,则使用u a 技 术。t l b 表项是进程相关的,可见u a 技术的软件界面是进程相关的。 u a 技术已在m i p sr 1 0 0 0 0 、龙芯2 号等c p u 中实现,但尚未得到l i n u x 系统支持。 2 4 2 w r i t ec o m b i n i n g 技术及l i f l u x 对其的支持 x 8 6 平台上也有与u a 类似的技术w r i t ec o m b i n i n g ( 以下简称w c ) f 1 2 。 w c 的软件界面是数个保存w c 区域物理地址范围的名为m t r r 的硬件寄存器, 该界面是进程无关的,内核只需将显存物理地址填入上述寄存器即可。l i n u x 系 统( 包括内核和x w i n d o w 等) 已对w c 技术提供了成熟支持,但该支持与x 8 6 的平台相关特性和平台相关代码结合紧密。 由于软件界面的重大差别和现有l i n u x 系统对w c 支持的平台相关性,u a 技术的软件支持只能重新设计实现。 7 通过系统优化提高龙芯2 号视频播放性能 第三章m pj a y e r 视频播放简析 为了优化m p l a y e r 的视频播放性能,本章根据m p l a y e r1 0p r e3 的文档和源 代码,对其视频播放做一简单分析,主要分析视频输出部分的过程及性能,并根 据分析结果给出优化构想。 3 1 节给出一般情况下m p l a y e r 的视频播放b e n c h m a r k 结果,3 2 节简单分析 m p l a y e r 的视频输出过程,3 3 节对两个典型的视频输出库进行具体分析并给出 提高视频播放性能的若干建议和优化构想,3 4 节对本章内容进行小结。 3 1 视频播放b e n c h m a r k m p l a y e r 自身能够给出视频播放的b e n c h m a r k ,其中包含了视频解码( v i d e o d e c o d e ,简称v d ) 、视频输出( v i d e oo u t ,简称v 0 ) 、音频解码与输出( a u d i o ) 、 系统开销( s y s t e m ) 四个部分的使用时间。在进行b e n c h m a r k 测试时,如果播放 声音,则m p l a y e r 会尽量以片源指定的速度进行播放;如果不播放声音,则 m p l a y e r 会占用全部资源进行全速播放。为了测出极限播放速度,也为了专注于 视频播放,只进行无声音的b e n c h m a r k 测试。测试环境为基于龙芯2 号的l i n u x p c 原型系统( 下同,该系统的具体参数见第六章) 。播放的文件为合并后的m p e g 1 标准流文件c i f m p g ( 该文件的具体情况见第六章) 。测试结果如下: 表3 1 默认情况下无声音全速播放c if m p g 文件的b e n c h m a r k l参数v dv o s y s t e m 总时间 i - i l o s o t l n d b e n d l m a r k6 8 8 0 4 秒3 6 6 3 5 秒3 9 6 5 秒1 0 9 4 0 4 秒 l6 2 8 89 _ 5 3 3 4 8 6 2 3 6 2 4 3 1 0 0 0 0 0 0 从以上数据可以看出,视频输出v o 在播放总时间中占有较大比重,本文主 要对该部分进行优化。( 各个部分的具体意义和计算方法见下一节。) 3 2 视频输出过程 m p l a y e r 支持多种格式及编码的视频文件、多种视频解码器( v i d e o d e c o d e r , 简称v d ) 、多种视频过滤器( v i d e of i l t e r ,简称v f ) 、多种视频输出库( d e o o u t , 简称v o ) ,因而其播放过程较为复杂。另外,y u v 数据格式有多种,显卡一般 只支持其中的一部分,如果解码视频文件的解码器能提供的y u v 格式不被显卡 支持,则必须使用至少一个视频过滤器进行格式转换。m p e g 1 文件解码器产生 的y u v 数据一般包括y v l 2 格式,为绝大多数显卡所支持,因而无需进行格式 第三章 卸l a y h 视频播拔篱析 转换。为将注意力集中到对m p l a y e r 视频输出( v o ) 部分的优化,以下只考虑 播放每一帧时,与v o 相关的处理过程,且只考虑最简单的情况媒体文件为 m p e g 1 格式( 必然是逐行扫描【1 3 】) 、使用l i b m p e 9 2 视频解码器( m p l a y e r 播放 m p e g 1 、m p e g 2 文件时的默认解码器) 、不进行也无需进彳亍任何视频过滤或 y u v 格式转换、不播放声音。 图3 1m p i a y e r 视频输出处理过程 9 通过系统优化提高龙芯2 号视频播放性能 如上图,与视频输出相关的处理过程为: 1 遇到一个新的帧时,m p l a y e r c 文件的m a i n 函数调用d e cr i d e o c 文件的 d e c o d e v i d e o 函数。后者负责解码该帧并进行第一轮视频输出( 详情见以下 步骤) 。 2 d e c _ v i d e o c 文件的d e c o d e _ v i d e o 函数调用相应的视频解码器的d e c o d e 函数以 解码视频数据。本文所述情况下( 使用l i b m p e 9 2 视频解码器) ,即调用 v dl i b m p e 9 2 c 文件的d e c o d e 函数。 3 。进行视频解码之前,v & l i b m p e 9 2 c 文件的d e c o d e 函数首先调用v d c 文件的 m p c o d e c _ g e t _ i m a g e 函数以获取视频缓冲区,用于存放解码后的视频数据。 4 v d c 文件的m p c o d e c _ g e t j m a g e 函数以视频过滤器链表作为参数,调用v f c 文件的v fg e ti m a g e 函数以实际获取视频缓冲区。 5 v f c 文件的v fg e ti m a g e 函数首先尝试调用视频过滤器链表中的第一个过滤 器提供的g e t _ i m a g e 函数,从而向该过滤器申请视频缓冲区;若申请失败, 再自行于内存中分配视频缓冲区( 参见下文所述第9 步) 。本文所述情况下 ( 不进行任何视频过滤) ,视频过滤器链表中只有一个视频过滤器,该过滤 器( 代码在v f _ v o c 文件中) 不进行任何实际的视频过滤,而只是视频输出 库的包裹层( w r a p p e r ) ,因此v fg e t函数实际调用的是文件的i m a g e v fv oc g e ti m a g e 函数。 6 v f _ _ v 0 c 文件的g e ti m a g e 函数此时有两种选择:如果用户在调用m p l a y e r 时 通过一d r 参数指定进行直接渲染( d i r e c tr e n d e r i n g ,下文简称d r ) ,则以 v o c i 。r l _ g e t _ i m a g e 参数调用视频输出库( v o _ x 1 1 、v o _ x v 、v ox v i d i x 等, 下文统称v o _ x x x ,代码在相应的各个v ox 】【】【c 文件中) 提供的c o n t r o l 函数, 从而向视频输出库申请视频缓冲区;如果用户没有指定进行d r ,则不分配 视频缓冲区、直接返回( 即跳到下文所述第8 步) 。 7 不同的视频输出库的c o n t r o l 函数会进行各自不同的判别处理,并尽量分配视 频缓冲区,如果分配成功,则于该帧置上m p 标志。最_imgflag_direct 后,无论是否分配成功,都会返回v f _ _ v o c 文件的g e t _ i m a g e 函数继续执行。 8 无论上述第6 步中是否调用了视频输出库v ox x x 提供的c o n t r o l 函数,无论 该c o n t r o l 函数是否成功分配了视频缓冲区,此时v f _ v o c 文件的g c ti m a g e 函数都返回v f c 文件的v fg e ti m a g e 函数继续执行。 9 若v f _ v o c 文件的g e t 函数返回时,视频缓冲区尚未成功分配( 即 _ _ i m 标a 志g e m pi m g f l a g _ d i r e c t未被置上) ,则v f c 文件的v fg e t _ i m a g e 函数自 行调用c 语言库函数在内存中分配视频缓冲区。最后,v f _ g e t _ i m a g e 函数返 回v d c 文件的m p c o d e c函数继续执行,此时视频缓冲区一定已经_ g e t 成功分配。 _ i m a g e 1 0 第三章m p l a y e r 视频播放简析 1 0 v d c 文件的m p c o d e c _ g e t _ i m a g e 函数返回v d - l i b m p e 9 2 c 文件的d e c o d e 函数 继续执行。 1 1 ( 本步骤在图中没有标明) v d醒文件的 函数调用1 i b m p e cd e c o d e l i b m p e 9 2 视频解码器提供的m p e 9 2等函数进行视频数据的解码,解码后的视频_parse 数据就存放在上述步骤中获得的视频缓冲区中。 1 2 ,一帧解码完毕,v d文件的函数返回 c 文件的_ l i b m p e 9 2 cd e c o d e d e c _ v i d e o d e c o d ev i d e o 函数继续执行。d e c o d ev i d e o 函数将从第2 步到此时所经过的 时问累加入视频解码v d 总时间中。 1 3 d e cv i d e o c 文件的d e c o d ev i d e o 函数调用视频过滤器链表中的第一个过滤器 提供的p u ti m a g e 函数( 本文所述情况下即调用视频输出包裹层v f _ v o c 文件 的p u t函数),从而进行第一轮的视频输出。_image 1 4 v f _ v o e 文件的p u t _ i m a g e 函数以v o c y r ld r a w i m a g e 参数调用视频输 出库v ox x x 提供的c o n t r o l 函数,从而实际进行第一轮的视频输出。该轮视 频输出的具体功能与具体的视频输出库有很大关系,有什么都不做的、有进 行简单的内存拷贝的、有进行内存到显存的拷贝的此处不予深究,详情 可见下文对两个典型视频输出库的具体分析。 1 5 视频输出库v o的函数进行完第一轮视频输出后,返回_xxxc o n t r o l v fv oc 文件的p u t _ i m a g e 函数继续执行。 1 6 v c v o c 文件的p u t _ i m a g e 函数返回d e c _ v i d e o c 文件的d e c o d ev i d e o 函数继续 执行。d e c o d ey i d e o 函数将从第1 3 步到此时所经过的时间累加入视频输出 v o 总时间中。 1 7 d e c _ v i d e o c 文件的d e c o d e _ v i d e o 函数返回m p l a y e r _ c 文件的m a i n 函数继续执 行。m a i n 函数根据情况进行帧同步、丢帧、睡眠等操作。 1 8 m p l a y e r c 文件的m a i n 函数调用视频输出库v ox x x 提供的f l i p _ _ p a g e 函数,从 而进行第二轮的视频输出。该轮视频输出的具体功能也与具体的视频输出库 有很大关系,有什么都不做的、有调用x s e r v e r 进行内存到显存的拷贝的 此处不予深究,详情可见下文对两个典型视频输出库的具体分析。 1 9 视频输出库v o _ x x x 的f l i p _ p a g e 函数进行完第二轮视频输出后,返回m p l a y e r c 文件的m a i n 函数继续执行。m a i n 函数将从上一步到此时所经过的时问累加 入视频输出v o 总时间中。 从以上步骤可以看出,b e n c h m a r k 中,视频解码v d 部分的时间虽然从第2 步统计到第1 2 步,但其中绝大部分步骤只进行一些简单的处理,所花时间极少, 因而v d 部分的时间主要是第1 1 步进行视频数据解码所用的时间;视频输出v o 部分的时间主要包括进行数据拷贝( 包括内存到内存、内存到显存等) 的时间和 些额外开销( 比如x s e r v e r 进行处理时的额外开销等) ,详情可见下文对两个 n 通过系统优化提高龙芯2 号视频播放性能 典型视频输出库的具体分析。另外,如果进行了视频过滤( 比如y u v 格式的转 换等) ,则该时间也算入v o 部分的时间中。在不播放声音时,m p l a y e r 播放媒体 文件的总时间减去v d 、v o 两部分的时间就是系统开销( s y s t e m ) 部分的时间。 v d 部分的优化涉及多媒体算法、多媒体指令等内容,与本文无关。本文专 注于v o 部分的优化。v o 部分的具体操作与具体的v o 库有很大关系,因此下 文首先针对两个典型的v o 库进行具体分析,并给出提高视频播放性能的若干建 议和优化构想。 3 3 典型v 0 库视频输出过程分析及优馋构想 要优化v o 部分,首先必须清楚该部分的具体操作。m p l a y e r 支持多个v o 库,不同的v o 库用于不同的环境下,比如有使用x w i n d o wr g b 图像显示功能 的通用v o 库v o x l l 、使用m p e g 硬件解压卡的v o 库v o _ m p e g p e s 、只支持 m g a 显卡的专用v o 库v o、将视频流做成每帧一个图像文件的库_mga v o ( v op n g 、v oj p e g 等) 在不使用m p e g 硬件解压卡的前提下,当前使用得最广泛的是v o x v 库, 该库通用、成熟、可靠,而且在成熟通用的v o 库中速度最快,本节首先对该 v o 库的视频输出过程和实际效果进行分析;v i d i x 库是一个正在开发、尚未稳 定、较通用的v o 库,其速度在所有非专用v o 库中最快,本节也对该v o 库的 视频输出过程进行分析。在分析的基础上,本节还给出了若干建议和优化构想, 以提高视频播放的性能。 3 3 1 iv ox v 库 x f r e e 8 6 中有一个称为x v i d e o ( 简称x v ) 的机制,x c l i e n t 可以通过该机制 调用x s e r v e r 显示y u v 图像,v o 库v ox v 就是通过x v 机制进行视频输出的。 x f r e e 8 6 的x s e r v e r 为大多数能进行y u v 图像显示的显卡提供了x v 支持,因而 v ox v 库在大多数显卡上都能正常使用,是一个不依赖于具体显卡型号的通用 v o 库。x v 机制和v ox v 库经过数年的发展已经很成熟了,b u g 很少。在所有 既成熟又通用的v o 库( v o _ x l l 、v o _ d i r e c t f b 、v od g a 等) 中,v o _ x v 库由于无 需进行y u v 到r g b 的色彩空间转换,因而速度最快。当前,v o _ x v 库是使用得 最广泛的v o 库,同时也是m p l a y e r 默认使用的v o 库。本小节对该v o 库进行 分析并给出若干建议和优化构想。 初始化时,v ox v 库通过共享内存( s h a r e dm e m o r y ,简称s h m ) 机制【1 4 】, 在内存中分配一段与x s e r v e r 共享的缓冲区( 下文称为s h m 缓冲区) 。该缓冲区 用于存放需要x s e r v e r 显示的y u v 图像( 参见下文) 。 第三章m p l a y c r 视频播放简析 参见上文3 2 节所述的视频输出过程,当所播放的帧不使用d r 时,在第6 、 第7 步中,v o _ x v c 文件的c o n t r o l 函数要么不被调用,要么虽然被调用但是无法 成功分配视频缓冲区,于是视频缓冲区由v l c 文件的v f g e ti m a g e 函数自行调用 c 语言库函数在内存中进行分配( 第9 步) ;在第1 4 步,v ox v e 文件的c o n t r o l 函数被调用,以进行第一轮视频输出,该函数调用v ox v c 文件的d r a w _ i m a g e 函数,后者又
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年环境监测工程师职业水平测验试题及答案解析
- 2025年绿化主管招聘面试问题集
- 2025年护理学专业技能考试试题及答案解析
- 2025年安全用电知识竞赛题及答案
- 2025年初创企业高管职位面试指南与预测题集萃
- 2025年机械伤害应急处理手册及测试题
- 2025年物业安保主管面试常见问题集锦
- 2025年工程设计师执业能力评价试卷及答案解析
- 2025年财务管理主管实战面试题集
- 2025年建筑员笔试高频题解析
- 保安员在岗培训法律-2
- 初中英语中考专题训练阅读理解-应用文篇
- 《古文观止 上下 》读书笔记思维导图PPT模板下载
- YC/T 210.2-2006烟叶代码第2部分:烟叶形态代码
- GB/T 20671.1-2006非金属垫片材料分类体系及试验方法第1部分:非金属垫片材料分类体系
- 熵权法教学讲解课件
- 医师病理知识定期考核试题与答案
- 课堂因“融错·容错·溶措”而精彩
- 阳光晾衣房钢结构专项施工方案
- 安宁疗护服务流程
- 热分析DSC培训new
评论
0/150
提交评论