H.264视频编码器在DM6437上的优化实现
2012-09-26何苏勤邢藏菊
何苏勤,刘 静,邢藏菊
(北京化工大学 DSP与嵌入式系统研究室,北京 100029)
H.264作为新一代多媒体视频编码标准,采用了许多先进的技术,在编码效率和性能大幅度提高的同时,增加了抗误码及网络自适应等功能,广泛地应用于视频电话、移动视频和流媒体等场合[1]。传统上进行音视频开发一般使用视频编解码ASIC芯片的方法,但是这种方法开发周期长、适应性差,而近年出现的高性能DSP(数字信号处理器)就很好的解决了这些问题且产品性能更稳定,所以笔者采用TI公司专门推出的高性能DSP平台TMS320DM6437(简称DM6437)数字媒体处理器来实现H.264视频编码器[2]。X264是一款支持H.264标准的开源编码器代码,是由网上自由组织联合开发,注重实用,与另外两种开源代码JM和T264相比,在不明显降低图像质量的基础上,大大降低了计算复杂度,广泛应用于视频压缩和格式转换领域,因此本文选择开发源代码X264(20081113 版)进行研究。
基于DM6437平台实现H.264编码器,需要通过改进算法或者重新进行资源配置,以满足应用环境的要求。笔者重点研究了H.264编码器在以TMS320DM6437为目标的CCS平台上的移植和优化工作,包括C语言级的优化、算法优化、整数DCT变换和量化的线性汇编编写以及汇编级优化等。
1 H.264视频编码器的构建
1.1 X264编码器到DM6437的移植
X264编码器支持H.264的基本档次以及主要档次的某些功能选项和功能模块,代码尺寸非常庞大,视频编码速度相当慢。在对X264源码研究过程中,发现在视频编码质量下降不是很明显的情况下,可以将一些功能模块删除,以减小代码尺寸,加快编码速度。此项工作在文献[3-4]中均有详细讲解,读者可根据实际情况进行调整应用。笔者利用TI公司提供的CCS3.3 (Code Composer Studio)平台,将裁剪后的X264模型移植到DM6437平台上。
1.2 视频采集
DM6437数字媒体处理器中的视频处理前端 (VPFE)具有视频采集功能,可以将CCD摄像头采集的RGB图像转换为符合BT.656规范的YUV4:2:2图像[5]。采集完的视频数据在内存中的数据结构如图1所示。
在进行H.264视频编码时,必须调整原始视频的数据结构。如果对D1格式的视频进行编码,Y分量数据不变,U分量和V分量数据做垂直方向的2:1亚采样,转换成360×288的分辨率;如果对cif格式的视频进行编码,需要对Y分量进行水平和垂直方向的2:1亚采样,转换成352×288分辨率,同时对U分量和V分量进行水平方向的2:1亚采样和垂直方向上的4:1亚采样,转换成176×144的分辨率。图2为经过调整后的Y、U、V各分量的数据结构。
图1 DM6437的VPFE所采集视频数据的数据结构Fig.1 Data structure of captured video data in DM6437
图2 调整后视频数据的数据结构Fig.2 Data structure after adjustment
1.3 LCD回放
DM6437视频处理子系统中的视频处理后端 (VPBE)[6]负责将符合BT.656规范的YUV4:2:2数据转换成RGB数据,因此可以与LCD显示器进行无缝连接。在摄像头采集和H.264编码工作完成以后,本文提出LCD回放模块,进行重建图像回放,便于观察效果。基于DM6437实时视频采集的H.264视频编码器系统框图如图3所示。
图3 系统框架示意图Fig.3 System framework schemes
2 H.264编码器在DM6437上的优化
刚构建好的基于DM6437的H.264编码器很慢,难以满足视频监控需求,必须对其进行优化,提高处理性能。对H.264编码程序主要从系统优化、算法优化和汇编优化3个方面进行。
2.1 系统优化
系统优化主要是对CCS提供的各种编译参数进行选择、搭配、调整。主要从以下几个方面进行优化[7]:1)编译器的优化。首先设定合适的编译选项,控制编译器生成更高效、代码尺寸更小的汇编代码。文中设计的H.264编码器所用到的编译选项包括:-pm,-op2,-o3,-mt,-mh,-k 等。 2)DSP/BIOS 的配置。在DM6437的开发中,Cache和EDMA等功能的应用已不能单纯通过在程序中调用相关API来实现,必须在有DSP/BIOS进行管理的条件下才能正常工作,此时就涉及到存储空间的合理配置,为了最大化DM6437的存储性能,本文通过进行多次配置后编码器工作性能的比较,将LIP配置为32 kB的L1PCache,将L1D配置为32 kB的L1DCaehe和48kB的L1DSRAM,将L2配置为64 kB的L2Cache和64 kB的L2SRAM。在DM6437中配置Cache过程包括:L1和L2Cache大小的设置,模式的设置,以及外部存储器DDR可被高速缓存的设置。3)任务调度。文中设计的H.264视频编码器中采集和回放过程的主要操作是数据搬移,可以用EDMA3来实现,进而解放CPU来专心进行编码工作。因此设置一个任务即可。
2.2 算法优化
H.264数字视频编码标准,具有很高的压缩性能,但其运算复杂度是H.263标准的3倍以上,所以需要采用算法来降低运算复杂度。其中比较常用的方法是在帧内/帧间预测过程中采用快速算法,降低模式选择的次数;或者是对H.264中采用的Lagrangian率失真优化模型进行化简,提高运算的速度。除上述方法之外,全零块预判算法也是有效手段之一。
在低码率视频应用中,常见的是运动缓慢的具有静止背景的图像,静止背景经过DCT和量化后往往所有系数都为零。被判断为全零块的图像块可以省去DCT和量化两个环节而降低运算量、节约运算时间。因此基于H.264编码器的预判零方案如图4所示。
图4 H.264编码器预判零方案Fig.4 H.264 encoder anticipation zero solutions
由于 H.264 中的帧间模式有 16×16、16×8、8×16、8×8、8×4、4×8、4×4 7种模式,所以在运动搜索过程中,零块的判决阀值也要随帧间模式的变化而发生变化,不同块模式(M×N块)的零块判决阀值可以定义为:
其中,M、N=4、8 或 16,BKM×N是 M×N 块中 4×4 块的个数,即为 M×N/16。
根据以上的分析,基于最佳零块判决的运动搜索算法,在进行运动搜索时,加入停止搜索条件,对根据运动矢量计算出来的每个子块的SAD值进行全零块判决,这个判决门限由(1)决定,若当前M×N块的SAD小于门限值,则提前结束对该子块的运动搜索,并跳过其后的变换和量化操作;否则与常规的运动搜索过程相同。
新的AZBs检测方法可归纳如下:
1)检查当前M×N块的SAD值是否小于BKMxN·TH1的值。如果是真的,判定该M×N块不是全零块,否则转到步骤2);
2)检查当前M×N块的SAD值是否小于BKMxN·TH0的值。如果是真的,判定该M×N块是全零块,否则转到步骤3);
3)执行DCT/Q模块。
2.3 汇编优化
文中在CCS3.3中用profile工具对H.264程序进行剖析,结果如表1所示,可发现H.264标准中运动估计、DCT变换、量化等是最耗时的部分。
表1 X264主要函数耗时剖析结果Tab.1 Profiling results of H.264
对这些耗时部分主要采用以下2种方式进行优化:
1)内联函数(intrinsics)优化 内联函数是 C6000编译器提供的可以直接映射成为内联(inline)汇编指令的特殊函数,这样就可以提高应用程序的性能。由于上述函数都很适合运用数据打包和SIMD(单指令多数据)操作,而6000编译器提供的内联函数中有很多相关的函数接口,因此将这些费时函数全部用内联函数进行改写,例如要进行4x4块的量化操作,需要16次循环,要进行16次取数据,16次乘法,16次加法,16次移位操作。dct数组元素宽度为16位,可以利用_memd8()函数一次读取4个数组元素,这样可将读取数据次数减为4次,并在外层循环体内使用其他intrinsics函数一次对两个DCT数组元素进行处理,从而拆解了内层循环[8]。
2)线性汇编优化 整数DCT变换及量化过程在H.264编码器代码中占用了大概20%~25%的时间,对该部分进行汇编级优化,可提高编码器的性能。整数DCT变换的关键函数sub4x4_dct用于计算残差块并对残差块进行整数DCT变换;add4x4_idct函数是其逆过程,作用是对反量化后的系数进行反DCT变换,并将反变换后的系数矩阵与预测块矩阵叠加[9]。以sub4x4_dct函数为例,对整数变换的线性汇编级优化过程进行说明。整数变换的公式见(2)式。
整数DCT4x4蝶形变换过程中,将二维整数变换转换为两次一维的变换,先进行水平变换,水平变换后的系数按列存放,垂直变换就转换成系数矩阵的水平变换[10]。因此,水平变换和垂直变换可以调用相同的程序来完成。
对量化函数采取汇编优化后,把 qbits和 MF值用表的形式存储,要使用这两个参数时,从表中读取i_qscale的对应值。整数DCT变换及量化过程优化前后的效率如表2所示。
表2 整数DCT变换及量化过程优化前后效率对比Tab.2 Comparison between before and after Integer DCT transform and quantization process optimization
3 实验结果
文中对经过移植和优化后的H.264编码器进行实验验证,选取具有代表性的视频序列 akiyo(背景简单,景物运动缓慢)进行编码,视频为 YUV 4:2:0格式,采用 IPPP…… 编码模式,DM6437的时钟频率为600 MHz,对于cif和D1视频格式的图像在不同QP值下测试的结果如表3所示。
(注:平均PSNR的单位为dB,码率单位为kbit/s,编码速度单位为fps)
对表3进行分析可以看出,在PSNR和码率没有引起明显变化的情况下,H.264编码器的编码速度获得了极大的提高,其中cif格式视频编码已经满足实时性要求,同时Dl格式在QP=36时编码速度达到了18 fps,这样的编码性能基本可以满足视频监控系统中的应用。
编码结束后生成的.264文件存到PC机,可以用VLCplayer进行解码播放。解码播放出来的图像如图5所示。
表3 基于DM6437硬件环境优化前后编码器性能比较Tab.3 Comparison between before and after optimization based on DM6437
图5 对H.264编码生成的cif格式.264文件用VLC解码截图Fig.5 Pictures from cif format.264 files coded by H.264 and decoded by VLC
图5为用VLC播放cif格式的akiyo视频文件的截图,图(a)表示 akiyo视频原文件截图,图(b)表示经过 H.264编码器编码的akiyo视频文件截图,由截图的画面质量可以看出,图像质量没有明显下降,整个画面有不明显的噪点(脸部),颜色偏暗,证明此H.264编码器对于cif格式的视频文件编码效果较好。
4 结 论
文中首先在DM6437上构建了H.264视频编码器,编码器主要分为摄像头实时采集、H.264编码、LCD回放3个部分,组成一个完整的可观看编码效率和效果的系统。将X264编码器移植到DM6437平台之后,对 DM6437硬件资源及性能进行深入研究,分别从C语言级、系统级、算法级、整数DCT变换和量化的线性汇编编写以及汇编级等方面进行优化,最终实现了cif格式视频的实时编码,基本满足视频监控系统中编码器的需求。本文介绍的针对DM6437平台的H.264编码器移植、优化的思路和方法,对构建高效的视频应用平台具有一定的参考价值。
[1]Richardson IEG.H.264and MPEG-4 Video Compression[M].England:John Wiley&Sons Ltd.,2003.
[2]TI Company.TMS320C6000 Programmer’s Guide[EB/OL].[2009-03-10].http://focus.ti.com/lit/ug/spru198i/spru198i.pdf.
[3]李博丞,严胜刚,曲鹏.基于TMS320DM6446的H.264编码器实现与优化[J].电子设计工程,2009,17(5):120-123.
LI Bo-cheng,YAN Sheng-gang,QU Peng.Implementation and optimization of H.264 encoder on TMS320DM6446 platform[J].Electronic Design Engineering,2009,17(5):120-123.
[4]贾浩,崔慧娟,唐昆.基于TMS320DM6437平台的视频系统设计与实现[J].电视技术,2010,34(11):159-161.
JIA Hao,CUI Hui-juan,TANG Kun.Design and implementation of video system based on TMS320DM6437 platform[J].TV Technology,2010,34(11):159-161.
[5]Texas Instruments Incorporated.TMS320DM643x DMP Video Proeessing Front End(VPEE)User’s Guide[M].Texas Instruments Incorporated,2008.
[6]Texas Instruments Incorporated.TMS320DM643x DMP Video Proeessing Back End (VPBE)User`s Guide [M].Texas Instruments Incorporated,2007.
[7]Texas Instruments Incorporated.TMS320C6000 Optimizing Compiler Users’Guide[M].Texas Instruments Incorporated,2008.
[8]何苏勤,延瑾瑜.基于TMS320DM642的H.264六抽头滤波插值的优化[J].电视技术,2009,33(10):18-20.
HE Su-qin,YAN Jin-yu.Optimization of6-tap filter interpolation in H.264 based on TMS320DM642 [J].TV Technology,2009,33(10):18-20.
[9]侯艳艳.基于TMS320DM642平台的H.264编码器优化[J].微计算机信息, 2009,25(2):159-161.
HOU Yan-yan.H.264 encoder optimization based on TMS320-DM642[J].Microcomputer Information,2009,25(2):159-161.
[10]谢丁峰,夏新军.基于H.264的视频监控系统关键代码实现与优化[J].计算机技术与发展,2010,20(12):57-60.
XIE Ding-feng,XIA Xin-jun.Implementation and optimization on critical code of H.264 based video surveillance system[J].Computer Technology and Development,2010,20(12):57-60.