基于ADI BF533的MPEG-4解码系统的实现
2008-05-08
作者:汪 林, 刘 宇, 代金良,
摘 要:介绍了一种在ADI公司开发板" title="开发板">开发板Ez-kit Lite上开发的基于ADI BF533的MPEG-4解码系统。该系统在600MHz的工作频率下,可以对D1格式的ASP码流实时解码,并转换为PAL制式的模拟信号在电视上显示。详细讨论了系统的硬件平台设计和软件实现,并对系统的性能进行了测试。实验结果表明,BF533在嵌入式多媒体应用方面具有很大潜力。
关键词: MPEG-4 数字信号处理器 Blackfin 视频解码算法" title="解码算法">解码算法
随着网络和多媒体应用的日益广泛,人们对视频的传输速率和图像的质量有了更高的要求。MPEG-4标准是由国际运动图像专家组于2000年10月发布的一种面向多媒体应用的视频压缩标准,它以高质量、低传输率的特点在一定程度上解决了视频多媒体的压缩和传输问题,广泛应用于网络多媒体、视频会议和多媒体监控等图像传输系统中。但由于多数播放器都是基于PC机的,MPEG-4的应用范围受到了很大的限制,因而研制和开发一种嵌入式的MPEG-4终端解码系统具有重要的现实意义和实用价值。
BF533是ADI公司最新开发的基于微信号体系结构的DSP。它集信号处理与控制功能于一体,具有双MAC结构和正交的类似RISC的微处理指令集,使单指令多数据和多媒体操作都引入了单指令结构,且运算速度最高可达1.5GMAC/s;可以方便地扩展SPI、SPORT、PPI、UART等接口;具有先进的Cache管理机制和强大的DMA功能。这些特点决定了BF533非常适用于各种视频、音频和通信领域。本文以BF533为核心处理器,以ADI公司提供的开发板EZ-kit Lite为开发平台实现了MPEG-4解码系统。该系统可以对D1(720×576)格式的ASP(Advanced Simple Profile)码流实时解码,并转化为PAL制式(25fps)的模拟信号在电视上显示。下面详细介绍该系统的设计原理、硬件及软件实现。
1 MPEG-4算法原理简述
MPEG-4标准是一种基于对象的多媒体视频压缩标准。它在编码前首先对视频序列进行分析,从原始图像中分割出一个或多个视频对象,然后再对各个视频对象的形状、运动和纹理信息分别编码,并对不同的对象采取不同的编码尺度,以达到高效压缩的目的。MPEG-4视频编码可以粗略地分为模型编码和熵编码。模型是指运动图像,运动图像在时间和空间上都有冗余,可以被很好地压缩。在二维空间上,图像相邻像素之间存在相关性,人眼对图像的高频分量不敏感,因此可以利用频域变换,滤掉图像的高频分量进行压缩。运动图像在时间上具有相关性,可以通过运动估计和运动补偿去除时间上的相关性。熵编码是与模型无关的纯计算机编码方法。解码过程与编码过程正好相反,解码器的原理如图1所示。为了适用于不同的应用场合,MPEG-4提供了一系列称之为Profile的工具集。这些工具集决定了解码器所能完成的功能和计算复杂度,关于Profile功能的规定可以参见参考文献[1]和[2]。本文设计的解码器除了完成SP规定的一些基本功能外,还实现了部分的ASP的功能。具体地说,它实现的SP功能包括:IVOP、PVOP、4MV、无限制MV、DC/AC预测和VLC解码;实现的ASP功能包括:BVOP和两种量化方式。为了支持大分辨率图像的应用场合,该解码器可以支持D1格式的解码。
2 MPEG-4解码系统的硬件设计
2.1 EZ-kit Lite开发板的结构
为了提高Blackfin的开发效率,ADI公司提供了EZ-kit Lite开发板,这样就可以通过JTAG口对DSP程序进行仿真[5]。开发板上有BF533处理器芯片、32MB的SDRAM、2MB的闪存、音频编解码芯片AD1836、视频A/D解码芯片ADV7183、视频D/A编码芯片ADV7171和ADM3202 RS-232线驱动器/接收器。开发板上还扩展了一些音频和视频输入输出接口,能方便地输入输出音视频数据。这些特点都保证了EZ-kit Lite能够用作BF533音频和视频应用的开发。开发板还提供了4个开关SW4~SW7,连接到可编程引脚(Programmable Flag)PF8~PF11上,可以接收用户的输入,对程序进行控制。
2.2 解码系统的硬件设计
用BF533芯片实现的MPEG-4解码系统包括硬件平台设计和软件设计两大部分。整个系统包括码流接收单元、视频解码单元、逻辑控制单元、数据存储单元、数模转换单元和视频显示单元。由于整个系统是在EZ-kit Lite开发板上实现的,可以利用开发板上的现有模块。数据存储单元可用板上的32MB SDRAM代替,逻辑控制单元可用开关SW4~SW7对可编程引脚的控制来实现,数模转换单元可用D/A转换器ADV7171来实现,视频显示单元就是连到EZ-kit Lite开发板视频接口上的电视,码流接收单元可用事先存放到SDRAM上的码流来模拟。整个系统的硬件结构如图2所示。
解码器从SDRAM读入码流后开始解码,解出的YUV图像信号转换为ITU-R 656格式信号存放到SDRAM中,然后通过PPI口(并行外设接口)输送到D/A转换器ADV7171转换为PAL制式的模拟信号在电视上显示。整个系统是通过对可编程引脚的编程来控制系统的开始、暂停、继续和结束的。
3 基于MPEG-4解码算法的软件设计
为了能够实现实时解码,结合BF533的特点对程序进行优化是非常必要的。除了一些传统的优化方法以外[6~8],根据解码算法的运算复杂度,主要从以下几个方面进行优化。
3.1 算法优化
3.1.1 程序的定点化
由于BF533是32位定点DSP,只适合做加乘运算,而对浮点运算和除法运算的效率则较低,所以要对程序中的浮点运算和除法运算做定点化。算法中的除法运算主要存在于反量化" title="反量化">反量化和反DC/AC预测两个模块中。这两个模块的情况很类似,都是(a+b/2)/b类型的运算。可以先将它表示为a·65536/b+32786,然后再右移16位计算出结果(这里取Q16),其中65536/b可以通过查表的方法得到。这样可以将原来的定点除法运算用乘加和移位来实现,从而提高了运算速度。
3.1.2 VLC解码算法
VLC码属于变长Huffman码。由于码长不固定,所以解码时采用逐位查找的方法,效率很低。MPEG-4算法中有两种变长码:常规的VLC码和可逆的VLC码(RVLC)。系统采用的解码算法不支持RVLC码,只支持VLC码。标准中VLC码的最大长度为12位。根据Huffman码是前置码的特点,在解码前先制定一个大表,表长为212,表中的每一组元素对应以该组元素在表中的索引位置为Huffman码时解出的符号。解码时,解码器每次从码流中读取12个比特,并以这组数的十进制值作为索引值从表中查取应该解出的符号以及码的长度。这样只需一步运算就能解出一个VLC码,减少了运算量。
3.1.3 IDCT算法
IDCT运算是MPEG-4算法的核心过程之一。该算法被频繁调用,在整个解码过程中占用很大比重。在优化时,一般采用陈氏快速算法[9],该方法类似于FFT算法,采用分步运算,基本单位为蝶形结。同时根据Blackfin提供的矢量操作指令和循环缓冲技术,可以对算法进行汇编优化。Blackfin还提供了IDCT的汇编库函数,可以直接调用。
3.1.4 反量化算法的优化
反量化在解码算法中属于运算量比较大的模块。在标准中,需要对每个块中的64个系数都进行一次反量化操作。通过观察,发现它有一个特点,就是对零值反量化以后还将得到零值。利用这个特性,将反量化和游程解码、Z扫描放在一块完成。在每解出一个非零值后,就立刻对它进行反量化操作,最后进行Z扫描。由于纹理系数经过游程解码以后出现了大量的零值,所以大大减少了运算量和内存读写时间。对于非零系数的反量化,可以用统一的公式表示,以减少程序的判断。如第二种反量化方法可以表示为:
F′′ [v][u]=QF [v][u]*C1+sign(QF [v][u])*C2 (1)
式中,F′′ [v][u]是反量化系数,QF [v][u]是量化系数,C1和C2在一个块中而且是常数,函数sign(x)为:
3.2 汇编优化
BF533寄存器的特点使它具有良好的对称性和双核乘加运算能力。此外BF533还提供了大量的视频操作指令和矢量操作指令,可以用一个指令完成多数据操作[4]。如BYTEOP16P实现四个对应单元的加,BYTEOP16M实现四个对应单元的减,BYTEOP1P实现四个对应单元的平均,这些指令可以用于解码中的插值运算。高低位互换、位截取和拼接等指令在数据的压缩和解压时可以方便地对数据读写。
在经过对算法的C语言优化后,再对算法中计算量较大的模块使用汇编级别的优化。最终算法中C语言和汇编语言优化的比重大致为2:8,除上层调度外,算法中的大部分基础模块都是用汇编语言实现的。
3.3 提高外存使用效率
解码算法要处理大量的视频数据,而BF533的片内数据存储器只有64KB,绝大部分的数据要放在片外存储器上。虽然片外存储器容量大,但是DSP对其访问的速度很慢,如果直接对片外空间进行访问,会严重影响处理速度,不能实现实时解码。为了提高外存使用效率,采取了以下两种方法。
3.3.1 Cache的配置
提高外存使用效率一般有两种方法,一是使用Cache,二是使用DMA。DMA方式在固定位置的大数据量的数据交换时效果较好,而Cache则更加灵活。Cache的基本原理是将要使用的外存中的指令或数据先缓存到内存中的特定区域中,这样对外存数据的访问就可以在内存中进行,从而提高了外存使用的效率。BF533提供了强大而灵活的Cache管理机制。BF533的内存可以划分为指令区和数据区两部分[3]。指令区的大小为80KB,其中有16KB可以配置为指令SRAM或指令Cache,由于解码程序不是很大,把指令区全部配置为指令SRAM,不使用指令Cache。数据区一共有64KB,其中有两个16KB的区间可以配置为数据SRAM或数据Cache,将这两个区间都配置为数据Cache。将外存中可以映射到Cache的区域配置好,启动Cache,在程序运行时,外存的数据会事先调入Cache中以备使用,这样就提高了运行速度。
3.3.2 开辟专门的内存缓冲区
虽然Cache的使用提高了外存数据的使用效率,但程序的运行速度仍然没有使用内存数据时快。所以在一些内外存数据交换比较频繁的地方,专门开辟一定大小的内存缓冲区,将要同外存交换的数据缓存在这些缓冲区中,等运算结束后再一起拷到外存中去。这样,大部分数据交换都可以在内存中完成,不但减轻了Cache的压力,而且提高了运算速度。例如在解一个宏块" title="宏块">宏块时可以先在内存开辟一块宏块大小的数组,用来存放中间数据。
3.4 DMA的使用
3.4.1 DMA的使用特点
DMA是DSP中用于快速数据交换的重要技术,它可以在存储空间之间或存储空间和外设之间传递数据,并且DMA和CPU的工作是可以并行进行的。在实时图像处理系统中,由于大量数据需要频繁出入CPU,因此是影响实时处理的瓶颈之一。利用DMA后台数据传输能力,在不影响或基本不影响CPU处理能力的情况下对数据作并行传输,可以有效地解决这个问题。DMA一般比较适合在数据传输方式比较固定时使用。
BF533提供了强大的DMA功能。它提供了两对Memory DMA(MDMA)和八组外设DMA,并且专门针对视频应用提供了二维DMA功能[3],使数据传递的方式更加灵活。DMA的传递方式有两种,一种是基于描述符" title="描述符">描述符的,另一种是基于自动缓冲的。基于描述符的DMA传送是Blackfin控制DMA传送的常用方法。使用该方法时,DMA通道需要一组称之为DMA描述符的参数,该参数存储在存储器中。每个描述符包含特定的DMA传送序列所需要的信息。可以将表示多个传送的多组描述符放入存储器中,构成一个链表。链表生成后,DMA通道就有了完成多个传送序列所需的信息,这些传送序列不需要处理器的干预。利用这种方法可以很方便地完成数据传输和数据重排。
例如解码输出的YUV图像为4:2:0格式,每帧图像中的每个像素的Y、Cr、Cb参数都按顺序分别存放在不同的数据块中;而D/A转换所需的数据格式是分上下场存放的ITU-R656格式,图像中每行像素的Y、Cr、Cb参数是按CrYCbY的4:2:2格式存放的。所以,在将解码数据输出之前先将数据重新排列成所需的格式。如果用CPU完成数据重排,将会浪费大量的读写时间,而且CPU强大的计算优势不能得到充分利用,会造成DSP资源的极大浪费。所以,用二维DMA来完成这个功能,只需将DMA链表的参数设置好,就能在CPU工作的同时在后台完成数据的传输与重排功能,从而提高处理器的效率。
3.4.2 视频数据的输出
在将解码后的数据转换为所要求的ITU-R 656格式的数据以后,还需要将数据通过DMA传送到PPI口(并行外设接口),由ADV7171转换为模拟信号后才能在电视上显示。在大量数据搬移(尤其是D1格式)的情况下,如果直接将外存的数据搬移到PPI,则会引起DMA和CPU对总线资源的竞争,而在对外存资源的使用上CPU的优先级是高于DMA的优先级的,这样就有可能引起PPI传输中断,从而影响图像的显示效果。为避免这种情况,可以在内存中开辟两处乒乓缓冲区,先将图像的一行数据用MDMA搬移到缓冲区,再从缓冲区由DMA搬移到PPI。
解码系统的数据流程如图3所示。A、B、C、D为四帧ITU-R 656格式图像数据缓冲区,E、F、G、H为四帧参考帧图像数据缓冲区,I为码流数据缓冲区,这些缓冲区都位于外存SDRAM。J、K为宏块数据乒乓缓冲区,M、N为行数据乒乓缓冲区,它们都位于内存。处理器从I处读入码流后解码,将解出的一个宏块的数据保存到宏块数据缓冲区,然后分别使用拷贝(由CPU完成)和MDMA的方法将宏块数据搬移到重建帧缓冲区和ITU-R 656格式数据缓冲区,并按规定格式放好,同时对下一个宏块解码。一帧图像解完后,使用MDMA将656格式的图像逐行搬移到行缓冲区,再用PPI DMA 传输到PPI口,同时对下一帧图像解码。为了不引起PPI传输中断,用优先级较高的MDMA0实现行数据的搬移,而用优先级较低的MDMA1实现宏块数据的搬移。为了使处理器和DMA能并行工作,使用了乒乓缓冲区。
3.5 优化结果
经过对程序的软件优化以后,程序已经可以满足实时运行的要求。表1所示为优化前后对30fps帧频的CIF格式图像解码时几个基本模块的运行指标对比。从表中可以看出,插值和数据拷贝在解码模块中仍然占很大的比重,这是由于对外存访问的效率低,虽然使用了Cache和DMA方法,但是这个问题仍然是软件优化的瓶颈。
4 实验结果及结论
整个系统用VisualDSP++ 3.5进行开发,用Ez-Kit Lite开发板通过JTAG口进行仿真,BF533的主频为600MHz。为了验证系统的实时性,在1.5Mbps的码率和30fps的帧频下,对三种不同复杂度的D1码流进行解码,测试结果如表2所示。可以看出,即使对很复杂的码流,系统也可以达到实时显示的要求。
实验结果表明,用BF533芯片实现ASP功能的D1格式码流的解码并实时显示的方案是可行的。如果在系统的输入端加上一个网卡连到因特网,将因特网上的码流通过SPORT口传输到数据存储区,将构成一个网络电视终端的雏形。
参考文献
1 ISO/IEC JTC1/SC29/WG11 N4668. Overview of MPEG-4 Standard, Mar. 2002
2 Information Technology-Gencric Coding for Audio-Visual Objects-Part 2: Visual, 14496-2.ISO/IEC. Oct. 2001
3 Blackfin DSP Hardware Reference Manual.AD Inc.,Nov.2001
4 Blackfin DSP Instruction Reference manual, AD Inc., June 2001
5 ADSP-BF533 EZ-KIT LITE Evaluation System Manual. AD Inc., May 2003
6 操 勇,胡志雄. MPEG4视频编/解码方案, 电子产品世界, 2003;(7):64~66
7龚剑明. MPEG-4标准视频编码器在Blackfin 21535 上的实现, 电视技术, 2003;(11):82~83
8 袁 潮,黄晓伟,李 川. 基于ADI公司Blackfin处理器的MPEG-4视频编码器的设计, 电子产品世界,2003;(5):11~13
9 Wen-Hsiung Chen, C Smith, S C Franlick. A fast csompu-tational algorithm for the discrete cosine transform. IEEE Transactions on Communications,1977;25(9):1004~1009