华为商城网站设计,企业官网模板 静态,软文营销的五个特点,平面设计网站大全网站罗 嵘#xff0c;何 苦 时间:2009年04月24日摘 要#xff1a; 研究了嵌入式系统中H.264 Baseline软件解码器设计和优化的问题#xff0c;提出了四种有效的优化方法#xff0c;并在PXA270平台上进行了测试。测试结果显示#xff0c;综合使用提出的四种方法#xff0c;H.26…罗 嵘何 苦 时间:2009年04月24日摘 要 研究了嵌入式系统中H.264 Baseline软件解码器设计和优化的问题提出了四种有效的优化方法并在PXA270平台上进行了测试。测试结果显示综合使用提出的四种方法H.264软件解码器在PXA270520MHz上运行时帧率可以达到22f/sCIF格式和80f/sQCIF格式。 关键词 H.264软件解码器PXA270 视频编解码标准H.264是由国际电联ITU的视频编码专家组VCEGVideo Coding Expert Group和国际标准化组织ISO的活动图像专家组MPEGMotion Picture Expert Group共同组成的联合视频组JVTJoint Video Team开发的视频编解码标准也被称为高级视频编码MPEG-4 AVCAdvanced Video Coding或MPEG-4 Part10。H.264解码器[1]的主要模块有运动补偿、帧间预测、去块效应滤波、反变换、帧内预测、重建等。 PXA270嵌入式处理器内部包括一个XScale内核[2]兼容ARM9指令集运行频率最高可以达到624MHz一个无线多媒体指令扩展 WMMX(Wireless Multi-Media Extension)协处理器能够支持多媒体运算指令还包括一系列外部接口控制器、总线控制器等。 文献[3]对H.264解码器中的帧间预测、去块效应滤波、反变换、帧内预测、重建等模块采用了WMMX优化可以使其相对性能提高92%100%。文献[4]在PXA270平台上设计了一个AVCORE多媒体函数库H.264解码帧率可以达到约50f/sQCIF格式。文献[5]则在Xscale处理器上利用WMMX技术对多种解码器进行了优化取得了较好的相对优化效果。但是这些方法的优化效果有限只利用PXA270的WMMX功能进行了优化不能充分利用PXA270处理器的特点。 为了提高H.264软件解码器在PXA270处理器上的性能本文研究了PXA270处理器和H.264软件解码器的特点并针对其特点进行了多方面的优化。优化方法主要包括WMMX并行计算优化、多项式计算优化、系统资源优化和滤波算法优化四种。1 H.264解码器优化方法1.1 WMMX并行计算优化 在PXA270平台上可以利用PXA270处理器内部的WMMX硬件支持对一个宏块内像素点的乘/加法操作进行展开处理一次执行4/8条乘/加法同时处理多个像素点。 WMMX软件编程模型部分包括寄存器堆、矢量化的执行部件和接口部件三部分[2]。WMMX寄存器堆的位宽为64bit包括16个SIMD寄存器、8个状态和控制寄存器。 WMMX矢量化的执行部件包括一个执行单元、一个乘累加单元、一个移位和序列改变单元。利用这些硬件单元SIMD寄存器可以被组织成字节(8bit)、半字(16bit)、字(32bit)、双字(64bit)结构实现8/4/2/1个数据的并行运算。 利用WMMX的并行计算功能H.264软件解码器中的很多部分可以被并行化从而提高计算效率。例如在H.264的运动估计算法中进行插值操作的部分算法代码为 进行并行计算优化时可以对上述代码中的内层循环部分进行展开 利用ARM汇编语言改写上面的代码调用WMMX的硬件可以使得该内层循环中的四个结构相同的运算同时进行这样就大大提高了速度。在优化过程中对H.264模块中的IDCT、IQUANT和插值部分的计算使用了WMMX并行计算优化。1.2 多项式计算优化 利用WMMX硬件并行计算优化比较适用于各个像素点使用相同计算方法的情况。而对于那些每一个像素点都需要用不同的表达式进行计算的情况就需要采用另外的并行优化思路。对于那些不便于进行循环展开的代码部分可以尝试对其多项式计算进行优化使用提取公共因子、合并同类项的方法提高运算速度。 例如对于如下的表达式 上面的表达式中公因子合并之后加/减法和乘法运算的总数由原来的16个变成12个因而提高了速度。在 H.264的软件解码器中运动补偿和帧内预测部分就存在着类似的代码可以使用提取公因式的方法来进行优化。文献[6]已经证明提取公因式进行计算优化的方法属于NP-hard问题本文给出了一个比较简单的近似优化算法其优化流程为用多项式组中的每一个多项式生成一个集合Sii12…KK是多项式的个数其元素sijj12…kk是子式的个数是该多项式的子式设定初始搜索次数n0N为预先设定的搜索次数上限计算CC为整个多项式组为优化前总的计算次数。 while n 选定其中一个多项式的子式sij 计算整个多项式组可以减少的计算次数c if c Cc 记录下子式sij endnn1end 本文提出的算法得到的结果可能并不是最优的但该方法能降低计算量还可以应用于除H.264解码器以外的场合并且适用于多种架构的处理器。在优化过程中对H.264解码器中的帧内预测模块使用了多项式优化算法。1.3 PXA270系统资源优化 本文中H.264软件解码器最终运行在PXA270处理器上。该处理器具有多种频率可调组件其内部还具有256KB片内SRAM可以用于显示图像存储。PXA270片内系统总线频率在高速模式下可以达到208MHz[7]并且LCD控制器的频率可以调整具有直接显示YUV格式图像的特性。充分利用好这些特性可以大大改善H.264软件解码器在平台上的运行效率。在 H.264软件解码器的代码中需要对数据进行大量的存储操作为了提高存储速度在运行时可以动态地将系统总线频率调整为高速模式同时对SDRAM和 Flash等存储器件进行访问速度的调整以保证性能要求。 针对H.264软件解码器进行的PXA270系统资源优化流程如下if H.264软件解码器运行 保存处理器和总线当前配置 将处理器内核置为超频频率上 将系统总线频率设置为高速模式 为解码器分配PXA270片内SRAM作为缓存受操作系统限制end if H.264软件解码器运行结束 恢复处理器和总线配置end 系统级的优化需要对处理器的频率等关键资源进行调整这可以通过PXA270处理器的时钟管理模块实现。1.4 滤波算法优化 在H.264编解码算法中对滤波器算法的规定具有一定的灵活性[8]可以在不违反标准的情况下使用自己的滤波方法。在改进的滤波器中通常采用的方法是改变子宏块Sub-Macroblock边界的滤波顺序从而提高存储效率和数据的复用性[9]。本文设计了一个优化的滤波器算法达到了一定的效果。 在H.264标准中规定的标准解码算法是对于一个16×16的宏块图像格式为YUV4:2:0其中各个4×4的子宏块边界的滤波顺序如图1的标号148所示。 在用软件实现滤波算法时一帧图像数据的存储以二维数组的方式进行。例如对于CIF352×288格式的一帧图像其亮度信号存储在一个Y[352][288]数组中。 在计算机和多数嵌入式系统的内存中内存地址是线性的因此一个16×16的亮度宏块(划分为16个4×4大小的子宏块中每个4×4的子宏块分别被编号为116。14子宏块的第一行数据在内存中的位置为M1第二、三、四行数据在内存M2、M3、M4。M1M4之间的位置分别被其他16×16的宏块所占据。58子宏块在内存中的位置为M5M8因此在形式上相邻的两个子宏块1和5在内存中的位置可能差得很远。 在计算机系统中为了充分利用数据的空间、时间相关性会在访问内存中的一个数据时把该数据相邻区域的一块数据都加载到缓存中。例如当程序访问子宏块1的第一行数据时处理器会自动把整个M1块加载到缓存中即第2~4个子宏块的第一行也被加载到缓存中。由于缓存的大小非常有限内存中有很多地址都可以映射到缓存中的同一个地址处。例如当程序访问子宏块5的第一行时M5被加载到缓存中就有可能覆盖掉原来M1在缓存中位置。而对于M1~M3来说它们在内存中的位置靠得比较近因此可以被映射到缓存中的不同区域不会相互覆盖。 对于图1中的滤波方案会存在缓存未命中Cache Miss的问题。按照图1中的滤波顺序每对一个边界做滤波都有可能覆盖掉前一次加载的数据这样会增加对内存的访问次数降低速度。为了改进这一点本文提出了如图2所示的新的边界滤波顺序。 新方案在多数情况下可以利用前一次已经加载到Cache的数据进行操作。例如在对编号为2、3、4的边界进行滤波时可以利用对1边界进行滤波时已经加载的数据。这样可以提高去宏块效应滤波器的速度。 对于YUV4:2:0格式的图像传统的滤波算法在处理一个16×16的亮度宏块和两个8×8的色度宏块时可能在32条边界共48条边界处发生数据缓存未命中这些边界分别是124、2537、41、43、45、47(参见图1)。而改进的滤波算法则可能在11条边界处发生数据缓存未命中这些边界分别是1、5、9、17、25、33、35、37、41、43、45参见图2。由此可见改进的滤波算法提高了内存访问效率。2 仿真和测试结果2.1 使用WMMX优化后的测试结果 使用WMMX汇编语言对H.264软件解码器进行并行计算优化后得到的效果如表1。 对比表1中的结果可以看出WMMX计算优化的效果最为明显对帧率的改善可以达到3f/s5f/s。WMMX技术也是PXA27x系列处理器的一个亮点这一功能使其可与一般DSP的计算能力相匹敌。2.2 多项式计算优化的方针和测试结果 为了显示多项式优化的效果首先在ARMPXA270处理器是兼容ARM体系结构的)仿真环境下对单个函数测试编译器采用ARM公司出品的ADS 1.2在测试过程中C/C编译器的参数设置为-O2-O time -g -cpu XXXXX(具体的ARM处理器内核类型如ARM946E-S)。 在测试过程中没有修改编译器的设置为了证明算法的普适性在多种ARM处理器内核上进行了仿真。 仿真时选用的函数是predict_4x4_mode_3predict_4x4_mode_4predict_4x4_mode_5predict_4x4_mode_6predict_4x4_mode_7predict_4x4_mode_8。 这些函数对应帧内预测的第38种模式具体算法可以参照H.264的标准文档。下面给出函数predict_4x4_mode_3进行优化后的简单示例。predict_4x4_mode_3在进行优化前的代码为predict_4x4_mode_3 Begin Y0(a0a2(a11)2)2 Y1Y4(a1a3(a21)2)2 Y2Y5Y8(a2a4(a31)2)2 Y3Y6Y9Y12(a3a5(a41)2)2 Y7Y10Y13(a4a6(a51)2)2 Y11Y14(a5a7(a61)2)2 Y15(a6(a71)a72)2end 进行优化后的代码如下predict_4x4_mode_3Begin T0a0a1T1a1a22Y0(T0T1)2 T0a2a3Y1Y4(T0T1)2 T1a3a42Y2Y5Y8(T0T1)2 T0a4a5Y3Y6Y9Y12(T0T1)2 T1a5a62Y7Y10Y13(T0T1)2 T0a6a7Y11Y14(T0T1)2 T1a7a72Y15(T0T1)2end 考虑到程序表示方面的简明性在优化的程序中使用了一些临时变量。从程序中涉及的多项式计算的表达式来看在未优化程序中使用了21次加法和14次移位运算而在优化后的程序中使用了19次加法和7次移位运算。对其他几个函数进行优化后也有类似的结果。仿真器得到的结果请参照表2和表3。 从仿真结果可以看出多项式计算优化算法应用于某些特定函数上可以缩短时间和缩减代码体积。不过多项式计算优化算法在H.264软件解码器中的应用是有限的对整个软件解码器性能提高的贡献不大。2.3 优化测试结果 对PXA270系统资源进行优化后再运行H.264软件解码器时的测试结果比较见表4。通过系统资源优化可以使H.264软件解码器性能提高 2f/s3f/s。这表明系统资源优化是提高H.264解码器性能比较有效的一种方法。从表4可以看出对去宏块效应滤波器优化后解码器整体的性能的提高不是很大这主要是由于滤波运算在测试视频中所占的比重不是很高引起的。编码时视频流所采用的量化器的量化程度比较低所得的图像比较平滑因此需要进行的滤波运算也少。 将上面提到的各种优化方法综合应用到H.264软件解码器中取得的效果相当可观。联合使用各种优化方法可以使得各个方法间相互补充获得比单独使用更好的优化效果如表4中测试组一和测试组二所示。对H.264软件解码器进行联合优化以后性能的提高达到40%左右。 通过在实际平台上的测试可知PXA270系统资源优化和WMMX并行计算优化的贡献最大而其他两种方法的贡献则要小得多。但是也必须看到效果好的方法其专用性也会很强如WMMX并行计算需要有专门硬件的支持。去宏块效应滤波器算法优化和多项式计算优化两种方法虽然在 PXA270平台上对H.264软件解码器的优化效果不佳但是它们对PXA270内部的特定资源依赖很小通用性较强可以用于其他平台或应用实例中具有一定的使用价值。
参考文献[1] WIEGAND TSULLIVAN GLUTHRA A.Draft ITU-T recommendation and final draft international standard of joint video specification(ITU-T Rec.H.264 | ISO/IEC 14496-10 AVC)Joint Video Team(JVT) of ISO/IEC MPEG ITU-T VCEG(ISO/IEC JTC1/SC29/WG11 and ITU-T SG16 Q.6) 8th MeetingGeneva, Switzerland20035.[2] Intel Corporation.Intel wireless MMXTM technology developer guide2002.[3] PAVER N CKHAN M HALDRICH B Cet al.Accelerating mobile video applications using Intel wireless MMXTM technology.IEEE workshop on signal processing systems2003207-212.[4] http//www.cyansoft.com.cn/products.php?display1select12007-5-23.[5] PRASAD AMITTAL AKUMAR Met al.Optimization and comparison of computational complexities of standard compliant video decoders on SIMD processors.ICASSP 2007II-93-II-96.[6] HOSANGADI AFALLAH FKASTNER R.Factoring and eliminating common subexpressions in polynomial expressions.ICCAD2004169-174.[7] Intel Corporation.Intel PXA27x processor family developer′s manual2004.[8] LIST PJOCH ALAINEMA Jet al.Adaptive deblocking filterIEEE transactions on circuits and systems for video technology2003.[9] 牛晓雷戴琼海刘烨斌.H.264/AVC解码器解块滤波的结构优化.计算机工程与应用2005104-106.