视频编解码芯片设计原理----10 参考帧压缩

视频编解码芯片设计原理----10 参考帧压缩

视频编解码芯片设计原理----10 参考帧压缩

本系列主要介绍视频编解码芯片的设计,以HEVC视频编码标准为基础,简要介绍编解码芯片的整体硬件架构设计以及各核心模块的算法优化与硬件流水线设计。

参考帧压缩引擎对存储在帧存储器中的数据进行压缩,以减少外部带宽和功耗。当运动补偿帧的像素必须写入外部DRAM时,参考帧压缩引擎将对这些像素进行压缩。在运动估计期间,参考帧压缩引擎解压缩先前帧的像素并将其传输到视频编解码器。

本文将先介绍一种优化的参考帧压缩的预测方法和熵编码算法,然后介绍其VLSI实现和性能评估。

1



概述



 

对于支持UHD实时编码的视频编码器来说,帧间预测中的带宽问题逐渐成为系统设计的瓶颈。参考帧压缩是一种减少视频编码器访存带宽的有效方案,不仅可以减小读参考帧像素的带宽,还能减少编码器向外存写入重建帧像素的带宽。

对于现有的参考帧算法,有如下4个衡量标准:

1、压缩率:压缩率表示压缩后和压缩前的参考帧数据大小的比。压缩率越小,代表该参考帧压缩算法的效果越好,访存带宽越小。

2、吞吐率:太复杂的压缩算法可能会导致帧压缩模块的吞吐率过小,不能满足高分辨率视频实时编码的要求。

3、模块透明度:参考帧压缩模块必须能够支持编码器从任意位置取参考像素时能够立即解码,而不需要预先载入其他位置的参考像素。

4、硬件实现:参考帧压缩的算法必须易于硬件实现,以简化硬件设计时的难度。

2



算法设计






数据结构



在整个HEVC视频编码器系统中,环路滤波单元处理的基本单元块高度为4。因此,为了能让参考帧压缩模块能够支持整个编码器系统的数据读写,本文提出的参考帧压缩算法的压缩基本单元大小为8×4,最终的压缩码流数据结构如下所示。

图1

 

其中,“F”代表该8×4左上角的像素;“G”代表该8×4的分组模式;“M”代表该8×4块中每个分组的编码模式;“D”代表编码后的残差;“T”代表符号位。

由图可知,每个8×4块的压缩数据可能存在3种类型:“Ori Data”、“NotAll Zero”和“All Zero”,分别代表了该残差分布的3种类型。在本设计中,我们用每个8×4块压缩后码流的长度信息标记其数据类型。每个8×4块压缩后的码流长度用一个8比特的数表示,并且和压缩后的码流一起存入外部存储器中。如果码流长度等于8,那么该8×4块压缩码流为“All Zero”类型;如果码流长度大于8且小于256,那么该8×4块压缩码流为“Not All Zero”类型;如果码流长度等于0,那么该8×4块压缩码流为“Ori Data”类型。

“Ori Data”代表压缩后的码流长度大于等于256比特,将该8×4块的原始像素打包进最终码流中,并且将码流长度标记为0。

“Not All Zero”类型是最基本的数据类型,代表该8×4块在经过了预测和熵编码阶段后,将残差的熵编码结果以及预测的模式信息打包进了最终码流。

“All Zero”代表该8×4块的所有像素等于同一个值,只存储该8×4块左上角的像素,并将码流长度标记为8。






DPCM预测



在预测之前,每帧图像会被划分为若干8×4的块。考虑到算法复杂度的限制,本文采用了DPCM预测方法,如下所示,其中箭头表示该像素的预测方向。

图2

左上角的像素会被直接打包进压缩码流的“F”部分,该像素将会作为参考帧压缩模块解压缩阶段的起点;第1列的剩余3个像素的残差等于该像素与其上方像素的差值;第2列到第8列的28个像素的残差等于该像素与其左侧像素的差值。

 




