CN100471279C - 一种基于上下文自适应变长解码的方法 - Google Patents
一种基于上下文自适应变长解码的方法 Download PDFInfo
- Publication number
- CN100471279C CN100471279C CN 200610041780 CN200610041780A CN100471279C CN 100471279 C CN100471279 C CN 100471279C CN 200610041780 CN200610041780 CN 200610041780 CN 200610041780 A CN200610041780 A CN 200610041780A CN 100471279 C CN100471279 C CN 100471279C
- Authority
- CN
- China
- Prior art keywords
- group
- decoding
- total
- code word
- coeff
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 93
- 230000003044 adaptive effect Effects 0.000 title abstract description 6
- 238000006243 chemical reaction Methods 0.000 claims abstract description 10
- 206010019133 Hangover Diseases 0.000 claims description 21
- 238000013507 mapping Methods 0.000 claims description 10
- 238000013139 quantization Methods 0.000 claims description 5
- 238000001514 detection method Methods 0.000 claims description 4
- 238000010586 diagram Methods 0.000 description 9
- 230000014509 gene expression Effects 0.000 description 4
- 230000005055 memory storage Effects 0.000 description 2
- 101001126234 Homo sapiens Phospholipid phosphatase 3 Proteins 0.000 description 1
- 238000007476 Maximum Likelihood Methods 0.000 description 1
- 102100030450 Phospholipid phosphatase 3 Human genes 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 229910002056 binary alloy Inorganic materials 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
Images
Landscapes
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明公开了一种基于上下文的自适应变长解码的方法,解码是在控制器的控制下对输入的变长编码数据解码,包括对五个语法元素的解码:解码从coeff_token解码开始,解码非零系数的个数total_coeff和拖尾1 trailing_one的个数trailing_ones;trailing_one_sign解码,解码拖尾1trailing_one的符号;level解码,解码剩下的非零系数的幅度值;total_zeros解码,解码最后一个非零系数之前零的个数;run_before解码,从最后一个非零系数往前,解码它到前面一个非零系数之间的零的个数。其中的coeff_token解码采用基于分组规则的组标识数分配方法或者存储转换方法;其中的total_zeros解码采用基于分组规则的组标识数分配方法或者采用基于分组后组内码字的关系进行码字合并的方法。本发明可以使寻址更加规则,节省存储单元及硬件资源。
Description
技术领域
本发明涉及一种变长解码的方法,特别涉及一种基于上下文自适应变长解码的方法。
背景技术
变长编码(Variable Length Coding,缩写为VLC)是一种无损压缩编码技术,其基本规则是:把较短的码字赋给出现频率较高的字符,把较长的码字赋给出现频率较低的字符。变长编码/解码技术广泛地应用在视频信号的处理中。
最新国际视频编码标准H.264/AVC中采用了两套熵编码技术,即基于上下文的自适应变长编码(Context-based Adaptive Variable Length Decoding,缩写为CAVLC)和基于上下文的自适应算术编码(Context-based Adaptive BinaryArithmetic Coding,缩写为CABAC)。CAVLC的编码效率比CABAC低9~14%,但是其复杂度也比CABAC低。H.264/AVC的主要档次(Main Profile)、基本档次(Baseline Profile)和扩展档次(Extended Profile)都支持CAVLC。
CAVLC不采用块结束标志,而是对非零系数的个数来确定块的结束,系数按照扫描顺序从后往前编码,并利用了变换系数的上下文信息。CAVLC包括五部分语法元素,其对应的解码模式如下:
1)coeff_token解码:解码非零系数的个数(total_coeff)和拖尾1的个数(trailing_ones),规定最多编3个。这里可以根据邻近块的非零系数个数自适应寻找查找表。
2)trailing_one_sign解码:解码每一个拖尾1的符号(trailing_one_sign),‘0’表示正,‘1’表示负。
3)level解码:解码剩下的非零系数的幅度值。
4)total_zeros解码:解码最后一个非零系数之前零的个数。
5)run_before解码:从最后一个非零系数往前,解码它到前面一个非零系数之间的零的个数。
H.264/AVC视频编码标准的CAVLC算法自2003年最终确定以来,迄今发展的时间很短,目前已提出的实现方案很少。文献1(Hsiu-Cheng Chang,Chien-Chang Lin and Jiun-In Guo,“A Novel Low-Cost High-Performance VLSIArchitecture for MPEG-4 AVC/H.264 CAVLC Decoding”,Proc.ISCAS 2005,pp.6110-6113,23-26 May 2005)虽然公开了一个完整的对应H.264/AVCCAVLC五部分语法元素的解码的VLSI(Very Large Scale Integration,超大规模集成)解码器,但该方案由于是定制模式,故解码器不具有可编程性。文献2(Xing Qin,Xiaolang Yan,“A Memory and Speed Efficient CAVLC Decoder”,Proc.VCIP 2005,pp.1418-1426,Jul.2005)公开了一个可编程CAVLC解码方案。其中coeff_token解码采用分组和合并的算法如下:
先对码字进行分组,分组规则是:在一个组中,码字的长度相同;码字对应的上下文相同;码字有唯一的标识,即与其它组不同。该标识叫做最大似然比特模式(Maximum Likely Bit Pattern,缩写为MLBP);在一个组中,码字对应的解码符号在符号查找表中具有相同的基本地址。
MLBP标识由nC(表示当前解码块经过变换量化后的非零系数的个数)和prefix(码字前缀)组成,MLBP标识是符号查找表的第一个参考,即由MLBP标识确定一个基本地址。移出MLBP标识后的码字剩余部分suffix(码字后缀),这是符号查找表的第二个参考,即偏移地址。基本地址加上偏移地址就得到了对应的符号查找表的地址。
按上述规则分组后,存在一些不同组的码字对应的解码符号相同,所以可以进行合并以减小符号查找表存储器的容量,合并的规则是:如果一个组仅包含一个码字,那么这个码字可以合并到其它组,对应的符号不必存储;如果一个组中的码字是另一个组的一部分,那么这两个组的相同的解码符号可以共享一个存储空间。
文献2的解码方案对于解码查找表进行了优化,具有可编程性,但是还可以进一步简化分组方法和减小存储查找表所需的空间以节省存储器资源和硬件电路消耗。
发明内容
本发明的目的是对现有解码方法所存在的问题予以改进,提供一种基于CAVLC标准的、可编程的解码方法,具有解码方法简易、节省存储空间、并且可以实现高吞吐率的解码效率的特点。
为实现上述目的,本发明是采取如下技术方案予以实现的:一种基于上下文自适应变长解码的方法,解码是在控制器的控制下对输入的变长编码数据解码,包括对五个语法元素的解码:解码从coeff_token解码开始,解码非零系数的个数total_coeff和拖尾1 trailing_one的个数trailing_ones;trailing_one_sign解码,解码拖尾1trailing_one的符号;level解码,解码剩下的非零系数的幅度值;total_zeros解码,解码最后一个非零系数之前零的个数;run_before解码,从最后一个非零系数往前,解码它到前面一个非零系数之间的零的个数。所述的coeff_token解码可采用基于分组规则的组标识数分配方法或者存储转换方法;所述的total_zeros解码可采用基于分组规则的组标识数分配方法或者采用基于分组后组内码字的关系进行码字合并的方法。
上述方案中,所述的基于分组规则的组标识数分配方法是:组标识规则组的组标识数groupNum与码字第一个‘1’之前的‘0’的个数leadZero标识数一致,对于组标识特殊组内的各个组,有一个组的组标识数groupNum等于码字第一个‘1’之前的‘0’的个数leadZero,其它组的组标识数groupNum另外定义;对于有多个查找表的情况,每个表的码字都按照上述方式分配组标识数,总的组标识数groupNum_total groupNum_total根据表标识数tblNum和组标识数groupNum得到。所述的存储转换方法是,针对coeff_token解码步骤非零系数的个数total_coeff的取值范围是0到16,用一个加法器、一个0取值控制信号产生器和位数为4比特的数据total_coeff中间值total_coeff_temp实现0到16的取值。所述的采用基于分组后组内码字的关系进行码字合并的方法是:对于每个关系规则组,其组内的所有码字对应的解码符号都可以合并为一个预定数据,这个数据定义为基本符号,该组内的所有码字都根据这个基本符号和当前码字的后缀得到相应的解码符号;对于每个关系特殊组,其组内的所有码字也都可以合并为一个预定数据,这个数据定义为基本标识数,该组内的所有码字都根据这个基本标识数和当前码字的后缀形成码字标识数,根据码字标识数由关系特殊组映射表得到相应的解码符号。
本发明的解码方法,与现有技术相比,其有益效果是,通过对组标识数的合理分配,使存储器寻址更加规则,并节省寻址需要的时间和控制单元;通过减小存储数据的位数,可节省存储器的存储单元;通过利用码字间的关系进行合并的解码的方法,可进一步节省存储资源和其它硬件资源。
附图说明
图1是本发明的解码方法步骤框图。
图2是图1中的coeff_token解码的步骤框图。
图3是图1中的coeff_token的另一种解码步骤框图。
图4是图1中的total_zeros解码的步骤框图。
图5是本发明解码电路的结构框图。
图6是图5中的coeff_token解码器的结构框图。
图7是图5中的total_zeros解码器的结构框图。
具体实施方式
为便于理解本发明,先对本发明中涉及的有关名词进行说明:
①组标识规则组和组标识特殊组:按照码字前缀对码字进行分组,码字的第一个‘1’之前的‘0’的个数记作leadZero;如果码字的值为零,也即码字由若干个‘0’组成,那么组成该码字的‘0’的个数记作leadZero。具体分组规则是:具有相同的leadZero的码字,如果码字的长度相同,则这些码字为一组;这样的组称为组标识规则组;具有相同的leadZero的码字,如果码字长度不同,则这些码字根据码字前缀分为若干组,并且每组内的码字的长度都相等,这样的组称为组标识特殊组,定义组标识数为groupNum,每个组对应一个组标识数。
②关系规则组和关系特殊组:对于基于分组的变长解码,其分组方法可以采用上述分组方法,也可以采用任何其它分组方法,如果分组后的一个组内的所有码字对应的解码符号都可以根据一个预定数据和当前码字的后缀通过函数计算得到相应的解码符号,这样的组称为关系规则组;否则称为关系特殊组。
下面结合附图及实施例对本发明作进一步的详细描述:
图1是本发明按照H.264/AVC CAVLC标准的解码方法步骤图。解码步骤是指在控制器30的控制下对变长编码数据进行解码,首先对解码所需要的查找表进行初始化,这里指对一个量化系数块的CAVLC的解码。然后开始解码,包括对五个语法元素的解码:解码从coeff_token解码步骤1开始,解码非零系数的个数total_coeff和拖尾1的个数trailing_ones;然后执行trailing_one_sign解码步骤2,解码trailing_one的符号;再执行level解码步骤3,解码剩下的非零系数的幅度值;然后执行total_zeros解码步骤4,解码最后一个非零系数之前零的个数;最后执行run_before解码步骤5,从最后一个非零系数往前,解码它到前面一个非零系数之间的零的个数。上述五个语法元素的解码步骤,根据已执行步骤的解码结果,有的步骤可跳过。
其中步骤1和步骤4是和本发明密切相关的解码过程,coeff_token解码步骤1的查找表包括5个二维(trailing_one,total_coeff)码表,其中四个为变长码表:Num-VLC0(0≤nC<2)、Num-VLC1(2≤nC<4)、Num-VLC2(4≤nC<8)、Num-VLC3(nC=-1),1个是6比特的定长码表FLC(nC≥8)。其中nC表示当前解码块经过变换量化后的非零系数的个数,nC的值为:如果是色度块,那么nC=-1;否则,nC通过当前块的左边块的非零系数的个数(nA)和上边块的非零系数的个数(nB)预测得到,如果这两个块都可用,那么nC=(nA+nB+1)>>1。如果只有nA可用,那么nC=nA;如果只有nB可用,那么nC=nB。total_zero解码步骤4的解码查找表有两组,一组有15个码表,适用于4x4块;另一组有3个码表,适用于DC 2x2块,根据当前块的total_coeff确定查找表。为了描述清楚,步骤1和步骤4的详细过程如图2和图3所示。
图2是coeff_token解码方法的步骤图。分为定长码解码和变长解码两部分。变长解码采用基于分组的方法。分组规则与文献2基本相同,但是组标识数不同。根据本发明的方法,基于分组的组标识数分配方法是:组标识规则组的组标识数groupNum与码字第一个‘1’之前的‘0’的个数leadZero标识数一致,对于组标识特殊组内的各个组,有一个组的组标识数groupNum等于码字第一个‘1’之前的‘0’的个数leadZero,其它组的组标识数groupNum另外定义;对于有多个查找表的情况,每个表的码字都按照上述方式分配组标识数,总的组标识数groupNum_total groupNum_total根据表标识数tblNum和组标识数groupNum得到。
组标识数groupNum的分配如表1所示,可见对于多数的组标识规则组的组标识数groupNum由两部分组成,一部分为码字的第一个‘1’之前的‘0’的个数leadZero,另一部分为表标识数tblNum。对于少数组标识特殊组的组标识数groupNum另外定义,如表1中标“*”和标“**”部分表示为特殊组,其中的标“*”部分正常定义其组标识数groupNum,而对于标“**”部分另外定义。通过这样的组标识数的分配,对组信息存储器402的寻址更加规则。
表1 coeff_token解码查找表的分组
tblNum | leadZero | trailingones | totalcoeff | codewords | prefix | suffix | tblNum’ | groupNum | groupNum total | baseAddr | suffixLen | offset | |
0 | 0 | 0 | 0 | 1 | - | - | 0 | 0 | 0 | - | 0 | - | |
0 | 1 | 1 | 1 | 01 | 0 | - | 0 | 1 | 1 | - | 0 | - | |
0 | 2 | 2 | 2 | 001 | 00 | - | 0 | 2 | 2 | - | 0 | - | |
0 | 3 | 3 | 3 | 00011 | 00011 | - | 0 | 15 | 15 | 0 | - | ** | |
0 | 3 | 1 | 2 | 000100 | 00010 | 0 | 0 | 3 | 3 | 0 | 1 | 0 | * |
0 | 3 | 0 | 1 | 000101 | ~ | 1 | ~ | ~ | ~ | ~ | ~ | 1 | * |
0 | 4 | 3 | 4 | 000011 | 000011 | 2 | 10 | 42 | 0 | **# | |||
0 | 4 | 3 | 5 | 0000100 | 000010 | 0 | 0 | 4 | 4 | 2 | 1 | 0 | * |
0 | 4 | 2 | 3 | 0000101 | ~ | 1 | 1 | * | |||||
0 | 5 | 3 | 6 | 00000100 | 5(0) | 00 | 0 | 5 | 5 | 4 | 2 | 0 | |
0 | 5 | 2 | 4 | 00000101 | ~ | 01 | ~ | ~ | ~ | ~ | ~ | 1 | |
0 | 5 | 1 | 3 | 00000110 | ~ | 10 | ~ | ~ | ~ | ~ | ~ | 2 | |
0 | 5 | 0 | 2 | 00000111 | ~ | 11 | ~ | ~ | ~ | ~ | ~ | 3 | |
… | |||||||||||||
0 | 14 | 1 | 13 | 00000000 | 14(0) | - | 0 | 14 | 14 | - | 0 | 0 | |
… | |||||||||||||
3 | 0 | 1 | 1 | 1 | - | - | 3 | 0 | 48 | - | 0 | - | |
… | |||||||||||||
3 | 6 | 2 | 4 | 00000010 | 6(0) | 0 | 3 | 6 | 54 | 147 | 1 | 0 | |
3 | 6 | 1 | 4 | 00000011 | ~ | 1 | ~ | ~ | ~ | ~ | ~ | 1 | |
3 | 7 | 3 | 4 | 0000000 | 7(0) | - | 3 | 7 | 55 | - | 0 | - |
表1中:tblNum:表标识数;leadZero:码字第一个‘1’之前的‘0’的个数;trailing_ones:拖尾1的个数;total_coeff:非零系数的个数;codewords:码字;prefix:码字前缀;suffix:码字后缀;tblNum’:表标识数tblNum变换值;groupNum:组标识数;groupNum_total:总的组标识数;baseAddr:基本地址,每个组对应一个基本地址;suffixLen:后缀长度;offset:偏移,当前码字的解码符号在查找表中的地址相对于基本地址baseAddr的偏移量;组信息存储器的存储内容为后缀长度suffixLen(2bit)和基本地址baseAddr(8bit);“-”:表示该项数据为空;“~”:表示该项数据等于其同列的上边一行的数据,也就意味着该行码字和其上边一行的码字属于同一个组。
按照如表1所示的分组方法,具体分组情况是:tblNum=0的查找表中的码字分为17组;tblNum=1的查找表中的码字分为16组;tblNum=2的查找表中的码字分为12组;tblNum=3的查找表中的码字分为8组。其中,表标识数tblNum的具体含义是,tblNum=0表示0≤nC<2对应的码表,tblNum=1表示2≤nC<4对应的码表,tblNum=2表示4≤nC<8对应的码表,tblNum=3表示nC=-1对应的码表。
为了寻址简单,按照本发明的方法,总的组标识数groupNum_total根据表标识数tblNum和组标识数groupNum得到。总的组标识数groupNum_total也可采用下面公式得到:
groupNum_total=tblNum′=4+groupNum
在上式中,fewflag和tblNum’是中间变量。如果当前组是表1中标#的组(tblNum=0、prefix=0000 11),那么fewflag=1,否则fewflag=0。按二进制来看,GroupNum是4比特的数据,tblNum’是2比特的数据,groupNum_total是6比特的数据,所以上述公式也就是:groupNum_total的低4位是GroupNum,高2位是tblNum’,可见该组标识数分配方法比较简单。但总的组标识数groupNum_total并不局限于上述公式。
针对非零系数的个数total_coeff的取值范围是0到16的特点,根据本发明的存储转换方法,用一个加法器410、一个0取值控制信号产生器412和位数为4比特的数据total_coeff中间值total_coeff_temp,实现0到16的取值。更具体的说,符号存储器404中存储的数据为拖尾1的个数trailing_ones和total_coeff中间值total_coeff_temp,这里的变量total_coeff_temp等于非零系数的个数total_coeff与1的差值。这样存储是因为非零系数的个数total_coeff的取值范围为0到16,并且取值为0的情况很少,可以通过简单的0取值控制信号修正解码结果。
下面结合图2的步骤图来说明采用本发明方法的coeff_token解码的流程:
从步骤200开始,接着执行步骤201,根据当前解码块经过变换量化后的非零系数的个数nC判断是定长码还是变长码;如果步骤201判断是变长码,执行步骤202,根据上述基于分组规则的组标识数分配方法进行组检测得到总的组标识数groupNum_total和前缀长度prefixLen;然后执行步骤203,根据总的组标识数groupNum_total读取组信息得到后缀长度suffixLen和基本地址baseAddr,那么码长len等于前缀长度prefixLen与后缀长度suffixLen之和;然后执行步骤204,由后缀长度suffixLen可以得到码字后缀suffix,由码字后缀suffix可以确定偏移offset,符号存储器404地址sym_addr等于基本地址baseAddr与偏移offset之和;然后执行步骤205,得到拖尾1的个数trailing_ones和total_coeff中间值total_coeff_temp;如果步骤201判断是定长码,执行步骤206,进行定长码的解码,得到拖尾1的个数trailing_ones和total_coeff中间值total_coeff_temp;再执行步骤207,判断0取值控制信号sig0是否为1,如果sig0等于1表明是0取值,那么执行步骤209,非零系数的个数total_coeff为0;否则执行步骤208,计算非零系数的个数total_coeff,total_coeff=total_coeff_temp+1;最后步骤211表示coeff_token解码结束,得到解码结果为码字长度len、拖尾1的个数trailingone和非零系数的个数total_coeff。图2所示的coeff_token解码步骤采用了基于分组规则的组标识数分配方法和存储转换方法。
图3是本发明的coeff_token解码的又一解码方法的步骤图。该解码方法采用了基于分组规则的组标识数分配方法而未采用存储转换方法。与图2所示实施例相比,只有步骤211和212与图2中的步骤207、208和209不同,而其它步骤则与图2中的对应步骤相同。在图2变长码解码分支中,由于符号存储器存储的数据是拖尾1的个数trailing_ones和coeff_token中间值coeff_token_temp,所以非零系数的个数coeff_token需要步骤208由coeff_token_temp加上1得到,而在图3中,由于符号存储器存储的数据是拖尾1的个数trailing_ones和非零系数的个数coeff_token,所以步骤211不再需要加1的操作;在定长码解码分支中,仍然需要步骤212加1得到非零系数的个数coeff_token。
coeff_token解码方法也可不采用基于分组规则的组标识数分配方法而只采用存储转换方法。该方法的步骤与图2基本相同,只有步骤202组检测得到总的组标识数groupNum_total的方法不同,该方法中,groupNum_total根据表标识tblNum和码字的前缀prefix得到,而不利用码字第一个‘1’之前的‘0’的个数leadZero。
通过采用本发明的coeff_token解码方法,寻址更加规则,可以节省寻址需要的时间和控制单元,同时还可以节省存储空间。
图4是total_zeros解码的方法步骤图。total_zeros也采用基于分组的组标识数分配方法,该方法和coeff_token解码器采用的组标识数分配方法一样,但是获取总的组标识数groupNum_total的具体公式不同,下面具体描述这一方法。
total_zeros解码查找表共有18个,用组标识数tblNum等于0~17来分别标识这些码表,其中tblNum等于0~14表示适用于4x4块的码表,tblNum等于15~17表示适用于DC 2x2块的码表。对码字进行分组的情况如表2所示。
表2 total_zeros解码查找表的分组结果
tblNum | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
tblGNum | 9 | 8 | 8 | 7 | 7 | 7 | 7 | 7 | 7 | 6 | 5 | 5 | 4 | 3 | 2 | 4 | 3 | 2 |
tblNum’ | 0 | 9 | 17 | 25 | 32 | 39 | 46 | 53 | 60 | 67 | 73 | 78 | 83 | 87 | 90 | 92 | 96 | 99 |
表2中,tblNum:表标识数;tblGNum:对应于tblNum的码表的分组的组个数;tblNum’:表标识数tblNum变换值。
在解码时,根据tblNum确定tblNum’,然后根据下式得到总的组标识数groupNum_total:
groupNum_total=groupNum+tblNum′
按照本发明的方法,总的组标识数groupNum_total的获取并不局限于上述公式。
针对total_zeros码表的特点,采用基于分组后组内码字的关系进行码字合并的方法解码:对于每个关系规则组,其组内的所有码字对应的解码符号都可以合并为一个预定数据,这个数据定义为基本符号,该组内的所有码字都根据这个基本符号和当前码字的后缀得到相应的解码符号。对于每个关系特殊组,其组内的所有码字也都可以合并为一个预定数据,这个数据定义为基本标识数,该组内的所有码字都根据这个基本标识数和当前码字的后缀形成码字标识数,根据码字标识数由关系特殊组映射表705得到相应的解码符号。
total_zeros解码的关系规则组和关系特殊组如表3所示,在表3中,关系特殊组用“*”表示。从表3可以看出,对于一个关系规则组,其所有码字如果按照数值从小到大的顺序排列,那么其对应的解码符号的排列顺序是从大到小。
表3 total_zeros解码的关系规则组和关系特殊组
total_coeff | total_zeros | codewords | prefix | suffix | 组信息 | |
1 | 0 | 1 | 1 | - | 0000000 | |
1 | 1 | 011 | 01 | 1 | 0010010 | |
1 | 2 | 010 | ~ | 0 | ~ | |
1 | 3 | 0011 | 001 | 1 | 0010100 | |
1 | 4 | 0010 | ~ | 0 | 同上 | |
… | ||||||
4 | 1 | 111 | 1 | 11 | 110base_num | * |
4 | 4 | 110 | ~ | 10 | ~ | * |
4 | 5 | 101 | ~ | 01 | ~ | * |
4 | 6 | 100 | ~ | 00 | ~ | * |
4 | 2 | 0101 | 01 | 01 | 0010011 | |
4 | 3 | 0100 | ~ | 00 | ~ | |
… |
表3中,total_coeff:非零系数的个数;total_zero:最后一个非零系数之前零的个数;codewords:码字;prefix:码字前缀;suffix:码字后缀;base_num:基本标识数;“-”:表示该项数据为空;“~”:表示该项数据等于其同列的上边一行的数据,也就意味着该行码字和其上边一行的码字属于同一个组。
更具体的说,组信息的数据如表4所示。用1bit标识符flag来标识该组是关系规则组或者关系特殊组,suffixLen是后缀长度,如果flag=1,组信息的后四位是基本最后一个非零系数之前零的个数base_total_zeros,否则是基本标识数base_num。除了这个组信息存储器702以外,解码时还需要一个简单的从关系特殊组码字标识数code_num到最后一个非零系数之前零的个数total_zeros的特殊组映射表705,由于关系特殊组的码字比较少,这个特殊组映射表705需要的资源很少。
表4 total_zeros解码器的组信息存储器的存储数据
组信息 | flag | suffixLen | base_total_zeros(如果flag是1)base_num(如果flag是0) |
Bit | 1 | 2 | 4 |
表4中,Bit:组信息中各个部分所占用的比特数;flag:标识符,用来标识该组是关系规则组或者关系特殊组,如果flag等于1,说明是关系规则组,否则是关系特殊组;suffixLen:后缀长度;base_total_zeros:组信息的后四位是基本最后一个非零系数之前零的个数;base_num:基本标识数。
下面结合图4的步骤来说明采用本发明方法的total_zeros解码的流程。
首先由步骤501确定码字所属的组,根据基于分组规则的组标识数分配方法进行组检测,得到总的组标识数groupNum_total和前缀长度prefixLen;然后采用基于分组后组内码字的关系进行码字合并的方法进行解码,具体包括以下步骤:执行步骤502,根据总的组标识数groupNum_total读取组信息存储器702得到标识符flag、后缀长度suffixLen和基本最后一个非零系数之前零的个数base_total_zeros或者基本标识数base_num,那么码长len等于前缀长度prefixLen与后缀长度suffixLen之和;然后执行步骤503判断标识符flag,如果flag等于1,表明该组是关系规则组,否则为关系特殊组;如果步骤503判断为关系规则组,则执行504,由步骤504计算得到最后一个非零系数之前零的个数total_zeros,即base_total_zeros减去suffix;如果步骤503判断为关系特殊组,再执行步骤505,计算关系特殊组码字标识数code_num,即基本标识数base_num减去码字后缀suffix,然后执行步骤506,根据关系特殊组码字标识数code_num由特殊组映射表705得到最后一个非零系数之前零的个数total_zeros;最后步骤507表示total_zeros解码结束,解码结果为码长len和最后一个非零系数之前零的个数total_zeros。
图4所示的total_zeros解码步骤采用了基于分组的组标识数分配方法和基于分组后组内码字的关系进行码字合并的方法。其实total_zeros解码也可以采用两种方法之一。如只采用基于分组规则的组标识数分配方法,则与上述coeff_token解码步骤1相似;如采用基于分组后组内码字的关系进行码字合并的方法,则与本实施例图4基本相同,只是步骤502组检测得到总的组标识数groupNum_total的方法不同,该方法中,groupNum_total根据表标识tblNum和码字的前缀prefix得到,而不利用码字第一个‘1’之前的‘0’的个数leadZero。
本实施例的total_zeros解码方法进一步节省了存储单元,并且只需要一次存储器访问。
图5是按照本发明解码方法的电路结构框图。包括:桶形移位器10、第一个‘1’检测器20、控制器30、coeff_token解码器40、trailling_one解码器50、level解码器60、total_zeros解码器70和run_before解码器80,其中的coeff_token解码器40和total_zeros解码器70是和本发明密切相关的组成部分。为了描述清楚,coeff_token解码器40和total_zeros解码器70详细的结构框图如图6和图7所示。
图6是coeff_token解码器的结构框图。组信息存储器402的存储内容为后缀长度sufflixLen(2bit)和基本地址baseAddr(8bit)。符号存储器404中存储的数据为拖尾1的个数trailing_ones和total_coeff中间值total_coeff_temp。解码器输入表标识数tblNum连接到定长码解码器405、组检测器401、组信息存储器402、符号存储器404、MUX(多路数据选择器)407、MUX408、MUX409和‘0’取值控制信号产生器412。桶形移位器10的输出是移出已解码比特的待解码的数据,该输出端连接到第一个‘1’检测器20、组检测器401、符号地址产生器403、定长码解码器405和‘0’取值控制信号产生器412。第一个‘1’检测器20的输出是码字第一个‘1’之前的‘0’的个数leadZero,该输出端连接到组检测器401。组检测器401的输出端包括两部分,分别为前缀长度prefixLen和总的组标识数groupNum_total,前缀长度prefixLen连接到加法器406的一个输入端,总的组标识数groupNum_total连接到组信息存储器402的输入端。组信息存储器402的输出端包括两部分,分别为后缀长度suffixLen和基本地址baseAddr,suffixLen连接到加法器406的另一个输入端,baseAddr连接到符号地址产生器403的输入端。加法器406的输出端连接到MUX407的输入端。符号地址产生器403的输出端连接到符号存储器404的输入端。符号存储器404有两个输出端,分别为变长码拖尾1的个数trailing_ones_vlc和变长码total_coeff中间值total_coeff_temp_vlc,trailing_ones_vlc连接到MUX408的输入端,total_coeff_temp_vlc连接到MUX409的输入端。定长码解码器405有三个输出,分别为定长码码长codeLen_flc(定长码解码结果codeLen),定长码拖尾1的个数trailing_ones_flc(定长码解码结果trailing_ones),定长码total_coeff中间值total_coeff_temp_flc(定长码解码结果total_coeff_temp),codeLen_flc连接到MUX407的输入端,trailing_ones_flc连接MUX408的输入端,total_coeff_temp连接到MUX409的输入端。MUX409的输出端连接到加法器410的输入端。数据‘1’连接到加法器410的另一个输入端。加法器410的输出连接到MUX411的输入端。‘0’取值信号控制产生器的输出端连接到MUX411的输入端。数据‘0’连接到MUX411的输入端。MUX407的输出码长len、MUX408的输出拖尾1的个数trailing_ones和MUX411的输出非零系数的个数total_coeff连接到控制器30的输入端。
解码时,从桶形移位器10输出的数据通过第一个‘1’检测器得到leadZero。组检测器401根据输入的码字第一个‘1’之前的‘0’的个数leadZero和从桶形移位器输出的数据,以及表标识数tblNum确定总的组标识数groupNum_total和前缀长度prefixLen。以groupNum_total作为组信息存储器402的地址,读取到组信息:后缀长度suffixLen和基本地址baseAddr,后缀长度suffixLen和前缀长度preflixLen进入加法器406,相加的结果是码长len。符号地址产生器403根据基本地址baseAddr和后缀suffix计算得到符号存储器地址symAddr,symAddr是符号存储器402输入地址,符号存储器402的输出是变长码拖尾1的个数trailing_ones_vlc和变长码total_coeff中间值total_coeff_temp_vlc。
变长码total_coeff中间值total_coeff_temp_vlc和定长解码器405的输出定长码total_coeff中间值total_coeff_temp_flc通过MUX409选择一个进入加法器410,进行加‘1’操作,其和与‘0’进入MUX411,MUX411在‘0’取值控制信号产生器412的输出信号的控制下输出解码结果total_coeff。
上述变长码解码得到的变长码码长len_vlc和变长码拖尾1的个数trailing_ones_vlc与定长解码器405解码得到的定长码码长len_vlc和定长码拖尾1的个数trailing_ones_flc通过多路选择器得到的解码结果码长len和拖尾1的个数trailing_ones。解码结果进入控制器30。
图7是total_zeros解码器的结构框图。桶形移位器10的输入连接到第一个‘1’检测器20、组检测器701和关系规则组符号产生器703。第一个‘1’检测器2的输出端连接到组检测器701的输入端。组检测器701的输出端连接到组信息存储器702的输入端。组信息存储器702的输出包括后缀长度suffixLen、标识符flag、基本最后一个非零系数之前零的个数base_total或基本标识数base_num,其中suffixLen连接到加法器707,flag连接到MUX706,base_tatol连接到关系规则组符号产生器703,base_num连接到关系特殊组码字标识数产生器704。关系特殊组码字标识数产生器704的输出连接到关系特殊组映射表705。关系规则组符号产生器703的输出和关系特殊组映射表705的输出连接到MUX706。加法器707的输出码字长度len和MUX706的输出是基本最后一个非零系数之前零的个数total_zeros连接到控制器30的输入端。
解码时,首先由组检测器701确定码字所属的组,得到前缀长度prefixLen和总的组标识数groupNum_total;然后以groupNum_total作为组信息存储器702的地址,读取组信息得到标识符flag、后缀长度suffixLen和基本最后一个非零系数之前零的个数base_total_zeros或者基本标识数base_num,前缀长度prefixLen与后缀长度suffixLen进入加法器707得到码长len,同时判断flag,如果flag=1,表明该组是关系规则组,由符号产生器703计算得到最后一个非零系数之前零的个数total_zerosl,total_zeros等于基本最后一个非零系数之前零的个数base_total_zeros减去后缀suffix;否则,表明该组是关系特殊组,先由关系特殊组码字标识数产生器704计算关系特殊组码字标识数code_num,code_num等于基本标识数base_num减去后缀suffix,然后根据关系特殊组码字标识数code_num由关系特殊组映射表705得到最后一个非零系数之前零的个数total_zeros。最后由MUX706根据标识符flag选择一个合适的最后一个非零系数之前零的个数total_zeros。解码得到的码长len和最后一个非零系数之前零的个数total_zeros都连接到控制器30输入端。
本发明可以节省存储空间,同时具有可编程性,而且解码方法比较简单,不但可用于软件解码,也可集成在视频编解码VLSI芯片之中,尤其适宜应用于VLSI电路的设计。
本发明方法并不局限于上述的具体实施例,本领域的技术人员在本发明公开的技术方案内采取等同或相似的变化或替换,都应属于本发明的保护范围。
Claims (9)
1.一种基于上下文自适应变长解码的方法,其特征是,解码是在控制器(30)的控制下对输入的变长编码数据解码,包括对五个语法元素的解码:解码从coeff_token解码(1)开始,采用由组标识规则组和组标识特殊组构成的基于分组规则的组标识数分配方法或者利用4比特实现0到16的取值的存储转换方法解码非零系数的个数total_coeff和拖尾1trailing_one的个数trailing_ones;trailing_one_sign解码(2),解码拖尾1trailing_one的符号;level解码(3),解码剩下的非零系数的幅度值;total_zeros解码(4),解码最后一个非零系数之前零的个数;run_before解码(5),从最后一个非零系数往前,解码它到前面一个非零系数之间的零的个数。
2.根据权利要求1所述的基于上下文自适应变长解码的方法,其特征是,所述的基于分组规则的组标识数分配方法是:组标识规则组的组标识数groupNum与码字第一个‘1’之前的‘0’的个数leadZero标识数一致,对于组标识特殊组内的各个组,有一个组的组标识数groupNum等于码字第一个‘1’之前的‘0’的个数leadZero,其它组的组标识数groupNum另外定义;对于有多个查找表的情况,每个表的码字都按照上述方式分配组标识数,总的组标识数groupNum_total根据表标识数tblNum和组标识数groupNum得到。
3.根据权利要求1所述的基于上下文自适应变长解码的方法,其特征是,所述的存储转换方法是针对非零系数的个数total_coeff的取值范围为0到16,用一个加法器(410)、一个0取值控制信号产生器(412)和位数为4比特的数据total_coeff中间值total_coeff_temp实现0到16的取值。
4.根据权利要求1、2或3所述的基于上下文自适应变长解码的方法,其特征是,所述的coeff_token解码从步骤(200)开始,接着执行步骤(201),根据当前解码块经过变换量化后的非零系数的个数nC判断是定长码还是变长码;当为变长码时执行步骤(202),根据基于分组规则的组标识数分配方法进行组检测,得到总的组标识数groupNum_total和前缀长度prefixLen;然后执行步骤(203),根据总的组标识数groupNum_total读取组信息得到后缀长度suffixLen和基本地址baseAddr;然后执行步骤(204),计算符号存储器(404)地址sym_addr,其等于基本地址baseAddr与偏移offset之和;然后执行步骤(205),读取符号存储器(404)得到拖尾1的个数trailing_ones和total_coeff中间值total_coeff_temp;当步骤(201)判断是定长码,执行步骤(206)进行定长码解码,得到拖尾1的个数trailing_ones和total_coeff中间值total_coeff_temp;再执行步骤(207),判断0取值控制信号sig0是否为1,当sig0等于1表明是0取值,那么执行步骤(209),非零系数的个数total_coeff为0;否则执行步骤(208),加1得到非零系数的个数total_coeff;最后步骤(211)为coeff_token解码结束,解码结果为码字长度len、拖尾1的个数trailingone和非零系数的个数total_coeff。
5.一种基于上下文自适应变长解码的方法,其特征是,解码是在控制器(30)的控制下对输入的变长编码数据解码,包括对五个语法元素的解码:解码从coeff_token解码(1)开始,解码非零系数的个数total_coeff和拖尾1trailing_one的个数trailing_ones;trailing_one_sign解码(2),解码拖尾1trailing_one的符号;leve1解码(3),解码剩下的非零系数的幅度值;total_zeros解码(4),采用由组标识规则组和组标识特殊组构成的基于分组规则的组标识数分配方法或者采用基于分组后组内码字的关系进行码字合并的方法解码最后一个非零系数之前零的个数;run_before解码(5),从最后一个非零系数往前,解码它到前面一个非零系数之间的零的个数,所述采用基于分组后组内码字的关系进行码字合并为将码字分为关系规则组和关系特殊组。
6.根据权利要求5所述的基于上下文自适应变长解码的方法,其特征是,所述的基于分组规则的组标识数分配方法是:组标识规则组的组标识数groupNum与码字第一个‘1’之前的‘0’的个数leadZero标识数一致,对于组标识特殊组内的各个组,有一个组的组标识数groupNum等于码字第一个‘1’之前的‘0’的个数leadZero,其它组的组标识数groupNum另外定义;对于有多个查找表的情况,每个表的码字都按照上述方式分配组标识数,总的组标识数groupNum_total根据表标识数tblNum和组标识数groupNum得到。
7.根据权利要求5所述的基于上下文自适应变长解码的方法,其特征是,所述的采用基于分组后组内码字的关系进行码字合并的方法是:对于每个关系规则组,其组内的所有码字对应的解码符号都合并为一个预定数据,这个数据定义为基本符号,该组内的所有码字都根据这个基本符号和当前码字的后缀得到相应的解码符号。
8.根据权利要求5所述的基于上下文自适应变长解码的方法,其特征是,所述的采用基于分组后组内码字的关系进行码字合并的方法是:对于每个关系特殊组,其组内的所有码字也都合并为一个预定数据,这个数据定义为基本标识数,该组内的所有码字都根据这个基本标识数和当前码字的后缀形成码字标识数,根据码字标识数由关系特殊组映射表(705)得到相应的解码符号。
9.根据权利要求5、6、7或8所述的基于上下文自适应变长解码的方法,其特征是,所述的total_zeros解码从步骤(500)开始,首先执行步骤(501),根据基于分组规则的组标识数分配方法进行组检测,得到总的组标识数groupNum_total和前缀长度prefixLen;然后采用基于分组后组内码字的关系进行码字合并的方法进行解码,具体包括以下步骤:执行步骤(502),根据总的组标识数groupNum_total读取组信息存储器(702),得到标识符flag、后缀长度suffixLen和一个预定数据,这个预定数据是:基本最后一个非零系数之前零的个数base_total_zeros或者基本标识数base_num;然后执行步骤(503)判断标识符flag,当flag等于1,则执行步骤(504),由基本最后一个非零系数之前零的个数base_total_zeros减去码字后缀suffix生成关系规则组解码符号,即最后一个非零系数之前零的个数total_zeros;当步骤(503)判断标识符flag不等于1,则执行步骤(505),根据所述的预定数据和码字后缀生成关系特殊组码字标识数code_num;然后执行步骤(506),根据关系特殊组码字标识数code_num由关系特殊组映射表(705)得到最后一个非零系数之前零的个数total_zeros;最后步骤(507)为total_zeros解码结束,解码结果为码长len和最后一个非零系数之前零的个数total_zeros。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200610041780 CN100471279C (zh) | 2006-02-13 | 2006-02-13 | 一种基于上下文自适应变长解码的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200610041780 CN100471279C (zh) | 2006-02-13 | 2006-02-13 | 一种基于上下文自适应变长解码的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1825963A CN1825963A (zh) | 2006-08-30 |
CN100471279C true CN100471279C (zh) | 2009-03-18 |
Family
ID=36936352
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200610041780 Expired - Fee Related CN100471279C (zh) | 2006-02-13 | 2006-02-13 | 一种基于上下文自适应变长解码的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100471279C (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5649105B2 (ja) * | 2007-01-11 | 2015-01-07 | トムソン ライセンシングThomson Licensing | 符号化のための装置及び方法並びに復号化のための装置及び方法 |
JP2011193335A (ja) * | 2010-03-16 | 2011-09-29 | Sony Corp | 画像符号化装置および方法、画像復号化装置および方法、並びにプログラム |
CN102547260B (zh) * | 2010-12-22 | 2014-11-19 | 联芯科技有限公司 | 基于上下文自适应的可变长编码的解码方法及系统 |
US9124895B2 (en) * | 2011-11-04 | 2015-09-01 | Qualcomm Incorporated | Video coding with network abstraction layer units that include multiple encoded picture partitions |
EP2779648A4 (en) * | 2011-11-07 | 2016-06-01 | Panasonic Ip Corp America | PICTURE CODING METHOD, PICTURE DECODING METHOD, PICTURE CODING DEVICE, PICTURE DECODING DEVICE, AND PICTURE CODING / DECODING DEVICE |
CN103414897B (zh) * | 2013-07-31 | 2016-05-18 | 北京蛙视通信技术股份有限公司 | 对视频图像熵解码的方法及装置 |
CN104519356B (zh) * | 2014-12-04 | 2019-03-15 | 广东中星电子有限公司 | 一种cabac编/解码方法 |
US20170164007A1 (en) * | 2015-12-07 | 2017-06-08 | Google Inc. | Mixed boolean-token ans coefficient coding |
US20170180757A1 (en) * | 2015-12-18 | 2017-06-22 | Blackberry Limited | Binarizer selection for image and video coding |
CN112449184B (zh) * | 2019-08-28 | 2022-01-25 | 腾讯科技(深圳)有限公司 | 变换系数优化方法、编解码方法、装置、介质及电子设备 |
-
2006
- 2006-02-13 CN CN 200610041780 patent/CN100471279C/zh not_active Expired - Fee Related
Non-Patent Citations (8)
Title |
---|
A Memory and Speed Efficient CAVLC Decoder. Xing Qin,Xiaolang Yan.Proc. of SPIE,Vol.5960 . 2005 |
A Memory and Speed Efficient CAVLC Decoder. Xing Qin,Xiaolang Yan.Proc. of SPIE,Vol.5960 . 2005 * |
A new approach of group-based VLC codec system with fulltable programmability. Bai-Jue Shieh, Yew-San Lee, and Chen-Yi Lee.IEEE TRANSACTIONS ON CIRCUITS AND SYSTEMS FOR VIDEO TECHNOLOGY,Vol.11 No.2. 2001 |
A new approach of group-based VLC codec system with fulltable programmability. Bai-Jue Shieh, Yew-San Lee, and Chen-Yi Lee.IEEE TRANSACTIONS ON CIRCUITS AND SYSTEMS FOR VIDEO TECHNOLOGY,Vol.11 No.2. 2001 * |
H.264 AVC baseline profile decoder optimizationonindependent platform. Xue Quan, Liu Jilin.IEEE Cat.,No.05EX1146. 2005 |
H.264 AVC baseline profile decoder optimizationonindependent platform. Xue Quan, Liu Jilin.IEEE Cat.,No.05EX1146. 2005 * |
H264中CAVLC解码的分组优化. 张颖,刘济林.信号处理,第21卷第1期. 2005 |
H264中CAVLC解码的分组优化. 张颖,刘济林.信号处理,第21卷第1期. 2005 * |
Also Published As
Publication number | Publication date |
---|---|
CN1825963A (zh) | 2006-08-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100471279C (zh) | 一种基于上下文自适应变长解码的方法 | |
US8089379B2 (en) | Variable length decoding apparatus and method | |
US7769088B2 (en) | Context adaptive binary arithmetic code decoding engine | |
US7304590B2 (en) | Arithmetic decoding apparatus and method | |
US8094048B2 (en) | Method of decoding syntax element in context-based adaptive binary arithmetic coding decoder and decoding device therefor | |
US7630440B2 (en) | Context adaptive binary arithmetic code decoding engine | |
CN102238387B (zh) | 一种视频熵编码、熵解码方法、装置 | |
US7710296B2 (en) | N-bin arithmetic coding for context adaptive binary arithmetic coding | |
US20070080832A1 (en) | Decoding system and method based on context-based adaptive binary arithmetic coding | |
US20030085822A1 (en) | High performance memory efficient variable-length coding decoder | |
TWI428023B (zh) | 解碼方法及裝置 | |
CN105379283A (zh) | 数据编码和解码 | |
CN101370138B (zh) | 一种h.264标准cavlc残差系数的解码方法 | |
Cho et al. | A low power variable length decoder for MPEG-2 based on nonuniform fine-grain table partitioning | |
CN102740066B (zh) | Cavlc解码方法和系统 | |
CN101808248B (zh) | 可适应性范式哈夫曼解码器及其方法与图像解码器 | |
CN101090503B (zh) | 熵编码控制方法及熵编码电路 | |
KR101030726B1 (ko) | 확률적 테이블에 의해 생성된 심볼을 기반으로 호프만 테이블을 적용한 메모리 효율이 개선된 멀티미디어용 호프만 디코딩 방법 및 장치 | |
US7567189B2 (en) | Variable length code decoding apparatus and variable length code decoding method | |
CN103024380B (zh) | 一种数据的熵编码方法和装置 | |
Mansour | Efficient Huffman decoding with table lookup | |
JP5201052B2 (ja) | 可変長符号の復号高速化装置 | |
Zhao et al. | A 610 Mbin/s CABAC decoder for H. 265/HEVC level 6.1 applications | |
CN101707484B (zh) | 一种适合硬件实现的快速指数哥伦布码解码方法 | |
CN101188753B (zh) | 一种视频熵解码查找表的构造方法及视频熵解码方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20090318 Termination date: 20120213 |