CN101309423B - 一种解码非零系数个数和拖尾系数个数的方法 - Google Patents
一种解码非零系数个数和拖尾系数个数的方法 Download PDFInfo
- Publication number
- CN101309423B CN101309423B CN 200810302370 CN200810302370A CN101309423B CN 101309423 B CN101309423 B CN 101309423B CN 200810302370 CN200810302370 CN 200810302370 CN 200810302370 A CN200810302370 A CN 200810302370A CN 101309423 B CN101309423 B CN 101309423B
- Authority
- CN
- China
- Prior art keywords
- value
- code word
- decoding
- zerolen
- coefficient number
- 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
Landscapes
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明涉及视频压缩技术,特别涉及视频压缩技术中的CALVC解码。本发明提供一种快速完成CAVLC解码中非零系数个数和拖尾系数个数解码的方法。一种解码非零系数个数和拖尾系数个数的方法,包括以下步骤:a、根据预测的非零系数个数、预设读入比特数以及预设读入码流的码值,确定待查找的小解码表;b、判断原始码字前缀部分连续0的位数以及原始码字后缀部分的码值查找所述小解码表;所述小解码表由原始码字前缀部分连续0的位数以及原始码字后缀部分的码值能唯一对应一个子表项;c、解析子表项的码字,得到非零系数个数和拖尾系数个数。本发明解码不需要遍历编码表,只需要读取固定长度的二进制串,根据其数值,最多查询2次表,最少只需查询一次表。
Description
技术领域
本发明涉及视频压缩技术,特别涉及视频压缩技术中的CALVC解码。
背景技术
H.264是新一代视频编码标准,它由ITU-T首先提出,后由ITU-T和ISO组成合作开发组(JVT)共同开发。从体系结构上看,它与H.263以及MPEG-4相似,同属基于预测变换的混合编码框架。H.264采用了一系列的新技术,如:多参考帧、FMO、1/4像素精度等技术来提高压缩比。
在熵编码方面,H.264采用了两种编码模式:CAVLC和CABAC。CAVLC是一种可变长度编码,它根据已编码语法元素的情况动态调整编码中使用的码表,以求达到更好的编码效率。CAVLC用于亮度和色度残差数据的编码。残差经过变换量化后的数据表现出如下特性:4x4块数据经过预测、变换、量化后,非零系数主要集中在低频部分,而高频部分系数大部分都是零;量化后的数据经过锯齿形扫描,DC系数附近的非零系数数值大,而高频位置上的非零系数值大部分是+1或1;相邻的4x4块的非零系数的数目是相关的。CAVLC充分利用残差经过整数变换、量化后数据的这些特性进行压缩,可进一步减少数据中的冗余信息,为H.264的高压缩性能奠定基础。CAVLC解码过程分为5个步骤:1)、解码非零系数个数和拖尾系数个数;2)、解码拖尾系数的符号;3)、解码剩余非零系数幅值;4)、解码最后一个非零系数前零的个数;5)、解码每个非零系数前零的个数。除了第二步,其他的步骤都需要通过查表,得到对应句法元素的值。
为了解码非零系数个数Tc和拖尾系数个数T1s的值,需将码流中码字与码表中的码字进行逐个比较,直到遇到匹配的码字,才能计算出Tc和T1s的值。当前的系数块不是色度直流系数块的情况下,预测的非零系数的个数NC不同时,查找的码表不同。当0<=NC<2时查表1.1,2<=NC<4时查表表1.2,4<=NC<8时查表表1.3。在NC<8的情况下,三个编码表都没有规律,解码过程只能将码流中的码字和解码表中的码字比较,找到匹配的一项(从码流中每次读取1个比特数据,然后遍历两个的表,其中一个表中存放数值,另外一个存放数据长度,只有当读取的比特数和数值和这两个表都相同时,才能找到匹配的一项),然后计算出Tc和T1s的值。这样需要的查表次数就非常多,而且表也很大。
表1.1,0<=NC<2时,Tc和T1s的解码表如下:
000000101xxxxxx | 9 | 5 | 2 |
000000110xxxxxxx | 9 | 4 | 1 |
000000111xxxxxxx | 9 | 3 | 0 |
0000000100xxxxxx | 10 | 8 | 3 |
0000000101xxxxxx | 10 | 6 | 2 |
0000000110xxxxxx | 10 | 5 | 1 |
0000000111xxxxxx | 10 | 4 | 0 |
00000000100xxxxx | 11 | 9 | 3 |
00000000101xxxxx | 11 | 7 | 2 |
00000000110xxxxx | 11 | 6 | 1 |
00000000111xxxxx | 11 | 5 | 0 |
0000000001000xxx | 13 | 8 | 0 |
0000000001001xxx | 13 | 9 | 2 |
0000000001010xxx | 13 | 8 | 1 |
0000000001011xxx | 13 | 7 | 0 |
0000000001100xxx | 13 | 10 | 3 |
0000000001101xxx | 13 | 8 | 2 |
0000000001110xxx | 13 | 7 | 1 |
0000000001111xxx | 13 | 6 | 0 |
00000000001000xx | 14 | 12 | 3 |
00000000001001xx | 14 | 11 | 2 |
00000000001010xx | 14 | 10 | 1 |
00000000001011xx | 14 | 10 | 0 |
00000000001100xx | 14 | 11 | 3 |
00000000001101xx | 14 | 10 | 2 |
00000000001110xx | 14 | 9 | 1 |
00000000001111xx | 14 | 9 | 0 |
000000000001000x | 15 | 14 | 3 |
000000000001001x | 15 | 13 | 2 |
000000000001010x | 15 | 12 | 1 |
000000000001011x | 15 | 12 | 0 |
000000000001100x | 15 | 13 | 3 |
000000000001101x | 15 | 12 | 2 |
000000000001110x | 15 | 11 | 1 |
000000000001111x | 15 | 11 | 0 |
0000000000001000 | 16 | 16 | 3 |
0000000000001001 | 16 | 15 | 2 |
0000000000001010 | 16 | 15 | 1 |
0000000000001011 | 16 | 14 | 0 |
0000000000001100 | 16 | 15 | 3 |
0000000000001101 | 16 | 14 | 2 |
0000000000001110 | 16 | 14 | 1 |
表1.2,2<=NC<4时,Tc和Tls的解码表:
CODE | LEN | Tc | T1s |
10xx xxxx xxxx xx | 2 | 1 | 1 |
11xx xxxx xxxx xx | 2 | 0 | 0 |
011x xxxx xxxx xx | 3 | 2 | 2 |
0100 xxxx xxxx xx | 4 | 4 | 3 |
0101 xxxx xxxx xx | 4 | 3 | 3 |
00110xx xxxx xx | 5 | 5 | 3 |
0011 1 xxx xxxx xx | 5 | 2 | 1 |
0010 00xx xxxx xx | 6 | 6 | 3 |
0010 01xx xxxx xx | 6 | 3 | 2 |
0010 10xx xxxx xx | 6 | 3 | 1 |
0010 11xx xxxx xx | 6 | 1 | 0 |
0001 00xx xxxx xx | 6 | 7 | 3 |
0001 01xx xxxx xx | 6 | 4 | 2 |
0001 10xx xxxx xx | 6 | 4 | 1 |
0001 11xx xxxx xx | 6 | 2 | 0 |
0000 100xx xxxx xx | 7 | 8 | 3 |
0000 101x xxxx xx | 7 | 5 | 2 |
0000 110x xxxx xx | 7 | 5 | 1 |
0000 111 xxxx xx | 7 | 3 | 0 |
0000 0100 xxxx xx | 8 | 5 | 0 |
0000 0101 xxxx xx | 8 | 6 | 2 |
0000 0110 xxxx xx | 8 | 6 | 1 |
0000 0111 xxxx xx | 8 | 4 | 0 |
0000 0010 0xxxx xx | 9 | 9 | 3 |
0000 0010 1xxx xx | 9 | 7 | 2 |
00000011 0xxx xx | 9 | 7 | 1 |
0000 0011 1xxx xx | 9 | 6 | 0 |
0000 0001 000x xx | 11 | 11 | 3 |
0000 0002 001x xx | 11 | 9 | 2 |
0000 0001 010x xx | 11 | 9 | 1 |
0000 0001 011x xx | 11 | 8 | 0 |
0000 0001 100x xx | 11 | 10 | 3 |
0000 0001 101x xx | 11 | 8 | 2 |
0000 0001 110x xx | 11 | 8 | 1 |
0000 0001 111x xx | 11 | 7 | 0 |
0000 0000 1000 xx | 12 | 11 | 0 |
0000 0000 1001 xx | 12 | 11 | 2 |
0000 0000 1010 xx | 12 | 11 | 1 |
0000 0000 1011 xx | 12 | 10 | 0 |
0000 0000 1100 xx | 12 | 12 | 3 |
0000 0000 1101 xx | 12 | 10 | 2 |
0000 0000 1110 xx | 12 | 10 | 1 |
0000 0000 1111 xx | 12 | 9 | 0 |
0000 0000 0100 0x | 13 | 14 | 3 |
0000 0000 0100 1x | 13 | 13 | 2 |
0000 0000 0101 0x | 13 | 13 | 1 |
0000 0000 0101 1x | 13 | 13 | 0 |
0000 0000 0110 0x | 13 | 13 | 3 |
0000 0000 0110 1x | 13 | 12 | 2 |
0000 0000 0111 0x | 13 | 12 | 1 |
0000 0000 0111 1x | 13 | 12 | 0 |
0000 0000 0010 00 | 14 | 15 | 1 |
0000 0000 0010 01 | 14 | 15 | 0 |
0000 0000 0010 10 | 14 | 15 | 2 |
0000 0000 0010 11 | 14 | 14 | 1 |
0000 0000 0011 0x | 13 | 14 | 2 |
0000 0000 0011 1x | 13 | 14 | 0 |
0000 0000 0001 00 | 14 | 16 | 3 |
0000 0000 0001 01 | 14 | 16 | 2 |
0000 0000 0001 10 | 14 | 16 | 1 |
0000 0000 0001 11 | 14 | 16 | 0 |
0000 0000 0000 1x | 13 | 15 | 3 |
表1.3,4<=NC<8时,Tc和Tls的解码表:
CODE | LEN | Tc | T1s |
1000 | 4 | 7 | 3 |
1001 | 4 | 6 | 3 |
1010 | 4 | 5 | 3 |
1011 | 4 | 4 | 3 |
1100 | 4 | 3 | 3 |
1101 | 4 | 2 | 2 |
1110 | 4 | 1 | 1 |
1111 | 4 | 0 | 0 |
0100 0 | 5 | 5 | 1 |
0100 1 | 5 | 5 | 2 |
0101 0 | 5 | 4 | 1 |
0101 1 | 5 | 4 | 2 |
0110 0 | 5 | 3 | 1 |
0110 1 | 5 | 8 | 3 |
0111 0 | 5 | 3 | 2 |
0111 1 | 5 | 2 | 1 |
0010 00 | 6 | 3 | 0 |
0010 01 | 6 | 7 | 2 |
0010 10 | 6 | 7 | 1 |
0010 11 | 6 | 2 | 0 |
0011 00 | 6 | 9 | 3 |
0011 01 | 6 | 6 | 2 |
0011 10 | 6 | 6 | 1 |
0011 11 | 6 | 1 | 0 |
0001 000 | 7 | 7 | 0 |
0001 001 | 7 | 6 | 0 |
0001 010 | 7 | 9 | 2 |
0001 011 | 7 | 5 | 0 |
0001 100 | 7 | 10 | 3 |
0001 101 | 7 | 8 | 2 |
0001 110 | 7 | 8 | 1 |
0001 111 | 7 | 4 | 0 |
0000 1000 | 8 | 12 | 3 |
0000 1001 | 8 | 11 | 2 |
0000 1010 | 8 | 10 | 1 |
0000 1010 | 8 | 10 | 1 |
0000 1011 | 8 | 9 | 0 |
0000 1100 | 8 | 11 | 3 |
0000 1101 | 8 | 10 | 2 |
0000 1110 | 8 | 9 | 1 |
0000 1111 | 8 | 8 | 0 |
0000 0100 0 | 9 | 12 | 0 |
0000 0100 1 | 9 | 13 | 2 |
0000 0101 0 | 9 | 12 | 1 |
0000 0101 1 | 9 | 11 | 0 |
0000 0110 0 | 9 | 13 | 3 |
0000 0110 1 | 9 | 12 | 2 |
0000 0111 0 | 9 | 11 | 1 |
0000 0111 1 | 9 | 10 | 0 |
0000 0010 00 | 10 | 15 | 1 |
0000 0010 01 | 10 | 14 | 0 |
0000 0010 10 | 10 | 14 | 3 |
0000 0010 11 | 10 | 14 | 2 |
0000 0011 00 | 10 | 14 | 1 |
0000 0011 01 | 10 | 13 | 0 |
0000 0011 1x | 9 | 13 | 1 |
0000 0001 00 | 10 | 16 | 1 |
0000 0001 01 | 10 | 15 | 0 |
0000 0001 10 | 10 | 15 | 3 |
0000 0001 11 | 10 | 15 | 2 |
0000 0000 10 | 10 | 16 | 3 |
0000 0000 11 | 10 | 16 | 2 |
特别是,在解码器中优化了运动补偿和4x4反变换量化后,CAVLC解码中的查表过程所占用的时间就变得不容忽视了。
发明内容
本发明所要解决的技术问题是,提供一种利用新的非零系数个数和拖尾系数个数解码表,快速完成CAVLC解码中非零系数个数和拖尾系数个数解码的方法。
本发明为解决上述技术问题所采用的技术方案是,一种解码非零系数个数和拖尾系数个数的方法,包括以下步骤:
a、根据预测的非零系数个数、预设读入比特数以及预设读入码流的码值,确定待查找的小解码表;
b、判断原始码字前缀部分连续0的位数以及原始码字后缀部分的码值查找所述小解码表;所述小解码表由原始码字前缀部分连续0的位数以及原始码字后缀部分的码值能唯一对应一个子表项;
c、解析子表项的码字,得到非零系数个数和拖尾系数个数。
进一步的,所述子表项中还包含有原始码字前缀部分的位数或后缀部分的位数。
本发明的有益效果是,解码不需要遍历编码表,只需要读取固定长度的二进制串,根据其数值,最多查询2次表,最少只需查询一次表,就能得到非零系数个数和拖尾系数个数的值。
具体实施方式
由表1.1、表1.2、表1.3发现,每个子表项的码字分由前缀和后缀两部分组成。前缀部分为:zerolen个(0≤zerolen≤14)连续的0,后面紧跟一个比特“1”;后缀部分为M比特(0<=M<=3)的二进制串。通过zerolen和后缀部分的码值就可以区分出表1.1、表1.2、表1.3中的每一个子表项。
本发明根据此结论对解码表进行简化重建:将原来的解码表,拆分成了几个小解码表(NC值、预设读入比特数X不同,小解码表组就不同)。当0<=NC<2时,X的取值范围为[13,16];当2<=NC<4时,X的取值范围为[11,14];当4<=NC<8时,X的取值范围为[7,10]。根据zerolen和后缀部分的码值能在小解码表中唯一确定一项子表项,该子表项中存储的码字就包含有非零系数个数Tc和拖尾系数个数Tls的信息。则,解码不需要遍历编码表,只需要读取固定长度的二进制串,根据其数值查表,就能得到非零系数个数Tc和拖尾系数个数T1s的值。
以下出现的小解码表TN1(N=1,2)的子表项值用于计算输入连续码流中第一个比特“1”之前连续0的个数zerolen;表TL2、表TL3和TL4(L=1,2,3)用于查找Tc和T1s,其表项值构成为:低两位存放拖尾系数个数T1s,从低三位开始的2、3或4位存放非零系数个数Tc(TL3存放的是Tc-1的值),高2位或高3位表示原始码字的后缀长度的长度或原始码字的前缀长度(TL2和TL3中子表项的高位对应存放原始码字的后缀长度;TL4中子表项的高位对应存放原始码字的前缀长度)。
实施例1
0<=NC<2,X为13时,小解码表组中各小解码表如下:
T11[64]={9,8,7,7,6,6,6,6,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3};
T12[6][4]={{
0x49,0x84,0x2f,0x2f,},{0x97,0x8e,0x53,0x53},{0x9b,0x92,0x8d,0x88},{0x9f,0x96,0x91,0x8c},{0xa3,0x9a,0x95,0x90},{0xa7,0x9e,0x99,0x94}};
T13[5][8]={{0xdc,0xe2,0xdd,0xd8,0xe7,0xde,0xd9,0xd4},{0xef,0xea,0xe5,0xe4,0xeb,0xe6,0xe1,0xe0},{0xf7,0xf2,0xed,0xec,0xf3,0xee,0xe9,0xe8},{0xff,0xfa,0xf9,0xf4,0xfb,0xf6,0xf5,0xf0},{0x0,0x0,0xb1,0xb1,0xfc,0xfe,0xfd,0xf8}};
T14[8]={0,58,37,37,16,16,16,16}。
表T11用于计算输入连续码流中第一个比特“1”之前连续0的个数zerolen;表T12、表T13和T14用于查找Tc和T1s,其表项值构成为:低两位存放拖尾系数个数T1s,从低三位开始的2或4位存放非零系数个数Tc(T13存放的是Tc-1的值),T 12和T1 3中子表项的高2位对应存放原始码字的后缀长度;T1 4中子表项的高2位对应存放原始码字的前缀长度。
0<=NC<2,X=13时的解码方法如下时,的解码方法如下:
value=ShowBits(13); 读入原始码字前13个的连续码流,并得到该连续码流
的值value;
if(value>=(1<<10))判断是否value≥1256;如是,进入第一段:如否,跳过
第一段;
{ 第一段:
value>>=10; 将value右移10位的值再赋值给value;
scode=T14[value]; 将value的值带入表T14,查找出的值赋值给scode;
T1s=scode&3; 取scode的低2位的值赋值给T1s;
Tc=(scode>>2)&3;将scode右移2位后取低2位的值赋值给Tc;
offset+=(scode>>4)&3;将scode右移4位后取低2位的值赋值给offset;
}
else if(value>=(1<<4))判断是否value≥16,如是,进入第二段:如否,跳过
第二段;
{ 第二段:
scode=(value>>4);将value右移4位的值赋值给scode;
zerolen=T11[scode];将scode的值带入表T11,查找出的值赋值给zerolen;
offset+=zerolen+1;将zerolen+1的值赋值给offset;
value=ShowBits(2);读取出第offset位开始的2比特,并将该2比特值赋值给value
;
zerolen-=3;将zerolen-3的值赋值给zerolen;
T1s=T12[zerolen][value]&3;将zerolen与value带入表T12,查找出的子表项低2位
的值赋值给T1s;
Tc=(T12[zerolen][value]>>2)&15;将子表项的值右移2位后低2位的值赋值给Tc
;
offset+=(T12[zerolen][value]>>6);将子表项的值右移6位后得到值赋值给
offset;
}
Flse value<16,进入第三段;
{ 第三段:
zerolen=T11[value]+4; 将value的值带入表T11,查找出的值加4后赋值给
zerolen;
offset+=zerolen+1; 将zerolen+1的值赋值给offset;
value=ShowBits(3); 取出第offset位开始的3比特,并将该3比特的值赋值给
value;
zerolen-=9; 将zerolen-9的值赋值给zerolen;
T1s=T13[zerolen][value]&3;将zerolen与value带入表T13,查找出的子表项低2
位的值赋值给T1s;
Tc=(T13[zerolen][value]>>2)&15;将子表项的值右移2位后低4位的值赋值给
Tc;
Tc++; 将Tc+1赋值给Tc;
offset+=(T13[zerolen][value]>>6);将子表项的值右移6位后得到值赋值给
offset
}
即根据读入原始码字前13个的连续码流的值value,进行判断后进入不同的处理段:第一段:当value≥1256,根据value>>10查表T14[value]得到Tc和T1s,以及原始码字前缀的长度。表T1实际是只有7项,在数组中多加了一个项0是,为了C语言操作的方便,对T14查表,直接用的value,而value取值是1~7,不能取到0,如果数组中只有7项,那么查表就只能用(value-1),这样就多了一步减法,所以就在把表T14的0号位置加了一个没有任何意义的0。
第二段:当value≥16,根据value查表T11[value>>4]的结果得到前缀中连续0的个数zerolen;将zerolen+1赋值给offset;读取出第offset位开始的2比特,即后缀码值(从原始码字第一个比特“1”后开始读取2比特的数据),将后缀码值赋值给value;根据zerolen与value查表T12[zerolen][value],得到Tc和T1s,以及原始码字后缀的长度。
第三段:,根据value的值查表T11[value]的结果加4得到前缀中连续0的个数zerolen;将zerolen+1赋值给offset;读取出第offset位开始的3比特,即后缀码值(从原始码字第一个比特“1”后开始读取3比特的数据),再查表T13得到Tc(最终Tc为查表T13得到的Tc+1后的值)和T1s,以及原始码字后缀的长度。
以原始码字0000 0000 0011 11为例,解码方法如下:
1、读入原始码字前13个的连续码流,即0000 0000 0011 1;value=7
2、判断是否value≥1256;否,跳过第一段;
3、判断是否value≥16,否,跳过第二段;
4、进入第三段:
4-1、zerolen=T11[7]+4,(表T11中有从063号位置,共64个子表项),查找T11[7](表T11中的7号位置)得到子表项6,再加上4,得到zerolen=10,就是当前码字前缀中连续0的个数;
4-2、读取出原始码字第11位(zerolen+1)开始的3比特,即111赋值给value(value=7),然后根据(zerolen-9)和value查表T13,T13[1][7]就能得到子表项0xe0(11 1000 00);
4-3、取11 1000 00低2位的值赋值给T1s(00),T1s=0;
4-4、取11 1000 00右移2位后低4位的值赋值给Tc(1000),Tc=8,再将8+1赋值给Tc,最终Tc=9;
4-5、取11 1000 00右移6位后得到值赋值给offset(11),offset=3表示原始码字后缀长度为3。
原始码字0000 0000 0011 11,一共14位,如采用现有技术的方法解码需要做28次的查表操作(14次查幅值表,14次查长度表),需要进行28次的判断(判断幅值是否和表项中的相等,判断长度是否和表项中的相等)。而通过本发明所述方法,不需要遍历编码表,只需要读取固定长度的二进制串,根据其数值,查询2次表就能得到非零系数个数Tc和拖尾系数个数T1s的值。
再以原始码字01xx xxxx xxxx xxxx为例,解码方法如下:
1、读入原始码字前13个的连续码流,即0 1xxx xxxx xxxx=value
2、判断是否value≥1256;是,进入第一段;
2-1、根据code(code=value>>10=0000 0000 0001x=2)查表T14[2],得到子表项37(100101);
2-2、取100101低2位的值赋值给T1s(01),T1s=1;
2-2、取100101右移2位后低2位的值赋值给Tc(01),T1s=1;
2-2、取100101右移4位后低2位的值赋值给offset(10),offset=2表示原始码字前缀长度为2。
当value≥1256,只需查询1次表就能得到非零系数个数Tc和拖尾系数个数T1s的值
实施例2
以2<=NC<4,X=11为例,小解码表组的各表如下:
T21[32]={6,6,5,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2};
T22[5][4]={{0x0,0x0,0x97,0x89},{0x9b,0x8e,0x8d,0x84},{0xa3,0x96,0x95,0x8c},{0x94,0x9a,0x99,0x90},{0xa7,0x9e,0x9d,0xd8}};
T23[5][8]={
{0xeb,0xe2,0xe1,0xdc,0xe7,0xde,0xdd,0xd8},{0xe8,0xea,0xe9,0xe4,0xef,0xe6,0xe5,0xe0},{0xf7,0xf2,0xf1,0xf0,0xf3,0xee,0xed,0xec},{0xf9,0xf8,0xfa,0xed,0xb6,0xb6,0xb4,0xb4},{0x0,0x0,0xb3,0xb3,0xff,0xfe,0xfd,0xfc}};
T24[16]={0,0,0,0,0x93,0x8f,0x6a,0x6a,0x45,0x45,0x45,0x45,0x40,0x40,0x40,0x40};
解码方法如下:
即根据读入原始码字前11个的连续码流的值value,进行判断后进入不同的处理段。
第一段:当value≥29,根据value>>7;查表T24得到Tc和T1s,以及原始码字前缀的长度。
第二段:当value≥24,根据value的值查表T11[value>>4]的结果得到前缀中连续0的个数zerolen;将zerolen+1赋值给offset;读取出第offset位开始的2比特(从原始码字第一个比特“1”后开始读取2比特的数据),即后缀码值,将后缀码值赋值给value;根据zerolen与value查表T22[zerolen][value],得到Tc和T1s,以及原始码字后缀的长度;再判断value>>7是否等于1,如是,将Tc+1后再赋值给Tc;
第三段:根据value的值查表T21[value]的结果加4得到前缀中连续0的个数zerolen;将zerolen+1赋值给offset;读取出第offset位开始的3比特(从原始码字第一个比特“1”后开始读取3比特的数据),即后缀码值,将后缀码值赋值给value;根据value求得前缀中连续0的个数zerolen与后缀码值,再查表T23得到Tc(最终Tc为查表T23得到的Tc+1后的值)和T1s,以及原始码字后缀的长度。
代码如下:
value=ShowBits(11);
if(value>=(1<<9));
{
value>>=7;
scode=T24[value];
T1s=scode&3;
Tc=(scode>>2)&7;
offset+=(scode>>5)&7;
}
else if(value>=(1<<4))
{
zerolen=T21[value>>4];
offset+=zerolen+1;
scode=ShowBits(2);
zerolen-=2;
scode=T22[zerolen][scode];
Tc=(scode>>2)&15;
T1s=scode&3;
offset+=2;
if((value>>7)==1)
Tc++;
}
else
{
zerolen=T21[value]+4;
offset+=zerolen+1;
value=ShowBits(3);
zerolen-=7;
scode=T23[zerolen][value];
Tc=(scode>>2)&15;
T1s=scode&3;
Tc++;
offset+=(scode>>6)&15;
}
实施例3
以4<=NC<8,X=7为例,小解码表组的各表如下:
T31[16]={4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0};
T32[4][8]={{0x1f,0x1b,0x17,0x13,0xf,0xa,0x5,0},{0x15,0x16,0x11,0x12,0xd,0x23,0xe,0x9},{0xc,0x1e,0x1d,0x8,0x27,0x1a,0x19,0x4},{0x1c,0x18,0x26,0x14,0x2b,0x22,0x21,0x10}};
T33[4][8]={{0xef,0xea,0xe5,0xe0,0xeb,0xe6,0xe1,0xdc},{0xec,0xf2,0xed,0xe8,0xf3,0xee,0xe9,0xe4},{0xf9,0xf4,0xf7,0xf6,0xf5,0xf0,0xb 1,0xb 1},{0,0,0xff,0xfe,0xfd,0xf8,0xfb,0xfa}};
解码方法如下:
即根据读入原始码字前7个的连续码流的值value,进行判断后进入不同的处理段。
第一段:当value大于等于23,根据value>>3的值查询表T31,得到连续0的个数zerolen;读取后缀码值value;根据zerolen和value的值查询表T32,得到Tc和T1s的值;
第二段:当value小于23,根据value>的值查询表T31,结果加上3为连续0的个数zerolen;这里读取数据的起始位置需要分情况计算:如果value非零,从第一个1后开始读取3比特数据,放入value中;如果value为零,从最后一个0后开始读取3比特数据,放入value中,再根据zerolen和value的值查询表T33得到Tc(最终Tc为查表T33得到的Tc+1后的值)和T1s。
代码如下:
value=ShowBits7);
if(value>=8)
{
zerolen=T31[value>>3];
offset+=zerolen+1;
value=ShowBits(3);
scode=T32[zerolen][value];
numcoeff=(scode>>2)&15;
numtrailingones=scode&3;
offset+=3;
}
else
{
zerolen=T31[value]+3;
offset+=zerolen+(value !=0);
value=ShowBits(3);
zerolen-=4;
scode=T33[zerolen][value];
numcoeff=(scode>>2)&15;
numtrailingones=scode&3;
numcoeff++;
offset+=(scode>>6)&3;
}
由于NC值、预设读入比特数X不同,对应的小解码表组就不同,在此不能穷举X不同时的每个小解码表,但本领域的技术人员完成可以通过本发明的描述完成所有解码表的重建,并能在实施例的基础上做出等效变换。本方法将大概率的处理分支提前,解码不需要遍历编码表,只需要读取固定长度的二进制串,根据其数值,最多查询2次表,最少只需查询一次表,就能得到非零系数个数Tc和拖尾系数个数T1s的值。经测试,改进后的解码方法,在解码速度上比原始的方法速度提高了8倍以上。
Claims (3)
1.一种解码非零系数个数和拖尾系数个数的方法,其特征在于,包括以下步骤:
a、根据预测的非零系数个数、预设读入比特数以及预设读入码流的码值,确定待查找的小解码表,所述小解码表为根据预测的非零系数个数和预设读入比特数X在原来的CALVC解码表上拆分重建形成;
b、判断原始码字前缀部分连续0的位数以及原始码字后缀部分的码值,查找所述小解码表;所述小解码表由原始码字前缀部分连续0的位数以及原始码字后缀部分的码值能唯一对应一个子表项;
c、解析子表项的码字,得到非零系数个数和拖尾系数个数。
2.如权利要求1所述一种解码非零系数个数和拖尾系数个数的方法,所述子表项中还包含有原始码字前缀部分的位数。
3.如权利要求1所述一种解码非零系数个数和拖尾系数个数的方法,所述子表项中还包含有原始码字后缀部分的位数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200810302370 CN101309423B (zh) | 2008-06-26 | 2008-06-26 | 一种解码非零系数个数和拖尾系数个数的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200810302370 CN101309423B (zh) | 2008-06-26 | 2008-06-26 | 一种解码非零系数个数和拖尾系数个数的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101309423A CN101309423A (zh) | 2008-11-19 |
CN101309423B true CN101309423B (zh) | 2011-07-20 |
Family
ID=40125595
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200810302370 Expired - Fee Related CN101309423B (zh) | 2008-06-26 | 2008-06-26 | 一种解码非零系数个数和拖尾系数个数的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101309423B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5337235B2 (ja) * | 2009-03-10 | 2013-11-06 | 日本電信電話株式会社 | 符号化方法、復号方法、符号化装置、復号装置、プログラム及び記録媒体 |
CN101873496B (zh) * | 2010-05-24 | 2012-02-29 | 杭州海康威视软件有限公司 | 一种h.264的基于上下文自适应变长解码方法及装置 |
CN102377996B (zh) * | 2010-08-05 | 2014-04-30 | 华为技术有限公司 | 上下文自适应可变长编码方法及装置 |
CN102263960B (zh) * | 2011-08-15 | 2013-11-27 | 复旦大学 | 一种快速解码cavlc非零系数幅值的方法 |
CN103327314B (zh) * | 2012-03-22 | 2016-06-29 | 上海算芯微电子有限公司 | 基于通用格式码表的可变长解码装置和方法 |
CN103384329A (zh) * | 2013-05-07 | 2013-11-06 | 广东工业大学 | 一种基于***表查找cavlc解码方法 |
CN114928747B (zh) * | 2022-07-20 | 2022-12-16 | 阿里巴巴(中国)有限公司 | 基于av1熵编码的上下文概率处理电路、方法及相关装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1280421A (zh) * | 1993-12-16 | 2001-01-17 | 三星电子株式会社 | 图象数据的自适应可变长度译码方法 |
CN1913638A (zh) * | 2005-08-09 | 2007-02-14 | C&S技术有限公司 | 用于快速上下文自适应可变长编码的h.264解码方法 |
-
2008
- 2008-06-26 CN CN 200810302370 patent/CN101309423B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1280421A (zh) * | 1993-12-16 | 2001-01-17 | 三星电子株式会社 | 图象数据的自适应可变长度译码方法 |
CN1913638A (zh) * | 2005-08-09 | 2007-02-14 | C&S技术有限公司 | 用于快速上下文自适应可变长编码的h.264解码方法 |
Non-Patent Citations (2)
Title |
---|
JP特开2008-92456A 2008.04.17 |
张丁,张明,张瑾,郑伟.一种新的自适应变长码编码算法.浙江大学学报(工学版).2006,40(5),783-786、795. * |
Also Published As
Publication number | Publication date |
---|---|
CN101309423A (zh) | 2008-11-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101309423B (zh) | 一种解码非零系数个数和拖尾系数个数的方法 | |
CN1248509C (zh) | 运动信息编码和解码方法 | |
AU2019275583B2 (en) | Sample array coding for low-delay | |
CN106101720B (zh) | 视频解码方法 | |
US8363721B2 (en) | Reference picture prediction for video coding | |
JP5756921B2 (ja) | 画像復号装置、画像復号方法、画像符号化装置、画像符号化方法、プログラムおよび集積回路 | |
KR101312213B1 (ko) | 화상 복호 장치 및 화상 복호 방법 | |
CN102172022B (zh) | 使用内插滤波器及偏移的数字视频译码 | |
RU2577471C1 (ru) | Способ, устройство и система для кодирования и декодирования карты значимости для остаточных коэффициентов единицы преобразования | |
CN110024393A (zh) | 用于视频译码的低复杂度符号预测 | |
CN103959775A (zh) | 帧内模式视频译码 | |
CN103907349A (zh) | 算术解码装置、图像解码装置、算术编码装置、图像编码装置以及算术解码方法 | |
Jiang et al. | Fast transcoding from H. 264 to HEVC based on region feature analysis | |
CN106134194B (zh) | 用于低复杂度编码及后台检测的***及方法 | |
CN100463524C (zh) | 一种用于运动估计的vlsi装置及运动估计的方法 | |
CN105472406A (zh) | 演示文稿显示方法和*** | |
CN101854538B (zh) | 运动图像处理方法及运动图像处理器 | |
Hong et al. | A Fast Gradient Iterative Affine Motion Estimation Algorithm Based on Edge Detection for Versatile Video Coding | |
Porto et al. | Iterative random search: a new local minima resistant algorithm for motion estimation in high-definition videos | |
Tran et al. | A Survey of High-Efficient CABAC Hardware Implementations in HEVC Standard | |
CN103188489B (zh) | Cbp解析方法及其装置 | |
Choudhury et al. | Design and implementation of mixed parallel and dataflow architecture for intra-prediction hardware in hevc decoder | |
Song | A hybrid spatial prediction algorithm for lossless compression of CT and MRI medical images | |
Kommerla et al. | Real-Time Applications of Video Compression in the Field of Medical Environments | |
Lin et al. | CABAC Encoder |
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 |
Granted publication date: 20110720 Termination date: 20170626 |
|
CF01 | Termination of patent right due to non-payment of annual fee |