具体实施方式
因为可以使用本领域技术人员公知的电子组件和电路来实现本发明的示出的实施例的大部分,所以将不以比如上所述认为必要的更大的程度来描述细节,以了解和理解本发明的基础思想,并且以便不模糊或者偏离本发明的教导。
图1和6-7分别示出用于解码编码的视频流的方法。在这些示例中,存储单元存储编码的视频流。该编码的视频流包括不同质量水平的多层。通过向熵解码器发送用于完成所有不同质量水平的编码帧部分的熵解码处理的信息来减少在熵解码器和存储单元之间交换的数据量。一旦已经熵解码了编码帧部分的所有不同质量水平表达,则获取与新的编码帧部分相关的信息。
虽然在图1和6-7中,通过表示阶段的块来示出该方法,但是这些块不表示在时间上分离或独立的阶段。而是,可以以连续的、重叠的和/或并行的方式来执行这些阶段。
熵解码能够包括例如基于上下文的可变长度编码(CBVLC)解码或基于上下文的自适应二进制算术编码(CABAC)解码。CABAC解码器递归地将间隔(其表示编码的信息——诸如二进制串(bin))划分为子间隔。间隔或子间隔的长度(范围)(表示为codRange)、至少一个间隔边界(上边界——codllow或下边界)、最小可能值概率、每二进制串的最大可能值(valMps)和最大可能值概率(pStateldx)可以形成熵解码器上下文信息CI(k,n)。该熵解码器上下文信息在常规的CABAC解码期间进行更新,以反映被CABAC编码的编码信息的值。CABAC解码器还接收反映编码信息的值的偏移。该范围可以在CABAC解码期间被归一化或重归一化,以有利于较小的子间隔的有效表达。CAVLC解码器也产生熵解码器上下文信息,诸如宏块类型(mb_type)和运动向量。
在示例中,方法1100开始于(阶段1110)将编码帧部分索引n设置为初始值,诸如一(n=1)。质量层索引k被设置为初始值,诸如一(k=1)。注意,可以根据需要选择其他初始值。
阶段1110之后是(阶段1120)从存储单元获取第k质量水平的第n编码帧部分P(k,n)(也称为第k质量水平第n编码帧部分)。
阶段1120之后是(阶段1130)向熵解码器提供P(k,n)。阶段1130也可以包括向熵解码器提供初始化上下文信息。熵解码器应当被初始化到预定义的初始状态。预先已知这个状态,并且这个状态可以取决于由熵解码器执行的熵解码的类型。
阶段1130之后是(阶段1140)通过熵解码器熵解码P(k,n)。
阶段1140包括:产生第k质量层第n编码帧部分的上下文信息CI(k,n),并且产生第k质量层第n编码帧的部分的熵解码信息EDI(k,n)。
例如,如果熵解码包括CABAC重复解码,则阶段1140可以包括将间隔(其表示编码信息——诸如二进制串)划分为子间隔。该重复提供了特定长度的子间隔的序列。EDI(k,n)表示在阶段1140期间重复地划分的子间隔的长度。在下述文献中提供了CABAC编码的非限制性示例,并且通过引用包含在此:″Context-Based Adaptive Binary ArithmeticCoding in the H.264/AVC Video Compression Standard″,D.Marpe,H.Schwarts and T.Wiegand,620 IEEE Transactions on Circuits and Systemsfor Video Technology,Vol.13,No.7,July 2003。在CABAC编码器将信息转换为间隔时,CABAC解码器将间隔转换为信息。
阶段1140之后是(阶段1150),用于存储CI(k,n),并且向合并单元发送EDI(k,n)。
阶段1150之后是(阶段1160)将EDI(k,n)与第n帧部分的一个或多个之前的质量层的熵解码信息合并,如果这样的信息存在的话。该合并可以包括向一个或多个之前的质量层的熵解码信息添加EDI(k,n),在该添加之前可以执行频域/时域转换,并且可以在其后进行逆频域/时域转换。
阶段1160可以包括将EDI(k,n)与第n编码帧部分熵解码信息的一个或多个较低质量层(k-2、k-3、...)合并,如果这样的信息存在的话。合并的结果被称为第k质量层第n编码帧部分合并信息,并且被表示为MEDI(k,n)。
阶段1160之后是(阶段1170)检查MEDI(k,n)是否达到期望的质量水平。预先设置期望的质量水平,并且期望的质量水平可以反映通过编码器产生的质量层的数量。
如果回答是肯定的,则阶段1170之后是阶段1180。否则,阶段1170之后是(阶段1175)增加k(k=k+1),并且跳回阶段1120。
阶段1180包括存储MEDI(k,n),并且额外地或替代地,进一步处理MEDI(k,n),以提供解码的第n编码帧部分DF(n),解码的第n编码帧部分DF(n)可以是与质量水平k对应的质量的第n编码帧。该进一步处理可以包括运动向量补偿、滤波(诸如去块滤波)和额外的可分级性处理(诸如空间可分级性操作)等。阶段1180也包括复位k。
阶段1180之后是(阶段1210)增大n(n=n+1),并且确定在阶段1220(阶段1210之后)期间要获取哪个上下文信息CI(k,n-1)。例如,特定宏块的上下文信息可以包括在相邻宏块的解码处理期间产生的上下文信息。例如,编码宏块EMB(1,2,2)1041(1,2,2)的上下文信息可以包括在刚好在他之上的编码宏块(EMB(1,1,2)1041(1,1,2))的解码处理期间、在左边的编码宏块(EMB(1,2,1)1041(1,2,1))以及在编码宏块EMB(1,2,2)1041(1,2,2)之前解码的一个或多个相邻的编码宏块的解码处理期间产生的上下文信息。
上下文信息可以包括例如一些相邻的帧子部分(如果存在的话)的编码宏块元数据和熵解码器上下文信息。
在熵解码期间产生和更新熵解码器上下文信息。熵解码器上下文信息可以每一条带(slice)或每一子条带地复位为初始值(或替换为初始化信息)(也称为空分组)。阶段1220可以包括:确定是否应当复位熵解码器上下文信息。例如,可以在新的熵解码原子(atomic)单元的解码开始时复位熵解码器上下文信息,例如,可以当正在解码新的条带时复位熵解码器上下文信息,并且可以更新、保持和获取熵解码器上下文信息直到新的条带的解码处理结束。
参考图2,视频帧1010被表示为不同质量水平的三个编码帧-EF(1)1011、EF(2)1012和EF(3)1013。注意,能够将帧表示为三个以上的不同质量水平的编码帧。
EF(1)1011是视频帧1010的第一质量水平编码表达。视频帧1010包括80个条带。每一个条带包括三行(line)。每行包括属于两个帧部分的40个宏块。注意,每帧的条带的数量、每条带的行的数量和每行的宏块的数量可以与这些示例不同。
在该示例中,EF(1)1011包括80个编码条带ES(1)-ES(80)1011(1)-1011(80)。每一个编码条带包括三个编码行EL(1,1)-EL(80,3)1031(1,1)-1031(80,3)。每一个编码行包括四十个编码宏块EMB(1,1,1)-EMB(80,3,40)1041(1,1,1)-1041(80,3,40)。注意,每编码帧的编码条带的数量、每编码条带的编码行的数量和每编码行的编码宏块的数量可以与这些示例不同。
每一个编码帧部分包括一半编码行(20个编码宏块)。注意,每编码帧部分的编码宏块的数量可以不是40。
通过下述方式来选择编码帧部分:从行的前40个编码宏块开始并且在行的最后40个编码宏块结束地扫描编码行。
当n是偶数时,第n编码帧部分包括第(n/2)行的最后40个编码宏块,并且编码宏块元数据包括第[(n/2)-1]行的最后40个宏块和第(n/2)行的第四十个宏块的宏块元数据。
当n是奇数时,第n编码帧部分包括第[(n+1)/2]行的前40个编码宏块,并且编码宏块元数据包括第[(n-1)/2]行的前四十个宏块的宏块元数据。
往回参考图1,阶段1220包括从存储单元获取第k质量水平第n编码帧部分P(k,n)和上下文信息CI(k,n-1)。
阶段1220之后是(阶段1230)向熵解码器提供P(k,n)和CI(k,n-1)。
阶段1230之后是(阶段1240)通过熵解码器熵解码P(k,n)。熵解码使用CI(k,n-1),并且包括产生:(i)第k质量层第n编码帧部分上下文信息CI(k,n);以及(ii)第k质量层第n帧部分熵解码信息EDI(k,n)。
阶段1240之后是(阶段1250)存储CI(k,n)和向合并单元发送EDI(k,n)。
阶段1250之后是(阶段1260)将EDI(k,n)与第n帧部分的之前的质量层的熵解码信息合并。例如,如果k=q+1,则EDI(k,n)能够与EDI(k-1,n)、直到EDI(k-q,n)合并。合并的结果被表示为MEDI(k,n)。合并可以包括向一个或多个之前的质量层的熵解码信息添加EDI(k,n),在该添加之前可以执行频域/时域转换,并且可以在其后执行逆频域/时域转换。
阶段1260之后是(阶段1270)检查MEDI(k,n)是否达到期望的质量水平。如果回答是肯定的,则阶段1270之后是阶段1280。否则,阶段1270之后是阶段1275:增大k(k=k+1)。阶段1275之后跳回阶段1210。
阶段1280包括存储MEDI(k,n),并且额外地或替代地,进一步处理MEDI(k,n)以提供解码的第n帧部分DF(n)。该进一步处理可以包括运动向量补偿和滤波(诸如去块滤波)等。阶段1280还包括复位k。
阶段1280之后是阶段1290:确定是否熵解码了整个编码帧(如果n达到最后值)或确定是否还存在要处理的编码帧部分。如果熵解码了整个编码帧,则阶段1290之后是阶段1300:选择新的编码帧并且跳到阶段1120。如果存在要处理的另外的编码帧部分,则阶段1290之后是阶段1210。
表1提供了方法1100的多次迭代的示例,其开始于第一迭代,其中初始化质量水平索引和帧部分索引。“S”列表示正在执行的阶段,而“内容”列更详细地示出在这些阶段期间正在执行的一个或多个操作。
表1
图3示意地示出了视频处理系统1800的实施例的第一示例。
视频处理系统1800可以包括存储单元1810、诸如解码器1820的熵解码器、数据传送单元1830、控制器1840、合并单元1850、运动补偿单元1860、滤波器1870和输入/输出端口1801。
控制器1840可以通过向存储单元1810、解码器1820、滤波器1870、运动补偿单元1860、合并单元1850和数据传送单元1830发送指令和时序信号来管理这些模块。
存储单元1810被示出为存储下面的数据结构:P(k,n)1020、CI(k,n)1022、EDI(k,n)1024、EDI(k-1,n)1026、MEDI(k,n)1028。除了这些示出的数据结构之外,存储单元1810还可以存储编码帧部分、熵解码帧和上下文信息。
视频处理系统1800可以执行方法1100。下面的表示出由解码器1820、数据传送单元1830、控制器1840、合并单元1850、运动补偿单元1860和滤波器1870执行的方法1100的阶段。存储单元1810存储在方法1100的执行期间需要的数据结构和编码帧部分。
表2
控制器1840可以包括:(i)初始化电路1840(1),用于将编码帧部分索引n设置为初始值,诸如一(n=1),并且将质量层索引k设置为初始值,诸如一(k=1);(ii)质量水平评估器1840(2),用于基于预定的期望最佳质量水平来检查k是否达到了期望的质量水平;(iii)递增电路1840(3),用于增大k(k=k+1),并且用于增大n(n=n+1);(iv)上下文信息选择器1840(4),用于确定要获取哪个上下文信息CI(k,n-1);以及(iv)帧结束检测器1840(5),用于确定整个编码帧是否被熵解码(如果n达到最后的值)或是否还存在要处理的编码帧部分,并且用于选择新的编码帧。
数据传送单元1830可以被构造为:(i)从存储单元获取第k质量水平第n编码帧部分P(k,n);(ii)向熵解码器1820提供P(k,n);(iii)向合并单元发送EDI(k,n);(iv)向存储单元发送CI(k,n);(v)从存储单元获取P(k,n)和CI(k,n-1);以及(vi)向熵解码器提供P(k,n)和CI(k,n-1)。
解码器1820被构造为执行P(k,n)的熵解码。它可以应用CABAC解码或CAVLC解码。解码器1820可以包括:(a)上下文信息产生器1820(1),用于产生CI(k,n);以及(b)信息产生器1820(2),用于产生EDI(k,n)。
诸如运动补偿单元1860和滤波器1870的其他处理单元可以进一步处理熵解码帧部分。
合并单元1850可以将EDI(k,n)与EDI(k-1,n)(如果k>1)合并以提供MEDI(k,n)。
可以提供质量和空间可分级性的组合。方法1100和视频处理系统1800可以提供质量可分级性。质量可分级性可以位于空间可分级性之后或之前。又如,可以并行地和以流水线方式等来执行空间和质量可分级性。例如,可以将编码帧部分的多个质量水平表达的方法1100的熵解码处理的结果看作基础空间分辨率层。基础空间分辨率层以及更高空间分辨率层可以由解码器1820处理。
为了减少在存储单元和解码器之间的业务量,在空间可分级性处理期间,每一个空间分辨率层可以由紧凑数据结构表示。
参考图1,可以在进一步处理MEDI(k,n)的阶段1280中包括空间可分级性处理,以提供解码的第n帧部分DF(n)。这示出为框1600“空间分辨率编码”。
替代地,空间分辨率编码可以在方法1100之后。可以对解码帧部分DF(n)进行空间可分级性处理以提供更高的空间可分级性水平帧部分。因此,帧(或帧部分)的空间可分级性处理可以出现在完成通过方法1100处理帧或帧部分之后。
图4示意地示出了第一层的实施例的示例,该第一层具有第一层第一集合变换系数组TC(1,1)111,该第一层第一集合变换系数组TC(1,1)111包括亮度变换系数和色度变换系数。第一层可以由MEDI(k,n)元素形成,使得最低空间分辨率层是可分级质量熵编码的结果。
TC(1,1)111表示第一层(在图4中表示为10)的第一编码宏块EM(1,1)11。该第一层可以是最低质量水平的基础层。
TC(1,1)111包括第一层第一集合(FLFS)变换系数组。在该示例中,示出了24个组,然而,取决于具体编码方案,可以使用其它数量的组。示出的组以16个FLFS亮度变换系数组开始,其后跟随8个FLFS色度变换系数组。
FLFS亮度变换系数组包括4x4的FLFS亮度变换系数组111(1)-111(16),每组包括4个FLFS亮度变换系数。第一、第三、第六、第九、第十、第十一和第十二FLFS变换系数组(111(1)、111(3)、111(6)、111(9)、120(10)、111(11)和111(12))是非零FLFS亮度变换系数组,而其他FLFS亮度变换系数组(111(2)、111(4)、111(5)、111(7)、111(8)、111(13)、111(14)、111(15)和111(16))是零值FLFS亮度变换系数组。
FLFS色度变换系数组包括4x2的FLFS色度变换系数组111(17)-111(24),每组包括4个FLFS色度变换系数。第十八和第二十四FLFS变换系数组(111(18)和111(24))是非零色度变换系数组,而其他色度变换系数组(111(17)、111(19)、111(20)、111(21)、120(22)和111(23))是零值色度变换系数组。
解码器在熵解码处理期间产生TC(1,1)111。替代向存储单元发送整个TC(1,1)111,解码器产生紧凑数据结构,该紧凑数据结构被发送到存储单元,并且当解码第二层的对应的编码宏块时调取该紧凑数据结构。图4示出了代表TC(1,1)111的两个紧凑数据结构211和311。
这些紧凑数据结构包括FLFS非零指示符I(1,1)211和FLFS非零数据结构NZD(1,1)311。
I(1,1)211表示TC(1,1)111的哪些变换系数组是非零的。I(1,1)211中的每一个设置位指示非零FLFS变换系数组。图4示出了位图,该位图指示TC(1,1)111的第一、第三、第六、第九、第十、第十一、第十二、第十八和第二十四FLFS变换系数组是非零FLFS变换系数组,而其他FLFS变换系数组是零值FLFS变换系数组。
NZD(1,1)311包括非零FLFS变换系数组111(1)、111(3)、111(6)、111(9)、111(10)、111(11)、111(12)、111(18)和111(24)的有序序列,如在图4中由字母A-I所示的。它不包括零值第一层第一宏块变换系数组。因此,需要发送较少的数据。
图5示意地示出了比图4的第一层更高质量水平的第二层的实施例的第二示例,该第二层具有中间变换系数组TCI(2,1)421的第二层第一集合(SLFS)、SLFS变换系数组TC(2,1)121、表示SLFS变换系数组集合TC(2,1)121的两个紧凑数据结构221和321以及SLFS中间非零指示符II(2,1)521。
对编码宏块EM(2,1)21进行处理以提供TCI(2,1)421。
对TCI(2,1)421、I(1,1)211和NZD(1,1)311进行处理以提供TC(2,1)121。解码器将TC(1,1)111和TCI(2,1)421相加或者以其他方式合并以提供TC(2,1)121。
对TC(2,1)121进行处理以提供I(2,1)221和NZD(2,1)321。
TCI(2,1)421包括24个SLFS中间变换系数组,其以16个SLFS中间变换系数组开始,并且随后是8个SLFS中间色度变换系数组。但是,仍然显然的是,可以使用其他数量。
SLFS中间亮度变换系数组121包括4x4SLFS中间亮度变换系数组121(1)-121(16),每一个组包括4个SLFS中间亮度变换系数。第二、第三和第四SLFS中间变换系数组121(2)、121(3)和121(4)是非零SLFS中间亮度变换系数组,而其他SLFS中间亮度变换系数组(121(1)和121(5)-121(16))是零值SLFS中间亮度变换系数组。
SLFS中间色度变换系数312包括4x2SLFS中间色度变换系数组121(17)-121(24),每一个组包括四个SLFS中间色度变换系数。第二十三和第二十四SLFS中间变换系数组(121(23)和121(24))是非零SLFS中间色度变换系数组,而其他SLFS中间色度变换系数组(121(17)-121(21))是零值SLFS色度变换系数组。
TC(2,1)121包括24个SLFS变换系数组,其以16个SLFS亮度变换系数组开始,并且随后是8个SLFS色度变换系数组。
第二SLFS亮度变换系数组包括4x4SLFS亮度变换系数组121(1)-121(16),每一个组包括四个SLFS亮度变换系数。第一、第二、第三、第四、第六、第九、第十、第十一和第十二SLFS变换系数组(121(1)、121(2)、121(3)、121(4)、121(6)、121(9)、121(10)、121(11)和121(12))是非零SLFS亮度变换系数组,而其他SLFS亮度变换系数组(121(5)、121(7)、121(8)、121(13)、121(14)、121(15)和121(16))是零值SLFS亮度变换系数组。
SLFS色度变换系数组包括4x2SLFS色度变换系数组121(17)-121(24),每一个组包括四个SLFS色度变换系数。第十八、第二十三和第二十四SLFS变换系数组(121(18)、121(23)和121(24))是非零SLFS色度变换系数组,而其他SLFS色度变换系数组(121(17)、121(19)-121(22))是零值SLFS色度变换系数组。
假定合并包括相加位于同一位置的不同的编码宏块的变换系数,那么表3示出产生的TCI(2,1)的合并操作。注意,在执行诸如逆离散傅立叶变换的逆变换后获得在表中包括的值。
表3
在图5的示例中,将TC(2,1)121表示为两个紧凑数据结构——SLFS非零指示符I(2,1)211和SLFS非零数据结构NZD(2,1)321。
I(2,1)211指示TC(2,1)121的哪些SLFS变换系数组是非零的。I(2,1)211的每一个设置位指示非零SLFS变换系数组。图5示出位图,该位图指示TC(2,1)121的第一、第二、第三、第四、第六、第九、第十、第十一、第十二、第十八、第二十三和第二十四变换系数组是非零SLFS变换系数组,而TC(2,1)121的其他SLFS变换系数组是零值SLFS变换系数组。
NZD(2,1)包括非零SLFS变换系数组121(1)、121(2)、121(3)、121(4)、121(6)、121(9)、121(10)、121(11)、121(12),121(18),121(23)和121(24)的有序序列。它不包括零值第二变换系数组。
图5还示出了中间非零指示符II(2,1)511,其指示TCI(2,1)421的哪些SLFS中间变换系数组是非零SLFS变换系数组。
解码器能够向存储单元发送I(2,1)221和NZD(2,1)321。如果这些紧凑数据结构具有进一步的用途,例如,如果解码处理要求解码一个或多个另外的增强层,则这可能发生。例如,如果解码处理通过解码第二层来结束,则这些紧凑数据结构不能被产生或不能被发送到存储单元。
图6和7示意地示出了方法600的实施例的示例。
在编码处理期间产生运动向量。编码处理可以包括产生运动向量。运动向量是用于帧间预测的二维向量,该帧间预测提供了从在解码画面中的坐标至在参考画面中的坐标的偏移。变换系数组的每个集合具有引用另一(参考)集合的变换系数的运动向量。
方法600可以通过减少被写入存储单元的运动向量的数量来允许进一步减少被发送到存储单元并且被存储在存储单元中的信息量。
例如,在彼此之后处理该集合的变换系数组。因此,如果与一个集合的变换系数组相关联的所有运动向量是相同的,则能够仅向存储单元发送单个运动向量,并且可以将单个运动向量指示符设置为指示与一个集合的变换系数组相关联的所有运动向量是相同的。
解码处理可以包括:产生单个运动向量数据结构。单个运动数据结构可以至多包括每个集合的变换系数组的单个运动向量。
解码处理还可以包括:产生另外的运动向量数据结构。该另外的运动向量数据结构包括在单个运动向量数据结构中不包括的每个集合的变换系数组的剩余的运动向量。
方法600开始于将层索引k设置为初始值,诸如1(k=1),并且将编码宏块索引n设置为初始值,诸如1(n=1),如阶段605所示。这些初始值对应于要解码的层和宏块。
步骤605之后是阶段610:从存储单元获取第一层第n个编码宏块。在解码处理期间,编码宏块转换为解码宏块。注意,在这个示例中,假定预先不知到编码宏块的大小,并且阶段610包括:获取预期包括至少一个编码宏块的第一层信息。阶段610可以包括:获取第一层编码宏块、第一层视频流的一部分或整个第一层视频流。为了描述简单,假定在阶段610的第一迭代期间,仅获取第一层第一编码宏块。
阶段610之后是阶段615:通过解码器来处理第一层第n个编码宏块,以提供第一层第n集合的变换系数组TC(1,n)。
阶段615还可以包括:阶段616:提取每一个变换系数组的运动向量;阶段617:确定与一个集合的变换系数组相关联的所有的运动向量是否相同;阶段618:基于阶段617的确定来产生单个运动向量指示符(SMV(1,n)),其指示与TC(1,n)相关联的所有运动向量是否相同。
阶段615之后是阶段620:确定是完成对于TC(1,n)的解码处理(并且跳到阶段622),还是继续解码处理并且产生当处理TC(2,n)时需要的信息(并且跳到阶段625)。
阶段622包括:完成对于TC(1,n)的解码处理,并且跳到阶段635。
阶段625包括:产生第一层第n集合非零数据结构NZD(1,n)和第一层第n集合非零指示符I(1,n)。NZD(1,n)仅包括非零第一层第n集合变换系数组,并且不包括零值第一层第n集合变换系数组。第一层第n集合变换系数组与第一质量水平相关联。第一层第n集合非零指示符指示非零第一层第n集合变换系数组。
阶段625之后是阶段630:向存储单元写入NZD(1,n)和I(1,n)。
NZD(1,n)向存储器的写入可以是有条件的,只有NZD(1,n)包括至少一个非零第一层第n集合变换系数组,才将它写入存储单元。通过阶段632示出这一点。
阶段630也包括阶段633,用于根据阶段617的确定来向存储单元写入单个运动向量标识符SMV(1,n)和每一个TC(1,n)的至少一个运动向量(MV(1,n))。阶段631可以包括:向单个运动向量数据结构S写入至多每一个TC(1,n)单个运动向量,并且,向多个运动向量数据结构MU写入TC(1,n)的多个运动向量——如果它们存在的话。单个运动向量指示符SMV(1,n)指示是从S还是MU获取运动向量。
阶段630之后是阶段635:确定是处理第一层视频流的其他子集,将n增加1(n=n+1)并且跳到阶段610,还是通过处理增强层信息来继续解码处理,并且跳到阶段641。
阶段635之后可以是阶段640:从存储单元调取第k层第n集合非零数据结构NZD(k,n)、第k层第n集合非零指示符l(n,k)和诸如第(k+1)层第n编码宏块的第(k+1)层信息。
为了进一步减少层之间的数据的传送,从存储单元的数据的调取、NZD(k,n)的调取和额外地或替代地,l(n,k)的调取可以是有条件的。如阶段641-646所示。
阶段641-646是阶段640的替代阶段。为了说明的简单,图7示出了阶段640和阶段641-646。阶段640能够是阶段641-646的替代。
阶段641包括:调取IGNORE(k+1),其指示是否忽略来自前层的信息。
步骤641之后是阶段642:基于IGNORE(k+1)的值来确定:(a)忽略与前层(基础层直到第k层)相关的信息,并且跳到阶段643;还是(b)不忽略与前层相关的信息,并且跳到阶段644。
阶段643包括:与第k层信息无关地处理EM(k+1,n),以提供TC(k+1,n)。这个处理与基础层编码宏块的处理相似,并且可以包括阶段615。阶段643之后是阶段660。
阶段644包括获取EM(k+1,n)和I(k,n)。
步骤644之后是阶段645:确定NZD(k,n)是否是空组(所有的第k层第n集合变换系数组是0)。如果回答是肯定的,则不从存储单元获取NZD(n,k),并且阶段644之后是阶段643。
如果NZD(k.n)不是空组,则阶段645之后是获取NZD(k,n)的阶段646。阶段646之后是阶段650。
阶段644可以包括:获取SMV(1,k),并且基于SMV(1,k)的值来从S获取一个运动向量或从MU获取多个运动向量。
阶段650包括:通过解码器处理第k层第n集合非零数据结构(NZD(k,n))、第k层第n集合非零指示符(I(k,n))和第(k+1)层第n编码宏块(EM(k+1,n)),以提供第(k+1)层第n集合变换系数组TC(k+1,n)。
阶段650可以包括阶段651、652、653、654、655和656。
阶段651包括:处理M(k+1,n)以提供第(k+1)层第n集合中间变换系数组ITC(k+1,n)。
阶段652包括:从NZD(k,n)和I(k,n)重建TC(k,n)。
阶段653包括:合并TC(k,n)和ITC(k+1,n)以提供TC(k+1,n)。
阶段650还可以包括阶段654、655和656。
阶段654包括:提取每一个变换系数组的运动向量。
阶段655包括:确定与一个集合的变换系数组相关联的所有运动向量是否相同。
阶段656包括:基于阶段655的确定来产生单个运动向量指示符(SMV(k+1,n)),其指示与TC(k+1,n)相关联的所有运动向量是否相同。
步骤650之后是阶段660:确定是完成对于TC(k+1,n)的解码处理(并且跳到阶段662),还是通过处理更高质量层来继续TC(k+1,n)的解码处理(并且跳到阶段670)。
阶段662包括:完成对于TC(k+1,n)的解码处理,并且跳到阶段685。
阶段670包括:产生第(k+1)层第n集合非零数据结构(NZD(k+1,n))和第(k+1)层第n集合非零指示符(I(k+1,n))。NZD(k+1,n)仅包括非零第(k+1)层第n集合变换系数组,并且不包括零值第(k+1)层第n集合变换系数组。TC(k+1,n)与第(k+1)质量水平相关联。I(k+1,n)指示非零第(k+1)层第n集合变换系数组。
阶段670之后是阶段680:向存储单元写入NZD(k+1,n)和I(k+1,n)。
NZD(k+1,n)向存储器的写入可以是有条件的——只有NZD(k+1,n)包括至少一个非零第(k+1)层第n集合变换系数组才可以将其写入存储单元。
阶段680可以包括阶段681:根据阶段655的确定来向存储单元写入单个运动向量标识符SMV(k,n)和每一个TC(k,n)的至少一个运动向量(MV(k,n))。阶段681可以包括:向单个运动向量数据结构S写入至多每一个TC(k,n)的单个运动向量,并且向多运动向量数据结构MU写入TC(1,n)的多个运动向量,如果存在的话。单个运动向量指示符SMV(1,n)指示从S还是MU获取运动向量。
阶段680之后是阶段685:确定是否处理第(k+1)层视频流的其他子集——第(k+1)层的其他编码宏块。如果回答为是,则在阶段685之后增大n,并且跳到阶段641。否则,阶段685之后是阶段687:确定是否提高视频流的质量。如果回答是否,则该方法结束。否则,阶段687之后是阶段688:增加k(k=k+1)。阶段688之后是阶段640。
方法600可以处理在图2中示出的数据结构中的任何一个。例如,第一非零数据结构可以包括非零第一变换系数组的有序且连续的序列。
阶段610、630、640和670中的任何一个可以包括执行具有突发大小的多个突发。突发可以包括通过数据传送单元来交换多位信息。每一个非零数据结构的非零变换系数组可以对齐到突发大小。因此,突发大小可以是非零系数组的大小的整数倍。
可以与一个或多个之前的增强层的信息无关地进行特定增强层的解码。可以提供“跳过前层”指示符,并且这个指示符可以指示忽略前一增强层的信息。在该情况下,以与第一层相同的方式来处理特定增强层。参见在图7中给出的示例,阶段550将包括:通过解码器处理第(k+1)层信息,以提供第(k+1)变换系数组。
将使用下面的假设来进一步说明方法600:(a)一个编码宏块接下一个编码宏块地执行方法600,(b)在处理另一层的编码宏块之前处理一层的所有编码宏块,(c)该处理包括处理三个层,每一个层包括N个宏块,(d)方法600包括阶段640而不是阶段641-646。
610 |
获取EM(1,1),K=1,n=1 |
615 |
处理EM(1,1)以提供TC(1,1)、MV(1,1)和SMV(1,1) |
620 |
确定继续解码 |
625 |
产生NZD(1,1)和I(1,1) |
630 |
向存储单元写入SMV(1,1)、一个或多个MV(1,1)、NZD(1,1)和I(1,1) |
635 |
确定处理第一层的其他编码宏块,n=n+1 |
610 |
获取M(1,2),K=1,n=2 |
615 |
处理M(1,2)以提供TC(1,2)、MV(1,2)和SMV(1,2) |
620 |
确定继续解码 |
625 |
产生NZD(1,2)和I(1,2) |
630 |
向存储单元写入SMV(1,2)、一个或多个MV(1,2)、NZD(1,2)和I(1,2) |
635 |
确定处理第一层的其他编码宏块,n=n+1 |
|
重复阶段610-630,直到n=N |
640 |
获取EM(1,N),K=1,n=N |
650 |
处理M(1,N)以提供TC(1,N)、MV(1,N)和SMV(1,N) |
660 |
确定继续解码 |
670 |
产生NZD(1,N)和I(1,N) |
680 |
向存储单元写入SMV(1,N)、一个或多个MV(1,N)、NZD(1,N)和I(1,N) |
685 |
确定处理第二层的其他编码宏块 |
640 |
获取EM(2,1),k=2,n=1 |
650 |
处理M(2,1)以提供TC(2,1)、MV(2,1)和SMV(2,1) |
660 |
确定继续解码 |
670 |
产生NZD(2,1)和I(2,1) |
680 |
向存储单元写入SMV(2,1)、一个或多个MV(2,1)、NZD(2,1)和I(2,1) |
685 |
确定处理第一层的其他编码宏块,n=n+1 |
640 |
获取EM(2,2),k=2,n=2 |
650 |
处理M(2,2)以提供TC(2,2)、MV(2,1)和SMV(2,2) |
660 |
确定继续解码 |
670 |
产生NZD(2,2)和I(2,2) |
680 |
向存储单元写入SMV(2,2)、一个或多个MV(2,2)、NZD(2,2)和I(2,2) |
685 |
确定处理第一层的其他编码宏块,n=n+1 |
|
重复阶段610-630,直到n=N |
640 |
获取EM(2,N),K=1,n=N |
650 |
处理M(2,N)以提供TC(2,N)、MV(2,N)和SMV(2,N) |
660 |
确定继续解码 |
670 |
产生NZD(2,N)和I(2,N) |
680 |
向存储单元写入SMV(2,N)、一个或多个MV(2,N)、NZD(2,N)和I(2,N) |
685 |
确定处理第三层的其他编码宏块 |
640 |
获取EM(3,1),K=3,n=1 |
650 |
处理M(3,1)以提供TC(3,1)、MV(3,1)和SMV(3,1) |
660 |
确定完成对于TC(3,1)的解码 |
662 |
完成对于TC(3,1)的解码处理 |
685 |
确定处理第三层的其他编码宏块,n=n+1 |
640 |
获取EM(3,2),k=3,n=2 |
650 |
处理M(3,2)以提供TC(3,2)、MV(3,2)和SMV(3,2) |
660 |
确定完成对于TC(3,2)的解码 |
662 |
完成对于TC(3,2)的解码处理 |
685 |
确定处理第三层的其他编码宏块,n=n+1 |
|
重复阶段610-635,直到n=N |
640 |
获取EM(3,N),k=3,n=N |
650 |
处理M(3,N)以提供TC(3,N)、MV(3,N)和SMV(3,N) |
660 |
确定完成对于TC(3,N)的解码 |
662 |
完成对于TC(3,N)的解码处理 |
表4
如上所述的方法600包括对于每一个层的、每一个获取的编码宏块的(TCI(k+1,n)和TC(k,n)的)合并处理。注意,可以每多个层执行一次合并,并且甚至对整个解码处理执行一次合并。
例如,如果对整个解码处理执行一次合并,则阶段653将不包括所述合并。阶段662将包括完成对于TCI(k+1,n)的解码处理,而该完成可以包括TCI(1,n)...TCI(N,n)的合并,并且阶段670将包括产生表示TCI(k+1,n)的NZD(k+1,n)和I(k+1,n)。
图8提供了视频处理系统1800的实施例的第二示例。
视频处理系统800可以执行方法1600和1100。
视频处理系统1800可以包括存储单元1810、诸如解码器1820的熵解码器、数据传送单元1830、控制器1840、合并单元1850、运动补偿单元1860、滤波器1870和输入/输出端口1801。
控制器1840可以通过向存储单元1810、解码器1820、滤波器1870、运动补偿单元1860、合并单元1850和数据传送单元1830发送指令和时序信号来管理这些模块。
存储单元1810被示出为存储下面的数据结构:P(k,n)1020、CI(k,n)1022、EDI(k,n)1024、EDI(k-1,n)1026、MEDI(k,n)1028、EF(1)1011,EF(2)1012、EF(3)1013、S 901、MU 902、第一层10、第二层20,、第三层30、第k层40(假定k大于3)、TC(k,n)188、I(k,n)288、NZD(k,n)388、TCI(k,n)488、II(k,n)588、SMV(k,n)910、IGNORE(k+1)888和EMV(k,n)920。
第一层10是方法1100的结果。
解码器1820(除了实体1820(1)-1820(2)之外)也可以包括下面的实体:(i)第二变换系数组产生器821,用于处理第二层信息和第一非零数据结构,以提供第二变换系数组;(ii)第二非零数据结构产生器822,用于产生仅包括非零第二变换系数组的第二非零数据结构;(iii)第二非零指示符产生器823,用于产生指示非零变换系数组的第二非零指示符;(iv)第一层处理器820(1),其被配置为处理第一层第n集合编码宏块,以提供第一层第n集合变换系数组TC(1,n);(v)运动向量提取器820(2),其被配置为提取每个变换系数组的运动向量;(vi)解码器控制器820(3),其被配置为确定与一个集合的变换系数组相关联的所有运动向量是否相同;(vii)单个运动向量指示符产生器820(4),其被配置为基于确定来产生单个运动向量指示符(SMV(1,n)),该单个运动向量指示符(SMV(1,n))指示与TC(1,n)相关联的所有运动向量是否是相同的;(viii)解码处理完成模块820(4),其被配置为完成对于TC(1,n)的解码处理;(ix)第一层非零数据结构产生器820(5),其被配置为产生第一层第n集合非零数据结构NZD(1,1);(x)第一层非零指示符产生器820(6),其被配置为产生第一层第n集合非零指示符I(1,1);(xi)变换系数组产生器820(7),其被配置为处理第k层第n集合非零数据结构(NZD(k,n))、第k层第n集合非零指示符(I(k,n))和第(k+1)层第n编码宏块(M(k+1,n)),以提供第(k+1)层第n变换系数组TC(k+1,n);(xii)中间集合产生器820(8),其被配置为处理M(k+1,n)以提供第(k+1)层第n集合中间变换系数组ITC(k+1,n);以及(xiii)重建模块820(9),其被配置为从NZD(k,n)和I(k,n)重建TC(k,n)。
合并单元1850也合并TC(k,n)和ITC(k+1,n)以提供TC(k+1,n)。
在上面的说明书中,已经参考本发明的实施例的具体示例描述了本发明。然而显然的是,在不偏离在所附的权利要求中给出的本发明的较宽精神和范围的情况下,可以在其中进行各种修改和改变。
本领域内的技术人员可以认识到,在逻辑块之间的边界仅是说明性的,并且替代实施例可以合并逻辑块或电路元件,或在各种逻辑块或电路元件上施加功能的替代分解。因此,应当明白,在此描述的架构仅是示例性的,并且事实上,可以实现用于实现相同功能的许多其他架构。
用于实现相同功能的部件的任何布置有效地“相关联”,使得实现期望的功能。因此,在此被组合来实现具体功能的任何两个部件可以被看作彼此“相关联”,使得实现期望的功能,而与架构或中间部件无关。同样,如此相关联的任何两个部件也可以被看作彼此“可操作地连接”或“可操作地耦合”,以实现期望的功能。
而且,本领域内的技术人员可以认识到,在上述操作之间的边界仅是说明性的。该多个操作可以被组合为单个操作,单个操作可以被分布在另外的操作中,并且可以在时间上至少部分地重叠地执行操作。而且,替代实施例可以包括特定操作的多个实例,并且可以在各种其他实施例中改变操作的顺序。
而且,例如,所述示例或其部分可以例如以任何适当类型的硬件描述语言被实现为物理电路或可转换为物理电路的逻辑表示的软或代码表示。
而且,本发明不限于在非可编程硬件中实现的物理装置或单元,而是也可以被应用在可编程装置或单元中,该可编程装置或单元能够通过根据适当的程序代码操作来执行期望的装置功能,该可编程装置或单元诸如是大型计算机、微型计算机、服务器、工作站、个人计算机、笔记本、个人数字助理、电子游戏、汽车的和其他的嵌入系统、蜂窝电话和各种其他无线装置,它们在本申请中被共同表示为“计算机系统”。
也可以在用于在计算机系统上运行的计算机程序中实现本发明,所述计算机程序至少包括用于当运行在可编程设备上时执行根据本发明的方法的步骤或使得可编程设备能够执行根据本发明的装置或相同的的功能的代码部分,所述可编程设备诸如是计算机系统。
计算机程序是诸如具体应用程序和/或操作系统的一系列指令。计算机程序可以例如包括下述部分的一个或多个:子例程、功能、过程、对象方法、对象实现方式、可执行应用、小应用程序、小服务程序、源代码、目标代码、共享库/动态负载库和/或被设计来用于在计算机系统上的执行的其他指令序列。
计算机程序可以被内部存储在非暂时计算机可读介质上。计算机可读介质可以是计算机程序产品的一部分。计算机程序的全部或一些可以永久地、可装卸地或远程与信息处理系统耦合地被设置在非暂时计算机可读介质上。该非暂时计算机可读介质可以被包括在计算机程序产品中,并且可以例如并且无限制地包括下述部分的任何多个:磁存储介质,其包括盘和带存储介质;光存储介质,诸如致密盘介质(例如,CD-ROM、CD-R等)和数字视频盘存储介质;非易失性存储器存储介质,其包括基于半导体的存储单元,诸如快闪存储器、EEPROM、EPROM、ROM;铁磁数字存储器;MRAM;易失性存储介质,包括寄存器、缓冲器或高速缓存、主存储器、RAM等。
计算机处理通常包括由操作系统使用来管理处理的执行的执行(运行)的程序或程序的一部分、当前程序值和状态信息以及资源。操作系统(OS)是管理计算机的资源的共享并且向编程者提供用于访问那些资源的接口的软件。操作系统处理系统数据和用户输入,并且通过向用户和系统的程序分配和管理作为服务的任务和内部系统资源来响应。
计算机系统可以例如包括至少一个处理单元、相关联的存储器和多个输入/输出(I/O)装置。当执行计算机程序时,计算机系统根据计算机程序来处理信息,并且经由I/O装置来产生结果的输出信息。
然而,其他修改、改变和替代也是可能的。因此要在说明性而不是限定性意义上看待说明书和附图。
在权利要求中,在括号之间布置的任何附图标记不应当被解释为限制权利要求。词“包括”不排除除了在权利要求中列出的那些之外的其他元件或步骤的存在。而且,在此使用的术语“一个”被定义为一个或多个。而且,在权利要求中的诸如“至少一个”和“一个或多个”的引导短语的使用不应当被解释为暗示由不定冠词“一个”对于另一个权利要求元素的引入将包含这样的引入权利要求元素的任何特定权利要求限制到仅包括一个这样的元素的发明,即使当同一权利要求包括引导短语“一个或多个”或“至少一个”和诸如“一个”的不定冠词时。对于定冠词的使用,这一点也成立。除非另外指示,否则诸如“第一”和“第二”的词语用于任意地在这样的词语描述的元素之间相区别。因此,这些词语不必然意欲指示这样的元素的在时间上或其他的优先化。仅在相互不同的权利要求中描述特定措施的事实不指示不能有益地使用这些措施的组合。