>
 
关键词:OMAP1510;AVS;解码器;优化
AVS-M简介
AVS-M标准是AVS组织为适应数字存储媒体、网络流媒体、多媒体通信等应用中对运动图像压缩技术的需要而制定的,其核心技术包括:4×4 整数变换、量化、帧内预测、1/4精度像素插值、特殊的帧间预测运动补偿、熵编码、去块效应环内滤波等。
AVS-M标准中解码过程的基本处理单元是宏块。一个宏块包括一个16×16 的亮度样值块和对应的色度样值块。 宏块可进一步划分成最小为4×4 的样本块来进行预测,共有8种用于运动补偿的宏块划分方法。
在预测方面,只采用I帧和P帧,P帧最多可有两帧参考图像。AVS-M 定义了9种亮度块帧内预测模式和3种色度块帧内预测模式。在帧间预测的运动矢量方面,AVS-M和H.264都采用1/4像素精度的运动补偿技术,但相对于H.264采用的6抽头滤波器,AVS-M采用水平8抽头和垂直4抽头滤波器进行半像素插值和1/4像素插值,增大了插值精度。亮度解码时,首先进行1/2 样本和1/4 样本的插值,然后根据运动矢量得到相应的参考样本。色度样本插值使用对应亮度块的运动矢量,利用被插值样本周围的4个整数样本值进行线性插值。
AVS-M嫡编码采用统一变长编码技术。在AVS-M嫡编码过程中,所有的语法元素和残差数据都是以指数哥伦布码的形式映射成二进制比特流。AVS-M标准对于帧内编码块亮度系数、帧间编码块亮度系数和色度系数分别定义了多个变长码表。根据解析所得语法元素的值,通过查变长码表可以得到量化系数值和量化系数游程。解码得到一个系数值和游程后,下一个解码量化系数所参考的码表将根据前一个解码量化系数值进行选择。
OMAP平台简介
OMAP把低功耗的DSP 核与控制性能强的ARM微处理器结合起来,是一种开放式、可编程的基于DSP 的体系结构,如图1所示。

图1 OMAP1510结构框图
OMAP 的硬件平台
OMAP 的硬件平台主要由ARM核、DSP 核以及流量控制器(Traffic Controler) 组成。
ARM核采用增强型ARM925 核,工作主频为175MHz。它包括存储器管理单元、16kB的高速指令缓冲存储器、8kB的数据高速缓冲存储器和17 个字的写缓冲器。片内有1. 5MB的内部SRAM,为液晶显示等应用提供大量的数据和代码存储空间。它有13 个内部中断和19 个外部中断,采用两级中断管理。此外,核内还有ARM CP15 协处理器和保护模块。TI925T(ARM9TDMI)内核采用5 阶管道化流水线、32 位RISC处理器架构的体系结构。系统中的控制寄存器可通过对协处理器CP15 的读写来对MMU、Cache 和读写缓存控制器进行存取操作。 TI925T 的MMU 具有2 个64 项的转换旁路缓存器(TLB)用于指令和数据流,每项均可映射存储器的段、大页和小页。
C55x DSP核工作主频为200MHz。它具有高度的并行能力,32位读写和功能强大的EMIF, 双流水线的独立操作以及双MAC 的运算能力,它采用了三项关键技术:增大的空闲省电区域、变长指令和扩大的并行机制。其结构对于多媒体应用高度优化,适合低功耗的实时语音图像处理。
C55x核增加了处理运动估计、离散余弦变换、离散余弦反变换和1/ 2 像素插值的硬件加速器,降低了视频处理的功耗,其结构对于多媒体应用高度优化,适合低功耗的实时语音图像处理。C55x 核内部有32kB的双存取SRAM,48kB的单存取SRAM 和12kB的高速指令缓存。此外,核内还包含存储器管 理单元、两级中断管理器和直接存储器访问单元。

