基于Blackfin533的H.264编码

2011-10-26 17:36:43来源: 互联网 关键字:Blackfin533  H.264编码
1 H.264标准简介及DSP平台
1.1 H.264标准简介

  H.264是ITU-T和ISO/IEC联合制定的最新的视频编码标准,于1997年由ITU-T提出,2003年3月形成最终标准草案。它包含了视频压缩领域的许多最新研究成果,主要采用了下面的技术[1]:
  (1) 将编码分为编码层VCL(Video Coding Layer)和传输层NAL(Network Abstraction Layer)。将编码层和传输层分离,有利于H.264的扩展。
  (2) H.264采用了空域内的帧内预测,共两种预测模式:intra16×16和intra4×4。其中intra16×16有四种预测方式,intra4×4有九种预测方式。
  (3) 对于帧间预测,增加了预测模式,共七种预测模式。预测块从16×16可以最小细分为4×4。
  (4) 增加了参考帧的数目,使预测更为准确。
  (5) 将去块效应滤波放在编码环内,提高图像的主观质量。
  (6) B帧可以作为参考帧,同时将图像的解码顺序与显示顺序分离。
  (7) 采用整系数变换,提高变换速度。
  (8) 采用CAVLC、CABAC等新的熵编码方法以提高编码效果。
  (9) 提高了码流的抗误码能力,如对编码数据进行分割,一帧图像可以灵活地分为几个slice等。

1.2 基于Blackfin533的DSP平台

  Blackfin533是ADI公司Blackfin系列中的一款高性能视频处理芯片。其主频最高能达600MHz,每秒可处理1200M次乘加运算。具有大量针对视频的专用指令,可以并行处理多条指令。
  从总体上看,Blackfin533分为内核和系统接口两大部分。内核指处理器、L1存储器、事件控制器、内核定时器等;系统接口指SPORT接口、PPI接口、SPI接口、外部存储控制器、DMA控制器及与它们接口的外部资源等。
  Blackfin533开发平台原理图如图1所示。摄像头输出的模拟视频信号经7113视频芯片转化为数字信号,此信号从Blackfin533的PPI接口进入Blackfin533,压缩后的码流由PCI桥传给PC机。此系统通过Flash启动,编码过程中的原始图像、参考帧及其他变量存储在SDRAM中。
  图2为H.264编码系统的视频输入模块。7113芯片从视频端子读入摄像头输出的模拟信号,通过并口将数字信号输出给Blackfin533。Blackfin533通过I2C总线对7113进行配置,使其输出YUV模式、ITU656模式及增强ITU656模式等。


               图1 Blackfin533平台总体框架图

                     图2 视频输入模块 
           
                 图3 H.264编码模块图
H.264编码器的优化#e#

2 H.264编码器的优化
2.1 总体优化


  总体优化主要包括两部分内容:程序模块化的设计及数据结构的设计。
  程序模块化设计时,既要考虑模块的独立性,又要考虑模块的完整性。笔者的H.264的模块关系图如图3所示。视频输入模块负责图像序列的读取,从PPI口进入的图像首先保存到外部存储器,再进行编码。读入的图像经帧间模式选择和帧内模式选择模块,得到每个宏块的预测模式。整系数变换、量化模块对预测后的残差进行整系数变换及量化处理。量化后的系数经过扫描后,在编码模块中进行UVLC编码。最后由写码流模块输出。其中,去块效应滤波模块对反量化、整系数逆变换后的重建图像进行滤波;图像缓存管理模块负责管理对参考图像的存取。从图3中可以看出,整系数变换与量化结合在一起作为一个模块。主要因为:一方面H.264中,量化和整系数变换本身就部分结合在一起;另一方面这样可以在寄存器中一起完成变换、量化,有助于减少数据的存储次数和读取时间。对于反量化、整系数逆变换,采用相似的设计思路。
  数据结构的设计是H.264编码的重要组成部分。合理的数据结构既有利于提高数据访问的速度又有利于程序的不同平台的移植。主要有以下原则:尽可能连续存放数据,这样有利于用DMA方式对数据进行读取;每种数据结构完成相对简单的功能,这样便于对不同数据结构的数据进行管理。如表示帧间模式的InterMode、帧内模式的IntraMode需要放在片内存储器中以加快读取速度,而参考帧的数据ImgData由于数据太大则需要放在片外存储器中;尽可能使用短的数据类型,节省DSP的存储空间。

