微波EDA网,见证研发工程师的成长!
首页 > 应用设计 > 消费类电子 > 基于Blackfin533的H.264编码

基于Blackfin533的H.264编码

时间:08-18 来源:电子技术应用 点击:


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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top