一种快速解码CAVLCrun_before码字的硬件实现方法

文档序号:7889558阅读:318来源:国知局
专利名称:一种快速解码CAVLC run_before码字的硬件实现方法
技术领域
本发明属于数字视频信号编解码技术领域,具体涉及一种解码CAVLC run_before 码字的硬件实现方法。
背景技术
H. 264/AVC(Advanced Video Coding)由国际电信组织(ITU)和运动图像专家组 (MPEG)联合制定而成的国际视频编码标准,目前已经在多媒体音视频领域得到了广泛的应用。H. 264/AVC中规定其熵编码可以采用两种方式下文自适应可变长编码(CAVLC)和上下文自适应算术编码(CABAC)。CABAC具有较高的编码效率,但是编解码的复杂度也大大增加,而CAVLC在编码效率和复杂度上有着较好的均衡。与前一代视频标准如MPEG-1,MPEG-2 相比,CAVLC的编码效率有着显著提升。视频码流中的视频头信息和预测信息一般采用较低复杂度的定长码或指数哥伦布码,而残差系数的信息占据了视频码流的绝大部分,这部分信息的编码需要采用更高效的CAVLC编码方式。CAVLC的码字总共有5类
1. Coeff_token 本码字代表非零系数的数目和拖尾1的个数(TraiIingOnes)。2. Sign_trail 本码字是拖尾1的符号。每一个符号编码为一比特,0表示正1, 1表示负1。3. Levels 本码字是指"TrailingOnes外的其它的非零系数的幅值。4. Totalzeros 它编码在以反Zig-Zag扫描顺序时第一个非零系数后的总的零系数的个数。5. Run_before 本码字是指每一个非零系数前的零的个数。对于硬件解码而言,计算非零系数的幅值和rim_bef0re码字是整个CAVLC解码过程中最耗费时间的过程。对于一个长度和高度都为4个像素的图形块,如果采用CAVLC编码方式,有些码字如Coeff_token、sign_trial和iTotalzero在解码过程中只需要一次解码, 而run_before码字最多可以达14个。为了加快硬件处理的速度,有必要针对run_before 码字提出一种快速的解码方法。

发明内容
本发明的目的在于提出一种适用于H. 264视频规范所规定的CAVLC解码过程的快速解码run_bef0re码字的硬件实现方法。本发明提出的快速解码rUn_bef0re码字的硬件实现方法,可以在一个时钟周期内最多完成两个rurubefore码字的解码。整个码字解码的硬件框图如图1所示。本方法采用了码表分拆和码字合并这两种方法,在一个时钟周期内最多可以解码14个值为O的 run_before码字,或两个值不等于O的rurubefore码字。输入的视频码流首先经过前导1 检测器来检测带解码的rurubefore码字是否为零,前导1检测器最多一次可以检测14位前导1。如果当前rurubefore码字的值不为零,我们将当前解码位置之前所包含的O的总个数记为zerosLeft,根据zerosLeft的值可以将run_bef0re码字分为7种类型,即将原标准中规定的rurubefore码表分解为7个子码表,针对每一种类型分别进行解码。每个时钟周期内最多可以解码2个run_before码字。CAVLC定义了多种码字,在编码一个4x4残差数据块时,rurubefore码字最多可出现14次,因此这一硬件实现方法可以大大提高了硬件解码器的数据处理能力。具体的解码过程分为如下四个步骤 (1)码表分拆和码字合并。(2)检测前导1的个数。(3)根据zerosLeft的值从7个码表的输出选择出正确的值。(4)更新zerosLeft变量。每次解码完run_before码字后对zerosLeft变量进行更新,在下次解码时需要使用更新后的值。H. 264视频规范中指定了一个用于解码rurubefore码字的码表,此码表如表1所示。本发明将此码表分解为7个较小的码表,如表2—表8所示,并对其中的5个码表(表3、 表4、表5、表6、表7)进行码字合并,使得其能够在一个时钟周期内完成两个码字的解码。CAVLC定义了 6种码字,其中非零系数幅值的码字和rurubefore码字出现的频率最高,在编码一个4x4残差数据块时rurubefore码字最多可出现14次,因此这一硬件实现方法可以大大提高硬件解码器的数据处理能力。本发明的有益效果
现有方法在一个时钟周期内只能解码一个rurubefore码字,而本发明中描述的方法可以将速度加倍,在一个时钟周期内可以解码得到多个rurubefore码字的值,从而提高了 CAVLC整体的解码速度。适用于各种具有H. 264视频解码功能的电子设备。


