您好,  [请登录] [QQ登录]  [支付宝登录[免费注册]

商品分类

分享到: 百度搜藏 搜狐微博 新浪微博 腾讯微博 QQ收藏 人人网 Facebook Twitter

基于ADSP-BF533处理惩罚器的H.264解码器

发布日期:2011-05-13

  H.264标准拥有比其他视频编码标准更好的压缩性能,但谋略巨大度高,限定了H.264标准的应用。Blackfin处理惩罚器是ADI公司推出的低功耗、高性能的定点DSP芯片,有极高的性价比,是H.264标准DSP实现的抱负平台。文中探究在Blackfin处理惩罚器上通过多种优化技能实现H.264及时解码器的要领。并给出实行结果。
 
 
 引 言
  H.264是ITU T的VCEG和ISO/IEC的MPEG连合创建的连合视频组JVT(Joint Video Tearn)共同订定的新视频编码标准,定位于包围整个视频应用范畴。H.264标准采取了基于可变大小宏块的活动补偿、多帧参考、整数更改、基于1/4像素精度的活动预计、去块效应滤波器等新技能,因而得到更好的压缩性能,同时也导致了运算量的大幅度增长。

  Blackfin处理惩罚器采取了ADI公司和英特尔公司共同开辟的微信号布局,在布局中加人专门的视频处理惩罚指令,事变频率高达756 MHz,能完成12OOM次/s乘加操纵。与采取超标量布局或超长指令集的DSP(如TI的C6000系列)相比,Blackfin处理惩罚器在功耗、本钱方面具有很大的上风,非常得当嵌入式的视频应用。
 
 
 1 H.264视频编码标准

  H.264视频编解码器的根本布局与早期的编码标准(H.263、MPEG4等)相似,都是由活动补偿、更改、量化、熵编码、环路去块效应滤波器等成果单位构成的。H.264标准的改造重要表如今各成果模块内部。H_264的庞大改造表如今以下几个方面:

  ①高精度的基于1/4像素精度的活动预测。
  ②多种宏块分别模式。每个宏块(16×16像素)的亮度分量有7种分区要领:16×16、16×8、8×16、8×8、8×4、4×8、4×4。
  ③多帧预测。在帧间编码时,可选5个差别的参考帧。
  ④整数更改。采取基于4×4像素块的整数更改代替DCT更改。
  ⑤H_264/AVC支持两种熵编码要领,即CAVLC(基于上下文的自适应可变长编码)和CABAC(基于上下文的自适应算术编码)。CAVLC的抗不对本领比较高,而编码服从比CABAC低;CABAC编码服从高,但必要的谋略量和存储容量更大。
  ⑥帧内预测编码。H.264采取了多种计划公道的帧内预测模式,大大低落了I帧的编码率。
  ⑦网络适配层NAL(Network Abstraction Layer)为视频编码层提供一个与网络无关的同一接口,使视频编码数据能适应差别的网络应用环境。

  H.264分为7种差别的框架(profile)——Baselineprofile、Main profiIe、Extended profile、High profik、High10 profik、High4:2:2 profile和High 4;4:4,分别代表差别的技能限定和算法聚集。此中baseline prome的利用是不收版权费的。
 
 
 2 基于ADSP—BF533的软硬件实现平台

  硬件平台采取ADI公司的ADSP—BF533 EZ—kit Lite评估板。此评估板包括l块ADSP—BF533处理惩罚器,32MB SDRAM,2 MB Flash,ADVl836音频编解码器外接4输入/6输出音频接口,ADV7183视频解码器和ADV7171视频编码器外接3输入/3输出视频接口,1个UART接口,1个USB调试接口,1个JTAG调试接口。评估板体系布局框图如图1所示。


  评估板上采取的ADSP—BF533处理惩罚器,事变频率高达756 MHz。该处理惩罚器有以下特点:双16位乘法累加器;双40位算术逻辑单位(ALU);4个8位视频ALU;1个40
位移位器;专用的视频信号处理惩罚指令;148 KB的片内存储器(16 KB可作为指令Cache,32 KB可作为数据Cache);动态电源办理成果等。Blackfin处理惩罚器还包括丰富的外设和接口:EBIU接口(4个128 MB SDRAM接口,4个l MB异步存储器接口),3个定时/计数器,1个UART,1个SPI接口,2个同步串行接口,1路并行外设接口(支持ITU一656数据格局)等等。Blackfin处理惩罚器在布局上充分表现了对媒体应用(分外是视频应用)算法的支持。

  软件验证采取如下方法:起首,通过DSP仿真器将H.264编码文件拷贝到评估板的存储器里。然后,软件从存储器中读取编码文件的数据,举行解码操纵。末了,将解码的数据通过PPI接口输出到ADV7171芯片,ADV7171芯片将输入的视频数据编码为PAL格局输出到表现器上二举行表现。

  Blackfin处理惩罚器的软件开辟平台是VisualDSP++4.0。
 
 
 3 H 264及时解码器软件计划
  3.1软件总体计划
  为了实现及时解码的请求,必要优化步伐的计划。优化流程如下:
  ①在PC机上举行算法的验证和评估、优化步伐的流程计划和数据布局计划。
  ②将步伐代码移植到Blackfin处理惩罚器。在Visual—DSP++集成开辟环境里举行编译,删除PC平台相干的代码,添加DSP平台相干的代码。
  ③举行基于DSP平台的优化操纵。设置速率优化的编译参数,举行C语言级的优化,用汇编指令改写最耗时的函数,通过利用专用的向量指令和并行指令淘汰函数的实行时间。
  3.2 在PC机上实现并优化解码器步伐
  解码器步伐参考了JM9.6,并在以下方面作了优化:
  ①由于只支持Baseline profile,删除有关B帧、SI片、SP片和数据支解等不支持特性的冗余步伐代码;
  ②修正JM9.6,每次处理惩罚一个Slice时都要分派内存,读取此中信息,再开释内存,公道摆设内存空间的分派和开释;
  ③将I帧、P帧分别独立解码,宏块解码也按预测模式和预测方向分成差别的解码模块,以省去中间的重复果断,进步解码速率;
  ④优化CAVLC码表的查问要领。

  3.3 步伐移植
  VisualDSP++是一款支持Blackfin处理惩罚器的集成开辟、调试环境,包括VisuaIDSP++内核(VDK)、C/C++编译器、高级图形绘制东西、调试东西、器件模仿器等多种成果;可以或许很好地支持在Blackfin处理惩罚器上用C/C++语言举行开辟事变。

  移植的第一步是撤除全部的编译环境不支持的函数(比方某些时间相干的函数),将文件操纵修改为读取文件数据缓存的操纵,删除SNR信息网络和信息打印输出等DSP平台实现不必要的代码。第二步是添加与硬件相干的代码。这些代码包括体系初始化代码、输出模块代码、停止办事步伐和解码速率控制步伐等步伐代码。

  移植完毕后,就实现了基于ADSP-BF533处理惩罚器的H_264解码器;但速率达不到及时解码的请求,还必要举行优化。

  3.4 基于DSP平台的优化
  基于DSP平台的优化分为体系级优化、C步伐级优化和汇编级优化。

  (1)体系级优化
  打开编译器中的优化开关,设置为速率最优化;打开主动内联开关;打开“Interprocedural optimization”(进程间优化)开关;利用VisualDSP++编译器的PGO(Profile—Guided Optimization)优化编译技能。

  (2)C步伐级优化
  C步伐级的优化重要是针对BIackfin处理惩罚器的详细特点举行优化:
  ①编写链接形貌文件,将通常用的数据存储在片内存储器,比方CAVLC熵解码的码表;启用指令Cache和数据Cache,设置好启用Cache机制的指令地点和数据地点。
  ②将除法操纵转换为乘法操纵大概采取查表法谋略。
  ③淘汰对片外存储器的访问次数。对付通常访问的片外存储器地区,设置Cache使能,并可设置Cache锁定,防备被缓存的数据被更换,淘汰Cache未掷中的几率。
  ④对付可以或许用较短的数据范例表达的数据改用较短的数据范例表达,比方原定义为int范例的4×4逆整数更改的输人数据,实际上可以定义为short范例。

  (3)汇编级优化
  汇编级优化通常依照以下原则:
  ① 利用寄存器代替局部变量。要是局部变量用来生存谋略的中间结果,那么用寄存器代替局部变量可以省失很多访问内存的时问。
  ② 利用硬件循环代替软件循环。.Blackfin处理惩罚器有专用的硬件支持两级嵌套的零开销硬件循环。用硬件循环代替软件循环可克制堵塞流水线,进步速率。
  ③利用并行指令和向量指令。利用并行指令和向量指令,可以充分利用Blackfin处理惩罚器的SIMD体系布局的好处和内部硬件资源的并行处理惩罚好处,淘汰指令实行次数和进步指令实行服从。利用1条并行指令同时实行2条或3条非并行指令。向量指令可以同时对多个数据流举行雷同的加工操纵。
  ④利用视频处理惩罚指令。视频处理惩罚应用可以利用Blackfin处理惩罚器专用的视频处理惩罚指令,进步实行服从。

  将最耗时的一些函数用汇编语言改写,充分利用Blackfin处理惩罚器的S1MD布局的好处和硬件上的并行性,在一个指令周期内实行多个操纵,淘汰函数实行必要的指令周期。最耗时的函数有宏块解码函数decode_one_macroblock、逆整数更改函数itrans、去块效应滤波函数EdgeLoop、滤波门限谋略函数Get_Strength等函数。

  下面以4×4矩阵逆整数更改函数itrans和1/4像素插值滤波get_block(),阐明用汇编指令优化带来的性能进步。4×4矩阵的逆整数更改函数itrans采取的是2级蝶形运算,先对4×4矩阵的每一行分别做行逆更改,再对每一列做列逆更改。一维更改采取如图2所示的蝶形算法。

  Blackfin处理惩罚器的SIMD布局支持向量操纵,最多可以在1个周期内完成4个16位的加法操纵。它的并行指令能同时举行算术运算和两个数据的装载/存储操纵。比方上述的蝶形运算可以用如下指令实现(设寄存器IO中生存了输人数据y[4][4]的地点,I2中生存了系数数组cof[2]={0x7fff,0x4000}的地点,Il中生存了临时变量tmp[4][4]的地点,R2和R1生存的是中问结果):
  R7=[IO++];
  Al=R6.I*R7.1,AO=R6.1*R7.1(IS)┃│I R5=
  [10++]┃┃[││++]=R2;
  R4.h =(A1逐一R5.1*R6.1),R4.1=(AO+=R5.1*R6.1)(IS)││W[I1++]=R1.h;
  R7.1=R6.1*R5.h(IS)1 W[11++]=R1.1;
  R5=R7>>>1(v);
  A1=R6.1*R5.h,AO—R6.1*R5.1(IS);
  R3.h一(A1+一R6.1*R7.1), R3.1一(AO =R6.1*R7.h)(IS);
  R2=R4+l+R3,R1=R4一│ 一R3:

  完成一次一维逆更改只需8条指令,算上函数调用的开销和其他一些帮助指令,完成一个4×4矩阵的逆整数更改时统共必要82条指令周期。表1是优化前、后的比较。



  get_block函数对像素矩阵举行1/4像素插值操纵。先用六阶滤波器举行1/2像素插值,然后用线性内插法举行l/4像素插值。

  l/2像素b谋略要领为:b=round((E一5F+20G+20H一5I+j)/32)。表示图如图3所示。E、F、G、H、I、J是整数像素,b是G和H之问的1/2像素。


  像素的亮度值为unsigned char范例,先利用并行指令可以在1个指令周期内将8个像素的亮度值读到寄存器,然后利用视频专用指令将4个字节解包到1个寄存器对(R1:O或R3:2)中去,利用向量指令在1个周期内举行2次乘加操纵。通过视频专用指令、向量指令和并行指令的利用,淘汰了函数指令的指令周期数。
 
 
 4 实行结果

  在EZKit533开辟板上测试相识码器算法,对CIF格局(352×288)的foreman测试序列,可以到达45~50帧/s的解码速率;对CIF格局的mobile测试序列,可以或许到达40帧~44帧的解码速率。要是增长解码速率控制模块,可以稳固地实现以30帧/s的速率播放CIF测试序列。实行结果证明,在Blackiln处理惩罚器上实现H.264及时解码器是可行的。ADI公司乃至声称可以在600 Mtz的BF533处理惩罚器上实现D1(720×576)格局的视频及时解码器。

  BIackfin处理惩罚器有低功耗、低本钱和高性能的特点。在Blackfin处理惩罚器上实现的H.264视频解码器很适实用于IP机顶盒、可视德律风、PMP(便携式媒体播放器)等嵌人式视频应用中。