微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 电源设计 > 一种处理器的视频编码器平台的探讨

一种处理器的视频编码器平台的探讨

时间:04-25 来源:互联网 点击:

实现

  将H.264在DSP进行改进要经过以下3个步骤:PC机上的C算法优化、从PC机到DSP的程序移植、在DSP平台上的代码优化。

  3.1 PC机上的C算法优化

  根据系统要求,本设计选择了ITU的Jm8.5版本baselineprofile作为标准算法软件。ITU的参考软件JM是基于PC机设计的,故可取得较高的编码效果。将视频编解码软件移植到DSP时,应考虑到DSP系统资源,主要应考虑的因素是系统空间,需要对原始的C代码进行评估,这就需要对所移植的代码有所了解。

  了解了算法结构以后,还需要确定在编码算法的实现过程中,运算量较大且耗时较长的部分。VC6自带的profile分析工具显示:帧内与帧间编码部分占用了整体运行时间的60%以上。其中ME(MoveEstimation,运动估计)又占用了其中较多的时间。

  (1)大幅删减不必要的文件和函数

  由于选用了baseline和单一参考帧,因此,很多文件和函数都可以删减,包括有关B帧、SI片、SP片和数据分割、分层编码、权值预测模式、CABAC编码模式等不支持特性的冗余程序代码,此外,还可以删除top_pic、bottom_pic等与场有关的全局变量与局部变量、分层编码、多slice分割以及FMO、与场编码/帧场自适应编码/宏块自适应编码有关的预测、参考帧排序、输入输出以及解码器缓存操作等;也可以删除随机帧内宏块刷新模式和权值预测模式等相关的冗余代码,同时删除rtp.c;sei.c中包含一些辅助编码信息(并不编入码流中),如果不用,也可以删除leaky_bucket.c用于计算泄漏缓存器的参数。

  (2)配置函数的改写

  由于JM的系统参数配置是通过读取encoder.cfg文件来实现的,故可将参数配置由读取文件改为通过初始化集中赋值函数来实现,这样既减少了代码量,又减少了对有限内存空间的占用和读取时间,提高了编码器整体的编码速度。

  (3)去除冗余的打印信息

  为了调试与算法改进的方便,JM保留了大量的打印信息。为了提高编码速度,减少存储空间消耗,这些信息完全可以删掉。如果lor.dat和stat.dat仅需在PC机上调试时使用,也没必要移植到DSP平台上,跟这部分相关的代码完全可以去除。但是,调试时所需的基本信息(如码率、信噪比、编码序列等)则应保留参考。

  通过调整可使得代码的结构、容量更加精简,从而为接下来在DSP上的移植做好准备。

  3.2 从PC机到DSP的程序移植

  要将PC端精简的程序移植到ADSP-BF561的开发环境VisualDSP下,以使其能够初步运行,所需考虑的主要是语法规则和内存分配等问题。

  (1)除去所有编译环境不支持的函数

  (2)添加与硬件相关的代码

  (3)配置LDF文件

  (4)Malloc问题的解决

  4 DSP平台上的代码优化

  在VisualDSP开发环境下对代码进行优化的主要方法有C语言级优化和汇编级优化。

  4.1 C语言级优化

  通过VC6的profile分析工具发现:移植与优化的重点应在运动估计部分。DS算法可采用两种搜索模板,分别是有9个检索点的大模板LD-SP和有5个检索点的小模板SDSP(SmallDiamondSearchPattern)。搜索时,先用大模板计算,当最小块误差SAD点出现在中心点处时,再将大模板LDSP换为SDSP进行匹配运算,这时,5个点中具有最小SAD者若为中心点,则该点即为最优匹配点,然后结束索,否则将继续以此点为搜索中心进行SPSS搜索。

  经JM实验证实,采用此种方法,可以节约大约10%的运行时间,且代码量无太大增长。

  针对DSP的特点和相关的硬件指令,设计时可对代码进行如下优化:

  ◇对程序结构进行调整。对不适合DSP执行的语句进行改写,以提高代码的并行性。

  ◇宏的使用。也就是将有些较短,执行单一、调用次数多的函数改为宏。

  ◇循环优化是将C语言中的for循环打开,排流水线,提高并行性。

  ◇浮点数定点化。因为Blackfin561并不支持浮点运算,但原始程序代码却是浮点运算的格式,所以必须改成定点运算,而其修改后的执行速度也会加快很多。

  ◇尽量用逻辑运算代替乘除运算。由于乘除运算指令的执行时间要远远大于逻辑移位指令,尤其是除法指令,故应尽量用逻辑移位运算来代替乘除运算,以加快指令的运行速度。

  ◇减少判断转换。

  ◇尽量静态分配内存。

  ◇调用系统提供的丰富的内联函数。

  此外,为了充分发挥DSP的运算能力,还必须从它的硬件结构出发,最大限度地利用它的8个功能单元,使用软件流水线尽量让程序无冲突地并行执行。也可将最耗时的函数抽取出来,用线性汇编改写,从而最大限度的利用DSP的并行性。

  4.2 汇编级优化

  汇编级优化主要指如下几点操作:

  (1)使用寄存器资源

Blackfin561提供了8个32位数据寄存器以及一系列的地址寄存器。使用寄存器代替局部变量时,若局部变量用来保存中间结果,那么用寄存器代

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

网站地图

Top