H.264中二进制化编码器的FPGA实现
扫描二维码
随时随地手机看文章
1 引言
随着数字电视及视频会议的发展以及应用,H.264由于其更高的压缩比、更好的图像质量和良好的网络适应性而备受关注。
基于上下文的自适应二进制算术编码(CABAC)则作为H.264编码器系统的最后一环,对整个编码性能影响较大。CABAC充分考虑视频流的相关性.能适应信号统计特性的变化,容易达到渐进性能,编码速度较高,但复杂度大,这造成单纯用软件编码难以达到很高的性能,特别是对于高清晰度视频(HDTV)不能实现实时编码,这就需要硬件加速或设计专门的硬件编码电路。
目前,已有相应的硬件加速电路设计问世,但主要是对算术编码部分进行设计,整体性能仍不够理想。这里在对以往加速电路分析的基础上,把握CABAC整个编码原理,主要对其中的二进制化部分进行优化,对相应的二进制化方法进行归类优化,采用并行运算的方案,最终在FPGA上以较优的速度和资源实现硬件编码。
2 二进制化原理
CABAC实现方案包括3个过程:语法元素的二进制化、上下文建模、自适应算术编码,图1是CABAC编码器基本结构。
二进制化是CABAC编码的第1步,提高二进制化模块的编码速度有助于整个系统速度的提高。在二进制化过程中,一个给定的非二进制语法元素被唯一地映射到一个二进制序列(Bin String),其中的每一位称为Bin。
如果输入为给定的二进制语法元素,则此步就可以越过,随后的步骤由编码模式决定。
在H.264标准中。语法元素较多,约有20多种,而二进制转换使这些语法元素的二进制表示接近最小冗余编码,以减少码流。
CABAC中二进制转换有4种基本类型:一元(U)编码、截断一元(TU)编码、指数哥伦布(EGK)编码和定长(FL)编码。另外,还可通过这几种编码方式的串联进行二进制化转换。
2.1 一元(U)二进制转换方案
对于一个无符号语法元素x≥0,CABAC中的一元码字是由x个“1”串连并在结尾处加上“0”,因此一元二进制化的长度是x+1,如表1所示,其中Binldx表示字符串的索引。一般来讲,U二进制转换主要用于参考帧队列预测语法元素的编码。
2.2 截断一元(TU)二进制转换方案
截断一元二进制化对语法元素的值有要求,只对不大于某个界限值(S)的语法元素进行二进制化。若语法元素值小于S,则其二进制化结果同一元二进制化;若语法元素值等于S,则其结果为S个“1”。一般,TU二进制转换主要用于帧内色度预测模式的编码。
2.3 指数哥伦布(EGK)二进制转换方案
EGK编码最初由Teuhola在上下文控制长度编码方案中提出,是由Golomb编码派生的。EGK编码由一个前缀和后缀码字串联构成,其前缀部分由一元码字l(x)=[log2(x/2k+1)]的值组成,其后缀部分由x+2k(1-2l(x))计算得出。一般,EGK二进制转换主要用于残差以外数据的编码,具体情形视编码器的设置而定。EGK二进制化随后取值的不同而不同,k的取值为非负整数。
2.4 固定长度(FL)二进制转换方案
固定长度二进制化适用于语法元素值x小于界限值S的情况。方法为直接用x值的二进制表示形式作为其二进制化结果,长度同定为:lFL=[log2S]的向上取值。一般,FL二进制转换被用于统一分配的语法元素,编码块的图形符号部分关系到亮度残差。
2.5 基本二进制转换的串联方案
由以上各种二进制方式可以再推导出3种基本的二进制转换方案。第1种是4位FL前缀与TU后缀(S=2)的串联,而第2和第3种方案来自TU和EGK二进制转换,称为UEGK。这些方案被用于运动矢量微分和变换系数取绝对值。另外语法元素mb_type和sub_mb_type二进制化使用遍历二叉树方法,对应的二叉树已在参考文献中给出。
3 二进制化编码方案优化
H.264标准中的二进制化编码流程是串行的,适合软件的实现,但由于待编语法元素较多,导致执行速度慢且效率低下。而硬件实现的最大优势在于其并行性,可大大提高执行效率。因此,为提高编码速度,在不改变算法实质的前提下,对标准中的编码流程进行相应优化,以利于硬件实现。主要提出以下优化措施:
(1)将语法元素归类按照基本的编码方法及H.264对各语法元素的要求,可将20余种语法元素的二进制编码方法归为6类,包括U二进制化、UEGKO二进制化(k=0,uco-eff=14)、UEGK3二进制化(k=3,ucoeff=9)、宏块/子宏块类型二进制化、宏块量化偏移二进制化,定长与截断串联的二进制化。将语法元素归类,将有效减小编码过程中的繁杂和无序性,有利于编码正常完成。
(2)并行化设计语法元素的二进制化方法可归为8类,在设计中,采用控制单元辨别相应的语法元素,并送入二进制化模块进行编码。但依照H.264标准设计,二进制化单元的入口地址不仅取决于语法元素的值,还取决于语法元素的种类,这种数据依存关系无疑增加了运算量。且输出是串行,不利于流水线设计,这样就将降低系统的时钟频率。故采用一种并行设计方案,以语法元素值为输入,结果得到6个不同的输出,将它们锁存后,利用多路选择器以语法元素种类作为控制端选出所需的值。两种不同的实现方式见图2。
来源:xinxin1次