论文部分内容阅读
近些年来,高清(HD, High Definition)、超高清(UHD,Ultra HighDefinition)分辨率视频的发展给视频的存储和传输带来了很大挑战,主流的视频编码标准H.264/AVC已经无法取得令人满意的压缩效果。在这样的背景下,国际电信联盟VCEG(Video Coding Expert Group)小组和国际标准化组织MPEG(Motion Pictures Expert Group)小组在2010年联合成立了JCT-VC(Joint Collaborative Team on Video Coding)小组,着手制定下一代视频编码标准HEVC(High Efficiency Video Coding)。经过2年多努力,HEVC标准主档次(Main Profile)在2013年1月正式获得通过,成为新一代视频编码的国际标准。相比于H.264/AVC,HEVC可以在主观质量相同的前提下压缩效率提高一倍,但带来的问题是计算复杂度急剧上升,这给它的应用和推广带来了很大的困难。如何在保持高压缩比的同时降低编码的复杂度,是HEVC面临的一个迫切问题。本文将从并行的角度出发对这一问题进行探讨,深入挖掘HEVC编码框架内存在的多层次并行潜能,并设计针对性的并行算法加速HEVC的编码过程。本文首先简要回顾视频编码的发展历史,然后对HEVC的主要模块和关键技术给予详细介绍。HEVC沿用了H.261以来基于块的混合编码框架(block-based hybrid video coding framework),帧内编码利用帧内预测去除空域冗余,帧间编码利用运动补偿去除时域冗余,熵编码利用二进制算术编码减少符号冗余。在模块构成上,HEVC的基本模块包括帧内预测、帧间运动估计和运动补偿、变换/反变换、量化/反量化、环路滤波、熵编码等等。HEVC是以编码树单元(CTU,Coding Tree Unit)为基本单位对一帧图像进行分块的,每个CTU又可以以四叉树的方式分割为子编码单元(CU,Coding Unit),空间相邻的CU之间编码时有一定的依赖关系。本文首先分析了CTU级的依赖关系,并提出了一种粗粒度并行算法使多个CTU行之间可以并行编码,对HD序列取得了9倍的编码速度提升。针对CTU内部的依赖关系,本文用有向无环图(DAG,Directed AcyclicGraph)分析了理论上最大的并行度,然后针对帧内和帧间编码,分别提出了基于先入先出队列(FIFO)的细粒度并行算法,取得了2.4倍的加速比。单指令多数据(SIMD,Single Instruction Multiple Data)是多媒体信号处理的常见特征,表现为多个数据流执行相同的指令或计算过程。若执行同一运算的多个数据可以以某种方式并行执行,将大大加快信号的处理速度。多种处理器平台都提供了这样的数据并行指令集,包括ARM的NEON指令集、AMD的3D Now!和Intel的MMX/SSE指令集。HEVC中的许多模块,如变换、量化、子像素内插等等,都具有SIMD的特点。在深入分析每个模块数据流特点的基础上,本文提出了相应的数据并行算法。实验结果显示,本文提出的算法可以为这些模块带来2~14倍的速度提升。HEVC的高压缩性能为高清、超高清视频的存储和传输难题提供了很好的解决方案,但极高的编码复杂度又限制了HEVC目前的应用和推广。对HEVC编码器各个层面的优化,必将成为未来一段时间学术界和工业界的研究热点。