新一代视频编码标准H.264在高速DSP平台上的实现与优化
Implementation and Optimization the New Generation Video Coding Standard
H.264 in High-Speed DSP Platform
(清华大学 电子工程系, 北京 100084) 魏振宇,张旭东
摘要:本文介绍了新一代视频编码标准H.264性能和技术特点,并讨论了H.264在TMS320C6416上的实现与优化。笔者的工作是在C6416DSP的开发平台NVDK上实现了H.264的独立编解码算法,并对其进行优化,使其达到实时通信的要求,完成一个多媒体通信终端平台。因为代码的兼容性和可移植性,笔者的工作可以方便地移植到TI的新一代媒体处理器DM642为核心的系统中,实现更好的效果。试验结果显示,优化后的编解码器运行速度有了很大提高,在Qcif格式下基本达到了实时编解码效果。
关键词:H.264;NVDK;数字信号处理器(DSP)
中图分类号:TN919.81
文献标识码:B
Abstract: The feature of new generation video coding standard –H264 is introduced, and the implementation of H.264 using the NVDK C6416DSP platform is discussed. An optimized H.264 codec which has the real-time performance is realized. The codec can be used as a multimedia communication terminal platform. Because of the compatibility and transplantability, the realized codec can be transplanted to multimedia processor DM642. Simulating result shows that the optimized codec has high performance and real-time encoding and decoding rate for Qcif format sequence.
Key words: H.264;NVDK;digital signal processor (DSP)
从视频电话和视频会议到DVD、数字电视和流媒体,数字视频的应用领域在迅速扩大。正是由于众多视频标准的发展使数字视频得到广泛的应用。这些标准实现了不同制造商设计的应用系统之间的可互操作性,从而加速了视频市场的发展。
H.264/AVC是ITU-T视频编码专家组和ISO/IEC运动图像专家组联合提出的最新一代的视频编码标准。H.264/AVC标准的主要目的是提高压缩效率,并且为实时应用(视频电话)和非实时类应用(存储、广播或者流媒体)提供一个优良的视频压缩编码通用工具。不论从编码的效率方面,还是从有效的适应各种网络和各种应用领域的灵活性方面,H.264/AVC都体现着视频编码技术的很多优势。这些新特性使H.264/AVC标准在实现和现有编码标准(H.263,MPEG-4 Simple Profile)相同视觉效果的同时获得大约50%比特率的节省。因此,将H.264的先进技术和稳定的媒体处理器相结合,实现高效的媒体通信平台有着一定的工程意义和市场价值。目前,数字信号处理器(DSP)技术的高速发展为高效媒体处理器的实现提供了可靠的硬件平台。C64系列DSP是当前TI(Texas Instruments)公司推出的处理能力最高的定点DSP,NVDK(Network Video Development kit)是其很好的仿真实验平台。在最强大的DSP上实现目前最先进的视频编码标准,有着一定的工程意义和广阔的市场价值。并具有较强的新颖性和实用性。
1 H.264标准简介
H.264是ITU-T和ISO/IEC正在联合制定的最新编码标准,它最先由ITU-T于1997年提出,目标是提出一种更高性能(相对于当时的H.263)的视频编码标准。目前,这个标准还在不断制定和完善中,不断有新的建议提交。从各种实验来看,它达到了当初提出的目标。相对于其他标准,H.264具有以下特点:
(1)低码率,高质量。
在相同质量的情况下,H.264相对于H.263的Baseline可以节约40%~50%的码率。
(2)广阔的应用范围。
H.264的不同Profile既可以应用于有严格时延限制的实时通信中,也可以应用于对时延要求不高的其他应用中(视频存储、流媒体等)。
(3)鲁棒性。
H.264在设计时,针对分组交换网如Internet中的分组丢失和无线网络中比特误码都提出了相应的工具,使得H.264在这些网络中传播时具有更强的抗误码性能。
(4)对各种网络的友好性。
H.264中增加了NAL层,负责将编码器的输出码流适配到各种类型的网络中,从而提供了友好的网络接口。
H.264之所以能够达到以上性能,是因为采用了以下一些先进的技术:
首先是帧内预测编码,充分利用图像空域相关性,来降低码率。共有13种预测模式(4×4块大小9种预测模式,16×16块大小4种预测模式),这在以往标准中是没有的。
其次采用新的运动估计方法。H.264有7种块匹配模式,
编码时对其逐一计算,选择最优。例如较为精细的部分采用 4×4块大小,不运动的背景可以采用16×16块大小等。以往标准只有固定的一种或两种块大小模式。H.264采用多帧参考,最大限度利用实域相关性。参考帧可以从1帧到5帧,以往标准都是单帧参考。还有采用1/4或1/8精度的亚像素运动估计,以往标准至多采用1/2精度亚像素搜索,而且不是必选选项。为了消除视频编码中常出现的块效应,H.264使用了去块效应滤波器。
它还采用整数DCT变换,以提高变换速度,采用CAVLC,CABAC等新的熵编码方法以提高编码效果。
2 开发平台NVDK简介
NVDK是一款针对TI C64系列DSP的仿真平台。它的核心是一块TI TMS320C6416DSP,C6416是一款高性能的定点DSP。它有8个独立的逻辑功能单元,最高主频能达到600 MHz,由于C6000系列DSP允许一个时钟周期最多执行8条指令,因此,C6416最高处理能力能够达到4 800 MIPS。此外,C6416有64个独立的通用寄存器,并提供很多针对视频处理的并行指令,如一条指令对4个字节的数据进行加、减、乘、求绝对值、点乘等运算,方便进行媒体处理器的开发。
C6416有128KB的片内存储区,另外提供了32 bit的EMIF(extern memory interface)扩展内存接口。最大可扩展内存空间为4G存储空间,NVDK板上提供256MB的片外存储器。此外,C6416采用哈佛结构,具有独立的地址总线和数据总线,地址总线32Bit,数据总线64Bit,可以进行8,16,32,40,64bit数据的读写,具有强大的功能。
此外,NVDK板上还有丰富的音视频接口,并提供相关的视频捕获,格式转换,视频播放等函数,大大方便笔者的工作。
3 H.264编解码算法在DSP上的实现与优化
将H.264在DSP上实现与优化,需要经过以下几个步骤:算法选择,代码移植,代码优化。下面就着几个方面逐一进行介绍。
(1)算法选择。
ITU的官方网站上提供了很多可选的标准软件可以采用,包括Tml系列和Jm系列,因此选择一个合适的算法软件显得非常必要。笔者最终选择了Jm6.1e版本的baseline profile。之所以这么选择,理由一是相对于别的软件版本,Jm6.1e是我们开始进行算法实现和优化工作时,ITU-T提供的最新版本的参考模型,里面包含了H.264标准中最新的技术,具有最好的编码效果。其次,由于H.264的算法复杂度过高,baseline中不包括一些复杂度很高的可选选项,而其采用的技术已经能够满足我们实现高效媒体处理平台的需要。
(2)代码移植。
代码移植,就是将在PC端跑通的程序,移植到DSP端,使其能够初步运行。需要考虑的问题主要是一些内存分配,语法规则等问题。
(3)代码优化。
由于原始的参考软件执行效率不高,达不到我们实时要求,需要对其进行优化,提高其执行速度和效率,对DSP程序进行优化主要分为以下3个层次:
①项目级优化。
项目级优化,是对项目的整体优化,主要手段有以下几点:
首先是利用CCS编译器提供的优化功能,对优化选项进行选择和配置,如打开O-3选项等。
其次对程序结构进行调整,对不适合DSP执行的语句进行改写,以提高代码的并行性。
最后是对内存进行合理分配,因为DSP资源有限,我们把一些常用数据,如全局变量,程序等数据分配到访问速度高的片内内存,把占用空间较大的数据分配在片外,如帧存等。
②算法级优化。
算法级优化主要是针对H.264的特点,在算法层面上进行研究与创新,提出高效实用的算法,对原有低效的算法进行改写,以提高速度,实现优化目标。
③指令级优化。
理论上来说,TI的DSP一个时钟周期能够最多执行8条指令,此外,64系列DSP还提供丰富的并行性指令,如一条指令就能执行4个8位数的加,减,乘,点积,求绝对值等,对我们视频编解码算法都很有价值。
指令级优化是利用DSP的特点和相关并行指令,对代码进行优化的手段。主要方法有:
? 循环拆解,将C语言中的for循环打开,排流水线,提高并行性;
? 调用系统提供的丰富的内联函数;
? 调整数据结构,将需要大规模访问的数据,在内存中将它们放置在一起,方便DMA机制的访问,或并行指令的处理;
? 将耗时函数抽取出来,用线性汇编改写,最大限度的利用DSP的并行性。
下面就编解码算法中的具体优化工作做一简单介绍。
(1)编码器。
①算法级优化。
在编码器端,对H.264首先进行了算法改进。
视频编码中,运动估计部分是运算量最大的一块,研究显示,对于H.264,单帧参考,运动估计占总运算量的70%, 5帧参考,这个比例能达到90%,因此,提出有效快速的运动估计算法非常有必要,我们通过研究提出了基于预测和早停止技术的运动估计算法,主要方法是利用周边邻块对当前块运动矢量进行预测,并设定自适应阈值,使搜索提前停止。我们提出的算法,在搜索窗32时,每块平均搜索点数3~4个左右,和全搜索算法的4 225余个点相比,速度提高1 000多倍。和一些经典快速算法相比,优势也很明显,如新三步法理论最少搜索点数为17个,菱形搜索最少搜索点数也要13个。H.264算法中,亚像素运动估计采用全搜索,1/4精度下,需要搜索16个点。当整像素点数已经降至4个时,亚像素的运算量显得非常可观,有必要对其进行优化。我们提出了自己的亚像素快速搜索算法,平均搜索点数7个,节省运算量60%以上。我们提出的新算法提高编码速度很明显,而且质量也较好,PSNR损失不到0.06 dB,码率增大2%左右。这对于运动估计算法基本可以忽略不计。
此外,针对帧间编码7中块大小匹配模式,以及帧内预测13中模式太过复杂,运算量太大的问题,提出了自适应模式选择算法,不需要将所有模式全部计算,就能找到一种相对最优的模式。以上算法的具体方法,我们都已写成论文,投到相关杂志与会议中,这里就不赘述了。
② 指令级优化。
笔者充分利用系统并行性,对耗时函数进行汇编语言改写,涉及函数有DCT变换,反DCT变换,整像素运动估计,亚像素搜索,帧内编码函数,插值函数等,效果明显。如运动估计中频繁调用的SAD计算,是对相应像素点做差,并对残差场求绝对值和的计算。原始算法是对每一对像素点分别求差,再对其绝对值累加。对其进行了线性汇编的改写,使用了SUBABS4(一次对两对4字节数据做差并求绝对值),DOTPU4(一次对两对4字节数据做内积),LDW\LDNW(一次读取4字节数据)等指令,使代码并行性有了很大提高。对16×16的块来说,优化前需要指令1 000余条,优化后,200条就足够。
笔者还对数据结构进行了调整,方便DMA读写,将CPU解放出来。涉及函数有插值函数,读写帧存等。例如原始的插值函数,插值后的具有相同性质的数据在内存中离散分布,不方便亚像素运动估计中并行指令的使用,通过更改数据结构,将具有相同性质的点在内存中使其物理地址相邻,方便大规模数据的访问。
③其他优化手段。
将和DSP实现无关的一些函数进行了删减和改写,如统计信息函数和打印信息函数等。
(2)解码器。
解码器的优化方法和编码器类似,主要有:
①削减冗余代码;
②循环拆解,排流水,提高并行性;
③调整数据结构,对大数据量访问采用DMA机制;
④线性汇编优化:涉及函数有插值部分,帧内预测部分,反整数变换部分等;
⑤视频输出及显示函数编写。
4 优化后实验结果
通过以上的优化手段,目前编解码器的效果如下:编码器对Qcif序列,中等运动下,每秒钟编码14~16帧解码器对于Cif序列,每秒钟解码15~20帧,Qcif序列,每秒解码50~60帧。
编码器试验采用5个H.264标准测试序列,涵盖高、中、低运动,共100帧,采用IPPPP?编码模式。表1为编码后PSNR,编码帧率,码率等实验结果,可以看出,优化后的编码器具有较好性能,编码速度能达到14~18帧。表2为优化前后时钟周期数对比,I帧速度平均能够提高25倍左右,P帧编码因为采用了快速搜索算法,平均能够提高近50倍。