2.2 各程序模块的优化

  各程序模块的优化主要指各模块的C代码优化及部分代码的汇编优化。
  C代码的优化对H.264编码器有着重要意义,它既有利于提高编码的速度,又有利于编码器的跨平台移植。C代码优化有下面的原则:
  (1) 使编码器代码线性化,这样有利于DSP的流水线满负荷运行,更充分地发挥DSP的数据处理能力。
  (2) 取消循环中的数据依赖。数据依赖是指后面指令的输入数据依赖于前面指令的输出数据。许多DSP芯片都提供了硬件循环指令,Blackfin533有两个硬件循环器,可提供两层的硬件循环。硬件循环实现了零开销的循环判断,能大大提高循环指令的执行速度,然而数据依赖的存在会阻止硬件循环的使用。所以要尽可能消除循环中的数据依赖。
  (3) 将除法转化为乘法或查表方式。Blackfin533提供了硬件乘法器,但没有硬件除法器。执行除法指令会花费几十或上百个指令周期。将除法转化为乘法或查表,能大大减少这种开销。
  (4) 减少对片外存储器的访问次数。片外存储器相对于片内存储器是低速设备,片外存储器的读取时间是片内存储器的几倍至十几倍。对于片外存储器的数据要做到一次读取,完成多次计算。
  Blackfin芯片的开发环境VisualDSP本身已经带有汇编器,但由于种种原因,对于某些运算量大、调用频繁的函数仍需要进行手动汇编优化。进行汇编优化时,应注意以下几点:
  (1) 节省寄存器资源。Blackfin533提供了8个32位数据寄存器以及一系列的地址寄存器。对于这些寄存器,应尽可能做到一个寄存器多次使用;同时在能用较短的数据类型的情况下用短的数据类型,如能用short则不用int,这样每个32位寄存器可以作为两个16位寄存器使用,相当于增加了寄存器的数量。
  (2) 使用专用指令。Blackfin533提供了求最大值、最小值、绝对值、CLIP及大量视频专用指令,通过使用这些指令,能大大提高代码的执行速度。
  (3) 使用并行指令。对于大多数指令都存在相对应的并行指令,如一条运算指令可以并行两条数据读取指令。并行指令的使用能成倍提高代码的执行速度。
  (4) 将内层循环展开等。
  对于不同的图像帧(I、P),各模块所占的比例各不相同。对于I帧,帧内模式选择和去块效应滤波占较大的比例;对于P帧,帧间模式选择则占较大的比例。总之,模式选择及去块效应滤波是H.264编码的瓶颈,需要对这两部分进行优化。
  进行模式选择时会调用绝对差值求和函数(SAD)及hadamard变换后再绝对值求和函数(SATD)。这两个函数虽然较简单,但调用较频繁,对这两个函数进行汇编优化,能较大提高模式选择的速度。对于绝对差值求和函数(SAD),通过使用Blackfin的专用视频指令SAA,可以大大提高运算速度,具体见汇编优化统计表1和表2。
表1 优化前后函数所占时钟周期数对比表 
        

 

优化函数 优化前(时钟周期数) 优化后(时钟周期数) 提高倍数
SAD 1385 55 25
SATD 1964 84 23
GetStrength 50214 4983 10
EdgeLoopY 61227 5032 12
EdgeLoopUV 52110 4173 12

                          表2 优化后的H.264各模块性能 
      

  占用时间(时钟周期数M) 所占比例
模式选择(包含插值) 11.26 53.6%
变换、量化 1.87 8.9%
反量化、反变换 1.93 9.2%
编码(UVLC) 0.90 4.3%
去块效应滤波 2.73 13%
其他 2.31 11%

                        表3 压缩后的CIF图像的质量

 

     

 

 

  H.264编码器
视频序列
(100帧)
平均峰值信噪比PSNR(dB) 码率(kbit/s)
亮度Y 色度U 色度V  
Foreman 36.57 41.23 43.39 503
Shanlin 34.00 39.95 41.30 1035
tempete 30.47 35.81 37.60 1059
mobile 30.58 34.48 34.24 1587

 


  去块效应滤波在编码中占有较大的比重。主要包括:计算滤波强度和行列滤波两部分,需要针对这两个子模块进行优化。去块效应滤波中有较多的判断语句,判断语句会打断DSP的流水线,使DSP不能充分发挥其性能,优化时应尽可能将判断转移到循环外面去,以提高执行效率。同时去块效应滤波需要频繁地访问待滤波数据,减少对这些数据的访问次数也能较大地提高去块效应滤波的速度。
  SAD()的函数原型及其汇编代码[2]:
  for(i=0;i<16*16;i++)
   result +=abs( *pSrc++ - *pRef++);
   LSETUP(row_start,row_end) LC0=P1;  //利用Blackfin的硬件循环实现SAD的循环
   row_start:
   R3 = [I1++]; //读取数据
   SAA(R1:0,R3:2) || R1= [I0++] || R2= [I1++]; //计算R1:0和R3:2的SAD
   SAA(R1:0,R3:2)(R) || R0= [I0++] || R3= [I1++]; //执行SAA的同时,读取数据
   SAA(R1:0,R3:2) || R1= [I0++] || R2= [I1++];
   row_end:SAA(R1:0,R3:2)(R) || R0=[I0++] || R2= [I1++];

3 实验结果

  笔者使用600MHz时钟的Blackfin533,对于低、中运动复杂度的图像序列,能够实现25帧/秒的实时编码;对于高运动复杂度的图像序列,能实现20帧/秒左右的准实时编码。其各模块所占时间比例见表2。
  编码器的性能指标如下:1个参考帧;帧间模式采用16×16、16×8、8×16、8×8模式;帧内模式对16×16采用4种预测模式,对于4×4采用9种预测模式;1/4像素的运动估计;熵编码采用CAVLC编码方式。
  表3为不同图像序列压缩效果的比较。每种序列压缩100帧图像,采用IPPPP....的编码模式。综上所述,在Blkfin533平台上实现了H.264的CIF图像的准实时编码。该系统具有码流低、延时小、图像质量高等优点。

关键字:Blackfin533  H.264编码

编辑:神话 引用地址:http://www.eeworld.com.cn/mndz/2011/1026/article_12617.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:MYDP引爆移动高清视频传输技术争夺战火
下一篇:FH8735在音视频压缩卡上的应用设计

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利
推荐阅读
全部
Blackfin533
H.264编码

小广播

独家专题更多

TI车载信息娱乐系统的音视频解决方案
TI车载信息娱乐系统的音视频解决方案
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源
迎接创新的黄金时代 无创想,不奇迹
迎接创新的黄金时代 无创想,不奇迹
​TE工程师帮助将不可能变成可能,通过技术突破,使世界更加清洁、安全和美好。
TTI携TE传感器样片与你相见,一起传感未来
TTI携TE传感器样片与你相见,一起传感未来
TTI携TE传感器样片与你相见,一起传感未来
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2017 EEWORLD.com.cn, Inc. All rights reserved