本发明的实施方案详述
本发明包括上下文自适应VLC变换系数编码器、互补的解码器、配备有这些编码器和/或解码器的设备、由这些设备组成的系统、以及这些部件、设备和系统的操作方法,以及相关主题。
在下面的描述中,本发明的各个方面将被描述。然而,对于本领域的技术人员而言,显然本发明可以只使用本发明的一些或全部方面被实施。为了解释,提出了特定的数字、材料和配置以便提供对于本发明的全面的理解。然而,对于本领域的技术人员而言,显然本发明可以不使用这些特定的细节而被实施。另外,熟知的特征被省略或简化以便使本发明更清楚。
术语
与本领域的技术人员传递他们工作的本质给本领域的其他技术人员通常采用的方式一致,部分描述将以视频编码和解码术语给出,如图片、宏块、块、采样、亮度、色度、变换系数、之字形扫描次序、数量、符号、电平、游程长度等等。这些术语对于本领域的技术人员而言很好理解。特别地,在视频设备中,这些量采取了电、磁、或光信号的形式,以便能够被存储、转换、组合、以及另外通过处理器及其子系统的电和/或光器件被操作。
在各种视频编码/解码标准中,编码是根据一定的语法规则组织的,因此它们也被称作“语法元素”。
章节标题、描述的次序以及实施例
章节标题只是用来提高可读性,并且它们并非要被解释来限制或缩小本发明。
各种操作将以最有助于理解本发明的方式依次被描述为多个不连续的步骤;然而,描述的次序不应被解释为意味着这些操作是必定遵守的次序。特别地,这些操作不必按照所介绍的次序执行。
短语“在一个实施例中”被重复使用。该短语一般不指同一个实施例,然而,也可能是同一个实施例。术语“包含”、“具有”和“包括”是同义的,除非上下文指示另外的含义。
概述
图1示出了根据一个实施例的、本发明的用于编码图片宏块的(亮度/色度)块变换系数的上下文自适应VLC编码器的全图。如图所示,对于该实施例,上下文自适应VLC编码器100包括编码器块102-106,它们平行地被耦合到编码器100的输入108用来接收视频图片宏块的(亮度/色度)块的量化的变换系数。相应地,编码器块102-106把所接收的(亮度/色度)块的变换系数编码为VLC码字,并且将该VLC码字作为比特流在输出端110处输出。VLC码字也称作变换系数的“编码”(或“语法元素”)。
更具体地,编码器块102被配备有VLC码字表122和编码逻辑124,来自适应地选择VLC码字表122中的一个来以组合的方式编码宏块的各个块中系数的数量和拖尾的1值系数的数量(Num-Trail)。即,宏块的各个块中系数的数量和拖尾的1值系数的数量有利地由单个的VLC码字编码。编码器块102是Num-Trail编码器块102的简称。
“拖尾的1值系数”,如该术语所示,指的是在典型地根据之字形扫描次序安排的块变换系数“后面(back)”的“1”值系数。之字形扫描次序是变换系数从(大约)最低的空间频率到最高空间频率的顺序的排序。“前面(front)”和“后面”的方位可从“次序”的角度看出。例如,如果采样块的变换系数为5001201101001111,最后的四个“1”变换系数(从后面数)被称作拖尾的1值系数,或T1。
在一个实施例中,拖尾的1值系数的长度被剪短为3(从该串变换系数的“后面”计数)。即,对于该实施例,为了编码,T1系数的最大长度被限制到3。“被排除的”拖尾的1值系数被作为在该拖尾的1值系数之前的“非零系数”“正常地”编码。
在替代的实施例中,本发明可以用更大或更小的最大长度的T1系数来实现。
编码器块104配备有VLC码字表132和编码逻辑134来自适应地选择VLC码字表132中的一个,以编码位于该采样块的拖尾的1值系数之前的(包括“被排除的”或“剪短的”拖尾的1值系数,如果有的话)每个非零系数的电平测度(或简称电平)。换句话说,与已有技术不同,在本发明下,系数的数量和非零系数的电平有利地被单独编码。编码器块104是电平编码器块104的简称。
在一个实施例中,电平编码器块104也被配备来编码T1系数的符号(SignTrail)。在替代的实施例中,该T1系数的符号的编码可以例如改为由Num-Trail编码器102编码。
编码器块106被配备有VLC码字表142和编码逻辑144以编码被插入块的非零系数之间的零系数的总数,以及它们各自的游程长度(TotalZero与RunLength)。在较早的实例中,有总共6个零被插入非零之间,并且它们各自的游程长度是2、1、1、2。编码器块106是TotalZero-RunLength编码器块106的简称。
在一个实施例中,每个宏块包含16(4×4)个块的亮度采样,8个相应的4×4色度AC块,以及2个2×2色度DC块。相应的输出格式如下:
亮度
{〔NumTrail Sign-Trail Levels(16)TotalZeros RunLengths〕*4}*4
色度DC
〔NumTrail Sign-Trail Levels(4)TotalZeros RunLengths〕*2
色度AC
{〔NumTrail Sign-Trail Level s(15)TotalZeros RunLengths〕*4}*2
对于熟知的内(intra)16×16的宏块类型,有1个内16×16DC采样块和16个内4×4AC采样块,相应的输出格式如下:
内16×16DC
NumTrail Sign-Trail Levels(16)TotalZeros RunLengths
内16×16AC
〔NumTrail Sign-Trail Levels(15)TotalZeros RunLengths〕*16(4×4块)
除了新的VLC码字表122、132和142,以及编码逻辑124、134和144自适应地选择提供给编码器块102-106的适当的VLC码字表之外,编码器100的其它方面,包括编码器块102-106的其它方面是已知的,并且将不作进一步的描述。
在各个实施例中,包括编码块102-106的编码器100可以以硬件的方式来实现,例如通过专用集成电路(ASIC)实现,或以软件的方式来实现,例如通过诸如C的编程语言实现,或者以两者的结合的方式实现。
数量和拖尾的1值系数编码器块
在各个实施例中,Num-Trail编码器块102包括三个(3)用于编码亮度采样块的变换系数的VLC码字表,以及一个(1)用于编码色度采样块的变换系数的VLC码字表。
更具体地,在一个实施例中,用于编码亮度采样块的变换系数的所述三个码字表为:
表1-亮度Num-VLC0
TlsNumCoeff |
0 |
1 |
2 |
3 |
0 |
11 |
- |
- |
- |
1 |
000011 |
011 |
- |
- |
2 |
000010 |
00011 |
010 |
- |
3 |
001001 |
001000 |
001010 |
101 |
4 |
1000001 |
001011 |
100101 |
0011 |
5 |
00000111 |
1000000 |
1000010 |
00010 |
6 |
00000110 |
1000011 |
1001101 |
10001 |
7 |
000001001 |
10011101 |
10011100 |
100100 |
8 |
000001000 |
000001011 |
000000101 |
1001100 |
9 |
0000000111 |
000001010 |
000000100 |
10011111 |
10 |
0000000110 |
0000001101 |
0000001100 |
10011110 |
11 |
00000000101 |
00000000111 |
00000001001 |
000000111 |
12 |
00000000100 |
00000090110 |
00000001000 |
0000000101 |
13 |
000000000011 |
000000000010 |
000000000100 |
000000000111 |
14 |
0000000000011 |
000000000101 |
0000000000010 |
0000000001101 |
15 |
00000000000001 |
00000000000000 |
000000000000111 |
0000000001100 |
16 |
000000000000101 |
000000000000100 |
0000000000001101 |
0000000000001100 |
表2-亮度Num-VLC1
TlsNumCoeff |
0 |
1 |
2 |
3 |
0 |
0011 |
- |
- |
- |
TlsNumCoeff |
0 |
1 |
2 |
3 |
1 |
0000011 |
0010 |
- |
- |
2 |
0000010 |
101110 |
1101 |
- |
3 |
000011 |
101001 |
010110 |
1100 |
4 |
000010 |
101000 |
010001 |
1111 |
5 |
101101 |
101011 |
010000 |
1110 |
6 |
101100 |
101010 |
010011 |
1001 |
7 |
101111 |
010101 |
010010 |
1000 |
8 |
0110101 |
010100 |
011101 |
00011 |
9 |
0110100 |
010111 |
011100 |
00010 |
10 |
0110111 |
0110110 |
0110000 |
011111 |
11 |
01111001 |
0110001 |
01111010 |
0110011 |
12 |
01111000 |
01111011 |
01100101 |
01100100 |
13 |
000000011 |
000000010 |
000000100 |
000000111 |
14 |
0000000011 |
000000101 |
0000001101 |
0000001100 |
15 |
0000000010 |
00000000011 |
00000000010 |
00000000001 |
16 |
0000000000001 |
000000000001 |
00000000000001 |
00000000000000 |
表3-亮度Num-VLC0
用于编码色度采样块的变换系数的单个码字表为:
TlsNumCoeff |
0 |
1 |
2 |
3 |
1 |
0001 |
1 |
- |
- |
2 |
00001 |
00111 |
01 |
- |
3 |
00110 |
000001 |
001010 |
00100 |
4 |
0000001 |
00000000 |
00000001 |
001011 |
表4-色度Num-VLC
在替代的实施例中,可以使用不同数量的VLC码字表和不同的VLC码字,包括VLC码字被存储的方式。更具体地,在一些实施例中,VLC码字本身可以被存储在保存格式为{p,L}的存储空间中,其中p代表码字的被明确地列举的部分,而L代表该特定码字的长度。当VLC码字被使用的时候,VLC码字的未列举的部分是从前面填充的零,例如,“01008”变成00000100。
特别地,在一个替代的实施例中,用于编码亮度采样块的变换系数的VLC码字表为:
TlsNumCoeff |
0 |
1 |
2 |
3 |
0 |
11 |
- |
- |
- |
1 |
01016 |
012 |
- |
- |
2 |
01118 |
01006 |
00013 |
- |
3 |
01119 |
01108 |
01017 |
00115 |
4 |
011110 |
01109 |
01018 |
00116 |
5 |
011111 |
011010 |
01019 |
01007 |
6 |
111113 |
011011 |
010110 |
01008 |
7 |
101113 |
111013 |
010111 |
01009 |
8 |
100013 |
101013 |
110113 |
010010 |
9 |
111114 |
111014 |
100113 |
010011 |
TlsNumCoeff |
0 |
1 |
2 |
3 |
10 |
101114 |
101014 |
110114 |
110013 |
11 |
111115 |
111015 |
100114 |
110014 |
12 |
101115 |
101015 |
110115 |
100014 |
13 |
111116 |
000115 |
100115 |
110015 |
14 |
101116 |
111016 |
110116 |
100015 |
15 |
011116 |
101016 |
100116 |
110016 |
16 |
010016 |
011016 |
010116 |
100016 |
表5-亮度Num-VLC0’
TlsNumCoeff |
0 |
1 |
2 |
3 |
0 |
112 |
- |
- |
- |
1 |
10116 |
102 |
- |
- |
2 |
01116 |
01115 |
0113 |
- |
3 |
01117 |
10106 |
10016 |
01014 |
4 |
01118 |
01106 |
01016 |
01004 |
5 |
01008 |
01107 |
01017 |
01105 |
6 |
01119 |
01108 |
01018 |
10006 |
7 |
111111 |
01109 |
01019 |
01006 |
8 |
101111 |
111011 |
110111 |
01007 |
9 |
111112 |
101011 |
100111 |
01009 |
10 |
101112 |
111012 |
110112 |
110011 |
TlsNumCoeff |
0 |
1 |
2 |
3 |
11 |
100012 |
101012 |
100112 |
100011 |
12 |
111113 |
111013 |
110113 |
110012 |
13 |
101113 |
101013 |
100113 |
110013 |
14 |
011113 |
101114 |
011013 |
100013 |
15 |
100114 |
100014 |
101014 |
000113 |
16 |
011114 |
011014 |
010114 |
010014 |
表6-亮度Num-VLC1’
TlsNumCoeff |
0 |
1 |
2 |
3 |
0 |
11114 |
- |
- |
- |
1 |
11116 |
11104 |
- |
- |
2 |
10116 |
11115 |
11014 |
- |
3 |
10006 |
11005 |
11105 |
11004 |
4 |
11117 |
10105 |
10115 |
10114 |
5 |
10117 |
10005 |
10015 |
10104 |
6 |
10017 |
11106 |
11016 |
10014 |
7 |
10007 |
10106 |
10016 |
10004 |
8 |
11118 |
11107 |
11017 |
11015 |
9 |
10118 |
11108 |
10107 |
11006 |
10 |
11119 |
10108 |
11018 |
11007 |
11 |
10119 |
11109 |
10018 |
11008 |
12 |
10009 |
10109 |
11019 |
10008 |
TlsNumCoeff |
0 |
1 |
2 |
3 |
13 |
110110 |
01119 |
10019 |
11009 |
14 |
100110 |
110010 |
101110 |
101010 |
15 |
010110 |
100010 |
011110 |
011010 |
16 |
000110 |
010010 |
001110 |
001010 |
表7-亮度Num-VLC2’
用于编码色度采样块的变换系数的码字表为:
TlsNumCoeff |
0 |
1 |
2 |
3 |
0 |
012 |
- |
- |
- |
1 |
1116 |
11 |
- |
- |
2 |
1006 |
1106 |
0013 |
- |
3 |
0116 |
0117 |
0107 |
1016 |
4 |
0106 |
0118 |
0108 |
0007 |
表8-色度Num-VLC’
图2示出了根据一个实施例的、图1的编码器块的相关方面的操作流程,该操作流程用来以组合的方式编码图片宏块的(亮度/色度)块的一串变换系数的系数的数量和T1系数的数量。如图所示,对于该实施例,一接收到图片宏块的(亮度/色度)块的变换系数,Num-Trail编码器块102的编码逻辑124就首先确定该采样块是亮度还是色度采样块,块201。在各个实施例中,指示当前的变换系数是亮度还是色度采样块的系数的信息与该系数一起被提供,并且编码逻辑124基于提供的伴随信息确定该采样块类型。
对于3个亮度与1个色度VLC码字表实施例,一确定该采样块是色度采样块,Num-Trail编码器块102的编码逻辑124就继续选择色度VLC码字表来编码变换系数,块204。
然而,如果当前采样块是亮度采样块,则Num-Trail编码器块102的编码逻辑124首先确定一个上下文度量,用于帮助上下文自适应选择所提供的多个亮度VLC码字表中的一个。在各个实施例中,Num-Trail编码器块102的编码逻辑124计算在一个或多个选择的邻近采样块中变换系数的平均数量作为该上下文度量(Avg)。更具体地,在一个实施例中(其中宏块的采样块以常规的之字形的方式被提供),编码逻辑124计算当前采样块上面的采样块和左面的采样块的Avg作为上下文度量。
在其中没有上面的采样块的退化(degenerate)的情况中,Avg被设置为当前采样块左面的采样块中变换系数的数量。以类似的方式,在其中没有当前的采样块左面的采样块的退化的情况中,Avg被设置为之上采样块中的变换系数的数量。在其中既没有当前采样块之上的采样块也没有左面的采样块的退化的情况中,Avg被设置为零。
在一个实施例中,Num-Trail编码器块102的编码逻辑124选择VLC码字表如下:
如果(0<=Avg<2),则选择码字表Num-VLC0/Num-VLC0’;
如果(2<=Avg<4),则选择码字表Num-VLC1/Num-VLC1’;
如果(4<=Avg<8),则选择码字表Num-VLC2/Num-VLC2’;并且
如果(8<=Avg),则生成一个6比特固定长度码字(FLC)xxxxyy,其中xxxx表示系数的数量,而yy表示T1。
在一个实施例中,当Avg=>8,并且用于当前采样块的系数的数量为0时,特定的码字000011被使用。
继续参照图2,其后,即,一选择了VLC码字表(或FLC,在亮度采样块的情况中),编码逻辑124就继续确定用于当前采样块的系数的数量和T1,块206-208。然后,逻辑124使用选择的VLC码字表(或FLC,在亮度采样块的情况中)来相应编码当前采样块的系数的数量和T1。
电平编码器块
在各个实施例中,电平编码器块103包括多个VLC码字表,用于编码亮度以及色度采样块的变换系数的电平。
更具体地,在一个实施例中,多个VLC码字表从五(5)个构建的码字表中“导出”,并且该构建的码字表为:
1
01
001
00000000000001
000000000000001xxxx
0000000000000001xxxxxxxxxxxx
表9-Lev-VLC0
1x
01x
001x
00000000000001x
000000000000001xxxx
0000000000000001xxxxxxxxxxxx
表10-Lev-VLC1
1xx
01xx
001xx
00000000000001xx
000000000000001xxxx
0000000000000001xxxxxxxxxxxx
表11-Lev-VLC2
1xxx
01xxx
001xxx
00000000000001xxx
000000000000001xxxx
0000000000000001xxxxxxxxxxxx
表12-Lev-VLC3
1xxxx
01xxxx
001xxxx
000000000000001xxxx
0000000000000001xxxxxxxxxxxx
表13-Lev-VLC4
在每个VLC码字表中的码字根据前导的零的数量而增加,并且xxx串代表可能的组合的次序,例如,对于表示为01xxxx的码字,码字为010000,010001,010010,...,011111。
电平根据上升的码号(code number)对而被指配。电平的正值接收码号对的较小的码号且电平的负值接收较大的码号。
在每个表中最后的两个条目可以被视为转义码(escape code)。具有四个“x”的第一转义码被用于编码在最后的规则编码电平上面的8个电平。下一个具有12个“x”的转义码被用于编码所有的其余电平。
一般地,将被编码的电平取值±1,±2等等(Level)。然而,对于将被编码的第一系数(T1之后,从一串变换系数的后面开始处理),如果T1<3或Number_of_coefficients=T1,则将被编码的电平可以取值±2,±3等等(Level’)。这样,如果Lev-VLC0或Lev-VLC1被使用来编码第一系数(在T1之后,从后面开始处理),电平可以在±2处开始。
为了说明,考虑下面的示例“导出的”VLC码字表,其中列出了用于每个Lev-VLC表的码字的选择。
图3示出了根据一个实施例的、图1的编码器块的相关方面的操作流程,该操作流程用于编码图片宏块的(亮度/色度)块的变换系数的电平测度。如图所示,对于该实施例,一接收到(亮度/色度)块的变换系数,电平编码器块104的编码逻辑134就首先编码T1的符号,块302。对于该实施例,用1个比特来编码每个符号。
此外,电平编码器块104的编码逻辑134开始对T1后(从后面开始处理)的第一非零系数进行电平编码,块304。对于该实施例,电平编码器块104的编码逻辑134计算上下文度量来帮助自适应选择一个适当的电平VLC码字表以便执行该编码,块306。在各个实施例中,上下文度量是当前宏块的量化参数值,并且该值也与该块中的系数的数量以及该块的变换系数的电平一起被提供。
在一个实施例中,电平编码器块104选择电平VLC码字表如下:
如果宏块间具有任意量化参数,或宏块内具有量化参数值>=9,
则对于第一系数,选择Lev-VLC0,
对于下一个系数,选择Lev-VLC1,并且
然后,如果电平的绝对值>3,则选择下一个“较高
的”Lev-VLCx码字表,直到2个码字表“较
高”;
如果宏块内具有量化参数值<9,
如果(系数的数量>10)
则对于第一系数,选择Lev-VLC1,
对于下一个系数,选择Lev-VLC2,
否则
对于第一系数,选择Lev-VLC0,
对于下一个系数,选择Lev-VLC1,
然后,如果电平的绝对值>3并VLC码字表为
Lev-VLC1,则选择Lev-VLC2,
如果电平的绝对值>5并且VLC码字表
>=Lev-VLC2,则选择下一个“较高的”
Lev-VLCx码字表,直到4个码字表“较
高”。
继续参照图3,一选择适合的VLC码字表,编码逻辑134就编码将被编码的当前非零变换系数的电平,块310。
接下来,编码逻辑134确定是否在T1系数之前的所有非零系数已经被电平编码,块312。如果没有,编码逻辑134继续如前所述的在块304中的操作。如果在T1系数之前的所有非零系数已经被电平编码,编码逻辑134就终止对于当前采样块的电平编码过程。
零总数和游程长度编码器块
在各个实施例中,TotalZero-RunLength(零总数和游程长度)编码器块106包括多个VLC码字表用于编码被插入非零系数之间的零系数的数量和它们各自的游程长度。
更具体地,在一个实施例中,TotalZero-RunLength编码器块106包括两个VLC码字表用于编码“零总数”,一个用于亮度采样块的变换系数,而另一个用于色度采样块的变换系数,以及包括一个VLC码字表用于编码每种类型的采样块的“游程长度”。该VLC码字表是:
NumCoeffTotZeros |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
|
0 |
1 |
111 |
0010 |
111101 |
01000 |
101100 |
111000 |
|
1 |
011 |
101 |
1101 |
1110 |
01010 |
101101 |
111001 |
|
2 |
010 |
011 |
000 |
0110 |
01011 |
1010 |
11101 |
|
3 |
0011 |
001 |
010 |
1010 |
1110 |
001 |
1001 |
|
4 |
0010 |
000 |
1011 |
000 |
011 |
010 |
1111 |
|
5 |
00011 |
1000 |
1111 |
100 |
100 |
000 |
00 |
|
6 |
00010 |
0101 |
011 |
110 |
1111 |
110 |
01 |
|
7 |
000011 |
1001 |
100 |
1011 |
110 |
111 |
101 |
|
8 |
000010 |
1100 |
0011 |
010 |
101 |
100 |
110 |
|
9 |
0000011 |
01000 |
1110 |
001 |
001 |
011 |
100 |
|
10 |
0000010 |
11011 |
1010 |
0111 |
000 |
10111 |
- |
|
11 |
00000001 |
11010 |
11000 |
1111 |
01001 |
- |
- |
|
12 |
00000000 |
010010 |
110011 |
111100 |
- |
- |
- |
|
13 |
00000011 |
0100111 |
110010 |
- |
- |
- |
- |
|
14 |
000000101 |
0100110 |
- |
- |
- |
- |
- |
|
15 |
000000100 |
- |
- |
- |
- |
- |
- |
|
NumCoeffTotZeros |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
|
NumCoeffTotZeros |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
0 |
101000 |
111000 |
10000 |
11000 |
1000 |
100 |
00 |
0 |
1 |
101001 |
111001 |
10001 |
11001 |
1001 |
101 |
01 |
1 |
2 |
10101 |
11101 |
1001 |
1101 |
101 |
11 |
1 |
- |
3 |
1011 |
1111 |
101 |
111 |
0 |
0 |
- |
- |
4 |
110 |
00 |
01 |
0 |
11 |
- |
- |
- |
5 |
00 |
01 |
11 |
10 |
- |
- |
- |
- |
6 |
111 |
10 |
00 |
- |
- |
- |
- |
- |
7 |
01 |
110 |
- |
- |
- |
- |
- |
- |
8 |
100 |
- |
- |
- |
- |
- |
- |
- |
9 |
- |
- |
- |
- |
- |
- |
- |
- |
10 |
- |
- |
- |
- |
- |
- |
- |
- |
11 |
- |
- |
- |
- |
- |
- |
- |
- |
12 |
- |
- |
- |
- |
- |
- |
- |
- |
13 |
- |
- |
- |
- |
- |
- |
- |
- |
14 |
- |
- |
- |
- |
- |
- |
- |
- |
15 |
- |
- |
- |
- |
- |
- |
- |
- |
表14-亮度零总数VLC码字表
NumCoeffTotZeros |
1 |
2 |
3 |
0 |
1 |
1 |
1 |
NumCoeffTotZeros |
1 |
2 |
3 |
1 |
01 |
01 |
0 |
2 |
001 |
00 |
- |
3 |
000 |
- |
- |
表15-色度零总数VLC码字表
ZerosLeft游程长度 |
1 |
2 |
3 |
4 |
5 |
6 |
>6 |
0 |
1 |
1 |
01 |
01 |
01 |
01 |
000 |
1 |
0 |
01 |
00 |
00 |
00 |
00 |
010 |
2 |
- |
00 |
11 |
11 |
11 |
101 |
101 |
3 |
- |
- |
10 |
101 |
101 |
100 |
100 |
4 |
- |
- |
- |
100 |
1001 |
111 |
111 |
5 |
- |
- |
- |
- |
1000 |
1101 |
110 |
6 |
- |
- |
- |
- |
- |
1100 |
0011 |
7 |
- |
- |
- |
- |
- |
- |
0010 |
8 |
- |
- |
- |
- |
- |
- |
00011 |
9 |
- |
- |
- |
- |
- |
- |
00010 |
10 |
- |
- |
- |
- |
- |
- |
00001 |
11 |
- |
- |
- |
- |
- |
- |
0000011 |
12 |
- |
- |
- |
- |
- |
- |
0000010 |
13 |
- |
- |
- |
- |
- |
- |
0000001 |
ZerosLeft游程长度 |
1 |
2 |
3 |
4 |
5 |
6 |
>6 |
14 |
- |
- |
- |
- |
- |
- |
00000001 |
表16-游程长度VLC码字表
类似地,在替代的实施例中,不同数量的VLC码字表以及不同的VLC码字,包括存储该VLC码字的不同方式,可以被用于实施本发明。特别地,在一个实施例中,本发明可以改用下面三个VLC码字表而被实施。
NumCoeffTotZeros |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
|
0 |
11 |
1113 |
1014 |
0115 |
1014 |
0016 |
0016 |
|
1 |
0113 |
1103 |
1113 |
1113 |
1004 |
0015 |
0015 |
|
2 |
0103 |
1013 |
1103 |
1014 |
0114 |
1113 |
1013 |
|
3 |
0114 |
1003 |
1013 |
1004 |
1113 |
1103 |
1003 |
|
4 |
0104 |
0113 |
1004 |
1103 |
1103 |
1013 |
0113 |
|
5 |
0115 |
1014 |
0114 |
1013 |
1013 |
1003 |
112 |
|
6 |
0105 |
1004 |
1003 |
1003 |
1003 |
0113 |
0103 |
|
7 |
0116 |
0114 |
0113 |
0114 |
0113 |
0103 |
0014 |
|
8 |
0106 |
0104 |
0104 |
0113 |
0104 |
0014 |
0013 |
|
9 |
0117 |
0115 |
0115 |
0104 |
0015 |
0013 |
0006 |
|
10 |
0107 |
0105 |
0105 |
0105 |
0014 |
0006 |
- |
|
11 |
0118 |
0116 |
0016 |
0015 |
0005 |
- |
- |
|
12 |
0108 |
0106 |
0015 |
0005 |
- |
- |
- |
|
13 |
0119 |
0016 |
0006 |
- |
- |
- |
- |
|
NumCoeffTotZeros |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
|
14 |
0109 |
0006 |
- |
- |
- |
- |
- |
|
15 |
0019 |
- |
- |
- |
- |
- |
- |
|
NumCoeffTotZeros |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
0 |
0016 |
0016 |
0015 |
0004 |
0004 |
0003 |
002 |
01 |
1 |
0014 |
0006 |
0005 |
0014 |
0014 |
0013 |
012 |
11 |
2 |
0015 |
0014 |
0013 |
0013 |
012 |
11 |
11 |
- |
3 |
0113 |
112 |
112 |
0103 |
11 |
012 |
- |
- |
4 |
112 |
102 |
102 |
11 |
0013 |
- |
- |
- |
5 |
102 |
0013 |
012 |
0113 |
- |
- |
- |
- |
6 |
0103 |
012 |
0014 |
- |
- |
- |
- |
- |
7 |
0013 |
0015 |
- |
- |
- |
- |
- |
- |
8 |
0006 |
- |
- |
- |
- |
- |
- |
- |
9 |
- |
- |
- |
- |
- |
- |
- |
- |
10 |
- |
- |
- |
- |
- |
- |
- |
- |
11 |
- |
- |
- |
- |
- |
- |
- |
- |
12 |
- |
- |
- |
- |
- |
- |
- |
- |
13 |
- |
- |
- |
- |
- |
- |
- |
- |
14 |
- |
- |
- |
- |
- |
- |
- |
- |
NumCoeffTotZeros |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
|
15 |
- |
- |
- |
- |
- |
- |
- |
|
表14-亮度零总数VLC码字表
NumCoeffTotZeros |
1 |
2 |
3 |
0 |
11 |
11 |
11 |
1 |
012 |
012 |
01 |
2 |
013 |
002 |
- |
3 |
003 |
- |
- |
表15-色度零总数VLC码字表
ZerosLeft游程长度 |
1 |
2 |
3 |
4 |
5 |
6 |
>6 |
0 |
1 |
1 |
11 |
11 |
11 |
11 |
1113 |
1 |
0 |
01 |
10 |
10 |
10 |
000 |
1103 |
2 |
- |
00 |
01 |
01 |
011 |
001 |
1013 |
3 |
- |
- |
00 |
001 |
010 |
011 |
1003 |
4 |
- |
- |
- |
000 |
001 |
010 |
0113 |
5 |
- |
- |
- |
- |
000 |
101 |
0103 |
6 |
- |
- |
- |
- |
- |
100 |
0013 |
7 |
- |
- |
- |
- |
- |
- |
0014 |
8 |
- |
- |
- |
- |
- |
- |
0015 |
9 |
- |
- |
- |
- |
- |
- |
0016 |
ZerosLeft游程长度 |
1 |
2 |
3 |
4 |
5 |
6 |
>6 |
10 |
- |
- |
- |
- |
- |
- |
0017 |
11 |
- |
- |
- |
- |
- |
- |
0018 |
12 |
- |
- |
- |
- |
- |
- |
0019 |
13 |
- |
- |
- |
- |
- |
- |
00110 |
14 |
- |
- |
- |
- |
- |
- |
00111 |
表16-游程长度VLC码字表
表14-16的VLC码字被表示为与先前描述的空间保存格式相同的格式。
图4示出了根据一个实施例的、TotalZero-RunLength编码器块142的编码逻辑144的相关方面的操作流程,该操作流程用来编码被插入图片宏块的(亮度/色度)块变换系数的非零系数之间的零系数的数量及其各自的游程长度。
如图所示,对于该实施例,一接收到(亮度/色度)块的变换系数,编码逻辑144就确定被插入非零系数之间的零系数的数量(零总数),块402。接下来,编码逻辑144选择对应于该块中系数的数量和采样块类型的合适的码字表,块404。在其它的实施例中,其它的准则可以被用于选择码字表。接下来,编码逻辑144使用所选择的码字表编码零总数信息。
此外,编码逻辑144选择被插入的零的第一游程(run)(从后面开始处理,或在替代的实施例中,从前面开始处理),并且确定游程长度(Run Length),块406-408。接下来,编码逻辑144根据被留下要被插入的零的数量来选择合适的码字表,块407。然后,编码逻辑144使用选定的游程长度码字表来编码游程长度信息。编码逻辑144然后确定是否所有的被插入的零的游程已经被编码,块410。如果没有,编码逻辑144退回到块406继续如先所述的操作。如果所有的被插入的零游程已经被编码,TotalZero与Run Length编码过程终止。
解码器
图5示出了根据一个实施例的、本发明的一个上下文自适应VLC解码器的全图,该解码器用于解码根据类似于图1的编码器的编码原理编码的变换系数。如图所示,对于该实施例,上下文自适应VLC解码器500如编码器100那样被类似地构成,具有解码器块502-506,它们平行地被耦合到解码器500的输入510,用来接收一个编码视频图片宏块的(亮度/色度)块的、已量化变换系数的VLC码字的比特流。作为响应,解码器块502-506把接收到的这些(亮度/色度)块的变换系数的编码解码回到它们的量化形式,并且在输出端108处输出它们。
对于该实施例,解码器块502-506如编码器块102-106那样被类似地构成。即,解码器块502包括VLC码字表522和编码逻辑524,用于解码图片宏块的(亮度/色度)块的一串变换系数中的系数和T1系数的数量的组合VLC码字。此外,解码器块504包括VLC码字表532和编码逻辑534,用于解码(亮度/色度)块的变换系数的电平的VLC码字。类似地,解码器块506包括VLC码字表532和编码逻辑534,用于解码在(亮度/色度)块的非零变换系数中的零总数和各个“零”游程长度的VLC码字。
本发明的实例应用
图6示出了根据一个实施例的、结合了本发明的方法的视频设备。如图所示,视频设备600包括耦合到该设备的输入和输出的编码器610和解码器620。如先前所述,编码器610被设计为接收视频图片宏块的(亮度/色度)块的量化的变换系数632a,并且作为响应而自适应地编码它们为VLC码字634a。解码器620被设计为接收另一个视频图片宏块的(亮度/色度)块的变换系数的VLC码字634b,并且作为响应而自适应地将这些码字解码回系数632b。
编码器610和解码器620如先前所述的编码器100和解码器500那样被类似地构成。在各个实施例中,编码器610和解码器620可以共享至少部分的它们的组成表和编码逻辑(如编码器610和解码器620的交叉块所示)。
在各个实施例中,视频设备600可以为数码相机、DVD播放器、视频监视摄像机、视频会议设备、医疗图像设备、以及其它类似的视频设备。在其它实施例中,视频设备600可以是无线移动电话、诸如个人数字助理的手掌大小的计算设备、膝上型计算设备、桌上型计算设备、机顶盒、服务器、以及其它类似的计算设备。执行一个这些视频设备600的应用可以包括包含视频的即时消息传递和/或电子邮件。而在其它实施例中,视频设备600可以是电路板组件,如视频“附加”电路板(也称作子电路板)、母板、以及其它类似的电路板。
图7示出了包括具有编程指令的可记录媒体700的产品,用于实现如前所述的编码器100和/或解码器500的软件实施例。实现编码器100和/或解码器500的软件实施例的编程指令被设计用于对视频设备710编程,使该视频设备710具有本发明的编码和解码能力。
对于该实施例,视频设备710包括存储媒体712来存储至少一部分用来实现编码器100和/或解码器500的软件实施例的、所述编程指令的工作副本,以及包括至少一个被耦合到存储媒体712来执行所述编程指令的处理器714。
视频设备712可以是先前所列举的示例性设备或其它类似的视频设备中的任何一个。产品710可以为例如磁盘、光盘(CD)、DVD或其它类似的计算机可读媒体。在其它的实施例中,产品710可以是通过专用和/或公共网络如因特网来在线分布编码器100和/或解码器500的分布式服务器。在一个实施例中,产品710是web服务器。
图8示出了具有如图所示的彼此通信地耦合的视频发送器802和视频接收器804的实例系统,其中视频发送器802根据本发明的方法编码视频,并且提供该编码的视频给视频接收器802,并且视频接收器802反过来解码该编码的视频以再现该视频。视频发送器802和视频接收器804分别被配备有先前所描述的编码器100和解码器500。
视频发送器802的一个例子是视频服务器,而视频接收器804的一个例子为耦合到视频发送器802上的客户设备。
结论与结束语
这样,从上面的描述中可以看出,已经描述了用于编码和解码图片宏块的(亮度/色度)块变换系数的新颖方法,包括结合了该方法的编码器、解码器、设备以及系统。
尽管本发明已经按照上述实施例和实例应用进行了描述,但本领域的技术人员将认识到本发明不局限于所描述的实施例和实例应用。本发明可以用在附属权利要求的精神和范围内所进行的修改和替换来实施。例如,不同的编码器/解码器块的数量,不同的在各个编码器/解码器块中的码字表的数量,不同的码字表,不同的码字表选择逻辑,以及不同的编码指令,可以被代替地实施。
这样,该描述可以被视为是对于本发明的示例性而非限制性的说明。