CN1251414C - 可变长度解码系统和方法 - Google Patents
可变长度解码系统和方法 Download PDFInfo
- Publication number
- CN1251414C CN1251414C CNB011083786A CN01108378A CN1251414C CN 1251414 C CN1251414 C CN 1251414C CN B011083786 A CNB011083786 A CN B011083786A CN 01108378 A CN01108378 A CN 01108378A CN 1251414 C CN1251414 C CN 1251414C
- Authority
- CN
- China
- Prior art keywords
- code
- code word
- length
- vld
- sublist
- 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
Images
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/42—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code using table look-up for the coding or decoding process, e.g. using read-only memory
- H03M7/425—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code using table look-up for the coding or decoding process, e.g. using read-only memory for the decoding process only
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/60—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
- H04N19/61—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding in combination with predictive coding
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/90—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/90—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
- H04N19/91—Entropy coding, e.g. variable length coding [VLC] or arithmetic coding
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Theoretical Computer Science (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Image Processing (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
通过将可变代码表转换为可变长度解码代码表加上控制表对可变长度代码进行解码的方法,由此通用可变长度解码器能够进行解码。
Description
本申请要求2000年3月3日提交的临时申请60/186,789的优先权。
本发明涉及电子系统,尤其涉及用可变长度码字表示编码信息的位流的数字系统和方法。
数字通信(语音、视频、数据)的当前快速扩展越来越依赖于经济的数字信号处理和有效传输和存储。例如,视频通信具有如图3a所示的一般功能,增加功能包括通过如图3b所示的空中接口的链路。许多数字通信系统和标准,如MPEG,采用可变长度码字的编码,以提高编码效率。当编码器采用可变长度编码(VLC)产生位流时,需要用可变长度解码(VLD)对位流进行解码。可变长度编码表通常具有由(码字长度、编码的模式或信息、可变长度码字:vlc_码)表示的项目。VLD是基于从位流抽取的vlc_码值确定(长度、模式),这里vlc_码值指被解译为二进制数时vlc_码码字的值。图1示出VLD的原理。为了找到下一个码字并对其解码,解码器注视从当前位流位置向前固定长度个位(通常这是整个VLC表的最大代码长度“len_max”)的位序列。基于所抽取的vlc_码值,VLD通过查看VLD表而确定(长度、模式),然后根据已解码的码字长度更新位流中当前解码位置,开始对下一个码字进行解码。
通常,解码器包括几个VLD,因为VLC表是各表互不相同的,VLD功能不得不按照VLC表的内容不同进行实施。对于解码器实施,这意味着大的代码尺寸(或者对于硬件解决方案有高的门数目)和长的开发时间。因此,需要一种能够处理任何VLC表的通用VLD方法,以便降低解码器设计成本和增大灵活性。
显然,实现通用VLD的最简单方法是采用直接VLD表查看,即,位流中每个可能的len_max位序列是对含有下一个码字长度和模式的表项目的索引(信息编码)。然而,这需要巨大的VLD表尺寸,确实,具有2len_max项目的表。例如,如果VLC表的最大码字尺寸是16位(即len_max=16),这种VLD表则具有64K个项。从存储器尺寸上这是太昂贵了。
本发明提供一种包括VLD表构成功能和通用VLD功能的通用VLD方通用VLD功能对任何VLD是有效的,只要VLD表是利用VLD表构成功能产生的。
这种方法具有更小VLD尺寸的优点,因为单个VLD功能能够对多个VLC代码进行解码。
图1示出可变长度解码(VLD)。
图2是较佳实施例的解码系统的方框图。
图3a-3b示出能够采用较佳实施例解码的一般数字通信。
1.概述
较佳实施例提供可变长度解码(VLD)表构成功能和通用VLD功能。这一构成功能用于构成给定可变长度编码(VLC)表的VLD代码表和VLD控制表,通用VLD功能采用这两个表进行解码。VLD代码表是项目(长度、模式)阵列,而VLD控制表用于对VLD代码表中的编码项目进行寻址。
2.VLD代码表和VLD控制表的构成
根据vlc码基本上有两种类型的VLC表:0-引导的表(例如表1)和1-引导的表(例如表4)。对于这两种不同类型VLC表的VLD代码表和控制表的构成是不同的,但是是相似的。首先考虑诸如下表1的0-引导VLC表的VLD表构成功能。
长度 | 模式宏块_地址_增量 | vlc_码 |
1 | 1 | 1 |
3 | 2 | 011 |
3 | 3 | 010 |
4 | 4 | 0011 |
4 | 5 | 0010 |
5 | 6 | 00011 |
5 | 7 | 00010 |
7 | 8 | 0000111 |
7 | 9 | 0000110 |
8 | 10 | 00001011 |
8 | 11 | 00001010 |
8 | 12 | 00001001 |
8 | 13 | 00001000 |
8 | 14 | 00000111 |
8 | 15 | 00000110 |
10 | 16 | 0000010111 |
10 | 17 | 0000010110 |
10 | 18 | 0000010101 |
10 | 19 | 0000010100 |
10 | 20 | 0000010011 |
10 | 21 | 0000010010 |
11 | 22 | 00000100011 |
11 | 23 | 00000100010 |
11 | 24 | 00000100001 |
11 | 25 | 00000100000 |
11 | 26 | 00000011111 |
11 | 27 | 00000011110 |
11 | 28 | 00000011101 |
11 | 29 | 00000011100 |
11 | 30 | 00000011011 |
11 | 31 | 00000011010 |
11 | 32 | 00000011001 |
11 | 33 | 00000011000 |
表1MPEG1宏块_地址_增量的VLC表
表1是被用作MPEG1宏块_地址_增量的VLC的0-引导VLC表。该表被用作说明如何构造一个给定VLC表的VLD代码表和控制表的例子。
基本想法是根据vlc_码值以限定次序将VLC表划分为一组子表。这些子表构成VLD代码表。对于每个子表,将有一个字段表示该子表在VLD代码表中的位置。这些字段构成VLD控制表。
在VLD代码表和VLD控制表的构造中涉及以下8个步骤:
1.取得VLC表的最大代码字长度(len_max)(例如表1的len_max=11)。
2.让VLC表中的每个VLC码字(vlc_码)左移(len_max-长度)个位。例如,表1中的第一项具有长度1,所以其VLC码字左移10位。移位后的VLC码字(vlc_码)值为1024(见下表2中“移位值”列)。即,把右边的移位作为增加10个0-位处理,所以移位后码字是1000 0000 000,作为二进制数这是1024。
3.在移位后根据vlc_码值将移位后的VLC码字重新排序成增大次序(见表2中“移位值”列)。
4.根据移位值将VLC表划分为子表。如果其移位值满足2n-1≤值<2n,将重新组织的VLC码字分类为子表n。子表0是一个例外,它仅含有一个0元素。通过以这种方式对子表分类,易于识别一个给定移位值属于哪个子表索引,因为通过检查该移位值的MSB(最高有效位)能够简单地确定该子表索引。还要注意:vlc_码的子表数目简单地是11-(vlc_码中引导0的数目)。
5.填上每个子表中的空缺(leak)。空缺定义为在VLC表中是有效的但是未被使用的代码项。例如,在表2中,子表0~4中的所有项和子表5中移位值24以下的项丢失,因为这些项在VLC表中未被使用(见表1)。为了差错检测,这些空缺必须用虚设码字填上。在表2中,(对于长度、模式)空缺是用虚设代码(0,0)填上的。一旦当解码器从位流抽取虚设代码(0,0)时,它将报告找到差错。
6.确定每个子表的“移位”,这里把每个子表的“移位”定义为len_max与在子表中的码字的最大长度之间的差。例如,表2的子表6具有长度在8至11位之间变化的码字,因此“移位”等于0。VLD控制表具有“移位”,作为第一字段分量;见表2中VLD控制(移位,偏移)列。
7.在子表0中通过从0开始简单列举,确定VLD代码表中项目索引。每个元素(长度,模式)在VLD代码表中重复2len_max-移位-长度次。作为一个例子,在表2的子表7中,(7,8)在VLD代码表中出现两次,因为(len_max=11,移位=3,长度=7)。即,对于(7,8)出现索引70和71。这种重复考虑了子表中码字的不等的长度。
8.确定每个子表的“偏移”,从而通过方程式:索引=偏移+(值>>移位)子表中的任何项能够寻找其在VLD代码表中的索引,这里“值”是表2中的“移位值”。因此,每个子表的“偏移”使索引与未移位值对准。注意:这里对“移位值”解码等效于从位流中当前解码位置开始的“len_max”位序列的值,其中,len_max位的二进制值在子表的范围内。
例如,表2的子表10的第二项具有移位8、索引77和vlc_码011- ---- ---;8-是左移8,所以(值>>移位)是3(二进制数011),偏移=索引-(值>>移位)=77-3=74。VLD控制表具有“偏移”,作为第二字段分量。
VLD控制(移位,偏移) | VLD代码索引 | VLD代码(长度,模式) | 重新组织的vlc_码 | 移位值 |
子表1(0~0) | ||||
(0,0) | 0~0 | (0,0) | 0000 0000 000 | 0 |
(1~1) | ||||
(0,0) | 1~1 | (0,0) | 0000 0000 001 | 1 |
子表2(2~3) | ||||
(0,0) | 2~3 | (0,0)(0,0) | 0000 0000 0100000 0000 011 | 2~3 |
子表3(4~7) | ||||
(0,0) | 4~7 | (0,0)~(0,0) | 0000 0000 100~0000 0000 111 | 4~7 |
子表4(8~15) | ||||
(0,0) | 8~15 | (0,0)~(0,0) | 0000 0001 000~0000 0001 111 | 8~15 |
子表5(16~31) | ||||
(0,0) | 16~23 | (0,0)~(0,0) | 0000 0010 000~0000 010 111 | 16~23 |
24 | (11,33) | 0000 0011 000 | 24 | |
25 | (11,32) | 0000 0011 001 | 25 | |
26 | (11,31) | 0000 0011 010 | 26 | |
27 | (11,30) | 0000 0011 011 | 27 | |
28 | (11,29) | 0000 0011 100 | 28 | |
29 | (11,28) | 0000 0011 101 | 29 | |
30 | (11,27) | 0000 0011 110 | 30 | |
31 | (11,26) | 0000 0011 111 | 31 | |
子表6(32~63) | ||||
(0,0) | 32 | (11,25) | 0000 0100 000 | 32 |
33 | (11,24) | 0000 0100 001 | 33 | |
34 | (11,23) | 0000 0100 010 | 34 | |
35 | (11,22) | 0000 0100 011 | 35 | |
36~37 | (10,21) | 0000 0100 10- | 36 | |
38~39 | (10,20) | 0000 0100 11- | 38 | |
40~41 | (10,19) | 0000 0101 00- | 40 | |
42~43 | (10,18) | 0000 0l01 01- | 42 | |
44~45 | (10,17) | 0000 0101 10- | 44 | |
46~47 | (10,l6) | 0000 0l01 11- | 46 | |
48~55 | (8,15) | 0000 0110 --- | 48 | |
56~63 | (8,14) | 0000 0111 --- | 56 | |
子表7(64~127) | ||||
(3,56) | 64 | (8,13) | 0000 1000 --- | 64 |
65 | (8,12) | 0000 1001 --- | 72 | |
66 | (8,11) | 0000 1010 --- | 80 |
67 | (8,10) | 0000 1011 --- | 88 | |
68~69 | (7,9) | 0000 110- --- | 96 | |
70~71 | (7,8) | 0000 111- --- | 112 | |
子表8(128~255) | ||||
(6,70) | 72 | (5,7) | 0001 0--- --- | 128 |
73 | (5,6) | 0001 1--- --- | 192 | |
子表9(256-511) | ||||
(7,72) | 74 | (4,5) | 0010 ---- --- | 256 |
75 | (4,4) | 0011 ---- --- | 384 | |
子表10(512-1023) | ||||
(8,74) | 76 | (3,3) | 010- ---- --- | 512 |
77 | (3,2) | 011- ---- --- | 768 | |
子表11(1024~2047) | ||||
(10,77) | 78 | (1,1) | 1--- ---- --- | 1024 |
表2MPEG1宏块_地址_增量的VLD代码表和VLD控制表的设计
给出以下数据类型:
typedef struct vldcodetab{
char length;
short pattern;
}VLDCodeTab;
typedef struct vldctltab{
char shift;
short offset;
}VLDCtlTab;
VLC表1的VLD代码表和VLD控制表示于表3中。
静态VLD代码表宏块_地址_增量_vld表[79]={{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{l1,33},{11,32},{11,31},{11,30},{11,29},{11,28},{11,27},{11,26},{11,25},{11,24},{11,23},{11,22},{10,21},{10,21},{10,20},{10,20},{10,19},{10,19},{10,18},{10,18},{10,17},{10,17},{10,16},{10,16},{8,15},{8,15},{8,15},{8,15},{8,15},{8,15},{8,15},{8,15},{8,14},{8,14},{8,14},{8,14},{8,14},{8,14},{8,14},{8,14},{8,13},{8,12},{8,11},{8,10},{7,9},{7,9},{7,8},{7,8},{5,7},{5,6},{4,5},{4,4},{3,3},{3,2},{1,1}};静态VLD控制表宏块_地址_增量_vld控制[12]={{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{3,56},{6,70},{7,72},{8,74},{10,77}};len_max=11; 倒置=0; |
表3MPEG1宏块_地址_增量的VLD代码表和VLD控制表
即,VLD构造功能将VLC表1转换为图3中所示的VLD代码表和VLD控制表。以下将描述用通用VLD功能的解码。
现在考虑VLD构造功能应用于1-引导的VLC表。
长度 | 模式dct_dc_size_luminance | vlc_码 |
3 | 0 | 100 |
2 | 1 | 00 |
2 | 2 | 01 |
3 | 3 | 101 |
3 | 4 | 110 |
4 | 5 | 1110 |
5 | 6 | 11110 |
6 | 7 | 111110 |
7 | 8 | 1111110 |
表4MPEG1 dct_dc_size_luminance的VLC表
表4示出被用作MPEG1 dct_dc_size_luminance的1-引导VLC表的例子。1-引导VLC表的VLD表构造类似于0-引导VLC表的VLD表构造。不同的是vlc_码的重新组织。在1-引导的表中,vlc_码的移位值是通过首先进行vlc_码的位倒置(互换0和1),随后(1en_max-长度)位的左移(见表5,“移位值”列)而计算的,这里“长度”是vlc_码的码字长度。在移位值的这一计算之后,采用与如上所述相同的步骤来形成VLD代码表和VLD控制表:见表5和表6。
VLD控制(移位,偏移) | VLD代码索引 | VLD代码(长度,模式) | 重新组织的vlc_码 | 移位值 |
子表0(0~0) | ||||
(0,0) | 0 | (0,0) | 1111 111 | 0 |
子表1(1~1) | ||||
(0,0) | 1 | (7,8) | 1111 110 | 1 |
子表2(2~3) | ||||
(1,1) | 2 | (6,7) | 1111 10- | 2 |
子表3(4~7) | ||||
(2,2) | 3 | (5,6) | 1111 0-- | 4 |
子表4(8~15) |
(3,3) | 4 | (4,5) | 1110 --- | 8 |
子表5(16~31) | ||||
(4,4) | 5 | (3,4) | 110- --- | 16 |
子表6(32~63) | ||||
(4,4) | 6 | (3,3) | 101- --- | 32 |
7 | (3,0) | 100- --- | 48 | |
子表7(64~127) | ||||
(5,6) | 8 | (2,2) | 01-- --- | 64 |
9 | (2,1) | 00-- --- | 96 |
表5MPEG1 dct_dc_size_luminance的VLD代码表和VLD控制表的设计
静态VLD代码表Dct_dc_size_luminance_dcd表[10]={{0,0},{7,8},{6,7},{5,6},{4,5},{3,4},{3,3},{3,0},{2,2},{2,1}};静态VLD控制表Dct_dc_size_Luminance_dcd控制[8]={{0,0},{0,0},{1,1},{2,2},{3,3},{4,4},{4,4},{5,6}};len_max=7; 倒置=1; |
表6MPEG1 dct_dc_size_luminance的VLD代码表和VLD控制表
正如表3和表6表明的,VLD控制表的尺寸是固定的,它具有“len_max+1”项。然而,VLD代码表的尺寸对于各表互不相同,这取决于VLC表特征。
对于任何一个给定VLC表,正如以上所述,可以自动构造VLD代码表和VLD控制表;这包括输入VLC表是作为0-引导表处理还是作为1-引导表处理的决定。
3.通用VLD功能
产生了VLD代码表和VLD控制表后,便能够实施通用VLD功能。表7示出实施通用VLD功能的伪代码。
int UniversalVLD(Bitstream *stream, /*pointer of bitstream */VLDCodeTab *vldtab, /*pointer of VLD table */VLDCtlTab *vldctl, /*pointer of VLD control table */int len_max, /*maximum code length in the VLD table */char reverse, /*reverse=0/1->zero/one leading VLD table */char *err_flag) /*err_flag=1->error detected,err_flag=0->decoding OK */ |
{int value,subtab_id,index;/*============================================*//*get the value of next″len_max″bits in the bitstream *//*============================================*/value=next_bits(stream,len_max);/*============================================*//*reverse the value for 1-leading VLD table *//*============================================*/if(reverse)value=((1<<len_max)-1)^value;/*============================================*//*determine the sub-table index according to the value.TMS320C6X and TMS320C54X have *//*special instructions for such an operation *//*============================================*/if(value=0)subtab_id=0;else subtab_id=(int)log2(value)+1;/*============================================*//*get index in the VLD code table *//*============================================*/index=vldctl[subtab_id].offset+(value>>vldctl[subtab_id].shift);/*============================================*//*decide if an decoding error is detected *//*============================================*/if(vldtab[index].length==0)*err_flag=1;else *err_flg=0;/*============================================*//*update the current decoding position in the bitstream *//*============================================*/if(*err_flg==0)flush_bits(stream,vldtab[index].length);/*============================================*//*return the decoded coding pattern *//*============================================*/return vldtab[index].pattern;} |
表7通用VLD功能的伪代码
通用VLD功能包括以下七个步骤:
1.取得位流中下一个“len_max”位的“值”。
2.如果VLD是1-引导的表,求该“值”的反。
3.根据所述“值”确定子表数目。
4.通过利用所述“值”和子表控制参数(移位,偏移)得到VLD代码表中的索引。
5.通过检查已解码的代码长度,检测位流中是否出现差错。
6.如果解码无差错,通过利用已解码的代码长度,更新位流中的当前解码位置。
7.返回代码模式。
这一功能在它能够处理任何VLD的意义上是通用的,只要其VLD代码表和VLD控制表是根据以上描述构造的。此外,这一功能具有进行差错检测的能力。
图2是通用VLD功能的方框图。这一功能的核心是通用VLD单元,它包括数据存储器和与其连接的寄存器。数据存储器被用于存储VLD代码表和VLD控制表,而三个寄存器被用于存储位流解码位置、len_max/倒置、以及解码状态(即err_flag)。为了对编码模式进行解码,通用VLD单元指向相关的VLD代码表和VLD控制表,然后根据给定位流位置len_max/倒置从该位流抽取该编码模式。对该模式进行解码后,位流位置寄存器以及解码状态寄存器被更新。
较佳实施例的通用VLD方法由两个功能组成:即VLD表构造功能和通用VLD功能。VLD表构造功能是根据给定VLC表的VLD代码表和VLD控制表的生成器。通用VLD功能对任何VLD是有效的,只要按照以上格式将其VLC表变换为VLD代码表和VLD控制表。此外,它还提供差错检测能力,在实际应用中是VLD必需的。这种方法有助于降低解码器复杂性、成本和开发时间。基于较佳实施例的方法还能够发展可编程的VLD硬件方案。
4.改进
可以对较佳实施例作各种改进而保留把VLC表转换为VLD代码表加上VLD控制表的特征,从而使通用VLD解码功能能够进行解码。特别地,基于移位码字的最高有效位而把可变长度代码表划分为子表能够扩展到具有混合0-引导和1-引导的简单代码,如MPEG4的可逆VLC,它基本上采用数个相继的0或者一个0在一串1中的位置。
Claims (2)
1.一种将位序列解码为可变长度代码的方法,其特征在于包括以下步骤:
(a)从可变长度代码表构造第一代码表和第一控制表,这里所述第一代码表和第一控制表是利用以下步骤构造而成的:
(i)确定可变长度代码表中的最大码字长度“len_max”;
(ii)使可变长度代码表的每一个码字“vlc_code”左移“len_max”-“长度”位,这里“长度”是在“vlc_code”中的位数;
(iii)通过增加“值”对左移的码字排序,这里左移的码字具有“值”,对于任何丢失的最低有效位,当被解译为具有含0的“len_max”位的二进制数时,这一排序形成左移码字的新表;
(iv)形成左移码字的新表的子表,这里当2n-1≤“值”<2n时,将左移的码字放入子表n中,但是对于“值”等于0,该左移的码字放入子表0中;
(v)对于已经不对应于左移码字的“len_max”位的每一个可能二进制数,通过将虚设码字插入到子表中,扩展所述新表,这里具有丢失的最低有效位的左移码字准备代表丢失的最低有效位的所有组合;
(vi)确定每一个子表的“移位”为“len_max”减去子表中左移码字的最大长度,以及对于每一个子表,形成具有一个项目,即“移位”、“偏移”,的第一控制表,这里“偏移”是在以下步骤(viii)中确定的,
(vii)形成每一个项目,即“长度”、“模式”,对应于左移码字或者对应于扩展的新表的虚设码字的第一代码表,第一代码表项目具有与扩展的新代码表相同的排序,而每一个项目具有根据该项目在第一代码表中位置的“索引”,这里“长度”来自步骤(ii),或者来自步骤(v)的虚设码字的0,而“模式”是“vlc_code”或者来自步骤(v)的虚设码字;
(viii)通过“索引”=“偏移”+(“值”>>“移位”),确定每一个子表的“偏移”,这里“>>”代表右移;
(b)通过以下步骤将位序列解码为所述可变长度代码的码字:
(i)将距所述序列的当前解码位置的“len_max”位的间隔解译为一个二进制数,得到一个“值”;
(ii)从该“值”确定一个子表;
(iii)通过在第一控制表中查找,确定所述子表的“移位”和“偏移”,以及从所述的“移位”、“偏移”和“值”确定“索引”;
(iv)通过在第一控制表中查找,确定“索引”的“长度”和“模式”;
(v)使当前解码位置更新“长度”位;以及
(vi)输出“模式”,作为解码的码字。
2.如权利要求1所述的方法,其特征在于:
(a)当所述可变长度代码表是针对1引导的可变长度代码时,
(i)在权利要求1的步骤(a)(i)之前,执行每个码字的位序颠倒,然后左移“len_max”-“长度”位;以及
(ii)在权利要求1的步骤(b)(i)与步骤(b)(ii)之间,使“值”反转。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US18678900P | 2000-03-03 | 2000-03-03 | |
US60/186,789 | 2000-03-03 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1337785A CN1337785A (zh) | 2002-02-27 |
CN1251414C true CN1251414C (zh) | 2006-04-12 |
Family
ID=22686283
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB011083786A Expired - Fee Related CN1251414C (zh) | 2000-03-03 | 2001-03-02 | 可变长度解码系统和方法 |
Country Status (6)
Country | Link |
---|---|
US (1) | US20010030615A1 (zh) |
EP (1) | EP1130926A3 (zh) |
JP (1) | JP2001267931A (zh) |
KR (1) | KR20010087269A (zh) |
CN (1) | CN1251414C (zh) |
TW (1) | TW587376B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101072034B (zh) * | 2007-06-12 | 2010-06-02 | 华为技术有限公司 | 一种变长解码方法及其装置 |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6667701B1 (en) | 2002-07-16 | 2003-12-23 | Motorola, Inc. | Variable length decoder |
US7358870B2 (en) | 2003-09-02 | 2008-04-15 | Nokia Corporation | Huffman coding and decoding based upon sectioning of a Huffman coding tree |
US8599841B1 (en) | 2006-03-28 | 2013-12-03 | Nvidia Corporation | Multi-format bitstream decoding engine |
US8593469B2 (en) * | 2006-03-29 | 2013-11-26 | Nvidia Corporation | Method and circuit for efficient caching of reference video data |
US7324026B2 (en) * | 2006-05-19 | 2008-01-29 | Nvidia Corporation | Optimization of decoder memory usage for VLC tables |
CN101090501B (zh) * | 2006-06-13 | 2010-05-12 | 财团法人工业技术研究院 | 模型搜寻式的可变长度编解码方法与装置 |
US20110158310A1 (en) * | 2009-12-30 | 2011-06-30 | Nvidia Corporation | Decoding data using lookup tables |
US9386326B2 (en) | 2012-10-05 | 2016-07-05 | Nvidia Corporation | Video decoding error concealment techniques |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3701111A (en) * | 1971-02-08 | 1972-10-24 | Ibm | Method of and apparatus for decoding variable-length codes having length-indicating prefixes |
US4899149A (en) * | 1986-02-28 | 1990-02-06 | Gary Kahan | Method of and apparatus for decoding Huffman or variable-length coees |
US5181031A (en) * | 1991-07-30 | 1993-01-19 | Lsi Logic Corporation | Method and apparatus for decoding huffman codes by detecting a special class |
US5254991A (en) * | 1991-07-30 | 1993-10-19 | Lsi Logic Corporation | Method and apparatus for decoding Huffman codes |
KR100207385B1 (ko) * | 1995-08-31 | 1999-07-15 | 전주범 | 가변 길이 복호화 장치 |
US5825312A (en) * | 1996-11-25 | 1998-10-20 | Xerox Corporation | DX JPEG Huffman decoder |
-
2001
- 2001-02-20 US US09/788,807 patent/US20010030615A1/en not_active Abandoned
- 2001-03-02 CN CNB011083786A patent/CN1251414C/zh not_active Expired - Fee Related
- 2001-03-02 KR KR1020010010756A patent/KR20010087269A/ko not_active Application Discontinuation
- 2001-03-05 JP JP2001059939A patent/JP2001267931A/ja not_active Abandoned
- 2001-03-05 EP EP01200827A patent/EP1130926A3/en not_active Withdrawn
- 2001-03-13 TW TW090104781A patent/TW587376B/zh not_active IP Right Cessation
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101072034B (zh) * | 2007-06-12 | 2010-06-02 | 华为技术有限公司 | 一种变长解码方法及其装置 |
Also Published As
Publication number | Publication date |
---|---|
EP1130926A2 (en) | 2001-09-05 |
KR20010087269A (ko) | 2001-09-15 |
JP2001267931A (ja) | 2001-09-28 |
EP1130926A3 (en) | 2004-08-18 |
CN1337785A (zh) | 2002-02-27 |
TW587376B (en) | 2004-05-11 |
US20010030615A1 (en) | 2001-10-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1148005C (zh) | 快速联合图像专家组霍夫曼编码和解码方法 | |
JP2023075109A (ja) | 動きベクトル差のエントロピー符号化 | |
US8711019B1 (en) | Context-based adaptive binary arithmetic coding engine | |
CN1735209A (zh) | 使用流水线结构的二进制算术解码装置和方法 | |
CN1104094C (zh) | 数据压缩方法和设备 | |
EP2191650B1 (en) | Architecture for multi-stage decoding of a cabac bitstream | |
JP3517224B2 (ja) | 複数のマッピングテーブルを用いた可変長符号化及び復号化方法、並びにその装置 | |
WO1997034375A1 (en) | Method for reducing storage requirements for digital data | |
US7411529B2 (en) | Method of decoding bin values using pipeline architecture and decoding device therefor | |
CN1144371C (zh) | 编码可变长度代码及分段其可变长度码字的装置 | |
KR20080082147A (ko) | 컨텍스트 기반 적응적 이진 산술 부호화, 복호화 방법 및장치 | |
CN1251414C (zh) | 可变长度解码系统和方法 | |
US7113115B2 (en) | Variable length code table look ups | |
US5648774A (en) | Variable length coding with three-field codes | |
CN1134896C (zh) | 对信息信号的算术编码与解码 | |
Peng et al. | A hardware CABAC encoder for HEVC | |
CN1756090A (zh) | 信道编码装置和方法 | |
CN1545765A (zh) | 可变长度编码打包体系结构 | |
CN1126270C (zh) | 使用可变长度编码器的传输系统 | |
CN101093998B (zh) | 解码方法及装置 | |
CN1108014C (zh) | 具有字节校准单元的可变长度码编码及分段装置 | |
GB2319689A (en) | An entropy encoder using context modelling with data reordering | |
Howard | Interleaving entropy codes | |
CN1236623C (zh) | 信息熵保持解码方法与装置 | |
CN1098565C (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 | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20060412 Termination date: 20170302 |