`
mmdev
  • 浏览: 12915772 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

NVDKC6416平台H.264算法优化

 
阅读更多

本文转载自:http://blog.csdn.net/embedesign/archive/2009/09/15/4556486.aspx,版权归原作者,编辑:小乙哥

多媒体通信终端设备具有广泛的应用前景,可以应用于视频会议、可视电话、PDA、数字电视等各个领域,所以高效、实用的多媒体终端设备一直是通信领域研究的主要方向之一。

多媒体通信终端的实现主要有两点:一方面需要快速、稳定的处理器作为媒体信号处理的平台,另一方面需要适合多媒体通信的协议标准和软件算法,尤其是对音视频信号的压缩处理算法。两者的结合才能产生高效的多媒全通信设备。目前随着数字信号处理器(DSP)的高速发展,为实现高效的音视频信号处理提供了可能性;另一方面,最新的低码率视频压缩标准H.264的出台,提供了适合通信的视频标准和算法指导。因此,将两者结合,把H.264算法在DSP上实现,对于多媒体通信的研究具有一定的意义和价值。

本文介绍了H.264解码器算法的DSP实现。在设计中,采用了ATEME公司的网络视频开发平台(NVDKC6416)作为DSP处理平台,实现了H.264的优化解码算法。对于QCIF视频序列,解码速度达50~60帧/秒。

1 网络视频开发平台NVDK简介

NVDK是TI的第三方ATEME公司推出的基于TIC6400系列DSP评估开发套件,是一套适用于图像、视频信号处理的高速DSP开发平台。该套件为诸如视频基础设施及网络化视频设备等高级视频应用制造商提供了方便,提高了数字视频应用项目的开发速度。
NVDK C6416
1.1 NVDK C6416体系结构

NVDK C6416由TMS320C6416 DSP内核、10/100Mbps的以太网子卡、音频/视频接口盒、PCI总线、存储器单元、扩展接口及独立电源等构成。其功能结构框图如图1所示。

1.2 NVDK C6416的主要特点

NVDK作为网络及视频开发套件,把很多音视频接口及网络接口直接做在板卡上,给采用TI C6000系列DSP芯片作为处理单元的开发用户提供了便利的前端平台。它为项目演示、算法实现、原理制作、数据仿真、FPGA开发和软件优化提供了完整的DSP开发平台。其主要特点如下:

·C6416 DSP内核:600MHz时钟频率及8指令并行结构,最高可以达到4800MIPS的处理能力。

·视频特点:在输入端,NVDK能够捕获PAL制或NTSC制的模拟视频信号,可以采用复合视频(CVBS)或者S-video视频信号输入,输入模拟视频信号被数字化为YUV422数字视频格式。在输出端,NVDK在支持复合视频(CVBS)以及S-Video输出的同时,还提供了SVGA输出模式,视频采集提供FULL、CIF和QCIF三种图像格式,视频输出提供FULL和 CIF两种图像格式。

·音频特点:提供两路双声道音频输出,CD音质的输入输出立体声接口,另外还提供一路单声道的麦克风输入。

·主接口:提供了PCI接口,允许与PC机相连。该板既可以以PCI模式运行,也可以单独脱机工作。

·网络接口:以太网接口为视频码流的网络传输带来了方便。

·外部扩展存储器:256M 64位宽扩展内存SDRAM和8M 32位宽扩展内存SDRAMB及4MB FLASH ROM提供了跤的内存空间和灵活的内存分配方案。

2 H.264视频压缩标准

H.264是由ITU-T视频编码专家组(VCEG)和ISO/IEC移动图像专家组(MPEG)共同提出的最新国际视频编码标准。它在H.264、H.263视频压缩标准的基础上,进行了进一步的改进和扩展。其目的是为了进一步降低编码率,提高压缩效率,同时提供一个友好的网络接口,使得视频码流更适合在网络上传送。由于该标准可以提供更低的码率,所以更适合应用于多媒体通信领域。

H.264主要有以下新特点:

·网络适配层NAL(Network Abstraction Layer)。

传统的视频编码编完的视频码流在任何应用领域下(无论用于存储、传输等)都是统一的码流模式,视频码流仅有视频编码层(Video Coding Layer)。而H.264根据不同应用增加不同的NAL片头,以适应不同的网络应用环境,减少码流的传输差错。

·帧内预测编码模式(Intra Prediction Coding)。

帧内预测编码合理地利用了I帧的空间冗余度,从而大大降低了I 帧的编码码流。

·自适应块大小编码模式(Adqptive Block Size Coding)。

H.264允许使用16×16、16×8、8×16、8×8、8×4、4×8、4×4等子块预测和编码模式,采用更小的块和自适应编码的方式,使得预测残差的数据量减少,进一步降低了码率。

·高精度亚像素运动估计(High precision sub-pel Motion Estimation)。

H.264中明确提出了运行估计采用亚像素运动估计的方法,并制定1/4像素和1/8像素可选的运动估计方法。亚像素运动估计,提高了预测精度,同时降低了残差的编码码率。

·多帧运动补偿技术(Multi-frame Motion Compensation)。

传统的视频压缩编码采用一个(P帧)或两个(B帧)解码帧作为当前帧预测的参考帧。在H.264中,最多允许5个参考帧,通过在更多的参考帧里进行运动估计和补偿,找到列差更小的预测块,降低编码码率。

·整形变换编码(Inter Transform Coding)。

H.264采用整形变换代替DCT变换,整形变换采用定点运算代替浮点运算。采用这种变换,不仅可以降低编解码的时间,而且,为该算法在多媒体算是平台上实现带来了方便。在这一点上,H.264视频编码标准更适合作为多媒体终端的编解码标准。

·两种可选择熵编码CAVLC和CABAC。

CAVLC(Context-based Adaptive Variable Length Coding):基于内容的自适应变长编码。

CABAC(Context-basedAdaptive Binary Arithmetic Coding):自适应二进制算术编码。

以往的视频压缩标准中,都采用Huffman编码与变长编码相结合的方法进行熵编码。 Huffman编码虽然是一种很好用的熵编码方法,但是其编码效率并不是最高的,而且,Huffman编码的抗差错性能很低。H.264中采用了两种可以选择的熵编码方法:CAVLC编码抗差错能力比较高,但是编码效率不是很高;CABAC编码是一种高效率的熵编码方法,但是计算复杂很高。两者各有优缺点,所以针对不同的应用,选择不同的编码方法。

3 H.264解码器算法的DSP实现和优化

3.1 在PC机上实现H.264算法并进行优化

ITU-T官方提供的H.264的核心算法不仅在代码结构上需要改进,而且在具体的核心算法上也需要做大的改动,才能达到实时的要求。这一步需要做的具体工作包括:去处冗余代码、规范程序结构、全局和局部变量的调整和重新定义、结构体的调整等。

3.2 PC机H.264代码的DSP化

C6000开发工具Code Composer Studio有自己的ANSIC编译器和优化器,并有自己的语法规则和定义,所以在DSP上实现H.264的算法要把PC机上C语言编写的H.264代码进行改动,使其完全符合DSP中C的规则。

这些改动包括:去除所有的文件操作;去除可视化界面的操作;合理安排内存空间的预留和分配;规范数据类型——因为C6416是定点DSP芯片,只支持四种数据类型:short型(16 bit)、int(32bits)、long型(40bits)和double型(64bits),因此必须对数据进行重新规范,把浮点数的运算部分近似用定点表示,或用定点实现浮点运算;根据内存的分配定义远近程常量和变量;把常用的数据在数据结构中提取出来,以near型数据定义在DSP内部存储空间,以减少对EMIF端口的读取,从而提高速度。

3.3 H.264的DSP算法优化

通过把PC机H.264代码DSP化,可以在DSP上实现H.264的编解码算法,但是,这样实现的算法运行效率很低,因为所有的代码都是由C语言编写,并没有完全利用DSP的各种性能。所以必须结合DSP本身的特点,对其进一步优化,才能实现H.264视频解码器算法对视频图像的实时处理。

对DSP代码的优化共分为三个层次:项目级优化、C程序级优化、汇编程序级优化。

(1)项目级优化:主要是通过选择CCS提供的编译优化参数,根据H.264系统的要求进行优化,通过不断地对各个参数(-mw -pm -o3 -mt等)的选择、搭配、调整,改善循环、多重循环体的性能,进行软件流水,从而提高软件的并行性。

(2)C程序级优化:主要是针对采用的DSP的具体特点进行代码的功能精简、数据结构的优化、循环的优化、代码的并行化处理。在这里主要工作包括以下部分:去除掉SNR计算、帧率及其他辅助信息的程序模块。函数及数据映射区域的调整,把经常用的数据存储在片内存储器中,频繁调用的程序尽可能映射在相邻或相近的存储区域。C函数的并行化处理,针对并行化效果差的函数,尤其是多重循环体,要进行循环拆解,将多重循环拆解为单重循环。减少存储区数据的读取和存储,尤其是片外存储区域数据的调用,以减少时间。数据结构的重定义和调整。

下面以数据结构的调整说明如何合理利用DSP特性进行软件优化。

数据结构是指数据的类型及其在内存空间的分配方式,不同的数据结构,对程序的性能有不同的影响。因此,数据结构的调整对程序在DSP上并行执行是必不可少的步骤。

在H.264解码器内核代码中,数组mpr[i][j]用来存放一个宏块的预测系数,数据类型是int型,其中i、j是该系数的坐标。但是预测系数实际上只有8位位宽,所以,定义成byte型就足够了。这样一方面节省了内存空间,另一方面,用 byte类型可以直接使用LDW指令代替LDB指令,一次读取4个数据,节省了读取时间。因此H.264中对系数的读取都是以块为单位的,而内核中的 mpr数据结构显然不能充分利用DSP的特性,所以数据存储结构也需要调整,把mpr中每一个块分配到一个连续的内存空间有利于数据的传送,如图2所示。这样,每一次确定了一个块以后,只要更改一维的信息就能确定系数的位置,而原始的结构对每一个系数都有确定两位系数。通过这样的数据调整,可以明显地提高程序的运行速度。

(3)汇编程序级优化。汇编级的优化包括两部分:采用线性汇编语言进行优化和直接用汇编语言进行优化。由于系统编译器的局限性,并不能将全部的函数都很好地优化,这样就需要统计比较耗时的C语言函数,用汇编语言重新编写。这些函数包括:插值函数、帧内预测函数、整形反亦换等函数。

下面以差值函数中的一段来说明汇编编写带来的性能提高。

横向1/2插值源代码:for(j=0;j<BLOCK_SIZE;j++){

for(i=0;i<BLOCK_SIZE;i++){

for(result=0,x=-2;x<4;x++)

result+=mref[ref_frame][y_pos+j][x_pos+i+x]

*COEF[x+2];

block[i][j]=max(0,min(255,(result+16)/32));

}

}

该段代码采用一个六阶滤波器来插值1/2位置的像素值,共插出16个值(一个块)。源代码采用三重循环,内层循环是插值滤波器,如果直接用编译器把源泉代码编译成汇编的话,内部循环都要反复读取一些内存数据。采用汇编自己编写,则可以改进算法,大大降低函数的运行时间。

如图3所示,在插值第一个半像素位置时,要在内存中读取1~6像素的值,插值第二个半像素位置时,要读取2~7点的值,这样,就反复读取了2~5像素点的值,而且,插值一个点需要进行6次乘法、5次加法。用汇编语言编写,手工排流水线,可以降低数据的读取次数,同时减少了乘、加法指令数。首先,采用LDNW指令直接读取8个数据到寄存器中,每次插值直接使用寄存器而不再去内存中读取数据。另外,采用DOTPSU4乘累加命令代替MPL指令,将四次乘法和3次加法用一条指令来代替,减少了指令数目。

通过以上各种优化方法,最终实现了基于C6416内核的H.264 baseline解码器算法。

4 算法性能的评测及前景展望

在NVDK C6416环境下,测试了解码器算法,对QCIF测试序列,已经能够达到50~60帧/秒的解码速度,远远达到了实时性解码的目的。

在NVDK C6416板卡上实现的H.264视频解码器具有功能强、使用灵活等特点,有广泛的应用前景。该优化的算法不仅适用于NVDK板,对于所有的C64开发板都具有通用性,只要根据板卡的内存分配,重新配置内存参数文件,便可以把该算法移植到新的开发板中。该H.264视频解码器与网络平台相连接便可以应用于视频会议、可视电话、无线流媒体通信等应用领域。

分享到:
评论

相关推荐

    h.264代码优化的一种算法

    这是本人弄的一个关于H.264优化的代码。希望能给大家带来帮助

    H.264四种画质级别

    H.264算法与以前的算法相比,在算法复杂度上H.264 Baseline Profile是以前MPEG-4的2倍左右,H.264 Main Profile是MPEG-4的10倍以上,High Profile复杂度最高;在压缩码流方面,Base Profile低于MPEG-4 10-20%,Main ...

    H.264运动估计算法优化研究

    H. 264是一种适应于低码率传输的新一代视频压缩标准, 但其在获得高性能的同时, 也 导致了其复杂性很高。运动估计是运算量最大的一部分, 对运动估计算法进行优化是提高编码效率 ... 264中运动估计快速算法的优化思路。

    实现 H.264 算法

    实现H.264算法,此为正解。 cc_build_Debug记录了不少的warning,无error。 这个程序还没有在DM642上做过实验,但应该可以运行。

    H.264算法在TI C64x上的移植及优化

    H.264算法在TI C64x上的移植及优化,介绍H.264算法,并在开发板上移植的代码及优化算法

    H.264的编码过程

    H.264算法的简要介绍!在H.264编码具体实现过程中,采用了目前国际上应用最广泛的开源编码器X.264作为实现的基础。X.264和JM系列编码器、T.264编码器相比有着优秀的性能和出色效果。

    高效的H.264并行编码算法

    采用CABAC熵编码机制的H.264编码算法提供了一种高效的并行编码方案:将H.264 编码算法划分为模式选择和码 流生成两个部分,使之构成典型的生产者一消费者关系;将RDO模式选择中的CABAC替换为码率估计,去除模式...

    论文研究-H.263与H.264视频编码算法比较 .pdf

    H.263与H.264视频编码算法比较,孙思阳,,多媒体技术,特别是实时多媒体技术要迅速发展,离不开视频的支持,而视频的数据量大和通信网带宽小之间矛盾却在日益突出。针对这

    h264_intrapred.zip_264_H.264_h.264 算法_h264

    h.264最新intrapred算法介绍

    H.264视频编码性能分析

    H.264视频编码标准是2003年5月...H.264优异的编码性能对于市场具有极大的诱惑力,而研究H.264编码的快速算法及其实现是H.264走向市场的前提和保证,因此对H.264视频编码算法进行优化具有十分重要的理论意义和实用价值。

    H.264向H.265视频压缩算法的演变

    讲述了H264编码的优缺点和新一代H.265算法

    H.264视频编解码传输算法平台及码率控制研究

    4.5 H.264实时视频编解码传输算法平台的实现 4.6 本章小结 5 基于感兴趣区域(ROI)的快速H.264编码 5.1 感兴趣区域技术简介 5.2 算法设计 5.3 基于ROI的快速H.264编码算法的实现 5.4 仿真实验与结果 5.5 本章...

    H.264码率控制跳帧算法

    一种用于在H.264标准中控制码率的跳帧算法

    基于H.264算法的视频传输系统实现

    本文介绍了基于H.264 算法的视频传输系统的实现方案。该方案采用目前最新的视频压缩标准———H.264 作为视频 编解码算法,i.MX27 作为系统的中心处理器,嵌入式Linux 作为操作系统,RTP/UDP 作为网络传输协议,实现了...

    dm642实现h.264算法程序

    一个可以再dm642上运行的h.264算法实现程序。可以正常运行 调试过的

    H.264视频编码快速算法研究及 DM6437实现

    H.264标准是ITU.T视频编码专家组和ISO/IEC活动图像专家组共同组成的 联合视频组开发的新一代视频压缩标准。H.264高效的编码效率建立在其高复杂 ...进行了H.264编码器在DM6437平台上的移植和优化。

    论文研究-低码率下的H.264宏块级码率控制方法.pdf

    采用平均像素信息比特来克服H.264...仿真结果表明,该算法与H.264中的G012码率控制算法相比不仅控制精度提高了0.11 kbps,而且使峰值信噪比平均提高0.224 dB。与H.264原算法相比,该算法具有更高的实时性和视频质量。

    云计算-H.264运动估计算法研究和H.264编码器在达芬奇平台的应用.pdf

    云计算-H.264运动估计算法研究和H.264编码器在达芬奇平台的应用.pdf

    基于TMS320C6678的H.264图像压缩编码技术研究.pdf

    然后,对 H.264 图像压缩标准以及并行算法相关知识展开说明。从图片组、帧、片以及宏块四个层次对 H.264 的并行压缩编码技术进行了分析,通过对比选取 Slice 级为并行编码模型。最后结合 x264 开源代码特点在 TMS320...

Global site tag (gtag.js) - Google Analytics