本站小编为你精心准备了CAVLC解码查表优化算法参考范文,愿这些范文能点燃您思维的火花,激发您的写作灵感。欢迎深入阅读并收藏。
《电视技术杂志》2014年第十一期
在H.264/AVC的基本档次中,CAVLC作为一种最主要熵解码方法,其主要功能是解码残差块数据成Coeff_to-ken,SignofTrailingOnes,Level,Total_zeros和Run_before这5个非常重要的语法元素,如图1所示。CAVLC解码过程中涉及到5个语法元素的解码顺序和定义如下:1)Coeff_token:一次变换系数幅值扫描中的非零变换系数幅值总数和拖尾变换系数幅值的个数。它主要通过查找1个定长码表和3个可变长码表获得。2)SignofTrailingOnes(T1s):拖尾的变换系数幅值的正负符号。一位符号位,其中0表示正,1表示负。它主要通过最大3位读非查找码表而得。3)Level:非零变换系数扫描结尾处绝对值为1的多至连续3个非零变换系数级别中的1个。它通过反序解码并输出各种不同幅值。4)Total_zeros:扫描中位于非零变换系数幅值之前的连续的取值为0的变换系数幅值的个数。它主要通过查找可变长码表获得。5)Run_before:扫描中位于非零变换系数幅值之前的连续的取值为0的变换系数幅值的个数。它主要通过查找可变长码表获得。
2建议方法
2.1可变长码表在H.264/AVC的CAVLC解码查表中,由于标准解码查表方法TLSS(SequentialSearchTableLook-up)存在查表时间长问题,所以如何减少码表查找时间是当前研究的一个主要方向。本文在分析和研究CAVLC码表结构特征的基础上提出了一种基于哈希表快速查询的CAVLC解码查表优化方法,可以大大提高CAVLC解码表查找时间。通过认真观察和分析CAVLC解码语法元素的码表结构,可以发现码表中语法元素Coeff_token是以二维码表形式进行存储的,语法元素Run_before和Total_zeros的码表是以一维码表进行存储。表1是Coeff_token和Total_zeros中部分可变长码表结构。表1中的码字(Code)代表对应语法元素的输入比特流,8位的解码码字(Codeword)表示解码输出结果。由于表1中解码码字由拖尾系数(T1)和非零系数的个数(Tc)两部分组成,其中前3位表示拖尾系数的个数,后5位表示非零系数的个数。
2.2码字前缀零0和码长间存在关系通过分析码表1中码字结构,可发现语法元素Coefftoken中码字前缀0与码长之间存在如表2所示的固定对应关系。在表2中,码字前缀0的个数表示码字的第一个非零系数之前的连续0个数;码长表示整个码字的长度,它可分成码字前缀和码字后缀。通过表2对应关系,找到一种利用码字前缀0和码长对应关系快速确定码字后缀长度的方法,可以大大节省获取码字后缀长度获取时间。
2.3建立哈希表在本节中,将上述码字前缀0的个数和通过码字前缀0与码长对应关系确定的码字后缀长度制成一种哈希表形式对应起来,以减少码字后缀长度获取时间,从而提高码表查找整体时间。表3是由语法元素Coeff_token中码字前缀0个数,码字后缀长度和码长间构成部分哈希表关系。表3中的码字后缀长度表示码字第一个非零系数之后的部分。它可通过码字后缀长度=码长-码字前缀0个数+1实现。获取码字后缀长度后,根据码字后缀长度从输入码流中获取相应位的比特流,便可得到码字后缀值。基于上述分析,本文提出了一种基于哈希表查找方法,大大提高了CAVLC解码查表性能。
2.4基于哈希表查找算法在本文中,提出一种快速基于哈希表查询CAVLC解码查表方法。其基本思路是以CAVLC码字前缀0的个数查找其对应码字后缀长度,由码字前缀0个数和码字后缀长度可快速确定码长,再通过查找一次标准实CAVLC码表,可实现CAVLC码表解码。快速基于哈希表查询CAV-LC解码查表方法具体实现的步骤为:1)输入解码码流;2)根据NC的取值,选取Coeff_token元素对应的可变长码表;3)计算输入码流中连续码字前缀0的个数;4)根据码字前缀0的个数从已建立的哈希表中找到对应码长;5)确定码字后缀长度,如果找到码长有2个可能值,通过读取码字后缀第一位值后再次确定;6)根据确定码长查找codtab码表得到解码输出。2.5所提方法应用实例在假设解码输入码流为0000100011……,情况下,以解码Coeff_token为例,并假设选取NC为0≤NC<2的码表,阐述Coeff_token解码查表过程。解码Coeff_token具体过程可分成如下几个实现步骤:1)读取输入解码码流0000100011……。2)根据NC的值0≤NC<2,选取Coeff_token的可变长码表0作为程序入口。3)计算输入码流0000100011中码字连续前缀0的个数为4。4)根据码字前缀0的个数(4)与查找已哈希表码表2,可得到码长后缀(1或2);由于码字后缀的长度存在1或2这两种情况,通过进一步判断码字后缀第1位值情况,由于断码字后缀第1位值为0,可得到码字后缀的长度2。5)由上述码字前缀0的个数(4)和码字后缀的长度2,可找得到对应的码长7。6)根据确定码长(6)查找标准codtab码表得到解码输出0000100,得到T1s=2和Tc=5。对于解码语法元素Total_zeros和Run_before的方法与解码完Coeff_token相类似,解码语法元素Level和signofT1,可直接通过规则的整数算术运算来进行解码。
3实验结果与分析
本文中开展的实验内容主要包括以下两部分:实验环境设置和参数选择,测试表查找时间。
3.1实验环境设置和参数选择实验的硬件环境为:WindowsXP操作系统,Intel2.00GHzCPU,1Gbyte内存和500Gbyte硬盘。软件环境为VC6.0。实验比较方法有TLSS,实验解码环境参数和测试序列参数的设置如表4和表5所示。
3.2解码查表时间在本节实验中,主要测试本文所提算法和TLSS方法在表查找时间方面的性能。图2~图7是上述两种方法在码表查找时间的比较图。从图2~图7可以看出,在相同的测试条件下(相同的测试序列,相同的QP值,相同帧数),相比标准的TLSS方法,本文方法能够提高约18%~22%的码表查找速度。分析其提高主要原因在于采用哈希表查询的方法去查找码表,可以大量节省对码字后缀长度的判断时间、码长匹配、判断、定位和处理时间,进而大大提高CAVLC解码查表速度。
4小结
本文主要针对标准CAVLC解码过程中表查找存在解码时间较长的问题,提出一种高效的基于哈希表的CAVLC表查找方法。该算法利用哈希表查找方式去提高CAVLC码表查找操作,大大提高了CAVLC解码效率。实验结果表明,在未降底码表查找质量前提下,相比标准CAVLC解码查找算法,本文所提的算法可以节省18%~22%的表查找时间。
作者:伍学民韩一石陈君单位:广东工业大学信息工程学院