微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > H.264视频解码器在C6416 DSP上的实现

H.264视频解码器在C6416 DSP上的实现

时间:09-29 来源:3721RD 点击:

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-based Adaptive 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有自己的ANSI C编译器和优化器,并有自己的语法规则和定义,所以在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算法优化[3]

通过把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上并行执

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

网站地图

Top