一种CAVLC熵解码器制造技术

技术编号:11241755 阅读:84 留言:0更新日期:2015-04-01 15:29
本发明专利技术公开了一种CAVLC熵解码器及熵解码方法。该解码器包括CAVLC控制器、解码模块和存储模块和数据拼接模块。解码器对码流中非零系数较少的情况做了专门优化;在CAVLC控制器和解码模块间加入旁路电路提前进行解码状态跳转的判断,以节约时钟周期;并将前游程解码与幅值前缀解码并在一个模块完成。本发明专利技术在提高熵解码效率的同时节约了面积开销。

【技术实现步骤摘要】
一种CAVLC熵解码器
本专利技术涉及视频编解码
,更具体地涉及CAVLC熵解码器及熵解码方法。
技术介绍
CAVLC是一种用于降低比特率并充分利用统计冗余的熵编码技术。作为视频解码框架中的第一步,熵解码对视频解码性能有着非常大的影响。在当今视频编解码中应用最广泛的H.264标准中,规定熵编码可采用基于上下文的的自适应变长编码(CAVLC)和基于上下文的自适应算术编码(CABAC)。其中,CAVLC的编码效率较早先的MPEG-1和MPEG-2标准有了明显提高,而实现复杂度较CABAC而言则低了不少,在视频编码中得到广泛使用。在CAVLC解码器中,通常涉及以下六种语法元素的解码:非零系数的数目、拖尾系数的数目、每个拖尾系数的符号、拖尾系数以外非零系数的幅值、最后一个非零系数前零的数目、当前非零系数与前一个非零系数之间零的数目。一般的解码步骤如下:首先查表解得非零系数的数目和拖尾系数的个数,再解出各拖尾系数的符号位,然后解出除拖尾系数外非零系数的幅值,再解出最后一个非零系数前零的个数,最后解出每个非零系数前0的个数。传统的CAVLC熵解码器通常由系数标志位模块、拖尾系数符号模块、幅值前缀模块、幅值后缀模块、总零数模块、前游程模块共六个功能模块,加上一个CAVLC控制模块,以及相应的存储模块组合而成。由于解码步骤和模块较多,每个模块的解码又依赖于前面模块输出的结果,导致各模块等待时间较长,整体解码效率偏低。目前,对于CAVLC解码器的优化主要集中在改善其解码效率而提高解码速度上。以下为其中两种代表性的方案:1)加入旁路电路模块的方法[2]。这种方法将上一级解码模块所获得的解码参数从旁路电路单元传输给下一级解码状态机跳转控制模块和下一级解码模块,减少了条件判断时等待的时间,一定程度上提升了解码效率,但其结构较复杂,模块与模块之间、模块与寄存器之间需要较多连线,带来较大的面积开销。2)基于优化的查找表的方法[3]。这种方法将根据码字中前置零的个数将coeff_token查找表重新分组,解码时以前置零个数和码字后缀为索引进行查表,从而减少查表次数。但QP较大时,coeff_token码字的前置零的个数较少,此方法对解码的加速效果不明显。
技术实现思路
(一)要解决的技术问题本专利技术旨在解决现有技术中的解码器在码流中QP较大时优化效率不高以及面积开销大的问题。(二)技术方案鉴于以上提到的问题,本专利技术提供了一种新的CAVLC熵解码器的实现和方法,对系数较少的情况做了专门优化,使用较少的旁路电路提前判断是否进入下一个解码状态,并将前游程解码与系数块重建合并在一个模块完成。能进行高效的解码并减少面积开销。为解决上述技术问题,本专利技术提出一种CAVLC熵解码器,包括CAVLC控制器、解码模块、存储模块和数据拼接模块,其中:所述CAVLC控制器包括状态跳转控制模块、拖尾符号输出模块、系数幅值计算模块,用于控制码流输入,协调各模块的工作,根据各模块解码得到的语法元素进行拖尾符号和幅值的解码;所述解码模块用于从码流中解出码字的系数标志位和总零数以及每个幅值的前缀和前游程;所述存储模块用于暂时保存解码模块和CAVLC控制器解出的语法元素值;所述数据拼接模块将系数幅值重新组合拼接后输出。根据本专利技术的具体实施方式,所述解码模块包括系数标志位解码模块、总零数解码模块、幅值前缀解码模块和前游程解码模块。根据本专利技术的具体实施方式,所述存储模块包括非零系数寄存器、拖尾系数寄存器、幅值前缀寄存器、总零数寄存器、后缀码长寄存器、剩余零数寄存器、前游程寄存器、非零系数幅值存储器和系数幅值存储器。根据本专利技术的具体实施方式,所述CAVLC控制器在解出系数标志位后,对拖尾系数个数提前进行判断,若拖尾系数个数为0,解码器跳过拖尾符号解码,进行幅值解码。根据本专利技术的具体实施方式,所述CAVLC控制器在解完拖尾符号后,对非零系数个数与拖尾系数的个数进行判断,若相等,表明不存在除拖尾系数之外的非零系数,解码器跳过幅值解码,进行总零数解码。根据本专利技术的具体实施方式,所述的CAVLC控制器还包括幅值后缀解码模块,其用于在系数标志解码状态中,根据解码得到的非零系数和拖尾系数对后缀码长进行初始化,在幅值解码状态中,根据已解码的系数幅值对后缀码长作动态更新。根据本专利技术的具体实施方式,所述的CAVLC控制器和解码模块间,还包括参数传输电路,其用于将解码模块中得到的参数值,在当前周期传递给CAVLC控制器,提前进行状态机的跳转判断。根据本专利技术的具体实施方式,前游程解码模块中包含所述幅值前缀解码模块,在进行前游程解码时,对于剩余零数大于6情况,前游程的值可根据幅值前缀解码模块计算得到。本专利技术还提出一种CAVLC熵解码方法,应用于CAVLC解码器中,CAVLC解码器包括CAVLC控制器、解码模块、存储模块和数据拼接模块,所述解码方法包括如下步骤:步骤S1:查表确定码流中的非零系数个数和拖尾符号个数,并根据其值设置后缀码长的初始值;步骤S2:当拖尾符号个数大于零时,顺序解出每个拖尾系数的符号值;步骤S3:解出当前变换系数的前缀码和后缀码,计算得到幅值并判断是否还有待解码的非零系数,若存在则重复此步骤,直至解出所有非零系数;步骤S4:查表解出总零数值,将其作为剩余零数的初始值;步骤S5:根据剩余零数,查表解出前游程的值,并动态更新剩余零数,重复进行该步骤,直至只剩最后一个非零系数或是剩余零数与前游程相等;步骤S6:根据解出的拖尾符号值、系数幅值、和前游程值重建系数块,经过zig-zag扫描后输出。(三)有益效果本专利技术对CAVLC熵解码过程中,码流中非零系数较少的情况做了专门优化,在控制模块与解码模块间加入了旁路电路提前进行状态机跳转判断,并将前游程解码与系数块重建合并在一个模块完成,从而提高了熵解码器的工作效率,对其面积开销和延时也有一定改善,能有效地提高整体解码的速度。附图说明图1是本专利技术实现的CAVLC熵解码器结构示意图;图2是本专利技术实现的CAVLC熵解码器状态机跳转示意图;图3是拖尾系数条件判断示意图;图4是非零系数个数条件判断示意图;图5是H.264标准中给出的prefix_value码表[1];图6是H.264标准中给出的run_before码表[1]。具体实施方式本专利技术提出的CAVLC熵解码器包括CAVLC控制器、解码模块、数据拼接模块和存储模块。所述CAVLC控制器包括状态跳转控制模块、拖尾符号输出模块、系数幅值计算模块。所述解码模块包括系数标志位解码模块(coeff_token)、总零数解码模块(total_zero)、幅值前缀解码模块(level_prefix)和前游程解码模块(run_before)。所述存储模块包括非零系数寄存器(TotalCoeff)、拖尾系数寄存器(TrailingOnes)、幅值前缀寄存器(level_prefix)、总零数寄存器(total_zeros)、后缀码长寄存器(suffix_length)、剩余零数寄存器(zeros_left)、前游程寄存器(run_before)、非零系数幅值存储器(LevelVal)和系数幅值存储器(coeff_level)。所述CAVLC控制器用于控制码流输入,通过状态机协调各模块的工作,根据各模本文档来自技高网
...
一种CAVLC熵解码器

