工控网首页
>

应用设计

>

基于DSP TMS320DM642的H.264视频编码的实现和优化

基于DSP TMS320DM642的H.264视频编码的实现和优化

2010/5/7 16:26:00

1.引言 

视频编码的建议从H.261到H.262/3、MPEG-1/2和MPEG-4都有一个共同的目标:在尽可能低的码率下获得尽可能好的图像质量。然而,随着图像通信的发展,如何适应不同信道传输的需求,如何适应用户对视频自由选择编码的需求等问题相继出现,必须要有一个新的视频编码标准来解决这些问题,这就是新一代图像编码标准H.264。H.264的视频编码标准在系统结构、运动估计和运动补偿、变换、量化、熵编码等方面都进行了很大改进,大大提高了压缩效率,节省了码率。H.264编码的重建图像的主观质量比H.263要好得多。

TMS320DM642数字媒体处理器是TI公司新近推出的一款基于C64X核的DSP。本文主要介绍H.264编码在TI公司的TMS320DM642评估板上的代码实现及优化方法。

2. H.264视频编码技术

H.264是ITU-T的VCEG (Video Coding Experts Group)和ISO/IEC的MPEG(Motion Picture Experts Group)联合成立的“联合视频组”(JVT:Joint Video Team)共同制定的新建议,它等同于ISO的 MPEG-4的 Part10。JVT于1998年2月正式开始提案征集,次年8月完成第1版草案和测试模型,2001年9月,在JVT的第1次会议上H.264的WD2(Work Draft 2)版,并推出测试模型TML-9 (Test Model Long Term Number 9)。此后,于2002年7月的JVT第4次会议上推出了H.264的CD (Committee Draft)版。

H.264的主要功能目标如下:

高压缩率:在所有的速率上,比H.263节省50%的比特率,在高比特率时质量优良;
采用简洁的设计方式,简单的语法描述,避免过多的选项和配置,尽量利用现有的编码模块;
低时延,对不同的业务灵活地采用相应的时延限制;
加强对误码和丢包的处理,增强解码器的差错恢复能力;
在编码器中采用复杂度可分级设计,在图像质量和编码处理之间可分级,以适应高和低复杂性的应用;
提高网络适应性,采用“网络友好(Network Friendliness)”的结构和语法,以适应IP网络、移动网络的应用;
H.264编码基本档次(Baseline Profile)的使用无须版权。
3.基于DSP TMS320DM642的硬件实现平台

在TI公司新近推出的600MHz TMS320DM642评估板(EVM)上实现符合H.264标准的编码器。(由SDI生产,最新的评估板为720MHz TMS320DM642 EVM - 摘编者注。) DM642 EVM是一块PCI卡,采用600 MHz的数字媒体处理器DM642,具有32MB外部SDRAM、4MB闪存、组合视频输入/输出、S-视频输入/输出、VGA输出端口以及支持媒体流的以太网端口。

TMS320DM642数字媒体处理器是TI公司新近推出的一款基于C64X核的DSP。DM642集成了一系列的外设以适应视频和影像技术的发展,其中包括三个能够进行无延滞视频输入、视频输出或传输流输入的可配置视频端口。这些端口可以支持BT.656视频I/O, HDTV Y/C I/O, RGB I/O, MPEG-2传输流输入。DM642还包含一个10/100MBPS的以太网MAC(EMAC),一个多通道的串行口(McASP),一个66MHz 的32位PCI总线,以及一些其它外设。C64X核内有8个并行的处理单元,分为相同的两组,具有64个32bit的通用寄存器的专用存取结构,同时内置高效率的协处理器,他的体系结构采用VLIW(甚长指令集)结构,单指令字长为32bit,8个指令组成一个指令包,总字长为8x32=256bit。芯片内部设置了专门的指令分配模块,可以将256bit的指令包同时分配到8个处理单元,并由8个单元同时运行。当片内的8个处理单元同时运行时,处理能力可以达到最大。在C6000公共指令集的基础上扩展了88条指令,这些指令使C64X能够更方便地执行图象处理中的算法。

4.H.264的DSP DM642实现和优化

4.1 H.264代码优化

H.264的DSP实现流程分为三个阶段:

第一个阶段产生和评估C代码,第二个阶段优化和评估C代码,第三个阶段编写和评估线性汇编。

每个阶段完成任务如下:

第一阶段:首先,产生C代码并进行时间评估。一般情况下,这个阶段的代码性能很低。如果经过评估后,仍然满足不了实时要求的话,需要进入第二个阶段以进一步改进代码性能。

第二阶段:利用优化选项、内联函数以及其它优化方法改进C代码。如果代码仍不能达到所期望的效率,则进入第三阶段。