图2 基于OMAP的AVS-M程序流程框图
OMAP 的软件平台
| 耗时(指令周期) | ||
| SDRAM 到 DARAM | 1041 | |
| DMA | DARAM 到 SDRAM | 620 | 
| SDRAM 到 SDRAM | 1621 | |
| SDRAM 到 DARAM | 1893 | |
| Memcpy() | DARAM 到 SDRAM | 2168 | 
| SDRAM 到 SDRAM | 3282 | 
AVS-M实时视频解码
在OMAP上的软件实现
在OMAP1510上的程序结构
在OMAP上开发程序通常分为两部分,一部分是ARM端,负责控制、显示等,另一端是DSP端,主要负责数据处理,本文采用TI提供的CCS在这两端分别开发,程序流程如图2所示。 
ARM端的主要功能是初始化整个OMAP1510芯片,包括ARM、DSP、TC等的时钟设置,DSP的开启/关闭以及复位,LCD、定时器等各个外设的初始化。在启动完成后,ARM就一直查询共享内存中的某一标志位,当查询到一帧解码结束时,就启动LCD专用DMA,在LCD上显示。
DSP端的主要工作是负责AVS-M码流的解码。本文将AVS-M码流放置在SDRAM中。与基于PC的解码程序的主要区别在于,由于DSP的片内内存有限,所以不可能将当前帧以及参考帧都放在片内,所以,以宏块为单位在SDRAM与片内内存之间进行数据传递。另外,由于在液晶屏上显示需要转换成RGB图像,所以,在每一帧结束后,要通过YUV转RGB来实现实时显示。
程序优化的主要过程
本文采用标准C语言,一方面是出于可移植性的考虑,另一方面是由于TI编译器效率不断提高。但是,仅仅依靠编译器的优化是远远不够的,还可以采用以下手段进行优化:
(1)DMA的合理利用。对于同一段程序来说,仅用片内数据与全用片外数据的速度差别相当大。所以应尽量采用片内数据,提前采用DMA将片外数据导入片内。如前文所述,广泛采用了DMA,用于SDRAM与片内内存之间以及SDRAM内部的数据交换。DMA不占用DSP时间,相当于并行操作。表1列出了Memcpy命令与等待状态下DMA的耗时,移动的数据为256个16bit数。   
由表1可以看出,采用DMA方式只需要直接传输时间的1/2~1/3,所以,即使在传输过程中DSP完全处于等待状态,也比对内存的直接操作要高效得多。
(2)ARM与DSP的通信机制问题。OMAP提供了两种通信方式,一是采用MAILBOX中断方式,另外一种是采用共享内存查询方式。MAILBOX方式的优点是实时性强,缺点是数据量小,查询方式可以一次性传递大量数据,但是要通过查询某一位共享内存来实现,实时性较差,所以,一般是采用两种方法结合的措施,兼顾效率和速度。
(3)合理设置DSP时钟。在系统上电复位时,DSP的时钟等于晶振的固有频率,由于OMAP采用了数字倍频以及数字锁相环,所以,可以通过设置频率控制寄存器来更改DSP的时钟。具体的原则是在满足系统实时要求的情况下,尽可能低地设置时钟,这是显而易见的,因为高的时钟频率必然带来大的系统能耗。
(4)LCD的DMA。采用OMAP系统的LCD专用DMA,可以使ARM系统独立出来,可以执行操作系统的任务,同时,采用DMA也比直接移动指令更为有效。
(5)使用C55x内部固定的instrinsic 指令。 这些指令由优化的汇编代码写成,可以显著提高代码执行的效率,包括乘法,取最大/最小值等,使用instrinsic一般可以提速5%左右。
(6)注意数据格式的转换。在DSP采用大端模式,ARM端采用小端模式组织数据,所以,在采用共享内存时,存在模式转换的问题,通过ARM的大小端转换模式,寄存器自动转换。另外,ARM端能够处理8 位、16 位、32 位、64 位的数据,DSP端能够处理16 位、32 位、40位、64 位数据。int型变量在ARM端是32位,在DSP端是16位,要注意数据格式的比较。
(7)数据宽度的考虑(16位,8位)。C55x采用16位的数据总线,所以采用16位的数据宽度是最高效的。C55x也支持8位数据,这样,数据得到了一倍的压缩,但每次取操作数都要进行高低位选择。以宏块为单位进行操作时,实际上用到的空间并不大,而速度是更关键的问题,所以将原始的8位AVS-M码流统一以16位(高8位置零)的格式进行存放与计算。
(8)对循环的优化策略。本文采用restrict关键词进行编译,得到更为高效的循环解决方案,以下面一段代码为例,功能是相同的:
loop((int*)0x2600,(int *)0x2700,0x100);
void loop(int * restrict i,int * restrict j,int counter)
 {while(counter--)
*(j++)=*(i++)+*(j++);
  }
 耗时558个时钟周期
 for(i=0x2600;i<0x2700;i++)
 {
*((int *)(j++))=*((int *)(i))+*((int *)(j++));
 }
耗时2564个时钟周期
两者相差5倍,因此,尽量采用对循环的优化策略成为系统加速的关键。
(9)64K边界长度的问题。 由于C55x采用了16位的数据,所以寄存器也是16位的,经常会出现64K边界的问题,例如开辟一个数组,当数组元素到达0XFFFF时,下一个并不是到达0X10000,而是回到0X0000,即便采用long型定义数组元素个数也是如此。所以,本文采用long 型指针,采用绝对地址间接寻址的方式来解决这个问题。
(10)合理安排内存。即关于数据和程序怎么安排的问题。原则上,程序应该放在片外,数据应该放在片内,特别是常用的码表要放在DARAM中,同时,使能指令Cache可以有效加速执行速度。
 
结语
AVS-M作为中国具有独立知识产权的新一代视频编码标准,具有广阔的市场前景和应用价值。TI 公司提出的OMAP 体系结构,开放性好,在这种体系结构下编写的程序移植方便,适合于多媒体平台的应用。OMAP与AVS-M的结合,在移动通信与多媒体信号处理方面将有良好的应用前景。■