④ 增强型直接存储器存取(EDMA)控制器(64个独立通道)。
以DM642为硬件平台开发视频编码器,开发者可以充分利用其硬件特性,提高视频编解码算法的运算速度。
2)X264的移植
由于适用于PC机通过MMX和SSE编写的代码在DSP上无法运行,想要使X264代码在DM642上运行,必须将原来的代码加以修改使其变成纯C语言的代码。具体做法是:在X264代码中将HAVE_MMX编译选项屏蔽,同时将代码中与该编译选项相关的代码注释掉。当程序成为纯C代码时,就可以开始往DM642上移植了。
然而,DSP开发工具CCS有自己的ANSI C编译器和优化器,并有自己的语法规则和定义。所以需要将代码作相应修改,使其完全符合DSP中C的规则,同时要配置CCS的编译选项,才能使X264在CCS和VC下运行产生的结果一致。这个过程称为代码的DSP化。
由于纯C语言编写的程序无法利用DSP的并行处理机制,此时代码的运行速度非常慢。在DM642平台上,对相同的YUV数据(此处采用container.qcif)进行编码,若采用带X86汇编的X264代码(DCT和SAD部分采用汇编代码)在VC环境下运行,编码速度能达到QCIF 60fps;若将代码改为纯C语言仍然在VC下运行,则编码速度马上降到QCIF 10fps ;将该代码稍作修改移植到DM642的硬件平台,用CCS编译,编码速度仅能达到1帧/6秒。这样的速度离实时处理的目标还非常遥远。
所以,必须结合DSP本身的特点,对代码进行优化,才能在DM642平台上实现X264对视频图像的实时处理。
3)X264的优化
X264代码的优化分为三个层次:项目级优化,算法级优化和指令级优化。
①项目级优化:主要通过设置CCS编译器的选项,调整代码结构和合理分配内存来实现。如设置-o3选项,将常用数据分配到访问速度高的片内内存等。
②算法级优化:提出快速高效算法,从算法上挖掘潜力,提高运行速度,达到优化目的。用X264支持的4种运动估计算法(菱形搜索算法、六边形搜索算法、非对称十字型多层次六边形格点搜索算法和连续消除法)处理同样的YUV数据(此处仍为container.qcif),编码速度分别为13fps、11fps、9fps和4fps,可见不同的运动估计算法引起的编码速度的差别非常明显。
③指令级优化:这部分又可以分为C语言级的优化和汇编级的优化。前者主要包括消除冗余代码、调整数据类型、优化程序结构、打开for循环和充分利用内联函数等操作。后者主要是将耗时函数抽取出来,用线性汇编改写,充分利用丰富的媒体处理指令,最大限度的利用DSP的并行性,加快编码速度。汇编级优化涉及到的主要部分有SAD计算、DCT变换、反DCT变换、量化等过程比较规范,重复性比较高的计算过程。
4、结束语
目前,H.264视频编码技术以其独有的优势,受到业界几乎所有主流视频相关设备、产品厂商的支持。由于完全独立开发编解码器所需要的人力和物力都很大,许多公司和团体都采用直接修改移植开源代码的方式以求缩短开发周期。在目前可选的几种开源代码中, X264以其结构精简适于应用的特点,成为众多团体选择的对象。熟悉X264代码,以此为基础将其移植到DSP平台并进行优化,对构建高效的多媒体平台具有一定的实际意义。
参考文献
[1] 毕厚杰.新一代视频压缩编码标准-H.264/AVC.人民邮电出版社,2005.
[2] 李世平.2005年全球H.264编解码器荟萃. http://blog.csdn.net/sunshine1314
[3] 李方慧,王 飞,何佩琨.TMS320C6000 DSPs 原理与应用(第二版) [M].电子工业出版社,2003.
[4] 张旭东,魏振宇,史鵾.H.264编解码器在C6416 DSP上的实现与优化.电子产品世界,2005,5:71-74.
[5] 安向阳,沈庭芝.基于TMS320DM642的H.264编码的实现和优化.微计算机信息,2005,7-2:128-130.
,基于DM642的X264开源代码实现的研究