一种适合硬件实现的H.264/AVC宏块级码率控制算法
2012-06-06殷海兵周冰倩
王 佳,殷海兵,周冰倩
(中国计量学院信息工程学院,浙江 杭州 310018)
码率控制算法是在码率受限的条件下,通过动态调整编码参数来优化视频质量。假如没有进行码率控制,当通过有限的信道带宽传送压缩的比特流时,缓冲区就会上溢或者下溢。在视频编码标准中,有几种码率控制算法已经被推荐作为参考算法,比如MPEG-2的TM5、H.263的TMN8、MPGE-4的VM8、H.264AVC 的G012 以及一些改进算法[1-2]。
目前,大多数码率控制算法是基于软件实现的,且太过复杂而不能很好地适合硬件实现。对于一些MPEG-2或H.263的码率控制算法已经有人提出了硬件实现方案[3]。针对H.264/AVC提出的码率控制算法参考提案G012更为复杂,其直接硬件实现需要大量的门电路。而对于那些已经提出的,并且需要388.53—1 140 k门电路的H.264/AVC视频编码器来说,G012的硬件消耗非常大。Wu等人[4]提出了一种适合硬件实现的码率控制算法。本文在H.264/AVC编码器Zigzag宏块编码顺序和宏块级流水结构的基础上,利用时域和频域的相关性,提出了新的低复杂度MAD预测算法,解决了硬件实现时的数据依赖问题。
1 码率控制硬件实现特点
通常硬件编码器的实现面临两个问题,数据吞吐和存储带宽。为了提高数据处理效率,硬件编码器通常采用Zigzag宏块顺序和宏块级流水结构,二者结合导致码率控制算法实现时产生复杂的数据依赖关系。并且G012算法MAD预测模块的高复杂度会消耗大量的硬件资源。
1.1 Zigzag宏块编码顺序和宏块级流水
硬件编码器为了实现数据的水平和垂直复用,通常采用Zigzag[5]宏块编码顺序代替软件实现时的光栅扫描顺序。编码顺序的改变导致数据的水平和垂直的依赖关系有所改变,如图1所示,每3个宏块行采用Zigzag宏块编码顺序。
H.264/AVC硬件编码器宏块级通常采用3级或者4级的流水结构。如图2所示,在宏块流水开始前,通过码率控制(RC)模块获取Qp,依次经过整像素运动估计(IME),亚像素运动估计/帧内预测(FME/INTRAL),熵编码/去块效应滤波(EC/DB)3级流水[6]。故编码MBn宏块时,MAD值只能依赖于MBn-2及之前已编码的宏块预测得到。
1.2 G012码率控制算法 MAD预测
在H.264/AVC的码率控制算法G012中,采用线性预测的方法计算MAD,公式为
式中:参数a1和a2采用线性回归的方法进行更新。
参数a1和a2的计算如公式[4]为
其计算复杂度很高,如果直接采用硬件实现,会消耗大量的硬件资源。
2 改进的码率控制算法
2.1 改进码率控制算法结构
根据上文提及的硬件编码器实现的特点和挑战,该改进码率控制算法结构如图3所示。帧级采用G012算法,然后通过宏块自适应调整模块和Qp决策模块对得到每个宏块的量化参数。Zigzag编码条件下帧级和宏块级码率控制如图3所示。从图中可知,在Zigzag条件下,G012算法帧级码率控制率失真性能好于宏块级码率控制,同时也说明了G012帧级码率控制获取的Qp是相对准确的。并且考虑到硬件实现的数据吞吐和存储带宽问题,基于CPU的帧级码率控制的实现每帧只需通过总线与编码器交互1次数据,对如高清编码器可以大大降低数据吞吐。图4中阴影部分模块是本文重点改进的部分,帧级和宏块级MAD预测,宏块量化参数自适应调整模块,如后文中的式(4),(5),(6),(7)所示。
由于帧内宏块的复杂度不同,根据观察部分宏块MAD值相差很大,故通过宏块自适应模块更加精细地调整量化参数,而不产生视频质量的波动,同时降低缓冲区的波动。公式(4)中QPM[i]为当前帧的帧级量化参数,QPU[i]和 QPL[i]分别表示自适应调整值,二者相差不超过2。公式(5)计算帧级MAD预测值(MADP,F)和宏块级MAD预测值(MADP,M)的MADratio值。最后通过公式(6)计算宏块量化参数,其中a,b通过Matlab计算分别得到1.217 3和0.816 0。为了适合硬件的移位计算,近似规整为a等于155/128,b等于105/128。
2.2 改进MAD预测
2.2.1 帧级MAD预测
为了降低G012码率控制算法中MAD线性预测部分参数更新的复杂度,本文帧级MAD直接采用前3帧MAD(n-1),MAD(n-2),MAD(n-3)来预测当前帧MAD(n)的值。根据 Matlab计算得到 a,b,c分别为1.054 4,0.053 0,0.109 5,规整后分别为 135/128,7/128,15/128。Foreman,Carphone,Miss,News测试序列 MAD 预测值和实际值如图5所示,预测误差如表1所示。
图5 Foreman,Carphone,Miss,News 的 MAD 值预测
表1 MAD预测误差
2.2.2 宏块级MAD预测
由于Zigzag宏块编码顺序和宏块流水结构产生数据依赖关系,并考虑到周围宏块和当前编码宏块MBC的相关性,选择当前编码宏块的上方宏块MBU和左边宏块MBL,如图6所示。其中阴影表示前1编码帧相对位置的宏块。采用这4个宏块的MAD值,并考虑到边界情况和3级流水特性,来预测MBC的MAD值。预测流程图如图7所示,其中加权系数通过Matlab计算得到,a,b,c分别为3/4,7/8,4/5。
3 实验结果与分析
本算法基于JM10.2参考模型,搭建每3个宏块行采用Zigzag宏块编码顺序和宏块流3级水模型,在该模型上仿真本文提出的码率控制算法。分别在60 kbit/s,80 kbit/s,100 kbit/s,120 kbit/s 目标码率下测试了低速News序列,高速Foreman和Carphone序列,以及复杂序列Mobile。实验结果如图8和表2所示。经计算,本文提出的算法平均PSNR提高了0.12 dB,帧级MAD预测精度也有所提高,解决了硬件实现时的数据依赖问题,且适合硬件实现。
图8 Foreman,Carphone,News,Mobile 序列率失真曲线
表2 本文算法与G012算法实验结果对比
[1]吕振斌,王惠南.一种H.264基本单元层的码率控制算法[J].电视技术,2009,33(S1):45-47.
[2]程飞,邹雪妹,滕国伟,等.一种宏块级码率控制方案[J].电视技术,2010,34(6):23-25.
[3] CHEN T,CHIEN S,HUANG Y,et al.Analysis and architecture design of an HDTV 720p 30 frames/s H.264/AVC encoder[J].IEEE Trans.CSVT,2006,16(6):673-688.
[4] WU P T,CHANG T C,SU C L,et al.A H.264 basic-unit level rate control algorithm facilitating hardware realization[C]//Proc.ICASSP 2008.[S.l.]:IEEE Press,2008:2185-2188.
[5] CHEN C,HUANG C,CHEN Y,et al.Level C+data reuse scheme for motion estimation with corresponding coding orders[J].IEEE Trans.CSVT,2006,16(4):553-558.
[6] KUO C,CHANG L,FAN K,et al.Hardware/software codesign of a lowcost rate control scheme for H.264/AVC[J].IEEE Trans.CSVT,2010,20(2):250-261.