第三阶段:从C代码中抽出对性能影响大的代码段,用线性汇编重新写这段代码,然后利用汇编优化器优化该代码,直到代码满足要求为止。

4.2 优化和评估C代码

代码分析结果显示DCT、IDCT变换、运动估计运算量占程序总运算量的比重很大,因此这部分函数是程序优化的重点。为此,我们通过下述方法对C代码进行了优化:

(1)对于复杂的运算语句,可以用查找表的方法来实现,以节省耗时。比如:在运算表达式中出现了“/”以及“%”等符号时,可以先按照所有可能的输入计算出所有可能的输出,以后的运算就可以省略而只需要查表得到数值。该方法的本质在于用空间换时间。同样,对于if-else关系到数据运算的选择语句,也可根据具体的情况,采用查找表的方法来实现。

(2)对于通过查找表编码部分个,可以将相关的码表进行合理的编排,以便运用一条指令可以一次查到需要的数据。同时,尽可能用多位的指令来访问少位的数据。比如:使用int型(32位)访问2个short(16位)型数据,将其分别放在32位寄存器的高16位和低16位字段。这样,可以提高一倍的数据读取效率。同样,像使用int型可一次访问两个short型一样,使用double型访问可一次读2个float型数据(4个int型数据),从而减少对内存的访问次数,从而减少运算耗时。

(3)在C代码中,使用内联函数替代复杂的C代码。内联函数是可直接映射为C6000指令的特殊函数,使用时同调用其它函数一样调用,同时不会破坏系统环境。内联函数用前下划线(如:函数_add2 (int src1,int src2)表示src1,src2的高低半字分别做有符号加法,返回结果)表示,使用内联函数可快速优化C代码。

(4)代码中循环越多,执行的效率越低。 因此,我们考虑采用循环展开的方法,将多循环变为少循环,甚至是单循环。即运用消除冗余循环的方法来提高指令并行执行的程度,从而提高代码的执行效率。

(5)为了进一步提高代码性能,经过评估,找出影响速度的关键 C代码段 (DCT/IDCT变换和运动估计)用线性汇编重新编写。线性汇编是C6000系列DSP所特有的类汇编工具。只需按照C代码的自然顺序,写出线性汇编语句,同时不必考虑功能单元的分配,以及指令的并行性。从而,它比编写纯汇编语句耗时要少,又具有较高的执行效率。如果编写线性汇编仍不能达到指标要求的话,在运用纯汇编编写相关的代码,充分利用C6000 DSP结构以及指令集的特点,尽可能并行其中的非相关语句。从而进一步减少代码的执行时间和提高程序的性能。

4.3 存储器的优化

与PC机相比,DSP的程序数据存储空间非常有限。因此,对于视频编解码这种需要处理大量数据的程序而言,必须合理安排数据和程序的存储方式,实现对存储器的优化,以便提高程序执行的效率。否则,大量数据的反复搬移会阻碍程序运行效率的提高。

采取以下方法对存储器进行优化:分析代码,把被反复调用的程序段(如DCT变换和DCT反变换)放在片内程序存储区中,把频繁用到的数据段(如编码表)放在片内数据存储器中,把不常用到的程序和数据段放在片外存储器中,以避免对程序或数据进行不必要的反复搬移。

在H.264程序运行过程中,由于一帧图像的数据量很大,故而将参考帧数据放到片外,需要用到当前块和参考窗数据时,再将它们从外存搬运到内存中,以便提高效率。

4.4 C代码和存储器优化前后性能分析

我们对代码优化前后的性能进行分析比较,下表是几个关键函数在优化的各个不同阶段所占用的时钟周期数的统计。

可以看出,优化后的效果是明显的。 被优化函数 优化前 优化后
DCT(4x4) 324cycles(未-03) 30cycles(线性汇编-03)
IDCT(4x4) 350cycles(未-03) 35cycles(线性汇编-03)
运动估计(1frame) 412Mcycles(未-03) 30Mcycles(线性汇编-03)
量化(4x4) 9255cycles(未-03) 704cycles(线性汇编-03)


5.结束语

本文重点探讨了在DSP TMS320DM642平台上对H.264视频编码进行相关优化的方法。我们应该考虑如何充分利用DSP DM642的硬件资源及开发工具,使代码达到所期望的性能。针<

投诉建议

提交

查看更多评论
其他资讯

查看更多

助力企业恢复“战斗状态”:MyMRO我的万物集·固安捷升级开工场景方案

车规MOSFET技术确保功率开关管的可靠性和强电流处理能力

未来十年, 化工企业应如何提高资源效率及减少运营中的碳足迹?

2023年制造业“开门红”,抢滩大湾区市场锁定DMP工博会

2023钢铁展洽会4月全新起航 将在日照触发更多商机