摘 要: 针对光电经纬仪高帧频和高分辨率图像实时压缩难以实现的问题,在TI公司提供的H.264单核编码开源工程和多核并行算法的基础上,提出了基于TMS320C6678多核处理器的H.264并行算法。在单核编码开源工程实现多核并行视频编码,将每帧图像平均划分成多个Slice,每个DSP核处理一个Slice。实验结果表明,与单核视频编码相比,多核并行视频编码的加速与比核数的增加呈线性增长,在TMS320C6678多核处理器上实现光电经纬仪的实时图像压缩具备较强的工程实践性。
关键词: 光电经纬仪;H.264;TMS320C6678;实时压缩;Slice
随着高帧频、高分辨率成像传感器技术在光电经纬仪领域的广泛应用,光电经纬仪图像在传输和存储过程中将占用更大带宽和更多存储资源,因此有必要对图像进行实时压缩。
在当前众多视频编码标准中,H.264因其高数据压缩率和友好的网络亲和性得到广泛应用[1-2]。但是,H.264更高的计算复杂度带来了更长的编码时间,参考文献[3]以x264为基础,仅仅实现了时域可伸缩的编码方案,也只能支持最大分辨率QVGA的实时编码,这一困境使得H.264很难在光电经纬仪实时图像传输系统中应用。
本文立足多核DSP和H.264编码层次结构的研究,在TMS320C6678多核DSP上实现H.264的多核并行压缩编码,在TI公司提供的H.264开源工程单核编码的基础上,实现对光电经纬仪图像的实时压缩。
1 H.264多核并行算法分析
基于Slice级的并行算法是将每帧图像划分为多个Slice[4],因为同一帧的各个Slice之间没有数据依赖,所以可以实现并行编码。当把一帧图像分成多个Slice后,降低了图像内部相关性,但过多的Slice划分会对图像质量产生影响,因此不能无限制地进行Slice划分[5]。
在同一幅图像上,不同的区域其内容复杂度也可能各不相同[6],使得各个Slice的编码时间各不相同,直接导致了整个编码器的均衡程度降低。另一方面,在编码下一帧图像之前,各个核必须完成对应Slice的编码,因此各个Slice必须在编码下一帧图像之前进行同步,同步的时间直接取决于各个核对Slice编码的均衡程度。
2 H.264核心代码结构分析
本文基于H.264单核编码实现多核并行压缩, H.264单核编码的流程图如图1所示。H.264工程对编码参数和存储空间初始化后,循环调用Encode_one_frame部分,对每一帧图像进行编码,直至最后一帧。在H.264开源工程的基础上,给出了基于Slice的多核并行压缩编码,流程图如图2所示。编码前先对一帧图像进行Slice划分,当所有内核完成相应Slice编码后进行多核同步,然后才能进行下一帧图像的编码。依此类推,直至最后一帧图像编码完成。
3 H.264的DSP实现
本文选择TI codec库提供的H.264开源工程[7],该程序在作者实验室的DSP+FPGA图像处理开发板上实现,运行频率为1 GHz,编译环境为CCS v5.0。
多核并行编码的实现是把一帧图像分为多个Slice,由多个处理器核来实现每个Slice的压缩算法。经过对H.264工程的研究,Slice划分算法的实现可以由以下两种方式来实现:
(1)按照宏块数目平均划分(这里宏块大小为16宏块数),如式(1)所示:
其中,image_height为图像的高度,ncores为参与编码并行核数,m[ncores]为每个Slice的边界(单位为行)。ncores个核并行处理的Slice边界分别为:
核0:(0~m[ncores])(表示核0处理第0~m[ncores]行的数据)
核1:(m[ncores]~2×m[ncores])
…
核7:(7×m[ncores]~8×m[ncores])
单核并行处理时只调用核0,双核时调用核0~1,四核时调用核0~3。
(2)按照宏块计算复杂度平均划分(这里的宏块大小为16×16)。首先计算出一帧图像中每个宏块的计算复杂度,记为cost[i],i为宏块的序列号;其次,计算所有宏块的总计算复杂度,记为Total_cost;最后,按照Total_cost来平均划分Slice边界:
其中,M[j]为宏块的序列号,j为实现次数。计算Slice边界步骤如下:
①当式(2)中的条件首次实现时,记录M[1],并将M[1]带入式(3)中,计算出第一个Slice的行数N[1];
②ncores变为ncores-1,i由0变为M[1],Total_cost减去式(2)的左值,得到新的Total_cost;
③转到步骤①,计算下一个新的M[2]值,直到ncores为0,停止计算,可以得到ncores个核并行处理的Slice边界为:
核0:(0~M[1])
核1:(M[1]~M[2])
…
核7:(M[7]~M[8])
4 实验结果分析
为了测试H.264编码算法在TMS320C6678多核处理器上的并行实现,实验中将相同YUV视频序列分别使用(1)、(2)两种Slice划分算法实现,这两种算法均经过单核、双核、四核分别运行。本文实验对象为YUV420P格式10帧图像,帧排序方式为IPPP,输出为H.264格式。对比不同划分算法的多核并行处理结果如表1、2所示。
从表1、2可看出,第1帧的处理时间为剩余9帧的一半,这是因为第1帧编码为I帧,是帧内预测;而第2~10帧图像都是P帧,是帧间预测。划分算法(1)单核情况下每帧图像的处理时间与划分算法(2)单核情况下的处理时间相同,这是因为单核情况下,每帧图像都为一个Slice;在双核情况下,划分算法(2)相对于划分算法(1)在处理上有5%的提升;四核情况下,划分算法(2)相对于划分算法(1)在时间上有很小的提升。
划分算法(2)相对于算法(1)在性能上能有所提升是因为本实验所选择的图像的计算复杂度分布不均匀,算法(2)是以一帧图像的宏块复杂度为基础来平均划分一帧图像的,因此对于一帧图像来说,每片Slice所分配的计算负载更加平均,比算法(1)的按行数平均划分处理时间要减少。
单核、双核、四核并行处理加速比对比结果如表3所示。
从表3可以看出,在四核处理情况下,划分算法(1)的加速比是单核处理的3.6倍,划分算法(2)相对于划分算法(1)性能上有很小的提升;在双核情况下,划分算法(1)的加速比约为单核处理的1.84倍,而划分算法(2)相对于划分算法(1)的性能有6%的提升。
单核、双核、四核的处理加速比没有与并行核数完全成线性关系的原因是:(1)每帧图像划分的每个Slice的计算复杂度不同,因此编码所需的时间也不同,每帧图像需要等到编码最慢的Slice完成,才算一帧图像编码结束;(2)每个Slice都包含独立的头信息,在编码时会有额外的读取头信息的时间消耗。
由表1、2可以得出,单核处理的帧率为82 f/s,双核处理的帧率达到150~160 f/s,四核处理的帧率达到了300 f/s,可以看出多核并行用于实现光电经纬仪图像实时压缩的潜能。
本文针对光电经纬仪高帧频和高分辨率图像实时压缩难以实现的问题,对H.264算法在TMS320C6678上的多核并行进行了研究,在H.264单核编码的基础上实现了两种Slice级多核并行压缩编码算法,分别实现了光电经纬仪图像实时压缩的功能。
本文的试验验证了多核并行压缩算法在实时压缩方面的可行性,对Slice划分算法的优化没有进行详细研究,这是下一步研究的重点。
参考文献
[1] 张纪铃,夏超,黄富良.一种基于H264编码标准的快速运动估计算法[J].电子测量技术,2009,32(8):69-73.
[2] 许春冬,姚萌,廖薇.基于DM642的T264视频编码器优化[J].新特器件应用,2009,11(12):11-13,17.
[3] 孔群娥,曾学文.基于x264实现H.264的时域可伸缩编码[J].微计算机应用,2011,32(3):24-28.
[4] 黄亮.基于多核处理器的SVC高清实时编码[J].计算机工程与应用,2013,49(13):170-174.
[5] 夏龄,舒涛.一种H.264/AVC视频编码并行算法[J].计算机工程,2013,39(4):314-317.
[6] 陈晓娟,陈淑荣.实时视频图像的清晰度检测算法研究[J].微型机与应用,2010,29(17):36-38.
[7] 彭旭锋,刘文怡,李金力.基于DSP和FPGA的实时图像压缩系统设计[J].微型机与应用,2019,29(11):17-20.