ADI公司提供的IDE具有非常灵活的设置,能根据用户的需要生成针对不同限制的代码。如内存有限,用户可以设置生成文件更小的代码;如果用户更注重运行速度,则设置编译器生成运行速度更快的代码,或是在其间取一个折中。
ADSP-BF561有专门用于处理视频相关的一些专用DSP指令(video pixel operations、vector operations等),这些专用指令通过SIMD技术或者操作专门硬件支持某些特殊运算(累加、多参数取均值,同时完成加减法等),以提高运行速度。如前文求SAD情况,汇编指令中有指令专门计算连续4个像素与另外连续4个像素之差的绝对值之和,结果与累加器的值相加。如果要隔点算(即取一半的点计算),反而需要增加指令后对数据进行下采样,既耗时而且不准确。所以采用计算一半像素点的策略并不适用于ADSP-BF561。编译器自动生成的代码中不会使用到这些专用指令。所以只能根据对算法的理解和对平台的熟悉程度来对算法进行汇编优化。
在编写汇编代码时还需注意部分寄存器的使用,如I0、I1,其值不仅用做地址索引,还会影响许多指令的计算结果。在使用这些寄存器时,一定要注意将其压栈或置为适当的值。此外,关于数据的载入,一般应遵循对齐原则,但在做运动估计计算匹配准则函数时,这样的要求往往达不到。故如能将两者分开来计算,将更能提高效率。
此外,应尽量合理地使用寄存器,多使用并行指令也能提高代码的执行效率。
(2)分级存储器结构
ADSP-BF561处理器采用改进的哈佛结构和分级的存储器结构。Level 1(L1)存储器以全速运行,只有很少的延迟。在L1级,指令存储器存放指令。两个数据存储器存放数据,一个专用的临时数据存储器存放堆栈和局部变量信息。由多个L1 存储器组成的模块,可进行SRAM和CACHE 的混合配置。存储器管理单元(MMU)提供存储器保护功能,对运行于内核上的独立任务,可保护系统寄存器免于意外的存取。L1 存储器是ADSP-BF561处理器内核中性能最高、最重要的存储器。通过外部总线接口单元(EBIU),片外存储器可以由SDRAM、FLASH 和SRAM 进行扩展,可以访问多达132 MB的物理存储器。根据这样的特点,将执行率更高的代码放入L1指令缓存中,能使代码更快地运行。IDE提供了Profile工具,能在运行时统计各个函数所占的CYCLE数和占总CYCLE数的百分比。通过将X264中比较耗时的部分算法代码,如模式选择部分代码放入L1指令空间,能进一步提升运行效率。Profile工具统计结果同样也是选择需要使用汇编优化函数的依据,IDE可根据Profile结果对代码进行优化。X264代码Profile统计结果与测试数据有很大关系,选用更类似以后应用场所的数据作为测试数据,能使统计结果更接近以后的应用环境。为达到比较准确的统计结果,最好在Simulation阶段进行统计。虽然这样非常耗时,但为得到一个准确的统计作为参考依据是值得的。此外CACHE VIEWER工具能提供运行时CACHE的使用情况,使用它来分析CACHE的使用,对于提高代码运行效率很有用处。
3 实验结果评估
3.1 关键函数优化测试结果
采用以上优化方法对编码关键函数进行优化,优化前后函数耗时如表1所示。可见,以上优化方法能大幅度减少编码时间。
3.2 测试序列测试结果
对三种测试序列在总线频率120MHz下进行优化前后帧率测试,结果如表2所示。从表2可以看出,采用以上优化方法能显著提高帧率。
3.3 不同数据总线频率下测试结果
对于不同的总线频率,优化后编码帧率不同,结果如表3所示,采用的测试序列为foreman。
本文介绍了H.264标准的框架,研究了X264软件的实现方案,对ADSP-BF561处理器体系结构进行分析,提出了一套X264优化方案,包括:算法替代和改进、内联函数、汇编代码编写、高速存储器应用等。测试结果表明,优化后的算法编码效率有显著提高,具有很强的实用价值。但是,本文主要从编码速度和效率两方面对编码器进行优化,在复杂度和编码质量上仍需不断对关键算法进行分析整合,提出新的优化算法。同时,编码器的码率控制尚未完善,如何在降低计算复杂度的前提下有效进行码率控制,需进一步研究。
参考文献
[1] 毕厚杰.新一代视频压缩编码标准——H.264.北京:人民邮电出版社,2005.
[2] 幻刘峰.视频图像编码技术及国际标准.北京:北京邮电大学出版社,2005.
[3] 李玉山.数字视觉视频技术.西安:西安电子科技大学出版社,2006.
[4] MICHAELURAPIS A,STTHRING K,SULLIVAN G.H.264/MPEG-4 AVC reference software manual.Joint Video Team
(JVT)of ISO/IEC MPEG&ITU-T VCEG(ISO/IEC JTC1/SC29/WG11 and ITU-T SG16Q.6)14th Meeting, Hong Kong, PRC China 17-21,2005.
2.1.2 ADSP-561 EZkite
ADSP-BF561视频编码器平台采用ADI公司的ADSP-BF561 EZ-kit Lite评估板。此评估板包括1块ADSP-BF561处理器、32 MB SDRAM和4 MB Flash,板中的AD-V1836音频编解码器可外接4输入/6输出音频接口;而ADV7183视频解码器和ADV7171视频编码器则可外接3输入/3输出视频接口。此外,该评估板还包括1个UART接口、1个USB调试接口和1个JTAG调试接口。摄像头输入的模拟视频信号经视频芯片ADV7183A转化为数字信号,此信号从ADSP-BF561的PPI1(并行外部接口)进入ADSP-BF561芯片进行压缩,压缩后的码流则经ADV7179转换后从ADSP-BF561的PPI2口输出。此系统可通过Flash加载程序,并支持串口及网络传输。编码过程中的原始图像、参考帧等数据可存储在SDRAM中。
2.2 算法选取与优化方案
2.2.1 算法选取
H.264实现的源代码不止一种,其中最常见的有JM、X264和T264。对比这三种实现源代码,X264比T264具有更高的效率。而且相比广泛采用的JM编码模型,X264在兼顾编码质量的同时大幅度地提升了编码速度,所以选取X264作为算法原型。
2.2.2 优化方案
该优化方案从三个层次对算法进行优化:算法层次、代码层次、平台层次。下面介绍具体优化方法。
2.2.2.1 编码器具体参数的选择
该编码器使用main档次,I、B、P帧量化值分别为26、31、29,流控参数选为CBR。IDR帧间隔设为50,B帧间隔为2帧。这样的选择是为了在速度和运算量上取折中。选用B帧并将其量化值加大,可比baseline档次、IPPP结构提高约10%的压缩率。而B帧的计算量,因其不用做参考帧,故无需进行去块滤波和插值计算,在31的qp下,很多块会被判做skip模式编码,因而多数时B帧总运算量候反而较P帧低。
2.2.2.2 算法层次的优化
算法层次的优化主要是指在参数选定的情况下,对部分算法所作的替换或优化。和参数的选择一样,算法层次优化也主要受优化策略的指导。如运动匹配准则是选用SSD、SAD或SATD。如果只看中准确程度,则选择SSD最佳;如果只看中运行速度,则选择SAD最佳;如果要兼顾二者,则选用SATD是比较好的一个方案。在进行算法优化时还应该注意一个问题,即要考虑实际运行平台的支持情况。如在追求速度的策略下,匹配准则选用SAD,如果只计算一半的点则会大大降低运算速度。但是如果考虑ADSP-BF561汇编指令的设计情况,就会发现这样做反而会增加指令数,会使速度更低。算法层次优化包括如下几个部分:
,H.264在ADSP-BF561上的实现与优化