此主题相关图片如下未命名.jpg:
表3是解码器实验结果,测试序列采用Cif分辨率的5个不同序列,均为20帧,从实验结果可以看出,解码器对于Cif序列,基本能够达到准实时。优化前后时钟周期数对比也很明显,速度提高35~50倍。
表2 优化前后编码器时钟周期数对比
此主题相关图片如下未命名.jpg:
5 前进展望及下一步开发
今后,笔者可以调整代码结构,使其更加紧凑,适合DSP指令体系,还可以对更多函数进行汇编语言改写,以实现编码器Qcif下实时,解码器Cif下实时的目标。此外,因为代码的兼容性和可移植性,可以把在C6416上实现的编解码算法移植到TI公司推出的媒体处理专用芯片TMS320DM642上,利用其丰富的媒体处理接口和协处理器,实现更好的性能。
参考文献:
[1] UB Video Inc..Emerging H.264 Standard: Overview and TMS320C64x Digital Media Platform Implementation[EB/OL]. www.ubvideo.com.
[2] IEKC64x Users Manual[Z].
[3] Joint Video Team(JVT) of ISO/IEC MPEG and ITU-T VCEG.Joint Video Specification (ITU-T Rec. H.264 | ISO/IEC 14496-10 AVC)——Joint Committee Draft[S]. document JVT-E022d3.Doc. 2002-09.
[4] TMS320C6000 CPU and Instruction Set Reference Guide[Z].TI. 2000.
作者简介:魏振宇,清华大学电子工程系硕士生,研究内容为视频编码及实现;张旭东,清华大学电子工程系副教授,高速信号处理与网络传输研究所副所长,主要研究方向为多媒体信号处理与DSP系统。