基于TMS320DM648的H.264视频压缩系统
2013-04-25廖怡
廖 怡
(陕西省工业和信息化厅 信息中心,陕西 西安710006)
H.264[1-2]是由ITU和ISO联合制订的新一代视频编码标准,H.264以其更高的压缩效率以及图像质量,为视频应用领域提供了一个良好的视频压缩工具。目前H.264算法有两种实现方案:一是使用编解码ASIC芯片,其优点是使用方便,但开发周期较长,而且可扩展性较差;二是使用数字信号处理器(Digital Signal Processing,DSP),各种高性能的DSP不仅能满足运算性能方面的要求,而且由于DSP的可编程性,使得能在硬件一级获得系统设计的较大灵活性。H.264算法的高性能是以牺牲计算复杂度为代价的,这对H.264的应用是一个瓶颈,如何在高速DSP平台上对H.264算法进行优化,在保证压缩效率及图像质量的前提下实时实现H.264编解码是本文试图解决的问题。
1 TMS320DM648数字媒体处理器
设计的视频压缩系统核心为TI公司的TMS320DM648处理器,DM648是TI公司最新推出的一款针对多媒体处理领域和视频安全与监控领域的达芬奇技术DSP。它基于第三代高性能先进的VebciTITM超长指令字结构(VLIW),在TMS320C64x+DSP核的基础上,增加了多种外围设备和功能接口。该DSP采用529管脚nF-BGA封装,高度集成化。DM648工作频率可达900 MHz,此外还有其他多种特性,主要包括:(1)10个8 bit视频端口,也可配置为5个16 bit口,支持多种视频标准,可以和视频输入、输出或传输流无缝连接。(2)1个DDR2-533存储接口。(3)增强的DMA引擎,支持处理器管理各式各样高带宽存储器和I/O口。(4)多通道音频串行端口(McASP),10个串行口(Serializers)和SPDIF(DIT)模块。(5)多通道带缓存的串口(McBSPs)。(6)用户可配置的16 bit或32 bit的主机端口(HPI16/HPI32)。(7)32 bit33/66 MHz,3.3 V的PCI,符合PCI 3.2规格。(8)1个四线串行接口(SPI),带两个片选端。(9)64 bit的外部存储单元接口,支持和同步或异步存储单元的连接。
2 运动估计模块的算法级优化
2.1 H.264运动估计发展现状
H.264继承了以往国际视频压缩标准关于运动预测技术的特点,为进一步提高运动矢量的精度、改善解码图像质量、降低编码效率,H.264在运动估计中增加了多参考帧、多模式选择、去环路滤波等若干新的选项,这些新选项的使用在有效提高编码效率的同时,使得运动估计模块的计算复杂度成倍增加,大幅增加了H.264编码器的计算量。
目前针对H.264压缩编码中运动估计新特点进行优化算法的研究受到了高度重视,提出了许多新的运动估计算法。由Z.Chen,P.Zhou和Y.He提出的UMHexagonS算法[3-4]是其中比较有代表性的一种算法,它已经被H.264的参考软件JM采纳,能获得与全搜索算法接近的PSNR值。
2.2 基于运动特性的自适应运动估计算法
UMHexagonS算法运用运动矢量的预测和非对称交叉搜索,结合多分辨率网格搜索的思想,可以得到较高的搜索精度。但UMHexagonS算法的复杂度仍然很高,搜索点数过多。特别是对于运动缓慢、纹理简单的图像,由于它遵循中心偏置假设,运动矢量只集中在预测起始点附近,此时若仍然采用非对称的十字形模板和多六边形栅格模板进行搜索,将造成较大的搜索冗余。针对UMHexagonS算法复杂度高的问题,文中提出了一种基于运动特性的自适应运动估计算法。
2.2.1 起始搜索点预测
为得到当前块的运动矢量预测,必须考虑如何选择用来计算预测运动矢量的参考块。H.264标准选择当前块的左方块、上方块以及右上块作为参考块得到预测运动矢量pred_mv。本文在考虑H.264新特点的基础上,提出了一种新的起始搜索点的预测方法。
表1 不同块类型的参考块位置
在H.264中采用不同大小块进行运动矢量搜索:16×16宏块可被划分为16×8、8×16以及8×8这3种方式,其中8×8块又可进一步划分为8×4、4×8和4×4这3种方式。这种树状结构的运动估计,运动矢量具有更强的相关性,称为重叠相关性。本文结合不同大小块的重叠相关性以及空间相关性,为编码块选择3个参考块,参考块的选择如表1示。其中当前待编码块为,为块类型。不同大小块的搜索顺序为8×8、8×4、4×8、4×4、8×16、16×8、16×16。选择其中SAD值最小的参考块所对应的运动矢量为预测运动矢量pred_mv。
2.2.2 运动类型的判定
文献[4]分析了运动矢量的分布特性,指出视频序列的运动矢量具有中心偏置特性,即大部分块是静止或准静止的,如固定背景。因此,若能根据不同编码块的运动特征,采用不同的搜索策略,在保证精度的前提下可以实现减小计算量、提高搜索速度的目的。
在运动估计过程中,SAD一般可以有效地代表当前编码块的运动特征:运动越剧烈,SAD值越大;而对于背景和低速运动的编码块,相应的SAD值较小。但是单一的采用编码块的SAD值与阈值进行比较来确定运动类型的方法并不准确。因为运动估计中得到的SAD与运动矢量之间没有线性对应关系。实际上SAD与编码块之间的关系是复杂的:如果编码块的SAD较小,则该块的运动较少,纹理简单;如果编码块的SAD较大,则可能代表该块运动剧烈,也可能是该编码块内部有几个不同物体,或是在参考帧中无法找到比较合适的匹配块,各种复杂情况都可能导致SAD值偏大,因此直接采用SAD值进行运动特征的判断并不合理。本文引入新的与SAD有关的判别准则,针对不同运动特征定义MSAD与OSAD之间的关系,提出了一种新的运动特征判断方法。
在参考帧中进行运动矢量的搜索过程中,一般采用SAD作为测量匹配块之间的失真度准则,这里我们定义搜索过程中最小的绝对值误差和MSAD
在搜索过程中预测的起始搜索点的绝对值误差和,记作OSAD,具体定义为
其中,B(i,j)和B'(i,j)为参考帧和当前帧中同一位置的块,此时运动矢量为零;B(i,j)为当前帧(i,j)点处的像素值;B'(i+m,j+n)是参考帧(i,j)上的对应像素值;(m,n)为运动矢量。
实验表明,对于不同运动特征的序列,其OSAD与MSAD之间相差值的大小关系与图像本身的特征有直接的关系,如对于运动较简单的container序列,OSAD与MSAD的值大部分重合或者接近,而在运动相对复杂的mobile序列中部分编码块运动估计中得到的MSAD与OSAD差别较大。因此OSAD与MSAD之间的差值可以对当前编码块特征进行有效的描述,定义该值为DSAD,作为编码块特征的判别准则
为确定编码块的运动特征,本文提出了两个运动特征预测阈值thr_low和thr_high,从而将编码块分为平坦块(DSAD<thr_low)、中间块(thr_low<DSAD<thr_high)以及剧烈块(DSAD>thr_high)。其中两个阈值thr_low和thr_high的选取依下列步骤计算:
(1)记录最近参考帧内各个块搜索过程中的DSAD,并将其按降序排列。
(2)找出位移>W/2的块的数量N1和位移>W/4的块的数量N2(W为搜索范围)。
(3)令thr_high等于第N1个最大的DSAD值,thr_low等于第N2个最大的DSAD值。
2.2.3 动态搜索策略
统计结果显示,运动矢量主要分布在零矢量周围以(0,0)为圆心,±2像素范围的区域内,有74.76%的运动矢量聚集在以零矢量为中心的一个十字形区域,呈现一种十字形分布。因此,若采用十字形模板进行搜索可以得到较高的搜索效率。此外,文献[4]指出,对于自然图像序列,水平方向的运动比垂直方向的运动要剧烈得多,非对称的大十字形模板可以很好地利用这种特性。K.K.Ma和G.Qiu在文献[5]中指出自适应的十字形模板可以根据相邻块的运动矢量自动调整搜索臂长,它对中小运动块具有较高的编码效率质量。此外,六边形模板在匹配窗中移动时在各个方向上的移动速度较接近,搜索速度也很快,是一种性能良好的搜索模板。但为了防止陷入局部最优,六边形模板通常是和小十字形模板组合使用的。综合上述考虑,本算法组合4种不同的模板进行搜索,如图1所示。
图1 新算法的搜索模板
具体的搜索策略如下:
Step1首先按照上面提出的方法进行起始搜索点的预测;
Step2判断当前块的块尺寸模式。如果当前块的块模式>6,直接采用Small-cross模板进行搜索;如果当前块模式>4,组合Hexagon模板和Smallcross模板进行搜索;否则进入Step3;
Step3对块尺寸模式<4的块进行运动类型的判定:如果当前块为剧烈块,采用Grand-cross模板进行初定位,如果是中间块则采用Adaptive-cross模板进行初始定位,随后进入Step4;若当前块为平坦块,只采用Small-cross模板进行小范围搜索得到最优匹配点;
Step4初始定位以后得到的最小误差匹配函数与一个设定的阈值(设为TH)进行比较:若<TH,则以具有最小误差匹配函数的点为起始点,采用Smallcross模板进行搜索得到最优匹配点;若≤TH,同样以具有最小匹配误差函数的点为起始点,组合Hexagon模板和Small-cross模板进行搜索。
为实现比特率受限条件下的最优运动估计,本文使用率失真函数J(m,λmotion)作为误差匹配函数,J(m,λmotion)的定义如下
其中,m=(mx,my)T代表运动矢量;p=(px,py)T表示运动矢量的预测值;λmotion拉格朗日乘法器;R(m-p)代表用来对运动信息进行编码的比特率,在查找表中得到。SAD为绝对误差和。
此外对阈值TH作如下设定
其中,J(A),J(B),J(C)分别为当前块的相邻块的误差匹配函数值。
2.2.3 实验结果
新算法的验证实验采用了JVT的JM86作为实验平台,QP值分别选取20,24和28。为检验新算法的性能,选取全搜索算法(Full)和UMHexagonS算法与新算法(New)进行性能比对。实验选用3个QCIF图像序列:carphone,slient,foreman和一个CIF图像序列mobile,对4个图像序列进行300帧的测试。表2是不同的图像序列采用不同算法的PSNR值、平均每帧的运动估计时间(Time)以及平均比特率(BitRate)的性能比对。
表2可以看出,新算法的PSNR值与全搜索法相比下降特别小(平均降低0.022),与UMHexagonS算法不相上下,这说明重建图像的质量与原图像非常接近;同时比特率增加也特别小;但从表中可以看出,用于运动估计的时间大幅减少了,比全搜索算法平均节省约90%的时间,平均搜索时间只占UMHexagonS算法的61%,速度有了显著的提升。
分析上述数据可知,对于运动较小的低比特率图像序列,如silent和carphone,速度提高的幅度较为明显,这是因为低速运动的图像序列中包含较多的平坦块,因此搜索过程中略过了复杂度较高的十字形模板搜索;而对于细节较丰富,运动较复杂的mobile序列,由于较多地采用了十字形模板进行运动矢量搜索,因此运动估计的精度较高,得到的重建图像的质量也就较好,表现在表2中就是运动估计后的PSNR值几乎与用全搜索法进行搜索后的PSNR值相等。
表2 FS,UMHexagonS和新算法的性能比对
3 H.264算法程序级优化
为提高编码效率,H.264采用一系列先进的编码技术,然而高编码效率是以牺牲计算复杂度为代价的,代码分析结果显示,H.264算法的程序实现是一个运算量巨大的过程。因此,根据DM648的特点,本文通过下述方法对H.264算法的C代码进行了优化:
(1)C64x+编译器提供了许多内联函数,内联函数是直接与C64x+汇编指令映射的在线函数,不易用C/C++语言实现的汇编指令都有对应的内联函数。每个内联函数完成的功能与对应的汇编指令相同。内联函数用前下划线“_”特别表示,其使用方法与调用函数一样。使用内联函数可以快速的对C代码进行优化。
(2)为进一步提高代码性能,找出影响速度的关键C代码段用线性汇编重新编写。线性汇编是C6000系列DSP所特有的类汇编工具。只需要按照C代码的自然顺序,写出线性汇编语句,不必考虑功能单元的分配以及指令的并行性。因此,它比编写纯汇编语句耗时少,又具有较高的执行效率。如果编写线性汇编仍不能达到指标要求的话,再运用纯汇编编写相关的代码,充分利用C6000 DSP结构以及指令集的特点,尽可能并行其中的非相关语句,从而进一步减少代码的执行时间和提高程序的性能。
(3)代码中循环越多,执行的效率越低。因此,考虑采用循环展开的方法,将多循环变为少循环,甚至是单循环。即运用消除冗余循环的方法来提高指令并行执行的程度,从而提高代码的执行效率。
(4)存储器的优化。与PC机相比,DSP的程序存储空间有限。因此,对于视频编解码这种需要处理大量数据的程序而言,必须合理安排数据和程序的存储方式,实现对存储器的优化。具体的优化方法为:把反复调用的程序段(如DCT变换和DCT反变换)放在片内程序存储区中,把频繁调用的数据段放在片内数据存储区中,把不常用的程序和数据段放在片外存储区中,以避免对程序和数据进行不必要的反复搬移。此外,由于一帧图像的数据量较大,故将参考帧和当前帧数据放到片外,需要用到当前块和参考帧数据时,再将它们从片外搬运到内存中,以提高效率。
4 系统性能测试及分析
视频系统的验证实验采用两台DM648数字视频开发板TMDXDVP648搭建测试平台,一块开发板进行视频编码,另一块进行视频解码。主要参数设置如下:搜索范围为16,采用CAVLC编码,图像序列以25帧/s的速度进行编码,采用1个参考帧,使用基于运动特性的自适应运动估计算法。实验表明,本文设计的视频压缩系统可以实时的对352×288(CIF格式)和704×576(D1格式)的视频进行编解码,主观视频图像可达3级[6]以上。此外,此系统的低开销提供了系统集成其它音频视频编解码算法的可能性,以便共同进行复杂媒体的处理。
5 结束语
本文提出了一种基于运动特性的自适应快速运动估计算法,新方法在保证图像质量的前提下,大幅降低了计算复杂度。此外,根据DM648的特点,提出了基于代码级的程序优化策略。实验表明,本文设计实现的视频压缩系统可对D1格式的视频图像进行实时编解码,并且图像质量优良。
[1]ITU-T.Advanced video coding for generic audiovisual services[S].USA:Recommendation H.264,2003.
[2]THOMAS W,GARY J S,GISLE B,et al.Overview of the H.264 video coding standard[J].IEEE Transactions on Circuits and Systems for Video Technology,2003,13(7):1-19.
[3]CHEN Z B,ZHOU P,HE Y,et al.Fast integer pel and fractional pel motion estimation for JVT[C].Awaji,Island,Japan:Joint Video Team(JVT)of ISO/IEC MPEG&ITU-T VCEG,6thMeeting,2002.
[4]CHEN Z B,ZHOU P,HE Y.Fast motion estimation for JVT[C].Pattaya,Thailand:Joint Video Team(JVT)of ISO/IEC MPEG&ITU-T VCEG,7thMeeting,2003.
[5]KAIKUANG M A,QIU Gang.Unequal-arm adaptive rood pattern search for fast block-matching motion estimation in the JVT/H.26L[C].Proc.IEEE Int'l Conference on Image Processing,2003:901-904.
[6]TAN Y L.Principle of image information system[M].Beijing:Tsinghua University Press,2003.