1.引言
多媒体和网络通信技术的飞速发展,视频、图像、计算机视觉、多媒体数据库和计算机网络技术日益融合,使视频处理成为一个多学科的激动人心的领域,遍及国民经济和社会生活的各个方面。目前,视频处理处于多媒体通信的核心地位,而视频数据的巨大数据量成为其存储和传输的瓶颈。因此,视频数据的压缩成为解决多媒体通信问题的关键。
多媒体通信的实现主要有两点:一方面需要快速、稳定的处理器作为多媒体信号处理的平台,另一方面需要适合多媒体通信的协议标准和软件算法,尤其是对视频信号的压缩处理算法。两者结合才能产生高效的多媒体通信设备。
2.硬件平台的建立
2.1 ADSP-BF5xx处理器
Blackfin系列DSP是美国Intel公司和ADI公司进行了战略性合作,发挥各自在RISC(精 简指令集)和DSP上的优势,合作开发出的体现高性能体系结构的定点DSP产品。
Blackfin系列DSP在一个芯片和一个开发平台上融合了DSP信号处理、RISC的控制处理和视频处理功能,具有高度的并行处理和强大的DMA(直接存储器访问)能力,具有专用的视频指令和硬件支持、高效的程序效率、动态的功耗管理和方便的开发工具、领先的内存管理,并支持包括ucLinux在内的嵌入式操作系统。适用于音频、视频和通信领域。
Blackfin系列DSP支持一整套软硬件开发工具,包括ADI公司的仿真器和Blackfin系列DSP开发环境下的Visual DSP++ 4.0。程序员通过Blackfin系列DSP的Visual DSP++ 4.0项目管理环境,开发和调试一个应用程序。Visual DSP++ 4.0是一套使用方便的管理系统,它是各种用于开发DSP应用的DSP工程管理的工具组合。其主要结构包括:①集成了Visual DSP++ 4.0内核的集成编译和调试环境(IDDE);②带实时运行库的C/C++优化编译器;③汇编器和链接器;④仿真软件和程序例程。
基于实时视频处理系统对DSP芯片性能的要求,以及Blackfin系列芯片的特点,我们采用Blackfin系列DSP中的ADSP-BF561作为DSP处理器。
2.2 基于ADSP-BF561的×××平台
我们基于ADSP-BF561搭建的×××平台如图1所示。输入的模拟视频信号经视频芯片ADV7183A转化为数字信号,此信号从ADSP-BF561的PPI2口进入ADSP-BF561。音频信号经AD1836 CODEC后从ADSP-BF561的SPORTS0口进入ADSP-BF561。解码后的码流中,音频信息仍经AD1836 CODEC后从ADSP-BF561的SPORTS0口输出,而视频信息则经ADV7179转换后从ADSP-BF561的PPI1口输出。此系统采用uclinux作为嵌入式操作系统,通过Flash启动,支持串口及网络传输。解码过程中的原始图像、参考帧等数据存储在SDRAM中。
3.AVS视频解码标准的实现
3.1 视频编解码标准简介
当前视频编解码标准主要包括两个系列,一个是MPEG系列,一个是H.26X系列。其中MPEG系列标准由ISO/IEC组织(国际标准化组织)制定,H.26X系列标准由ITU-T(际电信联盟)定。MPEG系列标准包括MPEG1、MPEG2、MPEG4等,主要应用于视频存储(DVD)、广播电视、特网或无线网上的流媒体等;ITU-T的标准包括H.261、H.262、H.263、H.264等,主要应用于实时视频通信领域,如电视会议。两个组织也共同制定了一些标准,H.262标准等同于MPEG-2的视频编解码标准,而目前最热门的H.264标准是MPEG-4的第10部分。AVS则是中国具有自主知识产权的视频编解码标准,主要面向于高清晰度电视、高密度光存储媒体等应用中的视频压缩。
3.2 AVS视频编解码标准
目前,视频编解码技术正处于更新换代的关键时刻,国际标准H.264以其各方面较优的质量在很大程度上超越了原有的MPEG-4,成为下一阶段视频编解码的首选国际标准。与此同时,我国抓住数字视频编解码标准更新换代的历史机遇,在长期参与国际标准制订的基础上,并在相关部门的支持下,提出了具有自主知识产权的数字视频编解码技术标准AVS(Audio Video Coding Standard)。
国家信息产业部科学技术司于2002年6月批准成立数字视频编解码技术标准工作组,简称AVS工作组。在2002年的最初几次会议中,视频组专家统一了以当前国际上最先进的MPEG-4 AVC/H.264框架为起点,自主制订适合既定应用的中国标准。强调自主知识产权,同时充分考虑实现复杂度。工作组联合了众多大学、科研单位和公司参与了编解码方案的制订,经过7次AVS正式工作会议和3次视频组附加会议,历经一年半的时间,审议了182个提案,先后采纳了41项提案,最终完成了AVS标准的第一部分(系统)和第二部分(视频)的草案最终稿(FCD),配套的验证软件也已完成。
AVS的主要创新在于提出了一批具体的优化技术,在较低的复杂度下实现了与国际标准相当的技术性能,而且并未使用国际标准背后的大量复杂的专利。
3.3 AVS关键技术
AVS视频编码标准中具有特征性的核心技术主要包括:8×8整数变换(DCT/IDCT)、量化、帧内预测、1/4精度像素插值、特殊的帧间预测运动补偿、二维熵编码、去块效应环内滤波等。
3.3.1 DCT/IDCT变换
DCT/IDCT属于变换编码,由于DCT/IDCT变换存在快速算法,易于硬件实现,因此DCT变换成为当前视频编解码国际标准之中的首选正交变换,在视频编解码技术中得到了广泛应用。目前为止,视频编解码大都采用了基于DCT/IDCT变换的处理办法,AVS解码标准中采用的是8×8的DCT/IDCT变换。
对于大尺寸的二维数值矩阵,倘若采用普通的DCT/IDCT变换来进行,其所花费的时间将是让人难以忍受甚至无法达到实用的。为了克服这一难点,人们提出了很多的快速算法。常用的方法是先将二维DCT/IDCT变换转换为两个一维DCT/IDCT变换,然后根据一维DCT/IDCT变换的蝶型图来实现DCT/IDCT变换的快速算法。8×8一维DCT/IDCT变换快速算法的蝶型图如图2所示。其中,正向为DCT变换的蝶型图,逆向为IDCT变换的蝶型图。
3.3.2 帧内预测
S的帧内预测技术沿袭了MPEG-4 AVC/H.264帧内预测的思路,用相邻块的像素预测当前块,采用代表空间域纹理方向的多种预测模式。但AVS亮度和色度帧内预测都是以8×8块为单位的。亮度块采用5种预测模式,色度块采用4种预测模式,而这4种模式中又有3种和亮度块的预测模式相同。在质量相当的前提下,AVS采用较少的预测模式,使方案更加简洁, 实现的复杂度大为降低。
3.3.3 帧间预测
帧间运动补偿是混合编解码技术框架中最重要的部分之一。AVS标准采用了16×16、16×8、8×16和8×8的块模式进行运动补偿,而去除了MPEG-4 AVC/H.264标准中的8×4、4×8、4×4的块模式,目的是能更好地刻画物体运动,提高运动搜索的准确性。实验表明,对于高分辨率视频,AVS选用的块模式已经能足够精细地表达物体的运动。较少的块模式,能降低运动矢量和块模式传输的开销,从而提高压缩效率、降低编解码实现的复杂度。
3.3.4 去块效应滤波技术
块效应是在视频编解码中人眼察觉到的小块边界处的不连续,它是由视频编解码中的分块编解码引起的,使得图像的主观质量下降,码率越低,块效应越明显。
AVS视频解码的去块滤波算法是一种基于块边缘的环路滤波算法。在去块效应滤波时,先判断边界是图像的真实边界还是方块效应所形成的边界(假边界)。对真实边界不进行滤波处理,而对假边界则要根据周围图像块的性质和编解码方法采用不同强度的滤波。
3.4 AVS视频解码标准在ADSP-BF561上的实现
将AVS视频解码程序在DSP上实现,主要需完成以下两部分工作:
(1)将AVS视频解码参考程序(用C/C++语言实现)在PC机上运行和调试。
(2)在PC机端调试完成的AVS视频解码程序,移植到DSP端。
由于ADSP-BF561的C/C++编译器支持标准C/C++编译,因此,在PC机上的C/C++代码并不用做较大的修改就可以移植到ADSP-BF561上。但值得注意的是,原有的视频编解码程序由于是基于PC机开发的参考程序,程序的结构并不适合DSP嵌入式系统。所以在将代码从PC端移移植到DSP端的时候, 需要注意内存分配、语法规则等问题。
4.AVS视频解码标准在ADSP-BF561上的优化
通过把PC机上的AVS视频解码程序DSP化,可以在ADSP-BF561上实现AVS视频解码算法,但是,这样实现的算法运行效率很低,并不能达到要求,因为所有的代码都是由C/C++语言编写,并没有完全利用ADSP-BF561的各种性能,所以必须结合ADSP-BF561本身的特点,对其进一步优化。由于AVS解码程序复杂度较高,我们在开始优化之前首先需对其进行性能分析,找出AVS视频解码算法的瓶颈所在,便于我们更好地开展优化工作。我们在参考前人所做的相关性能分析的基础上,通过使用Visual DSP++ 4.0提供的profiling工具,对视频编解码的性能进行了分析,确定了代码中的低效率段。
通过分析我们会发现,IDCT变换、运动估计、模式选择及去块效应滤波部分占程序总运算量的比重很大,是AVS视频解码标准的瓶颈,因此这部分函数是程序优化的重点。这样,我们就对AVS视频解码标准的整体性能有了初步的了解,同时也找到了影响其性能的瓶颈所在,下一步便可以开始对其进行优化了。
对AVS解码程序进行了以下三个层次的优化:系统级优化(基于硬件结构的优化)、算法级优化、指令及汇编级优化。
4.1 系统级优化
通过选择Visual DSP++ 4.0提供的编译优化选项,根据AVS视频解码的要求对优化选项进行选择和配置,可以达到明显的优化效果。但是需要注意的是,一旦选用了最高级别的优化,可能会影响程序的正确性,导致程序运行出现问题。因此,我们必须在充分了解编译参数的情况下选择合适的优化方案。
另外,与PC机相比,ADSP-BF561的程序数据存储空间非常有限。因此,对于视频解码这种需要处理大量数据的程序而言,必须合理安排数据和程序的存储方式,实现对存储器的优化,以便提高程序执行的效率。否则,大量数据的反复搬移会阻碍程序运行效率的提高。因此,我们在充分分析代码的基础上,把被反复调用的程序段放在片内程序存储区中,把频繁用到的数据段放在片内数据存储区中,把不常用到的程序段和数据段放在片外存储器中,以避免对程序或数据进行不必要的反复搬移。
在AVS视频解码程序运行过程中,由于一帧图像的数据量很大,故而将参考帧和当前帧数据放到片外,需要用到当前块和参考块数据时,再将它们从外存搬运到内存中,以便提高效率。
4.2 算法级优化
算法级优化主要是利用视频编解码的自身特点,采用快速高效算法,从算法上挖掘潜力,提高运行速度,达到优化目的。例如,如前所述的将二维IDCT变换改为通过两次一维IDCT变换来完成,并进一步利用蝶型图等快速算法来显著地提高编解码效率等。
4.3 指令及汇编级优化
指令及汇编级优化主要是针对ADSP-BF561的具体特点,进行代码的功能精简、数据结构优化、循环的优化、代码的并行化处理等。在整个算法实现的过程中,汇编算法的优化一定要与相对应的芯片的结构相联系。如寄存器的分配,乘法和加法运算的溢出等都要详细地考虑。在优化程序时将耗时函数抽取出来,用线性汇编改写,充分利用丰富的媒体处理指令,最大限度地利用ADSP-BF561的并行性。
a ) 使代码线性化
这样有利于DSP的流水线满负荷运行,更充分发挥ADSP-BF561的数据处理能力。
b)减少对片外存储器的访问次数
片外存储器相对于片内存储器是低速设备,片外存储器的读取时间是片内存储器的几倍至十几倍对于片外存储器的数据,应尽可能做到一次读取,完成多次计算。
c)使用硬件循环代替软件循环
ADSP-BF561具有两组零开销硬件循环寄存器,通过使用硬件计数器代替软件指令来判断循环条件,执行循环。这样就保证了流水线的畅通,避免了不必要的时钟开销,提高了速度。
d)使用专用指令
ADSP-BF561提供了求最大值、最小值、绝对值及大量视频专用指令,通过使用这些指令,能大大提高代码的执行速度。例如,进行模式选择时会调用绝对差值求和函数(SAD),该函数虽然较简单,但调用频繁,对其进行汇编优化,能较大提高模式选择的速度。对于绝对差值求和函数(SAD),通过使用ADSP-BF561的专用视频指令SAA,可以大大提高运算速度。
e)使用并行指令和向量指令
ADSP-BF561中每条通用指令都可以和一条或两条存储器访问指令并列执行,这样有利于ADSP-BF561的流水线满负荷运行,更充分发挥ADSP-BF561的数据处理能力。向量指令可以同时完成两条或两条以上的运算,大大提高了运行效率。
用ADSP-BF561汇编语言编写的对应函数的优化程序经调试运行后,IDCT部分效率提高了大约15倍,去块滤波部分效率提高了大约6~7倍。对于模块中的其它部分函数,也同样取得了良好的优化结果,说明我们的优化工作确实达到了良好的效果。部分函数优化前后性能对比如表1所示。
在表1中,inv_transform_B8()、DeblockVBs2_Luma()和DeblockVBs1_Luma()分别表示AVS标准中所采用的IDCT函数、BS = 2时亮度块的滤波函数和BS = 1时亮度块的滤波函数;inv_transform_B8_asm()、DeblockVBs2_Luma_asm()和DeblockVBs1_ Luma_asm()是在相同的实验条件下,用ADSP-BF561汇编语言编写的对应函数的优化程序。第二列表示优化前的时钟数,第四列表示优化后的时钟数。
5.结 论
本文选择我国具有自主知识产权的视频编解码技术标准AVS作为编解码算法的框架,以ADSP-BF561为基础进行了AVS视频解码标准的实现。并针对ADSP-BF561处理器的硬件特点,对AVS视频解码标准的具体代码进行了优化,使整个AVS解码标准代码的运行效率有了显著的提高。
转载于:https://blog.51cto.com/2343338/461986