H.264在ADSP一BF561上的实现与优化李洪,骨秦秦(电子科技大学电子科学技术研究院,四川成都61X:)41)摘要:研究了H.264编码关健技术的实现,并结合ADSP一BF561的特点提出了有效的优化方案,包括帧内帧间快速算法存储空间分配Cache应用C和汇编语言优化等 测试结果表明,优化后的算法编码效率得到显著提高 关键词:H.264;BF561;优化中圈分类号:TNglg.sl文献标识码:A Realizatione口n,几.门CnJfeoPtimizationofH.264basedonADSP一BF561LlHong,XUQinQinc(Rese二hInstituteofEleetroniesandTeehnology,UniversityofElee肋nieScieneeandTeehno10gy,Chengdu61XHI,ChinaAbtsaCrt:Thepa伴rres~hesH.264keyeneodertechniques,eolbninesADSP一BF561!5ehacarteristie,putsfo川ardefeetivef opti而ztions以egaies,ineludinginta/interfrstaalgorithm,memo叮sto吨edistibuting,Caeheapplieation,Candassemblyoptimizrationand05on.仆etestingresultshowsthatthealgorithm∀5eneodingefeney15imprfovedmueh. KeywordS:H.264;GF561;optimization目前,音视频技术日新月异,其中,视频实时编码传 输极具代表性 在视频压缩算法领域,新一代视频压缩标准H.264以其优异的压缩性能和图像质量使视频实时编码传输技术的实现成为可能 但该标准的计算复杂H.264标准采用分层体系结构,系统分为:视频编码层VCL(VideoCodingLayer),负责高效的数字视频压缩;网络抽象层NAL(Netwo人Abstcti ar,nLayer),负责对数据进行打包和传送 H.264编码图像通常分为三种类型:I帧P帧B帧 I帧为帧内编码帧,其编码不依赖于已编码的图像数据 P帧为前向预测帧,B帧为双向预测帧,编码时都需要根据参考帧进行运动估计 同时,H.264在提高图像传输容错性方面做了大量工作,重新定义了适于图像的结构划分 在编码时,图像帧各部分被划分到多个Slice结构中,每个Slice都可以被独立编码,不受度高,用一般的图像处理芯片难以达到实时编解码的要求,它需要快速稳定的处理器作为硬件平台 ADSP-BF561是ADI公司推出的高性能多媒体处理器 其主要特点是具有两个ADSP一BF53处理器核心(以下简称核心A和核心B),最高时钟频率达到60()MHz,其内部采用哈佛总线结构,存储模型层次化 其典型应用模式是A核运行嵌入式操作系统,B核运行多媒体处理算法,如H.264 本文提出了一套采用ADSP一BF561芯片实现H.264视频压缩算法的设计方案,结合该DSP平台对算法进行了针对性的优化,充分发挥了ADSP一BF561强大的处理能力 其他部分影响 slice由图像最基本的结构∃度块 H.264宏块组成,每个宏块包含一个16xl6的亮度块和两个8x8的色标准的整体编码框图如图1所示 编码过程中,原始数据进人编码器后,当采用帧内编码时,首先选择相应的帧内预测模式进行帧内预测,随后对实际值,算法介绍 1.1H.264编码模型框架和预测值之间的差值进行变换量化和嫡编码,同时编码后的码流经过反量化和反变换之后重构预测残差图H.264以其高压缩比高图像质量和良好的网络亲和性广受业界欢迎 在同等质量条件下,H.264的数据 压缩比比MPEG一2高2一3倍,比MPEG一4高1.5一2倍 其需要的带宽只有MPEG一4的50%,MPEG一2的12.5% 像,再与预测值相加得出重构帧,得出的结果经过去块滤波器平滑后送人帧存储器 采用帧间编码时,输人的图像块首先在参考帧中进行运动估计,得到运动矢量 运动估计后的残差图像经整数变换量化和嫡编码后与运动矢量一起送人信道传输 同时另一路码流以相同的39(电子技术应用#2009年第2期 F%当前TQ重排序序计算量和存储容量更大 ,.2.6去方块建波去方块滤波的作用是消除经反量化和反变换后重建图像中由于预测误差产生的块效应 .一lF 参考MCC而改善图像的主观质量和预测误差 经过滤波后的图像将根据需要放在缓存中用于帧间预测,而不是仅仅用来改善主观质量,因此该滤波器位于解码环中 对于帧内的是未经过滤波的重建图像 2.1平台选择2.1.1ADSP一BF561芯片介绍ADSP一BF561是Blackin系列中的一款高性能定点f F∀ 重建 图1H.264标准的整体编码框图 方式重构后,经去块滤波后送入帧存储器作为下一帧编 码的参考图像 1,2H.264关扭技术1,2.1技内预侧H.264引人了顿内预测以提高压缩效率 帧内预测DSP视频处理芯片 其主频最高可达750MH:.内核包含2个16位乘法器MAC2个40位累加器ALU4个8位视频ALU,以及1个40位移位器 该芯片中的两套数据地址产生器(DAG)可为同时从存储器存取双操作数提编码就是利用周围邻近的像素值来预测当前的像素值,然后对预测误差进行编码 这种预测是基于块的 对于亮度分量,块的大小可以在16xl6和4x4之间选择,供地址,每秒可处理1200兆次乘加运算 芯片带有专用的视频信号处理指令以及looKB的片内Ll(16KB的指令Cache,16KB的指令SRAM,64存储器KB的数 1xl66有4种预测模式,4x4有9种预测模式;对于色度分量,预测是对整个8x8块进行的,有4种预测模式 ,.2.2核间顶侧帧间预测时所用块的大小可变 假设基于块的运动据CachelSRAM,4KB的临时数据SRAM)128KB的片内12存储器SRAM,同时具有动态电源管理功能 此外,Black6n处理器还包括丰富的外设接口,包括EBIU接口(4个128MBSDRAM接口,4个1MB异步存储器接口)3个定时l计数器l个UART1个SPI接口2个同步串行接口和l路并行外设接口(支持rU一656数据格 模型,其块内的所有像素都做了相同的平移,在运动比较剧烈或者运动物体的边缘外,这一假设会与实际出人较大,从而导致较大的预测误差,这时减小块的大小可以使假设在小块中依然成立 另外小块所造成的块效应 式)等 Blac找n处理器在结构上充分体现了对媒体应用(特别是视频应用)算法的支持 2.1.2ADSP一561EZkite相对也小,因此.小块可以提高预测的效果 H.264一共采用了7种方式对一个宏块进行分割,每种方式下块的 大小和形状都不相同,编码器可以根据图像的内容选择ADSP一BF561视频编码器平台采用Am公司的AD-最好的预测模式 与仅使用16xl6块进行预侧相比,使用不同大小和形状的块可以使码率节约巧%以上 同时,核内预侧采用了更精细的预测精度,H.264中亮度分t的运动矢量使用114像素精度 色度分量的运SP一BF561EZ一itUtke评估板 此评估板包括l块AD-SP一BF561处理器32MBSDRAM和4MBFlash,板中的AD一V1836音频编解码器可外接4输人16输出音频接口;而ADV7183视频解码器和ADV7171视频编码器则可外接3输人13输出视频接口 此外,该评估板还包括l个UART接口l个USB调试接口和l个JTAG调动矢量使用118像素精度 1.2.3多核参考H.264支持多顿参考预测,最多可以有5个在当前试接口 摄像头输人的模拟视频信号经视频芯片ADV7183A转化为数字信号,此信号从ADSP一BF561的PP&1(并行外部接口)进人ADSP一BF561芯片进行压缩,压缩后的码流则经ADV7179转换后从ADSP一BF561的被之前的解码恢作为参考帧产生对当前帧的预测,提高H.264解码器的错误恢复能力 1.2.4盆傲变换H.264对残差图像的4x4整数变换技术,采用定点变换中的浮点运算 以降低编码PP&2口输出 此系统可通过Flsh加载程序,并支持串口a及网络传输 编码过程中的原始图像参考帧等数据可存储在SDRAM中 2,2算法选取与优化方案运算来代替以往Dcr1.2.5摘编码时间,同时也更适合硬件平台的移植 H.264支持两种摘编码方法,即CAVLC(基于上下文2.2.,算法选取H.264JM26x4实现的源代码不止一种,其中最常见的有和长64 对比这三种实现源代码,X264比的自适应可变长编码)和CABAC(基于上下文的自适应算术编码) 其中CAVLc的抗差错能力比较高,但编码效率比CABAC低;而CABAC的编码效率强,但需要的26T4具有更高的效率 而且相比广泛采用的JM编码模04欢迎网上投稿ww甲.c址naaet沈0幻口(电子技术应用#2009年第2期 型,X264在兼顾编码质量的同时大幅度地提升了编码改进主要集中在对me(motionestimation)的改进上,流程如图2所示 ostminl二min(costl6,16x166速度,所以选取X264作为算法原型 2.2.2优化方案该优化方案从三个层次对算法进行优化:算法层eosts,eost16xs,eostsx16),eost-minZ=min( ost而nl, ostsub),依次在16xl68x816xs和sx8x88次代码层次平台层次 下面介绍具体优化方法 2.2.2.,编码器具体参数的选择该编码器使用main档次,IBP帧量化值分别为6大小宏块的整像素位置做1预测,再做次像素估计和帧内预测,选用匹配准则函数(采用sad作为匹配准则函数)取16xssxl6626139,流控参数选为CBR 2DR帧间隔设为5I0,B帧间隔为2帧 这样的选择是为了在速度和运算量上取折 中 选用B帧并将其量化值加大,可比baseinle档次IPPP结构提高约10%的压缩率 而B帧的计算量,因其不用做参考帧,故无需进行去块滤波和插值计算,在31的qp下,很多块会被判做skip模式编码,因而多数时B 得最小值的模式进行编码 每计算一种模式,都将sad值与帧总运算量候反而较P帧低 2.2.2.2算法层次的优化算法层次的优化主要是指在参数选定的情况下,对一个经验阀值做比较 当sad值小于这个阀值时,立即结束运动估计,从而减少运算量 帧内预测的改进:H.264标准所采用的帧内预测模式除了DC模式都具有方向性,subpel部分算法所作的替换或优化 和参数的选择一样,算法 层次优化也主要受优化策略的指导 如运动匹配准则是选用SSDSAD或SATD 如果只看中准确程度,则选择Intra相邻4x4块都具有相关性 根据这样的相关性,只将当前4K4块上边和左边选用预测图2运动估计流程图SSD最佳;如果只看中运行速度,则选择SAD最佳;如果要兼顾二者,则选用SATD是比较好的一个方案 在进行算法优化时还应该注意一个问题,即要考虑实际运行平台的支持情况 如在追求速度的策略下,匹配准则选模式及其相邻的两种预测模式作为当前4x4块的预测模式,当其阀值都大于一个经用SAD,如果只计算一半的点则会大大降低运算速度 但是如果考虑ADSP一BF561汇编指令的设计情况,就会发现这样做反而会增加指令数,会使速度更低 算法层次优化包括如下几个部分:验阀值时,才采用DC模式 这样的方案不用一一计算9种预测模式淮复杂度编码效率质量和速度上取了一个折中 流程如图3所示 2.2.2.3代码层次优化针对ADSP一BF561平台,代码层次的优化工作包括以下几个方面:计算候选模式sad值一左,上4x4块模式(l)除法求余 改进策略是浮点型算法尽量改为整型,64位尽量改为32位,32位尽量改为16位 而对于个CYC比,而查某些计算比较多的,则改为查表计算 在ADSP一BF561平台上,一次32位整形除法需耗时300赢女书愁J表仅需几个CYC比,这样的改进能显著提高速度 (2)饱和函数 在视频的计算中,几乎每次像素的计算都会调用饱和函数,X264代码的实现中已将这部分代码改为查表函数,在其他的编解码器实现中也有将这部分改为一个判断和几个逻辑运算的形式 对大部分DSP平台,采用判断跳转会打断流水线,即使平台有比较好的跳转预测功能,打断流水仍然会造成stan 所以 (l)内联函数 将经常调用的函数体较小的函数改为内联 编译条件中有关于内联函数优化的选项 内联函数的使用是将代码的大小和运行效率取一个折中 根据实际情况,代码的大小图3返回帧内预测流程图并非限制条件,所以应尽可能多地使用内联函数 在项目配置中选中whendecl,dinline选项 (2)跳转预测 ADSP一BF561采用了静态预测的方式来预测有条件判断情况,预测不成功会造成4一8个内核时钟(CCLK)的延误 如果事先知道某些跳转的概率,将 查表方法是一种高效方法 而在ADSP一BF561汇编指令中,可以通过设置指令后缀或使用某些特殊指令来进行饱和工作 甚至不用查表,在不同的场合使用不同的饱和算法能大大提高代码的执行效率 (3)MC部分函数 实测中发现MC部分函数运行效率不如fmpfeg解码器中MC部分效率高,所以将这部分代码用fmpfeg中的相应部分替换 此外qpel6eshv函数中计算有冗余,减少这些冗余能提高代码运行效率 4)算法替代和改进 帧间预测的改进:关于算法的(可能性最大的分支放在最前面,可以从概率上降低预测不成功而造成的 tal(3)使用硬件支持循环 对于大部分平台,将一些循环体小的循环展开也能提高效率 ADSP一BF561有两组硬件计数器用以支持循环 所以除非是展开三层以上的电子技术应用#2009年第2期循环,否则,展开循环体不能提高效率 4)内存 嵌人式系统的内存是非常宝贵的资源 避(免频繁的动态申请和释放内存,能减少碎片产生,提高内存的利用率 X264工程也不会频繁地申请释放内存 专用指令通过SIMD技术或者操作专门硬件支持某些特殊运算(累加多参数取均值,同时完成加减法等),以提高运行速度 如前文求SAD情况,汇编指令中有指令专门计算连续4个像素与另外连续4个像素之差的绝在项目中,具体做法是编写平台相关的maloc和fee函r数 将经常使用的中间数据在Ll数据空间中分配 对值之和,结果与累加器的值相加 如果要隔点算(即取一半的点计算),反而需要增加指令后对数据进行下采样,既耗时而且不准确 所以采用计算一半像素点的策略并不适用于ADSP一BF561 编译器自动生成的代码中不会使用到这些专用指令 所以只能根据对算法的理解和对平台的熟悉程度来对算法进行汇编优化 (5)注释不需要代码 去掉代码中不需要的部分,主要会去掉CAvLC以及部分码率控制spcPu信息统c 计调试和Psnr计算等部分代码,这样做的目的是为了减小文件大小和去除代码中的一些跳转 不建议删除代码,可以使用注释符或用宏切换的方式,以防止以后参数改变时需要使用未使用过的代码 2.2.2.4平台层次优化在编写汇编代码时还需注意部分寄存器的使用,如orn,其值不仅用做地址索引,还会影响许多指令的计算结果 在使用这些寄存器时,一定要注意将其压栈或置为适当的值 此外,关于数据的载人,一般应遵循对齐ADSP一BF561相应的编程参考和硬件参考对其平台特性有详细介绍 一些平台自带的优化功能,如CACHE的开启和配置等不专门在此讨论 (l)汇编代码编写使用汇编优化有两个方法:对于LEAF函数(函数体原则,但在做运动估计计算匹配准则函数时,这样的要求往往达不到 故如能将两者分开来计算,将更能提高效率 此外,应尽量合理地使用寄存器,多使用并行指令也能提高代码的执行效率 (2)分级存储器结构ADSP一BF561处理器采用改进的哈佛结构和分级的存储器结构 玫vell(Ll)存储器以全速运行,只有很少中不再调用其余函数),采用整个函数完全用汇编指令重写的方式;而对于NONLEAF函数则可使用asm关键字,在C代码中嵌人汇编代码 在汇编代码的编写过程中一些情况会造成流水线 tall,在编写汇编代码时要特 别注意避免这些情况 IDE集成了PIP比UNEVIEWER工具,如图4所示 在编写完成汇编代码后,可使用该工具观察运行时流水线的情况 如果有,tall等出现,会给的延迟 在Ll级,指令存储器存放指令 两个数据存储器存放数据,一个专用的临时数据存储器存放堆栈和局部变量信息 由多个Ll存储器组成的模块,可进行SRAM和CACHE的混合配置 存储器管理单元(MMU)提供存储器保护功能,对运行于内核上的独立任务,可保护系统寄存器免于意外的存取 Ll存储器是ADSP- 出原因,优化人员根据工具分析结果重新更改代码,提高执行效率 ADI公司提供的IDE具有非常灵活的设置,能根据用户的需要生成针对不同限制的代码 如内存有限,用户可以设置生成文件更小的代码;如果用户更注重运行 BF561处理器内核中性能最高最重要的存储器 通过外部总线接口单元(EBIU),片外存储器可以由SDRAMFLASH和SRAM进行扩展,可以访问多达132MB的物速度,则设置编译器生成运行速度更快的代码,或是在其间取一个折中 ADSP一BF561有专门用于处理视频相关的一些专用理存储器 根据这样的特点,将执行率更高的代码放人L指令缓存中,能使代码更快地运行 IlDE提供了Pr于le工具,能在运行时统计各个函数所占的CYCLifE数和.taDFO二公目比tel助.uteZJU目P.∋口匕,,t.∋ DSP指令(videoC和1.255!25572558255,pixelo伴rationsvectoroperations等),这些) 河脚盆州了..吕at.F.∋D,it目比亡kr的幻C砒uJ作砚lIP+F即钟.:l.知川卜犷田:知犷川扣卜PFl3RC砚[+rIP.十1.(即二禽巨...份.tt口el- 自自七.,,:1...1几t1.目勺皿.己勺几0.:1.口.1压d256025612562皿...位.:t洲神:皿二皿1C匕..旧:班幼,州肚d,I,t.)∗.t,..f.t七k25!32564256!25!6加t公I,:班.宕.肚ct.J.目P∋25!7∋∋图4∋PIPEUNEVIEWERC!!IF 24欢迩网上投稿www.ChinaaeLC0m电子技术应用#2009年第2期占总CYCLE数的百分比 通过将X264中比较 表2测试序列优化前后帧率测试结果测试序列列orfemannPsnss耗时的部分算法代码,如模式选择部分代码放人Ll指令空间,能进一步提升运行效率 Profle工具统计结果同样也是选择需要使用i优化前l(f/ )7.448.11优化后l(fls))1石NRY/dBB11.5513.8827.40491名NRU/dBB)(4.28155.召NRV/dBB42.1376637.8414427.735336.6499 汇编优化函数的依据,IDE可根据Profile结果对代码进行优化 X264代码Profile统计结果highw叮9.2215.4431.3185538.3541139.36533与测试数据有很大关系,选用更类似以后应用场所的数 表3优化后不同总线频率下编码帧率刚试结果总线颇率/MH::755!oo1200据作为测试数据,能使统计结果更接近以后的应用环境 为达到比较准确的统计结果,最好在simulation阶段进行统计 虽然这样非常耗时,但为得到一个准确的统 帧率/(f/s))9.25510.72211.55 计作为参考依据是值得的 此外CACHEviEWER工具能提供运行时CACHE的使用情况,使用它来分析CACHE的使用,对于提高代码运行效率很有用处 如表3所示,采用的测试序列为foreman 本文介绍了H.264标准的框架,研究了X264软件的实现方案,对ADSP一BF561处理器体系结构进行分3实验结果评估3.,关健函数优化测试结果采用以上优化方法对编码关键函数进行优化,优化前后函数耗时如表1所示 可见,以上优化方法能大幅度减少编码时间 析,提出了一套X264优化方案,包括:算法替代和改进内联函数汇编代码编写高速存储器应用等 测试结果表明,优化后的算法编码效率有显著提高,具有很强的实用价值 但是,本文主要从编码速度和效率两方面对编码器进行优化,在复杂度和编码质量上仍需不断对关键算法进行分析整合,提出新的优化算法 同时,编码器表1优化前后关健函数耗时 优化函数数x264wepixe&eswad一x44x264ePixeleesad一xssx264epixelessad_16xl66qPels_vvqPels_hvv优化前/eyelee39833198888773155738洲)X834(洲X&优化后/eyelee20555110334324266378峨XX))483以力力提高百分比/%%48.3884.51150.71148.78842.011的码率控制尚未完善,如何在降低计算复杂度的前提下有效进行码率控制,需进一步研究 参考文献(l]毕厚杰.新一代视频压缩编码标准∃邮电出版社,2005.H.264.北京:人民(]幻刘峰.视频图像编码技术及国际标准.北京:北京邮电2大学出版社,2005. qPels_hv-2-dda4x4eeidettsuMx4sedett612003324()X2112()X384以刃刃2232X))1452()X41.92232.85531.255(]3李玉山.数字视觉视频技术.西安:西安电子科技大学出版社,2侧拓. 3.2测试序列侧试结果(4+MICHAELURAPISA,S明旧RINGK,SULIJVANG.H.264/MPEG一4AVCrefe比neesoftwaermanual.JointVideoTeam 对三种测试序列在总线频率120MHz下进行优化前后帧率测试,结果如表2所示 从表2可以看出,采用以上优化方法能显著提高帧率 3.3不同数据总线频率下测试结果(JVT)of150/IECMPEG&&TU一TVCEG(150/IECJTCllSC29lWGllandITU一TSG16Q.6)14thMeeting,HongKong,PRCChina17一21,2()5.X(收稿日期:2008一oo一16)对于不同的总线频率,优化后编码帧率不同,结果J乒......双路输出同步降压控制器 Maxim推出高性能双路输出同步降压控制器MAX15034,能够驱动外部MOSFE∀T提供2路25A输出或单路50A输出 这种灵活性可使器件用于多种设计平台,从而减少了元件种类降低了成本 此外,器件的输入电压范围为4.5V一5.5V或5.5V一28V,可用于SV和12V总线系统 器件针对大输出电流的应用进行了优化,可理想用于计算处理电信网络存储和服务器设备 MAX15034提供强大的可编程特性,大大提高了灵活性 可编程特性包括输出电压(0.6V一5.5V)开关频率(100kHz一1MHz)电流限制门限和外部补偿网络 上述可调节特性允许根据尺寸性能和成本对不同设计分别进行优化 为最大程度地节省空间和成本,器件采用平均电流模式架构,提供电流限制功能和优于10%的相位间均流精度 精确的电流限制省去了体积庞大的外部MOS几T和电感 MAX15034的其他特性包括:输出具有预偏置电压时,能够单调启动;2个使能输入具有精确的开启门限,可实现输出电压排序;与外部频率同步;热关断和打隔式保护 MAX15034提供28引脚飞SOP封装或带有裸焊盘的28引脚巧SOP封装 两种版本的器件均工作于一40,一+l25,汽车级温度范围 Maxim公司电话:(010)62115199,传真:(010)62115299,网址:http:/lww.maxim一ie.eom.en (M翻m/\\司供稿)A(电子技术应用#2009年第2期43