AVS解码器环路滤波的优化及实现
2013-08-13魏晓君
魏晓君,张 刚
(太原理工大学通信与嵌入式系统实验室,山西 太原 030024)
AVS是我国第一个自主音视频编解码标准,与该领域其他国际标准如MPEG-4、H.264相比,AVS解决了专利问题,其编码效率与H.264相当,且本身具有高效率低复杂度等诸多优点,使得AVS具有广阔的应用前景。
基于DSP平台实现的视频编解码器开发周期比较短,同时具有很大的灵活性,能很好地满足目前市场实际应用和具体特性需求。TMS320DM6446是TI公司专门为多媒体领域应用而开发的高性能定点DSP[1],其内核具有2个数据通道、8个独立的功能单元,采用超长指令集结构(VLIW),每个时钟周期最高可并行处理8条32位指令。本文通过分析AVS环路滤波算法的特点,首先对算法的实现进行了结构上的调整,又对其部分代码采用手工汇编进行优化,在保证解码质量的前提下,显著地提高了解码速度。
1 AVS解码器介绍
AVS与H.264/AVC等其他国际主流压缩视频标准类似,采用基于块的混合编码框架,解码器主要包括解析和解码两部分,其中解析部分包括熵解码、整数反DCT变换等模块,解码部分主要包括帧间预测、帧内预测和环路滤波模块,如图1所示。
图1 AVS解码器模块框图
编解码器反变换量化后图像会出现方块效应[2],且块效应可能会出现在每个宏块的边界上,为了有效去除这些方块效应,达到较高质量的图像效果,要在重建帧之前,对码流采用自适应环路滤波,控制解码误差的累加和扩散,因此处理好环路滤波对AVS解码器的性能至关重要[3]。
2 环路滤波原理
AVS解码器中的环路滤波以88宏块为单位进行[4],除图像边界和条带边界不需要滤波,所有宏块都应以8×8宏块为单位按照光栅扫描顺序依次处理,先从左到右对垂直边界滤波,再从上到下对水平边界滤波的顺序对边界做环路滤波。每个宏块对亮度和色度分别进行环路滤波[5],如图2 所示(4∶2∶0 格式)。每个8 ×8亮度块之间都存在一个边界强度,用Bs表示,对应位置块的亮度边界强度Bs和色度块的边界强度Bs相同,如图2所示(4∶2∶0格式)。且边界滤波分为垂直和水平边界的亮度和色度滤波,由Bs值决定边界滤波的强度,Bs可取值0,1,2,根据局部样本值的特性,对应的边界滤波情况分别为不滤波、标准滤波、强滤波。
图2 宏块中需要滤波的边界示意图(4∶2∶0格式)①
AVS环路滤波以8×8块为单位进行,图3表示边界两侧的p块和q块在水平或垂直方向的6个样本点。利用边界附近的6个像素点对边界进行修正,亮度最多需要修正4个样本值,即p0,p1,q0,q1。色度最多需要修正2个样本值,即 p0,q0。
图3 8×8块水平或垂直边界样本①
在对边界块进行滤波处理时,如果在DCT边界上,正好是图像的边界,若不加以判断,就会误认为是方块效应,这样一来会产生新的误差,导致图像的质量下降,所以要先对边界判断。若是真实边界,则不进行滤波处理;若是伪边界,根据滤波强度来选择不同的滤波方式和滤波系数进行滤波处理。因此环路滤波主要分为三部分:边界阈值推导过程、边界滤波强度推导过程、边界滤波过程。
3 在DSP上的优化分析及实现
由AVS视频标准可知,在整个自适应环路滤波过程中,需要在每个像素滤波前进行是否滤波判断,还要以大量条件判断来选择像素点的具体滤波过程,所以算法复杂度高,运算量很大,且滤波过程中,其对于数据的访问也比较繁琐,严重影响了代码的执行效率。本文就是在C代码优化的基础上,在不影响图像质量的情况下,对滤波过程在这部分代码用手工汇编实现,提高滤波速率,达到实时解码的要求。
考虑到边界滤波是对亮度和色度分别作环路滤波,滤波顺序为先垂直后水平,且在DSP上进行垂直滤波和水平滤波时,对边界样本值的读取和经过滤波修正后的样本值的存储方式差别较大,为了减少数据访问,本文先对当前宏块进行垂直边界滤波,再进行下一宏块的解码,在下一宏块的垂直边界滤波之前进行当前宏块水平边界滤波,即采取垂直边界和水平边界的滤波分开进行的方式。整个宏块在滤波完毕后再将宏块样本值输出到片外存储器,这样就节省了一次对片外整帧数据的存储,大大节省了环路滤波所需的时间。利用这种思想本文将DSP上的环路滤波过程分为4种模式分别进行环路滤波,即亮度垂直模式、色度垂直模式、亮度水平模式和色度水平模式。滤波流程为:先确定8×8宏块边界的Bs值,再判断是亮度还是色度,最后根据这些信息选择具体的滤波模式。写汇编时,要考虑DSP自身的特点,使其硬件资源得到最大限度的利用,且使代码的运行速度和尺寸处于最佳折中点。采用并行执行的方法来减少循环内的执行周期数,充分利用2个数据通道,2个数据交叉通路,8个独立的功能单元,通过调整指令顺序填充NOP延迟间隙,提高代码性能。
本文实现了I帧滤波的汇编优化,I帧(Bs=2)滤波流程如图 4 所示,其中 P0,P1,Q0,Q1分别为样本值 p0,p1,q0,q1修改后的值,色度不需要对p1,q1进行修改。
图4 I帧滤波流程图
这里以I帧色度滤波为例,具体说明手工汇编优化的实现过程。
I帧色度水平滤波模式的具体实现如下:
1)读取数据,因为待滤波的像素值是8位的重构数据,采用C64X+特有的双字指令LDNDW完成参考样本的读取,完成以上16个字节的读取,即1次完成8个像素点的取值,只需6次便可读取滤波一次所需要的全部像素点,充分利用A,B两个数据通道和并行执行的特点,同时处理8个像素点,0~3像素点主要A通道来完成,4~7像素点主要由B通道来完成。
2)滤波边界判断,为了同时实现一行8个像素点的滤波,达到像素级修正的同时,充分体现DSP的并行处理能力,需要对α和β进行打包处理,利于并行处理和软件流水的实现,便于在嵌入式系统进行优化。用SUBABS4,CMPLTU4指令实现样本边界滤波判断,且对其值用XPND4指令进行位扩展。
3)滤波具体过程的实现,先实现α>>2,再对其进行打包处理,最后用ADD4,SUBABS4,CMPLTU4等指令来实现4个像素点的滤波过程判断,且对其值进行位扩展,不同条件下得到的P0和Q0的值主要由双操作指令ADD4和AVGU4实现。
4)利用步骤2)和步骤3)过程中所得的判断值和AND,NOT,ADD4等指令实现具体像素点的P0和Q0值的修正,0~3像素点P0的实现过程如图5所示,最后用STDW指令将修正后的像素值存入寄存器中即可。
图5 0~3像素点P0实现过程的汇编优化图
I帧色度垂直滤波模式,在对数据读取和存储上与色度水平滤波模式是不同的,且读出数据后,要对数据进行转置,具体实现过程与色度水平滤波模式类似,这里不再详述。
4 优化结果及分析
使用集成开发环境CCS3.3对所写代码进行验证,且用其提供的剖析工具profile性能分析工具来估计函数的性能。图6显示了在相同的输入数据和相同的硬件资源配置下,C代码和手工汇编实现的I帧耗时分析图。图中AVS_deblockuvih.asm,AVS_deblockuviv.asm,AVS_deblockyih.asm,AVS_deblockyiv.asm分别为I帧滤波的色度水平模式、色度垂直模式、亮度水平模式和亮度垂直模式的汇编程序,EdgeLoop_I_uv,EdgeLoop_I_y分别为I帧滤波色度、亮度的C程序。
图6 I帧滤波耗时分析图(截图)
观察图6可知,在4∶2∶0模式下,用C实现的I帧环路滤波过程十分耗时,而通过编译器优化和汇编优化后的,I帧亮度(16×16块即4个8×8块)和色度(8×8块)滤波周期都明显大幅度减少,极大地提高了运算速度,缩短了代码执行时间。
5 结论
本文通过分析AVS环路滤波算法,对算法的实现进行了结构上的调整,又对I帧环路滤波采用手工汇编,实现了像素级的优化,在保证解码质量的前提下,显著提高了解码速度,达到AVS解码器在TMS320DM6446上实现实时解码的要求。
[1]李方慧,王飞,何佩琨.TMS320C6000系列DSPs原理与应用[M].2版.北京:电子工业出版,2003.
[2]毕厚杰.视频压缩编码标准——H.264/AVC[M].北京:人民邮电出版社,2005.
[3]杨怀省.基于DSP平台的AVS自适应环路滤波的研究与实现[J].电子器件,2008,22(3):41-44.
[4]AVS工作组.GB/T20090.2—2006,信息技术先进音视频编码第二部分:视频[S].2006.
[5]杨少博,李凤亭.AVS自适应环路滤波器硬件设计与实现[J].电视技术,2008,32(6):21-24.