【技术保护点】
一种CAVLC熵解码器,其特征在于,包括CAVLC控制器、解码模块、存储模块和数据拼接模块,其中:所述CAVLC控制器包括状态跳转控制模块、拖尾符号输出模块、系数幅值计算模块,用于控制码流输入,协调各模块的工作,根据各模块解码得到的语法元素进行拖尾符号和幅值的解码;所述解码模块用于从码流中解出码字的系数标志位和总零数以及每个幅值的前缀和前游程;所述存储模块用于暂时保存解码模块和CAVLC控制器解出的语法元素值;所述数据拼接模块将系数幅值重新组合拼接后输出。

【技术特征摘要】
1.一种CAVLC熵解码器,其特征在于,包括CAVLC控制器、解码模块、存储模块和数据拼接模块,其中:所述CAVLC控制器包括状态跳转控制模块、拖尾符号输出模块、系数幅值计算模块,用于控制码流输入,协调各模块的工作,根据各模块解码得到的语法元素进行拖尾符号和幅值的解码;所述解码模块用于从码流中解出码字的系数标志位和总零数以及每个幅值的前缀和前游程;所述存储模块用于暂时保存解码模块和CAVLC控制器解出的语法元素值;所述数据拼接模块将系数幅值重新组合拼接后输出,所述CAVLC控制器在解出系数标志位后,对拖尾系数个数提前进行判断,若拖尾系数个数为0,解码器跳过拖尾符号解码,进行幅值解码,所述CAVLC控制器在解完拖尾符号后,对非零系数个数与拖尾系数的个数进行判断,若相等,表明不存在除拖尾系数之外的非零系数,解码器...

【专利技术属性】
技术研发人员:王东琳李玲石守谦陈皓谭吉来周钰致
申请(专利权)人:中国科学院自动化研究所
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1