使用列的图像分割方法和系统与流程

文档序号:12183635阅读:213来源:国知局
使用列的图像分割方法和系统与流程

本申请要求2010年12月28日提交的、标题为"PICTURE SEGMENTATION USINGGENERALIZED SLICES”的美国临时专利申请序列号61/427,569以及2011年12月23日提交的、标题为“METHOD AND SYSTEM FOR PICTURE SEGMENTATIONUSING COLUMNS”的美国专利申请号13/336,675的优先权,以引用的方式将以上每个申请的全文并入本申请中。

技术领域

本发明的实施方式涉及视频编码,并且更具体而言涉及将编码图像分割成一个或多个列或片。



背景技术:

可以将数字视频能力包括在范围广泛的设备中,包括数字电视机、数字直接广播系统、无线广播系统、个人数字助理(PDA)、膝上型计算机或桌上型计算机、摄像机、数字记录设备、视频游戏设备、视频游戏控制台、蜂窝或卫星无线电话等等。数字视频设备可以实现视频压缩技术,如诸如MPEG-2、MPEG-4的标准中所述的那些视频压缩技术,其中,可以从位于瑞士CH—1211日内瓦20,邮政信箱56,Voie-Creuse第一大道的国际标准组织(“ISO”)或www.iso.org或ITU-T H.264/MPEG-4第十部分,高级视频编码(“AVC”)获得,从位于瑞士CH-1211日内瓦20万国宫广场的国际电信联盟(“ITU'’)或www.im.int获得MPEG-2、MPEG-4标准,以引用的方式将以上每个标准的全文并入本申请中,或者根据其他标准或非标准规范实现视频压缩技术,以有效地编码并且/或者解码数字视频信息。

视频编码器可以接收未编码视频信息以便处理成任意合适的格式,该格式可以是符合(可从位于瑞士CH-1211日内瓦20万国宫广场的国际电信联盟(“ITU'’)或wvw.讧u.int获得的并且以引用的方式全文并入本申请的)ITU-RBT6016勺数字格式或者一些其他数字格式。可以将未编码视频在空间上组织成配置在一个或多个二维矩阵中的像素值并且在时间上组织成一系列未编码图像,其中,每个未编码图像包括一个或多个上述提到的二维像素值矩阵。此外,每个像素可以包括用于以数字格式表示色彩的多个独立的分量。用于被输入到视频编码器的未编码视频的一个常用格式对于具有四个像素的每个分组具有四个辉度样本和两个色度样本,其中,该辉度样本包括关于像素的亮度/光亮或黑暗的信息,该色度样本包括颜色信息(例如YCrCb 4:2:0)。

视频编码器的一种功能是将未编码图像转译(更普遍而言“转换”)成比特流、分组流、NAL单元流或其他合适的传输格式(全都被在今后称为“比特流”),其目标在于例如降低编码到比特流中的冗余的数量以由此增加传输速率,增加比特流的恢复能力以抑制在传输期间可能发生的比特错误或分组擦除(统称为“差错恢复能力”)或其他专用目标。本发明的实施方式具备以下之中的至少一个:冗余的去除或降低、差错恢复能力的增加以及并行处理架构中的视频编码器和/或相关解码器的实现。

视频解码器的一个功能在于接收由符合相同的视频压缩标准的视频编码器产生的比特流形式的编码视频作为它的输入。视频编码器然后将接收编码比特流转译(更普遍而言“转换”)成可以被显示、存储或以其它方式处理的未编码视频信息。

可以使用包括硬件和软件的组合的硬件和/或软件配置实现视频编码器和视频解码器。视频编码器和视频解码器中的任意一个或两个的实现可以包括可编程硬件组件如(如个人计算机(PC)中发现的那些)通用中央处理器CPU、嵌入式处理器、图形卡处理器、数字信号处理器(DSP)、现场可编程门阵列(FPGA)等等的使用。为了实现视频编码或解码的至少一部分,可能需要指令,并且可以使用一个或多个非瞬态的计算机可读介质存储并且分配那些指令。计算机可读介质选择包括压缩盘只读存储器(CD-ROM)、数字视频盘只读存储器(DVD-ROM)、记忆棒、嵌入式ROM等等。

在下文中,将描述与视频压缩和解压缩的至少一个广义方案(即视频编码器和/或解码器中执行的操作)关联的特定系统、方法和/或方案。视频解码器可以执行与编码操作相逆的操作的全部或子集。若非另外注释,则本文所述的视频编码技术还适用于包括所述视频编码技术的逆向(即与视频解码相关联)。

可以将未压缩的数字表示的视频视为样本流,其中,可以由视频显示器在扫描次序中处理样本。在该样本流中通常出现的一种类型的边界是样本流的图像之间的边界。许多视频压缩标准识别该边界并且通常例如通过在每个未编码图像的开头插入图像报头或其他元数据来分割在这些边界上的编码比特流。

对于一些应用,将编码图像分割成更小的数据块可能是有利的,其中,该分割可以发生在编码之前或期间。下文描述了可以受益于图像分割的两个使用情况。

第一种该使用情况涉及并行处理。在以前,标清视频(例如720x 480或720x 576个像素)是广泛的商业使用中的最大格式。最近,出现并且在各种各样的应用空间使用(高达1920x 1080个像素的)HD格式以及4k(4096x 2048个像素)、8k(8192x 4096个像素)以及更大的格式。尽管近些年来可负担的计算能力增加,但是由于与这些更新的或更大的格式中的一些格式相关联的的非常大的图像尺寸,调节并行处理的效率对编码并且解码过程通常是有利的。并行编码和解码可以发生在指令等级(例如使用SIMD)、在可以在不同阶段上同时处理多个视频编码单元的流水线中或者在由独立的计算引擎作为独立的实体(例如多核通用处理器)来处理视频编码子单元的集合的大型结构基础上。并行处理的最后一个形式需要图像分割。

第二种该使用情况涉及图像分割以便创建适用于在分组网络上的有效传输的比特流。基于IP或其他分组网络协议来传输编码视频的编解码器可能受到最大传输单元(“MTU”)尺寸限制。对于编码片尺寸而言,有时候包括编码片的结果分组尽可能地接近MTU尺寸而不超过该尺寸是有利的,以便保持高的有效载荷/分组化开销比率,同时避免被网络分段(以及结果导致的更高的损失概率)。

MTU尺寸在一个网络到另一个网络之间变化很大。例如,可以由通常用于因特网的网络基础设施的最小MTU尺寸设置许多因特网连接的MTU尺寸,其中,该最小MTU尺寸通常对应于以太网中的极限并且可以大致为1500个字节。

编码图像中的比特的数量依赖于许多因素如源图像的尺寸、希望的质量、就预测适宜性而言的内容复杂度、视频编码标准的编码效率以及其他因素。然而,即使在适中的设置质量和内容复杂度上,对于HD分辨率以及更高分辨率的序列,平均编码图像的尺寸轻易地超过MTU尺寸。视频会议编码器可能例如需要大约2Mbit/sec,以编码720p60视频序列。这导致大致33000比特或4215字节的平均编码图像尺寸,这比因特网的MTU尺寸的近似1500个字节多相当多。在更高的分辨率上,平均图像尺寸增加到显著高于因特网的MTU尺寸的值。假设与以上720p60中类似的压缩比,60fps上的4096x 2048(4k)视频(4kp60)可能对于每个编码视频图像需要超过300000个比特或25个MUT大小的分组。

在许多视频编码标准中,图像段(或至少一种形式的图像段)被称为“片”。在下文的描述中,可以将用于破坏任意形式的图像内预测或其他编码机制的任意类型的(例如基于视频编码标准的)编码图像分段概括地称为“片”。就这点而言,诸如(从见以上用于H.264的ITU可得的)ITU.T Rec.H.261或ITU Rec.H.263中的块组(“GOB”)、H.264或MPEG标准族中的片之类的结构中的每一个结构可以构成遍及本文所使用的术语“片”。然而,RFC3984的分段单元或H.264的数据划分片段即使将编码图像的比特流细分成更小的数据块也不能构成遍及本文所使用的术语“片”,因为他们没有破坏图像预测或另外的编码机制。

在媒体未知的分割机制例如由路由层的IP提供的那些分割机制上使用片的一个优点在于片至少在一定程度上可独立地解码(如下文更详细地讨论的)。一个片的损失因此不会必然致使编码图像的其他片不可用或不可解码。根据分段机制的实现,分段的损失可能相反地致使许多其他分段不可用。

可以通过图像报头(或等效物)的解码破坏许多或全部图像内预测机制或编码机制。那些预测机制是否还被片报头的检测破坏取决于视频压缩标准和使用的片的类型。

在H.264中,可以将单独的视频图像分割成一个或多个片,由此适应需要或另外利用这样一种图像的应用,其中,该图像被分割成编码/解码过程的一部分。可以相对于运动向量预测、内部预测、CA-VLC和CABAC状态和H.264标准的其他方案独立地解码H.264中的片。虽然该解码独立性可以实现差错恢复能力的增加,但是不允许前述的跨片边界的预测可能易于降低编码效率。

在H.263中,视频编码器在选择通过片或带有非空GOB报头的GOB的使用来破坏哪些预测机制方面具有更大的弹性。例如存在这样一种比特,其中,该比特被包括在图像报头中,当附件R被使用时可选择该比特,该比特向解码器发信号通知跨片/GOB边界没有发生任何预测。如果未设置该比特,则运动向量可以指向到当前片之外,因而潜在地“输入”用于当前片内部的运动补偿的样本值。此外,环路滤波可以包括片外部的样本值。

在大部分或全部现有视频编码标准中,除了用作H.264的一部分的灵活宏块排序(“FMO”)的可能的例外之外,按照光栅扫描次序来排序片中的宏块。结果,当将具有大的图像尺寸的视频序列分割成仅包括该图像中的全部宏块的相对小的百分比时,片在空间上被观察时往往被拉长。

图1显示了根据现有技术被分解成片的示例性图像100。示例性图像100具有6x 4个宏块的矩阵101,通过细线指示它们的边界。图像100被分割成两个片102、103,其中,由粗线指示两个片102、103之间的片边界104。第一片102按照扫描次序包括10个宏块,具体而言宏块1到10。第二片103包括矩阵101中的其余14个宏块(即宏块11到24)。宏块中的数字(例如宏块105中的数字“11”)是根据扫描次序的宏块地址。

比特流106表示与图像100相对应的编码图像并且可以包括一个或多个参数集合107作为高级语法结构的一个实例,其中,该高级语法结构可以包括与图像100的多个编码片相关的语法元素。参数集合107之后可以紧接着一个或多个片,其中,每个该片分别包括对应的片报头108、110和对应的片数据109、111。因此,在该实例中,片报头108可能与片数据109相关联并且可能对应于矩阵101中的片102,同时片报头110可能与片数据111相关联并且可能对应于片103。片报头108、110可以根据扫描次序包括诸如各自的片的第一宏块的地址之类的信息。例如当第二片103被编码到比特流106中时从包括用于指定宏块105的地址的第一宏块地址“11”的片报头110开始。

如图1中可以看出的,片102和103有点被拉长,在某种意义上而言片102和103中的每一个在水平上(即6个宏块)比在垂直上(即2到3个宏块)跨越更多宏块。由于在水平上从一端到另一端的大的距离的结果,拉长的片如片102和103往往包括不同的图像内容。此外,拉长的片往往具有低的片面积对片周长/边界比率。当与包括更多正方形图像区域如正方形或其他接近正方形的几何图形的片相比时,从编码效率观点而言,包括不同的图像内容的片与相对低的面积对周长/边界比率的组合可能是不利的。在本说明书的下文中可以将具有该几何特性的片称为“紧凑”片。

还可以对于正方形图像纵横比优化许多具有二维特性的熵编码工具如运动向量或内部预测模式的编码。例如在H.264中,给定长度的水平运动向量的编码与相同长度的垂直运动向量的编码大致花费相同的比特数量。因此,这些编码工具可以对于紧凑片产生比“拉长”片如图1中显示的片102和103更好的压缩。

与在拉长片中更有可能发现的相对不同的内容相比可以更有效地编码在紧凑片中更有可能发现的同质内容的事实可能进一步产生对于紧凑片的改善的编码效率。作为一种普遍的但不必绝对的规则,在紧凑片中图像内容更有可能是同质的,因为平均而言,紧凑片的从片的中心到边界的空间距离比拉长片更小。此外,对于紧凑片具有更大的片面积对片边界比率意味着在给定图像中通常可以破坏更少的预测机制,由此导致更高的编码效率。

在H.264中,FMO通过定义矩形片组,允许视频编码器有效地产生矩形片。FMO是为了解决视频编码中遇到的多个问题而设计的高度概括的编码工具。然而,从实际观点看来,往往发觉FMO具有相对高的实现复杂度,导致作为标准视频压缩的方案有点受限。可以利用改善的编码效率以及并行编码和解码的更简单的编码工具可以解决或减轻与完全FMO实现相关联的的一个或多个复杂度问题。

在许多基于MEPG-2的编码方案的极端情况中也可能出现拉长片的问题。例如在MPEG-2编码中,通常的情况是将图像之中的每行宏块编码到片中,由此有效地破坏图像中的垂直维度中的任意图像中预测机制。

矩形片模式是H.263的附件K中规定的两种子模式中的一种子模式,另一种子模式是“扫描次序片模式”,扫描次序片模式具有与上文所讨论的H.264的片相似的特性。H.263中规定的矩形片可以提供一个或多个前文所述的由紧凑片提供的优点。然而,H.263要求必须在每个片的对应的报头中传递该片的维度(具体而言宽度),这例如在水平维度中的片尺寸从一个图像到另一个图像不改变的应用中导致编码低效率。另外,H.263的附件K没有规定将有效地防止使用垂直拉长的片的最小片宽度。垂直拉长的片可能引起实现困难,并且,由于上文针对水平拉长的片所讨论的原因,将不会在每个情况中提供通过更紧凑的片的使用而可以提供的希望的编码效率优点。

在某些情况中限制片具有矩形形状也可能是不利的。首先,矩形片可以在这样一种应用中次优地执行,其中,比特流对于该应用使用受制于MTU的传输协议。例如,如果给定分组中的比特的数量超过比特流上强制的MTU限制,则可以对该分组进行分裂,这从最小网络性能和差错恢复能力观点而言是不希望的。相反,如果给定分组中的比特的数量远低于该MTU限制,则传输和片报头中的比特数量的比率与分组有效载荷中的比特数量相比变得比较大,由此导致编码低效率。在形状上要求片矩形限制了编码器精确地控制编码片中的比特数量以避免上述缺点的能力。

其次,矩形片可以在利用并行编码和/或解码的应用中也次优地执行。当进行并行编码和/或解码时,将图像分割成不同的部分以使得该图像的每个部分需要近似相同的计算量来编码是特别有利的。通过按照该方式分割图像,因此可以用几乎相同的延迟来编码图像的每个部分,以由此降低或最小化图像的不同部分的编码时间之间的滞后。限于使用矩形片的编码器可能无法精确地控制解码和/或编码每个片所需要的CPU容量的数量并且由此避免该潜在的缺点。

为了有助于属于同一编码图像的片的并行解码,解码器通常将编码图像段分配给各种各样的处理器、处理器内核或对于用于并行解码的解码器可用的其他独立地操作的解码机制。对于以前的视频编码标准而言,在不使用FMO的情况下,这通常在一些极难的情况中是难以处理的任务,因为那些以前的标准将在比特流的生成中允许过多的弹性。例如在H.264中,也可能是在同一比特流中将一个图像编码在单个片中并且将另一个图像编码在数打片中。如果并行化发生在片等级上,则当将图像编码在单个片中时,将需要提供为了解码该图像而分配的处理器,以完整地处理它的解码。结果,在不强制视频编码标准的外部限制的前提下,如果每个解码处理器需要被配备为能够在任意情况中处理整个图像,则通过建立并行解码器所实现的优点将比较少。

普遍地将在许多MEPG-2编码器中使用的片编码视为同意利用非正式的缆线实验室规范的结果,其中,该规范建议每个宏块行分割为一个片的方案。该非正式规范最终获得了广泛的接受。尽管当第一个MPEG-2产品在大约1995年变得可用时在该分割方案中可能具有价值,但是即使(至少所谓的SD)图像的解码的并行化在近十年来已经相对不是问题,如今与历史规范相关联的的各种各样的约束也可能显著地限制编码效率。

因此需要一种在MTU尺寸匹配和并行解码两方面解决、减轻视频编码器的现有缺点或提供有用的备选的改进的图像分割方法和系统。因此,需要一种至少部分地解决以上以及其他缺点的技术方案。



技术实现要素:

本发明的实施方式在一个或多个广义的方案中涉及用于将编码图像分割成列或片的技术。

在一些实施方式中,可以在位于一个或多个高级语法结构(如片报头或参数集合)中的一个或多个语法元素中定义多个列。如此定义的列可以是例如一个编码树块(如例如WD4(从http://wftp3.itu.int/av-arch/jctvc-sit/2011_07_f_Forino/可获得的、由B.Bross等人所著的“WD4:Working Draft 4 of High-Efficiency Video Coding”)中所定义的CTB)与CTB中测量的图像的整个水平尺寸之间的任意宽度。

在一些实施方式中,相邻列之间的列边界可能破坏视频编解码器的一个或多个预测机制或环路滤波机制。被列边界破坏的预测或环路滤波器机制可以与被片边界破坏的那些预测或环路滤波器机制相同或不同。

在一些实施方式中,用于计算并且指定列宽度的粒度可以是最大编码单元(LCU),并且编码树块(CTB)可以与LCU具有相同的尺寸。

在一些实施方式中,可以由语法元素N定义N个列,其中,该语法元素N指示图像中的列的数量,并且该语法元素N之后紧接着N-1个用于指示该N个列中的每个列的对应的宽度的N-1个语法元素。可以例如通过从图像的宽度减去最左边的N-1个列的宽度的和来计算指定的列(例如最右边的列)的宽度。

在一些实施方式中,(除了或许对于一个预定义的列(如最右边的列)之外,其中,该预定义的列可能具有更小的宽度)图像中的每个列可以具有相等的宽度,并且语法元素W可用于指示(除了一个预定义的列之外的)每个列的该相等的宽度。可以将语法元素W例如放置到高级语法元素结构(如参数集合)中。在该情况中,可以基于涉及W与由N所表示的图像宽度的除法运算来确定该一个预定义的列的宽度,从而可以将该一个预定义的列的宽度作为当N被W除时的余数。

|在一些实施方式中,(除了或许以CTB为单位的图像宽度不能被N整除的情况中对于一个预定义的列(如最右边的列)之外,其中,该预定义的列可能具有更小的宽度)图像中的每个列可以具有相等的宽度,并且语法元素N可用于指示(除了一个预定义的列之外的)宽度相等的列的数量。在该情况中,可以通过将以CTB为单位的图像宽度除以N来确定全部N个列的宽度,其中,该预定义的列的宽度然后等于该除法运算的余数。

在一些实施方式中,语法元素N可用于指示图像中的列的数量。以LCU为单位的相等的列宽度W等于以LCU为单位的图像宽度除以N。

在一些实施方式中,如果图像宽度不能被相等的列宽度W整除,则一个预定义的列(例如最右边的列)的宽度可能是图像宽度(例如以CTB测量的)与W-1之间的除法运算的余数。

在一些实施方式中,片可以包括一个或多个CTB,其中,每个CTB位于单个列中,由此使得MTU尺寸匹配,同时仍然允许通过列的并行化。

在一些实施方式中,片可以包括位于大于一个列中的CTB。

在一些实施方式中,可以在片报头或类似的语法结构中调整列的宽度,由此允许“负载平衡”编码器中的计算资源。如果在源图像顺序中不同水平区域中的内容复杂度不同,则列宽度的这种调整可能是有利的。

在一些实施方式中,高级语法元素可用于固定图像的全部列的尺寸,由此在并行编码或解码情况中允许每个列到单个处理器或等效物的有效的分配。

在一些实施方式中,可以强制对于列的最小和/或最大水平宽度的限制。该限制可以在一些情况中辅助并行化并且可以改善编码效率。可以例如将该限制编码到标准的等级规范中或高级语法元素中,或者可以通过优化可能涉及MTU尺寸和每CTB的平均比特(其可以源自比特率、帧速率和以CTB为单位的帧尺寸)的功能来调整该限制。

在一些实施方式中,CTB的扫描次序可用于解码和/或编码,根据该扫描次序,可以在第一等级上按列从左到右经过图像中的所有列并且在该第一等级之下的第二等级上按CTB从左到右并且从上到下经过给定列中的全部CTB,按照排序次序处理CTB。

在一个广义的方案中,提供了一种用于编码包括多个编码树块(CTB)的视频图像的方法,其中,该CTB被配置成至少两个CTB行和至少一个CTB列。该方法可以涉及编码至少一个列中的每个列的对应的列宽度,每个列宽度大于零并且所有列宽度的和等于该视频图像的水平尺寸,并且编码该视频图像的至少一个片。在一些情况中,该至少一个片可以包括位于至少两个CTB行中的至少两个CTB。

在另一个广义的方案中,提供了一个或多个非瞬态计算机可读介质,其中,在该非瞬态计算机可读介质上存储指令,该指令被配置为使得一个或多个处理器能够执行一种用于视频编码包括多个编码树块(CTB)的视频图像的方法,其中,该CTB被配置成至少两个CTB行和至少一个CTB列。该方法可以包括编码至少一个列中的每个列的对应的列宽度,每个列宽度大于零并且所有列宽度的和等于该视频图像的水平尺寸,并且编码该视频图像的至少一个片。在一些情况中,该至少一个片可以包括位于至少两个CTB行中的至少两个CTB。

在一些实施方式中,根据以上两个方案中的任意一个,该方法可以进一步包括在CTB的相邻列之间的列边界处破坏至少一个形式的预测或环路滤波。

在一些实施方式中,根据以上两个方案中的任意一个,该方法可以进一步包括将列的数量和列的宽度中的至少一个编码到参数集合中。

在一些实施方式中,根据以上两个方案中的任意一个,至少一个列的对应的列宽度在该视频图像的至少两个CTB行之间可能是可变的。在该实施方式中,可以通过编码片报头中的对应的列宽度来控制这种可变性。

在一些实施方式中,根据以上两个方案中的任意一个,该方法可以进一步包括按照该多个CTB的扫描次序编码该多个CTB,其中,根据该多个CTB的扫描次序,按列从左到右经过多个列并且在该多个列的每个列中按CTB从左到右并且从上到下顺序地编码该多个CTB。

在另一个广义的方案中,提供了一种用于解码包括多个编码树块(CTB)的编码视频图像的方法,其中,该CTB被配置成至少两个CTB行和至少一个CTB列。该方法可以包括获得(i)至少一个列中的每个列的对应的列宽度和(ii)列数量中的至少一个,(如果未从该编码视频图像获得至少一个列中的每个列的对应的列宽度则)导出至少一个列中的每个列的对应的列宽度,并且解码编码视频图像的至少一个片。在一些情况中,该至少一个片可以包括位于至少两个CTB行中的至少两个CTB。

在另一个广义的方案中,提供了一个或多个非瞬态计算机可读介质,其中,在该非瞬态计算机可读介质上存储指令,该指令被配置为使得一个或多个处理器能够执行一种用于视频解码包括多个编码树块(CTB)的编码视频图像的方法,其中,该CTB被配置成至少两个CTB行和至少一个CTB列。该方法可以包括获得(i)至少一个列中的每个列的对应的列宽度和(ii)列数量中的至少一个,(如果未从编码视频图像获得至少一个列中的每个列的对应的列宽度则)导出至少一个列中的每个列的对应的列宽度,并且解码编码视频图像的至少一个片。在一些情况中,该至少一个片可以包括位于至少两个CTB行中的至少两个CTB。

在一些实施方式中,根据以上两个方案中的任意一个,该方法可以进一步包括在CTB的相邻列之间的列边界处破坏至少一个形式的预测或环路滤波。

在一些实施方式中,根据以上两个方案中的任意一个,可以从参数集合获得该至少一个列中对应的列宽度和列数量。

在一些实施方式中,根据以上两个方案中的任意一个,至少一个列的对应的列宽度在编码视频图像的至少两个CTB行之间可能是可变的。在该实施方式中,可以通过编码片报头中的列宽度来控制这种可变性。

在一些实施方式中,根据以上两个方案中的任意一个,该方法可以进一步包括按照该多个CTB的扫描次序解码该多个CTB,其中,根据该多个CTB的扫描次序,按列从左到右经过多个列并且在该多个列的每个列中按CTB从左到右并且从上到下顺序地解码该多个CTB。

在一个广义的方案中,提供了一种用于包括多个编码树块(CTB)的编码视频图像的视频解码器,其中,该CTB被配置成至少两个CTB行和至少一个CTB列。该视频解码器可以包括多个列解码器,其中,每个列解码器被配置为解码编码视频图像的位于被分配给该列解码器的至少一个CTB列中的片。

在一些实施方式中,根据以上方案,每个片可以完全确切地位于一个列中。

在一些实施方式中,根据以上方案,每个列解码器可以是运行在多核处理器内核或多处理器中的至少一个上的过程。

根据所述实施方式的进一步的方案,提供了一种装置如数据处理系统、一种用于调整该装置的方法以及制品如非瞬态计算机可读存储介质或者其上记录用于实施本文所述的方法的程序指令的产品。

附图说明

本发明的实施方式的各种特征和优点将从结合附图所进行的下文的详细描述变得显而易见,其中,:

图1是示出了具有扫描次序片和宏块地址的一个示例性图像的图示;

图2是示出了根据本发明的一个实施方式的列和片的图示;

图3是示出了根据本发明的一个实施方式的列和(给定列本地的)片的图示;

图4是示出了根据本发明的一个实施方式的示例性解码器的操作的流程图;

图5是示出了根据本发明的一个实施方式的列宽度的修改的图示;

图6是示出了根据本发明的一个实施方式当解码片时示例性解码器的操作的流程图。

图7是根据本发明的一个实施方式具有两个列处理器的解码器的方框图;以及

图8是示出了根据本发明的一个实施方式的基于数据处理系统(例如个人计算机(“PC”))的实现的方框图。

应当注意的是,在整个附图中由相同的参考数字识别相同的特征。

具体实施方式

在下面的描述中,阐述了细节以提供对本发明的理解。在一些实例中,未详细地描述或示出特定的软件、电路、结构和方法,以免模糊本发明。在本文中使用术语“数据处理系统”来指代用于处理数据的任意机器,包括本文所述的计算机系统、无线设备和网络配置。可以用任意计算机编程语言来实现本发明的实施方式,只要数据处理系统的操作系统提供可以支持这些实施方式的要求的设施。也可以用硬件或用硬件和软件的组合实现本发明的实施方式。

本发明的实施方式涉及视频压缩中使用列和片的图像分割。

参考图2,图2显示了根据本发明的实施方式的图像201的示例性的分割200。图像201被分割成多个编码树块或宏块(在后文中被称为“CTB”)。在该实例中,图像201具有6x 4个CTB的尺度。通常将CTB的边界显示为细线。CTB的属性以及他们的具体尺度是可变的并且可以根据不同的实施方式而改变。虽然下文的描述假设被包括在图像201中的CTB是正方形的并且具有相等的尺寸(例如如同通常用于H.264中的宏块一样),但是本发明的特定实施方式可能不需要该特性并且可以利用具有不同尺寸的CTB来操作,只要在该实施方式中能够使用那些不均匀尺寸的CTB来定义一个或多个水平列。可以例如利用如H.264交织编码中所使用的宏块对或者利用H.263的降低分辨率的最新模式来操作本发明的实施方式。如果在同一图像中存在例如32x 32、16x 16和8x8的样本,则也可以操作该实施方式。

在图像201中定义了两个列202、203,并且图中显示由黑体实心线204所示的列边界分割两个列202、203。任意列的宽度可以是图像201中所使用的CTB的尺寸的整数倍数(或者最小可能CTB尺寸的整数倍数)。在图像201中列可以具有相等或不相等的宽度。如图所示,列202包括CTB 1到8,并且列203包括CTB 9到24。列202的宽度为两个CTB,并且列203的宽度为四个CTB。然而,所述实施方式不限于该列数量也不限于图1中所显示的示例性列宽度。

图2还显示了在图像201中定义的并且有黑体断续线205划定的两个片。第一片包括CTB地址为1到14的CTB。第二片包括地址为15到24的CTB。第一片的CTB 1-8位于列202中,而第一片的CTB 9-14位于列203中。因此,第一片覆盖作为列202和203中的任意一个的一部分的CTB。第二片包括全部位于列203中的CTB 15-24。因此,图像201中的CTB的扫描次序已经从如图1中所示的按图像扫描次序改变为如图2中所示的按列扫描次序。根据该按列扫描次序,首先按列本地的扫描次序(从左到右,从上到下贯穿列202)枚举列202的CTB,之后才(按以类似的方式定义的按列本地的扫描次序)枚举列203的CTB。如果合适的话/在合适的情况中,可以将图2中所显示的按列扫描次序扩展到已经针对其定义了多于两个列的图像。

编码比特流206表示图像201并且可以包括参数集合207(或者可以包括到以前已解码的参数集合的参考,因为多个图像可以涉及同一参数集合)。参数集合207可以包括列边界信息208,用于直接地或间接地识别一个或多个列(例如如稍后所述的列202和203)的宽度。每个编码片可以分别包括对应的片报头209、211和对应的片数据210、212。

如图2所示,具有跨越列边界的片的图像分割可以提供一个或多个优点例如(除了给定图像的最后一个片的可能的例外之外)可以调整所有编码片的尺寸以尽可能紧密地匹配MTU尺寸213,这至少部分地由于编码片可能不包括编码CTB部分。在图2的该实例中,将两个编码片(每个编码片包括各自的片报头209、211和片数据210、212)显示为尺寸大致相同,以便指示这些编码片携带大致相同数量的比特,其中,该数量可以是小于但是接近MTU尺寸213的数量。将MTU尺寸213显示为时间间隔,该时间间隔在该实例中对于两个片是恒定的。在大部分情况中,虽然MTU尺寸213是网络特性并且对于任意分组是恒定的以便通过片的使用优化分组有效载荷,但是其他考虑可能迫切要求对于编码片采用可变目标尺寸。例如对于差错恢复能力而言,一些分组除了它们的片有效载荷之外还携带参数集合的冗余版本是有用的。在该情况中,从一个分组到另一个分组因此同样从一个编码片到另一个编码片,该MTU尺寸213可以不同。贯穿本说明书在广义的意义上使用术语“MTU尺寸”。

允许片跨越跨多个列之间的边界的该多个列的一个优点在于考虑到良好的MTU尺寸匹配。随着片能够跨越多个列,由于列边界的出现,没有任意一个列的尺寸将受到人工限制。另一个优点可以是能够将整个图像表示成单个片(例如在大多数情况中MTU尺寸大于已编码图像尺寸),同时仍然考虑到并行化。为了方便起见,可以假设列边界破坏所有形式的预测或环内滤波。在该假设之下,并行编码器的一个示例性配置可以如下。并行解码器的每个处理器/内核可以开始编码列的空间区域,从该列中的左上端的CTB开始并且按照扫描次序顺序地运行到右下端的宏块即从左到右并且从上到下。假设图像中有N个列并且并行解码器有N个处理器/内核,该编码方法可能导致生成N个子比特流,每个子比特流来自每个处理器/内核。然后可以组合该N个子比特流以形成用于表示整个图像的单个比特流。接收该比特流的解码器可以从(例如被包括在该比特流中的)参数集合确定它的任务在于N个列中的并行解码。该解码器然后可以通过首先仅解码该比特流中所包括的语法元素(而不执行CTB的任意计算密集的重构)来预处理该组合比特流,以便识别比特流区域中的列之间的边界。作为一个实例,一个该边界将位于图像201的编码CTB 8与编码CTB 9之间。此后,解码器可以提取并且/或者将在预识别的边界处在组合比特流之中分解的子比特流复制到处理器/内核中以便处理。解码器中的处理器/内核可以在像素域中独立地重构它们的指定列,然后可以一起复制它们的指定列,以重构完整的图像。在下文中更详细地解释了其他可能的实现。

由于例如当预测和/或环路滤波机制的(小的)子集被列边界破坏时,并行化实现困难,所以使得片跨越列边界可能引起一个潜在缺点。例如如果将要在第一处理器上解码列202并且将要在第二处理器上解码列203,则解码引擎的状态(包括诸如CABAC状态、运动预测状态之类的信息)或者至少解码引擎的与未被列边界破坏的预测或环路滤波工具有关的那些部分将至少在一些情况中必须在CTB 8的解码之后从第一处理器切换到第二处理器,其中,CTB 8按列本地的扫描次序是列202中的最后一个宏块。该切换的实现和计算复杂度可能依赖于例如被该列边界的出现破坏的预测或环路滤波器工具。如果例如列边界破坏除了熵编码中的预测之外的任意形式的预测,则仅需要切换与熵编码引擎相关的信息。被整体并入本文的、2011年12月23日提交的、标题为“METHOD AND SYSTEM FOR SELECTIVELY BREAKING PREDICTION IN VIDEO CODING”的共同未决的美国专利申请序列号13/336,475披露了用于当片跨越列边界时控制需要切换的数据的数量的技术以及其他。

图3示出了以损失最佳可能MTU尺寸匹配为代价,在具体而言针对相等能力处理器(或其他并行处理实体如处理器内核)的并行处理而优化的较不普遍的情况300中在视频图像的片与列之间的交互。(该优化还可以依赖于通过列的使用而破坏的预测和环路滤波工具;共同未决的美国专利申请序列号13/336,475披露了用于控制受列边界影响的工具的技术以及其他。)

如在图3中可以看出的,图像301被分割成等宽度(在该实例中三个CTB宽)的两个列302、303,导致向列302、303中的每一个分配相似数量的CTB。在由给定处理器或内核处理给定列的假设之下,图像301到等宽度的列302、303的分割还可能导致对于每个处理器或内核的大致相等的负载。将列302与303之间的列边界304显示为黑体线。将列302的所有CTB编码到单个片305中。然而在列303中定义了两个片306、307并且两个片306、307一起包括列303的全部CTB,其中,片306、307中的每一个片被定义为保持在MTU尺寸限制之内。片305、306和307中的每一个可以例如满足MTU尺寸限制,而不管包括不同的宏块数量(分别是十二个、八个和四个),其中,对于列303的CTB需要比列302的CTB更高的平均比特数量,这可以发生在如果/当图像201的一个部分比另一个部分更“复杂”时的情况中。由黑体断续线指示列303之中的片306与片307之间的片边界308。应该注意到,片305和306比包括相似数量CTB但是按照图像扫描次序来排列的片更加“紧凑”得多。因此,列302和303的使用可能不仅助于(如下文将更详细地描述的)并行处理的使用,而还可以有助于编码效率。在该实例中,片307尽管与片305和306比不是非常紧凑,但是仍然可能比没使用列302和303更紧凑。如前所述,CTB的扫描次序再次被改变。

编码比特流309可以包括参数集合310,参数集合310包括列边界信息311。虽然在图3中可以将参数集合310显示为与编码图像的编码片相邻,但是在各种各样的实施方式中,参数集合可能位于比特流309中的别处或者甚至在一些情况中从带外传递。

该编码图像包括三个编码片(即片0、片1和片2),每个编码片分别包括对应的片报头312、314、316和对应的片数据313、315、317。编码片0包括编码片报头312和编码片数据313,编码片数据313包括片305的编码信息,并且编码片数据313被描述为具有略低于MTU尺寸318的尺寸(单位为编码比特)。编码片1包括(对应于片306的)编码片报头314和编码片数据315。在该实例中,当对片1进行编码时,编码器能够用片报头314和片数据315填充几乎像MTU尺寸318一样大的分组。注意到,填充到多达MTU尺寸318的最后一个比特可能不总是可行的,因为不能将CTB分段成超过一个片。因此,受制于该限制,在片中的最后一个CTB的编码之后可能剩下额外比特。最后,片2包括(对应于片307的)片报头316和片数据317,并且比MTU尺寸318小得多,因为与片0和片1相比在该片中存在更少要被编码的CTB。

可以在序列等级(例如在序列参数集合中)、在图像等级(例如在图像参数集合中)或者在覆盖至少一个编码图像的比特流中的其他数据结构中指定图像中的列的静态宽度。一次性对于序列或图像中的所以片指定列边界对于片宽度从一个图像到另一个图像不改变的应用而言有优点,因为对于每个图像不需要与指定不同的片结果相关联的的开销。其进一步具有在并行解码的情况中有效地允许编码比特在多个处理器或等效物之间的分配的优点。稍后描述动态列宽度调整。

可以使用一个或多个不同的数据结构、参数、规则、标志位或其他合适的语法指定列边界。使用序列参数集合(SPS)作为示例性高级语法结构来传递列边界,SPS可以例如包括:

(1)变量N,通过该变量来编码每个图像的列数量。在该情况中,如果/当必要并且/或者合适时,如果图像的宽度(以CTB为单位)可被N除尽,则可以通过将图像的宽度除以N来导出每个列的宽度(以CTB为单位)。否则,可以通过将图像的宽度除以N-1来计算N-1个列的宽度,从而最后的列(例如图像中的最右边的列)的宽度将是该除法运算的余数。

(2)变量W,通过该变量来编码列的最大宽度(以CTB为单位)。在该情况中,令N为图像的宽度除以W。则前N个列的宽度等于W,并且最后的列的宽度将是该除法运算的余数。

(3)变量N包括列数量,并且整数N-1的字段长久地包括用于表示每个该列的宽度的值。该选择考虑到如图2中所显示的不均匀的列宽度。

在熟悉了本文的公开内容之后,适用于不同应用的列边界信息的其他表示将可以显而易见并且旨在被覆盖在所述实施方式的范围中。

视频编码标准可以有利地设置用于可以出现在比特流中的最小或最大列宽度的极限。可以例如在配置文件和等级规范中指定该极限。对于高分辨率视频解码情况中的高级并行处理所设计的配置文件可能例如要求列必须与不大于例如1920个样本(通常可在单个内核中被解码的1080p分辨率具有1920个水平样本的分辨率)的宽度一起使用。另一方面,配置文件可能例如要求最小列宽度不小于640个样本。下限可以有助于避免最坏情况和Y维度中的“拉长”片。上限可用于大量不同的原因。首先,如前所述,由于更少并且更小的拉长片,可以改善编码效率。其次,编码器可以基于子图像解码器,其中,每个子图像解码器能够解码单个列(在下文中被称为“列解码器”)而无需能够处理完整的图像。再次,由于行缓冲器不需要跨越完整图像宽度而仅需要跨越列宽度,所以可以降低列解码器中的存储器要求(加上有可能的依赖于实现的边距)。关于列宽度的该上限的其他优点也可以显而易见。

接下来描述解码器在包括片和列的比特流上的操作,注意该操作与不使用列所生成的比特流的解码过程有何不同。为了方便起见,在下文的描述中,将假设根据以上选择(3)来执行列宽度的编码。然而,不应该将该描述理解为仅限于该类型的编码,并且如果必要/在必要的情况中,通过对该描述进行合适的修改和/或替换,该描述还将适用于以上所述的其他两个选择。

在现代视频编码标准中,可以将与超过一个片相关的参数存储在被称为参数集合的更高级的语法结构中。在更旧的标准中,可以将这些参数存储在报头如图像、GOP或序列报头中。为了有助于下文的描述,今后假设为参数集合,但是本发明的实施方式可以等效地利用其它形式的高级语法结构。

图4显示了用于示出根据本发明的实施方式的示例性解码器的操作的方法400。首先,为了能够解码片数据,可以将一个或多个参数集合解码(401)为存储在参数集合中并且可以通过存储在片报头中的参考来访问的参数。在一些实施方式中,参数集合可以包括与将要被解码的图像中所使用的列机制相关并且足以完整地定义与将要被解码的图像中所使用的列机制的信息。参数集合可以例如包括用于指示列数量(即图4中的“num_column_minus_1”)和除了最后一个列之外的每个该列的宽度(即图4中的“columnWidth[]”)的参数。编码图像中的最后一个列的宽度可以等于最右边的列边界与右手边的图像边界之间的距离。

可以作为参数集合解码(401)的一部分来解码(402)存储参数(例如“num_column_minus_1”和“columnWidth[]”)。解码(402)可以是解码(401)的子步骤并且可以在参数集合解码(401)期间的任意合适时间执行。可以例如由参数集合自身的语法(其可能强制在402中解码的信息相对于参数集合中的其他条目的位置)限制确切的次序。

如共同未决的美国专利申请序列号13/336,475中进一步所述的,在参数集合解码(401)期间,还可以解码与预测和/或环内滤波工具相关的信息。与预测和/或环内滤波工具相关的信息的解码在图4中通常被指示在403处并且也可以被视为参数集合解码(401)的一部分。

在方法400中的参数集合信息的解码(401)之后,片解码和重构可以开始。

首先,可以解码(404)片报头。在片报头中,可以获得允许解码器将给定片与包括该给定片的列相关联的的信息。片报头可以例如包括用于表示片中所包括的第一CTB的地址的CTB地址(即如图4中的“first_dtb_address”所指示的)。编码CTB地址可以被解码(405)并且用作在解码过程期间被解码器用于追踪当前CTB地址(即图4中的“currentCTB”)的参数的初始值。然后,可以基于片中所包括的第一CTB的地址,通过将该第一CTB与编码图像中所定义的特定的列相关联,识别(406)该片所位于的列。

例如往回参考图1,CTB地址(它的一个实例是在405处解码的CTB地址)可以是图像中按扫描次序的每个给定CTB的位置的熵编码表示,如图1的CTB中央的数字所示的。为了将片与列相关联,可以将给定片中的第一CTB的CTB地址的水平分量与对于编码图像所定义的列边界相比较,其中,可以从在参数集合的解码期间获得的(并且如下文所述有可能在稍后的片解码期间被修改的)列宽度信息导出该列边界。在本发明的一些实施方式中,如果可以限制每个给定片以存在于给定列内的整体中,则可以通过识别该给定片中的第一CTB所存在的列来将片与列相关联(因为通过定义可知,片中的所有剩余CTB将位于同一列中)。可以根据下文更详细地讨论的图6的方框611和612来进行该识别。

再次参考图4,识别(406)将要被解码的片的第一(初始)列。然后可以如一个或多个CTB解码可能符合的用于CTB解码的视频压缩标准中所指定地那样,进行片中的编码CTB的解码,其中,该解码可以包括多个步骤如除了CTB地址处理和基于片外部的数据的预测可用性来使用该数据之外的熵解码、运动补偿以形成预测器、系数的反量化和反变换以计算残差、向运动补偿预测器增加残差、对结果样本进行CTB内去块滤波等等。在下文中,概述了一个用于概述一个可能的实现策略的实例,但是在熟悉了本文的公开内容之后,其他策略也可以显而易见。

首先,可以解码CTB质地、运动和其他信息,并且可以重构(407)正在由解码器处理的当前CTB,其可以涉及以上在CTB解码的环境中所示的不同步骤中的任意一个或全部,然而还有注意到片或列边界外部的信息的预测能力。

然后可以将当前CTB地址增加(408)。如果确定(409)已增加CTB地址仍然在列的右手边界的左边,则不需要CTB地址的进一步的更新(在图4中通过将方框410直接绕到方框411的箭头来指示)。然而,如果确定(409)已增加CTB地址在该列之外(即等于或在列的右手边界的右边),则将CTB地址复位(410)成该列中的下一个CTB行中的第一CTB的地址。换句话说,将CTB地址的水平分量设置为该列的最左边的CTB(如图6中的参数“colBound[]”所指示的)并且将CTB地址的垂直分量增加一。

如果在执行方框408到410之后,CTB地址的垂直分量超过该图像的垂直尺寸,则片可能跨越超过一个列。在该情况中,可以例如将CTB地址复位到以前的列的左边的列中的左上端的CTB地址。在该列中继续解码和CTB地址改变。

此时,确定(411)在将要解码的片中是否可获得更多(用于指示一个或多个CTB的)数据。如果确定(411)在将要解码的片中剩余更多数据,则方法400回到(412)方框407,并且继续对该片中的下一个CTB解码。然而,如果确定在将要解码的片中不剩任何数据,则方法400回到(413)方框404,并且继续对该图像中的下一个片解码。

根据本发明的实施方式,解码器可以从高级结构(如图像或序列参数集合)读取(初始)列边界信息。这可以例如在用于从比特流解析第一语法元素(即“num_column_minus_1”)的机制中实现。该语法元素可以有利地是图像(或更高的)语法结构(如图像参数集合、序列参数集合、图像报头或类似的结构)的一部分。如果“num_column_minus_1”的值大于0,则可以推断出现在一致性(conformant)比特流中的列边界的数量等于在该参数中存储的值,并且可以解析num_column_minus_1的列宽度。可以用CTB的方式指示对应地解析的列的宽度。以H.264语法规范的风格指定上述语法,为了方便起见在下文中概述了该语法的一部分。

具体而言,在下文提供的语法描述中,与无格式行相比的黑体变量(即下文的第一行到第四行)可以表示作为确定变量值的副作用或者否则结合确定变量值而从比特流获取的比特。在读取该值之后,该值可用于解码过程,然而不再将该变量设置为黑体,因为该变量的使用从该时刻开始不再与比特流获取相关联。

如果根据给定的压缩标准可以在超过一个等级处指定列边界,则列边界的语法可以在各种各样的等级(例如序列和/或图像等级)上相同。在该情况中,在相对较低的等级(即图像等级)上指示的列边界可以优先于在在相对较高的等级(即序列等级)上指示的列边界。

已解析column Width[]值可用于如下所示地导出列边界:

在下文中,描述可以在图像的编码期间(即在片等级上)调整列边界的本发明的实施方式。

参考图5,图5显示了用于示出根据本发明的实施方式的列宽度修改500的图示。在图5中,可以在片等级上(例如基于来自片报头的信息)修改列边界的位置。修改500可能仅与当前图像有关并且与编码比特流中的其他图像无关。当涉及编码处理并行化并且可以由独立的处理器或类似的单元处理列时,修改500可以提供这样一种优点,其中,该优点在于可以根据有可能来自外部负载因子(其它过程与视频编码不相关)的处理器负载、内容复杂度(从一个列到另一个列其可以改变)或其他因子,调整每列的CTB数量。

在下文的描述中,为了方便起见,使用片报头传递修改信息,因为在特定环境中片报头可能是在H.264中最适合用于该目的的语法结构。用于与超过一个片相关的信息的片报头的使用不必符合H.264的语法模型(例如,在H.264中,与超过一个片相关的全部信息应当仅被包括在参数集合中),但是符合某些比较旧的视频压缩标准(例如,在H.261中,可以从以前的GOB报头预测GOB报头信息,并且GOB至少在一些方案中类似于或等效于H.264片)。与此同时,如果要在较新的视频压缩标准中包括这样一种机制,其中,该机制将允许在不仅与当前片相关的片等级上的特性的编码,则该语法结构可能在一些情况中对于出现在片报头本身之下的信息处于更合适的位置。例如在WD4中包括自适应参数集合(APS),该APS被设计为携带有可能从一个图像到另一个图像改变的信息(与用于携带不可能从一个图像到另一个图像改变的信息的图像参数集合相反)。在JCT-VC中还考虑允许在片边界“更新”APS的提案,该提案如果被接受则还将使得APS成为用于如下所述的列宽度更新信息的合适的语法结构。

在本发明的一些实施方式中,当当前图像的编码/解码完成时,已通过下文所讨论的覆盖机制被改变的列边界回复到在图像或序列等级指定的位置。该特征可以至少部分地补偿使用片报头来编码与超过一个片相关的信息而导致的架构不洁净。例如不允许使用图像报头和H.264中的类似的数据结构的一个可能的原因在于避免由于破坏的报头结构而导致的差错传播。在每个图像之后回复到(已经被设计为非常难以被破坏的)参数集合中所传递的数据可以确保报头破坏仅限于一个给定图像,而不对于已经发生了报头破坏的图像之后的所有图像。

在图5中显示了两个原始列边界501和502,其中,将原始列边界501和502描述为断续的黑体垂直线。在该实例中,假设编码器由于某种原因而希望降低最左边的列503的列宽度。解码器进行该调整的动机通常不受限制并且可以包括例如处理器负载平衡方案或最左边的列中的内容(与其他列相比)相对高的编码复杂度(其将在该列的CTB中导致更多比特),并且结果除非降低该列宽度否则将导致拉长片。

根据修改500,列边界502跨越该图像的整个垂直高度,而列边界503仅跨越该图像的整个垂直高度的一部分即两个最上边的CTB行。其余的列边界相对于列边界501偏移并且因此最左边的列边界503具有可变的宽度。列503可以例如被分割成具有不同宽度的两个不同的片。如图5中所示的,列503中的片504可能具有由原始列边界501设置的第一宽度,而列503中的片505可能具有与该第一宽度不同并且由根据修改500的偏移列边界设置的第二宽度。

可以通过包括边界偏移值以便如果该偏移值为负则将列边界例如向左移动或者可替换地如果该偏移值为正则将列边界例如向右移动,来在片等级上修改列边界。在最右边的列503中的片505的片报头可以例如包括这样一种信息,其中,该信息的程度以致如关于片504所定义的最左边的列与中间列之间的原始列边界关于片505向左移动一个CTB。结果,CTB 22现在属于中间列(与最左边的列503相反),并且在最左边的列503中继续对片505编码,其中,在该特定的实例中,片505包括CTB 20、21、30、31、40、41、50和50。

存在大量角落情况,其中,从高速缓冲存储器的观点看来该角落情况可能潜在地使得上述修改500的实现看起来不必要地复杂和/或无效率。然而,可以由可以在各种各样的实施方式中强制的并且在下文中进一步描述的、关于列边界移动的大量限制来有效地处理该角落情况。

在图像解码期间,列边界的移动可能从这样一种CTB行开始生效,其中,该片的第一CTB的地址位于该CTB行,以将边界偏移信息包括在它的片报头中。此后,边界偏移可以仍然对于图像中的所有剩余CTB行有效,除非该边界偏移被后续片报头中的另一个边界偏移覆盖。

可以以CTB宽度为单位来指示边界偏移值。

比特流可以包括可以从该比特流被解析的“boundary_offset_flag”(即如图6中所示)。如果boundary_offset_flag具有值为一,则left_boundary_offset和right_boundary_offset中的一个或两个可以跟随在该比特流中,其中,可以通过left_boundary_offset和right_boundary_offset来指定向右或向左的列边界移动。否则,如果boundary_offset_flag具有值为零,则可能没有任何偏移值出现在比特流中在boundary_offset_flag之后。按照H.264语法规范的风格,下文显示了用于指定偏移值的一个示例性语法:

如上所述,与无格式行(即第二行)相比的黑体变量(即以上第一行、第三行和第四行)可以表示作为确定变量值的副作用或者否则结合确定变量值而从比特流获取的比特。

图6是示出了根据本发明的实施方式,可用于基于如上所解析的边界偏移值来确定列边界的方法600的流程图。

可以通过以下设置来开始(601)方法600,其中,为了方便起见将以下设置描述为C语言风格伪代码。该开始除了别的之外还从变量columnBoundary[]复制解析边界,其中,该columnBoundary[]是从上述高级语法元素导出的,如下:

此后,确定(602)是否设置(上文介绍的)boundary_offset_flag。如果确定(602)不设置该标志位,则不允许列边界的更新,并且方法600分叉(603),因而如前所述地并且如该编码所服从的视频编码方案中所指定地解码(604)片,该解码例如涉及对于片的每个CTB的处理如熵解码、运动补偿以形成预测器、系数的反量化和反变换以计算残差、向运动补偿预测器增加残差、对结果样本进行CTB肉去块滤波等等。然后,如果确定(605)图像中的最后一个片已经被解码(可以由许多不同机制(如检测图像ID、临时参考、出现时间戳或类似的语法元素的值的改变以及基于RTP时间戳的到期机制)来测试该情况),则方法600通过如上所述进行初始化(601)以处理比特流中的下一个图像来继续(606)。然而,如果确定(605)片不是该图像的最后一个片,则方法600通过确定(602)是否设置了boundary_offset_flag来继续(607)。

如果确定(602)设置了boundary_offset_flag,则片报头包括可以被解析并且可用于修改colBound[]的边界偏移,并且该方法分叉(608)以便列边界的该修改。该修改可以通过识别该片所属于的列来开始。该识别因而可以始于初始化(609),该初始化可以例如包括指令如下文的指令:

此时,方法600可以(例如在colBound[]中)搜遍列边界的当前状态,以便识别正在被解码的片所属于的特定的列。方法600可以例如通过对照存储列边界值(colBound[])检查(611)如在初始化中所确定的并且存储在firstCTBMod中的、当前CTB(它是所讨论的片中的第一CTB)的CTB地址的水平地址分量来执行该识别。通过增加(610)合适的搜索索引来搜遍列边界,在列边界被识别为位于当前片的第一CTB(如firstCTBMod中所表示的)的“右边”(即就扫描次序而言具有更大的水平地址)之后,该搜索完成并且方法600带着搜索索引i的幸存状态退出(612)搜索循环。

可以通过向左列边界和右列边界增加如所初始化(609)的不同信息leftOffset和rigtOffset,根据搜索索引i的幸存状态,更新该正在被解码的片所属于的列的边界。可以例如如下实现该更新:

colBound[i-1]=colBound[i-1]+leftOffset;

colBound[i]=colBound[i]+rigtOffset;

此时,方法600进行如上所述的片解码(604)。

在一些情况中,对列边界指示强制包括以下限制的限制可能是有利的并且/或者方便的:

colBound[i]<colBound[i+1]

该限制要求在图像中从左到右对列标号并且还暗示偏移值不能用于交换列边界次序。

也可以限制leftOffset、rigtOffset和随后导出的colBound[]值,以使得每个结果列的宽度大于或等于最小列宽度。该最小列宽度可以是例如等级专用的并且/或者被指定在视频压缩标准中。

在一些情况中,leftOffset和rigtOffset可能无法用于修改作为以前编码的片的片边界的colBound[]。

在一些情况中,colBound[0]的值可能无法从它的初始值‘0’被改变,以反映第一个标号的列从图像的最左边边缘开始。结果,在当i=1时的该情况中leftO他et的值应该是‘0’。

在一些情况中,colBound[num_column_minus_1+1]的值可能无法从它的初始值pictureWidth被改变。结果,在当i=num_column_minus_1+1时的情况中rigtOffset的值应该是‘0’。

参考图7,图7显示了根据所述实施方式的基于多处理器或多核架构的解码器700的方框图。为了方便起见,假设解码器700在被配置为用于或者适用于并行解码的比特流上进行操作,例如通过要求使用如上所述对于列宽度具有特定限制(例如关于列宽度的上限和下限)的宽度。

在一些实施方式中,解码器700可以将编码比特流701接收到高级语法解释器702中。在图7中将比特流701显示为断续线条以将比特流701与(如实心细线所显示的)元数据并且与(如实心黑体线条所显示的)样本数据区分开来。高级语法解释器702可以被配置为用于参数集合的解码以及在参数集合数据库703中的后续存储,其中,高级语法解释器702具有到参数集合数据库703的读取和写入通路。可以存储并且向解码器700中的一个或多个其他组件(例如向列/片解码器705)提供704解码参数集合。在一些实例中,高级语法解释器702可能能够进一步处理比特流701中所包括的高级语法和/或低级语法(低于CU等级)元素的熵编码的一部分或全部,该能力可以依赖于熵解码到列解码器707、708的分配。高级语法解释器702的输出数据706可能是例如从比特流701导出的元数据分量,该元数据分量可能包括来自该比特流的信息如(经过熵解码创建的)符号或包括熵编码符号的缓冲器以及控制信息。

列/片解码器705可以被耦合到高级语法解释器702并且到参数集合数据库703并且可以从高级语法解释器702接收输出数据706。在一些实施方式中,列/片解码器705可以解码片报头,并且例如通过考虑列边界信息来识别该片的第一CTB所属于的列,其中该列边界信息可以位于存储在参数集合数据库703中的参数集合中并且基于片报头中的参数集合参考来获取704该列边界信息。如果列/片解码器705确定片位于单个列中,如上所述,则列/片解码器705可以通过识别该片的第一CTB所属于的列来识别该片所位于的列。

根据该列信息,列/片解码器705可以选择用于该片的解码的一个列解码器。两个列解码器707、708被显示在图7中作为解码器700的实现的实例并且不适用于限制可能的实现。在可替换的实施方式中,编码器700可以例如包括更多或更少数量的列解码器,只要编码器700包括至少一个列解码器。如果在比特流701中存在的列比在解码器700中所包括的列解码器707、708更多,则可以选择列解码器707、708中的至少一个用于解码多个列。可替换地,如果在解码器700中可用的列解码器707、708比在比特流701中存在的列更多,则列解码器707、708中的一个或多个可以是空闲的,因为将没有列被列/片解码器705分配给它们。虽然列/片解码器705可以将比特流701中的列分配给列解码器707、708,但是列/片解码器705可以作为负载平衡问题来处理它们,其中,在熟悉了本文的公开内容之后对于该负载平衡问题的许多可能的技术方案将显而易见。

假设将当前将要被解码的片分配给列解码器707,可以向列解码器707转发解码该列所需要的数据709。该数据709可以与来自高级语法解释器702的输出数据706具有相似的特性。在一些实现中,列/片解码器705可以删减输出数据706中对于列的解码所不需要的那些部分或者使得那些部分不相关,以力图不作为数据709的一部分向解码器707转发该不需要的部分。

在一些实施方式中,比特流701可以不被配置为用于或者可以允许它的内容在多个列解码器(例如图7中的707和708)中完全或者近乎完全独立的解码。然而,在其他情况中,可能需要在多个列解码器之间共享一些元数据或简单数据信息。可以在共同未决的美国专利申请序列号13/336,475中找到与可能潜在地需要在多个列解码器之间共享的数据的属性和数量相关的细节。

在一些实施方式中,可以由合适地配置的共享单元710处理信息的共享。可以将共享单元710实现为共享存储器、允许消息交换的排队机制或者用于处理器间或内核间通信的其他机制。在由共享单元710使得能够信息共享的情况中,可能潜在地需要在列解码器707、708之间共享元数据信息711(例如熵解码状态、运动向量预测器)和/或样本数据712(例如用于内部预测或运动补偿的列的相邻像素的值)。共享单元710还可以被合适地配置为在片跨越相邻列之间的列边界的情况中,助于从列解码器707、708中的一个到另一个的信息的“切换”,以力图由列/片解码器705依次地分配多个列解码器707、708以解码该片。

在一些实施方式中,例如在解码器700在个人计算机或类似的硬件架构中利用多个处理器或单个多核处理器的实现中,可以通过将解码器700的全部状态信息(包括例如全部参考图像)保持在可以在列解码器707、708之间共享的存储器中,极大地助于作为运行在内核或处理器上的过程的、列解码器707、708的实现。在该情况中,共享单元710可以包括共享存储器,其中在一些情况中可能由处理器间通信工具如臂板或在例如操作系统核心中实现的消息传递来辅助该共享存储器。

列解码器708的输出可能是向组合器715提供的部分重构的样本713和相关元数据714。类似地,列解码器707可以产生与由列解码器708产生的部分重构的样本713和相关元数据714类似的部分重构的样本和相关元数据。可以将样本713描述为“部分重构的”,因为对于如视频压缩标准中所指定的完全重构而言可能在基于图像的样本生成器717中需要进一步的处理,如稍后所述。可以在组合器715中将由列解码器708提供的样本713和相关元数据输出714与列解码器707的对应的输出组合,以生成列已处理图像716和相关元数据719。

基于图像的样本生成器717可以被配置为基于从组合器715接收的列已处理图像716和相关元数据719生成重构图像718。最终的重构图像718有可能用于被解码器700输出并且/或作为反馈回解码器700中的其他组件(下文进一步所示)的参考图像。基于图像的样本生成器717有利地实现计算无需非常密集但是需要到与全部列相关的信息的通路的任务。环内滤波、后置滤波和差错消除是那些任务的实例。但是,依赖于编码比特流的特性,还有可能改为在列解码器707、708中实现这些任务中的一些或全部(可以在共同未决的美国专利申请序列号13/336,475中找到该实现的进一步的细节)。因此,在一些实施方式中,可以从解码器700省略基于图像的样本生成器717。

在图7中没有具体地显示参考图像样本和/或元数据到这样一种位置的“反馈”,其中在该位置处列解码器707、708具有到相关参考图像样本和/或元数据中所包括的信息的通路。在一些实施方式中,可以向列解码器707、708提供相关的参考图像存储器,其中,在该相关的参考图像存储器中可能不需要参考图像样本和/或元数据的反馈。在其他实施方式中,可以向组合器715提供相反的数据路径,其中,该相反的数据路径允许来自基于图像的样本生成器717的参考图像被反馈回到列解码器707、708。在图7中,由箭头713、714、716和719双向尖头来指示该反馈路径。在其他实施方式中,可以将该参考图像存储在共享单元710中(在该情况中可以在基于图像的样本生成器717与共享单元710之间提供对应的数据路径,但是在图7中为了增强简洁性未显示该对应的数据路径)。

图8是示出了根据本发明的实施方式基于数据处理系统(例如个人计算机(“PC”))800的实现的方框图。到此时为止,为了方便起见,未详细地将描述明确地与编码器和/或解码器的可能的物理实现相关。基于软件和/或组件的组合的许多不同的物理实现是可能的。在一些实施方式中,在许多情况中由于与成本效率和/或功耗效率相关的原因,可以例如使用定制或门阵列集成电路实现视频编码器和/或解码器。

另外,使用通用处理架构(它的一个实例是数据处理系统800)的基于软件的实现是可能的。例如通过使用个人计算机或类似的设备(例如机顶盒、膝上型计算机、移动设备),该实现策略可以是可能的,如下所述。如图8中所示的,根据所述实施方式,可以用包括这样一种指令的计算机可读介质801(例如CD-ROM、半导体ROM、记忆棒)的形式提供用于PC或类似的设备的编码器和/或解码器,其中,该指令被配置为使处理器802能够单独地或与加速器硬件(例如图形处理器)803组合地、结合耦合到处理器802和/或加速器硬件803的存储器804来执行编码或解码。可以将处理器802、存储器804和加速器硬件803耦合到可用于向/从前述设备传递比特流和未压缩视频的总线805。根据应用,可以将用于比特流和未压缩视频的输入/输出的外围设备耦合到总线805。可以例如经过合适的接口(如抓帧器807或USB链路808)将相机806依附到总线805以便未压缩视频的实时输入。类似的接口可用于未压缩视频存储设备如VTR。可以经过显示器设备(如计算机监视器或TV屏幕)809输出未压缩视频。DVD RW驱动器或等效物(例如CD-ROM、CD-RW蓝光光盘、记忆棒)810可用于实现比特流的输入和/或输出。最后,为了在网络812上的实时传输,网络接口811可用于依赖于到网络812的接入链路的容量以及网络812自身来传递比特流和/或未压缩视频。

根据各种各样的实施方式,可以由各自的软件模块实现上述方法。根据其他实施方式,可以由各自的硬件模块实现上述方法。根据其他实施方式,可以由软件模块与硬件模块的组合实现上述方法。

虽然为了方便起见主要参考一种示例性方法来描述实施方式,但是上述参考数据处理系统800所讨论的装置可以根据所述实施方式被编程为使得所述方法能够实施。此外,用于数据处理系统800的制品(如包括其上记录有程序指令的预记录存储介质或其他类似的计算机可读介质或产品)可以指导数据处理系统800以便有助于所述方法的实现。应当理解的是,除了所述方法之外,该装置和制品也全部落入所述实施方式的范围之中。

具体而言,根据本发明的一个实施方式,可以将当被执行时导致由数据处理系统800执行本文所述的方法的指令序列包括在数据载体产品中。该数据载体产品可以被加载到数据处理系统800中并且被数据处理系统800运行。另外,根据本发明的一个实施方式,可以将该当被执行时导致由数据处理系统800执行本文所述的方法的指令序列包括在计算机程序或软件产品中。该计算机程序或软件产品可以被加载到数据处理系统800中并且被数据处理系统800运行。此外,根据本发明的一个实施方式,可以将当被执行时导致由数据处理系统800执行本文所述的方法的指令序列包括在集成电路产品(例如硬件模块或多个模块)中。该集成电路产品可以被安装到数据处理系统800中。

本文所述的发明的实施方式仅适用于示例。因此,可以对于这些实施方式做出对细节的各种各样的变化和/或修改,全部该变化和/或修改都落入本发明的范围中。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1