小值优化的半定长编码

在熵编码阶段,本文针对预测残差的分布特征,对[1]中提出的半定长编码方案做了小值优化。首先,每个8×4块被划分为8个2×2的子编码块,根据每个小块内残差的最大绝对值得到其编码模式CM,如下表所示。

表1

小值优化的半定长编码规则如下表所示,其中S是残差的符号位,S代表S的取反值。

表2

如果2×2子编码块内的某个残差等于2CM-1,则在“T”中增加一位0;如果等于-2CM-1,在“T”中增加一位 1。在确定了2×2子编码块的编码模式CM后,该2×2子编码块内的4个残差值可以根据上表得到其编码值。

由数据结构图可知, “F”部分和“G”部分的长度是固定的。在确定了“M”部分的数值后,可以得到“D”部分的长度,以及“D”部分中各个残差的长度。“T”部分的长度可以由总长度减去“F”、“G”、“M”和“D”的长度得到。

 




子编码块分组

如果相邻的子编码块拥有相同的编码模式,那么可以用同一个“M”来表示这个子编码块组的编码模式,减少 “M”部分的长度。下图描述了4种分组方式以及对应的分组模式“G”。

图3

 

3



VLSI设计



 

参考帧压缩模块的压缩阶段的流水级如下所示。

图4

第1个流水级,对8×4编码块做DPCM预测,且将左上角像素放入最终码流的“F”部分,并根据残差获得每个2×2子编码块的编码模式“M”,在此基础上得到2×2子编码块的分组方式“G”。

第2个流水级,对8×4块内的残差同时编码,并且放入最终码流的“D”部分。

第3个流水级,如果第1个流水级计算得到所有残差等于0,那么将左上角像素打包进最终码流中,并将码流长度记录为8;如果第2个流水级编码得到的“D”加上“F”、“G”、“M”、“T”的总码流长度大于等于256,那么将该原始32个像素打包到最终码流中,并将码流长度记录为0;如果码流长度小于256,那么将第1个流水级以及第2个流水级得到“F”、“G”、“M”、“D”和“T”部分打包到一起输出到外部存储器中,并记录码流长度。

参考帧压缩模块的解压缩阶段的流水级如下所示。

图5

第1个流水级,解析出码流中的“F”、“G”、“M”、“D”和“T”。

第2个流水级,根据第1个流水级中的编码模式“M”分离出“D”部分中各个残差的编码值。

第3个流水级,参照小值优化的半定长编码规则表,对“D”中各个残差同时解码。

第4个流水级,根据第3个流水级得到的残差值以及第1个流水级得到的左上角像素值恢复得到整个8×4块的32个像素。

参考帧压缩模块的编解码阶段的每个流水级均为2个时钟周期,也就是说设计的吞吐率是32/2=16,如果是YUV420的视频序列,则吞吐率是16/1.5=10.67。

 

4



 性能评估 




对Class A~E的序列进行测试,得到最终的压缩率的测试结果如下所示。

图6

在压缩率方面,本文提出的参考帧压缩算法的平均压缩率约为56.1%,因为采用了较小的编码块(8×4)和较简单的压缩算法,影响了最终的压缩效果。

在硬件面积方面,本文提出的参考帧压缩架构的等效逻辑门数目仅为43.98K,这同样归因于较小的编码块和较简单的压缩算法。

在吞吐率方面,本文提出的参考帧压缩架构的吞吐率高达5.3G 像素/s,能够在Level B级的数据复用时,支持UHD 4K×2K@60fps实时编码的硬件设计。

 

参考文献:

[1] L. Guo, D. Zhou and S. Goto.A New Reference Frame RecompressionAlgorithm and Its VLSI Architecture for UHDTV Video Codec[J].IEEE Transactionson Multimedia, 2014, 16(8):2323-2332.

 

订阅快讯

通过快讯订阅,您将及时收到我们的信息更新通知。