图1 :run_before码字的硬件解码框图。
具体实施例方式下面结合附图对本发明做进一步的描述。本发明所述的快速解码rurubefore码字的具体实施方式
如下 (1)码表分拆和码字合并。H. 264视频标准中规定用于解码rurubefore码字的码表如表1所示。查询一次此码表只能得到一个rurubefore码字的值。为了加速此解码过程,我们将此码表按照zerosLeft的值分拆成7个码表。表2是针对zer0SLeft>6时的码表。表3是针对 zerosLeft=6时的码表。表4是针对zerosLeft=5时的码表。表5是针对zerosLeft=4时的码表。表6是针对zerosLeft=3时的码表。表7是针对zerosLeft=2时的码表。表8针对ZerosLeft=I时的码表。其中表3、表4、表5、表6、表7采用了码字合并的技巧,每次查询这5个表可以得到2个rurubefore码字。而表2和表8,则是从表1中直接分拆得到,每次查询表2和表8,只能得到1个run_before码字。(2)检测前导1的个数。在解码rurubefore码字时,首先检测当前码流中前导1的个数。本发明中的前导1检测器最多可以一次检测14个前导1。如果输入的视频码流第一个比特为0,那么前导1 的个数为零,说明当前rurubefore的值大于零,此过程结束,进入步骤(3)。否则,根据前导1的个数可同时解码多个run_before码字,这些run_before码字的解码值都是0。我们将前导1的个数记为N,如果zer0SLeft>6且N≥3,那么包括当前码字在内的连续N/3个 run_before码字的值都是0 ;如果2<zerosLeft<6且N≤2,那么包括当前码字在内的连续 N/2个rurubefore码字的值都是0 ;如果zerosLeft ≤ 2,那么包括当前码字在内的连续 N个rurubefore码字的值都是0。上述计算中,如果N不是3或2的整数倍,N/3和N/2取其运算结果的整数部分。本发明中N最大值为14,所以前导1检测器最多一次可以解码14 个值为零的run_before码字。(3)根据zerosLeft的值从7个码表的输出选择出正确的值。zerosLeft的取值范围可以分为7种大于6,6,5,4,3,2,1。此时对应的码表分别为表2、表3、表4、表5、表6、表7、表8。根据当前zerosLeft的值,选择相应的码表输出作为最终的解码结果。每查询一次表2或表8,可以得到一个rurubefore码字的值,而每查询一次表3、表4、表5、表6或表7,可以得到两个rurubefore码字的值。(4)更新 zerosLeft 变量。如果当前zerosLeft等于1或者大于6,根据步骤(3)中解码得到当前run_ before码字的值,zerosLeft变量减去当前rurubefore码字在解码后得到的值,即为新的 zerosLeft变量;如果当前zerosLeft等于2、3、4、5、6中任意一个值,根据步骤(3)中得出的两个rurubefore码字解码后的值,zerosLeft变量减去这两个码字值的和,即为新的 zerosLeft 变量。经过上述四个步骤,即可在一个时钟周期内解码两个rurubefore码字。此发明中提出的硬件架构可以大大加快H. 264 CAVLC的解码速度。表1 :H. 264标准中规定用于解码run_before码字码表
权利要求
1. 一种快速解码CAVLC rim_bef0re码字的硬件实现方法,其特征在于输入的视频码流首先经过前导1检测器检测带解码的rurubefore码字是否为零,前导1检测器最多一次可以检测14位前导1 ;将当前解码位置之前所包含的0的总个数记为zerosLeft,根据 zerosLeft的值将run_before码字分为7种类型,即将原标准中规定的run_before码表分解为7个子码表,针对每一种类型分别进行解码;具体步骤为(1)码表分拆和码字合并;(2)检测前导1的个数;(3)根据zerosLeft的值从7个码表的输出选择出正确的值;(4)更新zerosLeft变量,即每次解码完run_before码字后对zerosLeft变量进行更新,在下次解码时使用更新后的值;其中,所述码表分拆和码字合并,是将H. 264视频标准中规定用于解码rurubefore码字的码表分拆和合并如下表2—表8所示的7个表表2 针对zerosLeft>6时的码表
2.根据权利要求1所述的快速解码CAVLC rurubefore码字的硬件实现方法,其特征在于所述检测前导1的个数的步骤为在解码rurubefore码字时,首先检测当前码流中前导 1的个数;前导1检测器最多可以一次检测14个前导1 ;如果输入的视频码流第一个比特为0,那么前导1的个数为零,说明当前rurubefore的值大于零,此过程结束,进入步骤(3);否则,根据前导1的个数同时解码多个rurubefore码字,这些run_before码字的解码值都是0 ;将前导1的个数记为N,如果zer0SLeft>6 且N彡3,那么包括当前码字在内的连续N/3个rim_bef0re码字的值都是0 ;如果 2<zerosLeft<6且N > 2,那么包括当前码字在内的连续N/2个run_before码字的值都是 0 ;如果zerosLeft ^ 2,那么包括当前码字在内的连续N个run_bef0re码字的值都是0 ; 上述计算中,如果N不是3或2的整数倍,N/3和N/2取其运算结果的整数部分。
3.根据权利要求2所述的快速解码CAVLCrurubefore码字的硬件实现方法,其特征在于所述根据zerosLeft的值从7个码表的输出选择出正确的值的具体步骤为zerosLeft的取值范围分为7种大于6,6,5,4,3,2,1 ;对应的码表分别为表2、 表3、表4、表5、表6、表7、表8 ;根据当前zerosLeft的值,选择相应的码表输出作为最终的解码结果,每查询一次表2或表8,得到一个rurubefore码字的值,每查询一次表3、表4、表 5、表6或表7,得到两个rurubefore码字的值。
4.根据权利要求3所述的快速解码CAVLCrurubefore码字的硬件实现方法,其特征在于所述更新zerosLeft变量的具体步骤为如果当前zerosLeft等于1或者大于6,根据步骤(3)中解码得到当前rurubefore码字的值,zerosLeft变量减去当前rurubefore码字在解码后得到的值,即为新的zerosLeft 变量;如果当前zerosLeft等于2、3、4、5、6中任意一个值,根据步骤(3)中得出的两个run_ before码字解码后的值,zerosLeft变量减去这两个码字值的和,即为新的zerosLeft变量。
全文摘要
本发明属于数字视频信号编解码技术领域,具体为一种快速解码CAVLC run_before码字的硬件实现方法。本方法采用码表分拆和码字合并这两种方法,在一个时钟周期内最多可以解码14个值为0的run_before码字,或两个值不等于0的run_before码字。输入的视频码流首先经过前导1检测器来检测带解码的run_before码字是否为零,前导1检测器最多一次可以检测14位前导1。当前run_before码字的值不为零,如果我们将当前解码位置之前所包含的0的总个数记为zerosLeft,根据zerosLeft的值可以将run_before码字分为7种类型,将原标准中规定的run_before码表分解为7个子码表,针对每一种类型分别进行解码。本发明可以大大提高硬件解码器的数据处理能力。
文档编号H04N7/26GK102572437SQ20121003497
公开日2012年7月11日 申请日期2012年2月16日 优先权日2012年2月16日
发明者曾晓洋, 沈沙, 沈蔚炜, 范益波 申请人:复旦大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1