画面编码和解码的制作方法

文档序号:11437524阅读:364来源:国知局
画面编码和解码的制造方法与工艺

本申请是申请日为2011年6月29日、申请号为201180045507.3的中国发明专利申请“画面编码和解码”的分案申请。

本文的实施例大体涉及处理画面或视频帧,具体涉及对这种画面或视频帧进行编码和解码。



背景技术:

h.264(也称为mpeg-4(运动画面专家组)avc(高级视频编码))是现有技术中的视频编码标准。它是一种混合编解码器,基于消除帧之间的冗余(称为所谓的帧间编码)以及消除帧内的冗余(称为所谓的帧内编码)。编码过程的输出是vcl(视频编码层)数据,该数据在传输或存储之前被进一步封装到nal(网络提取层)单元内。

在h.264/mpeg-4avc中,视频流中的一个画面由具有16×16像素的固定大小的宏块构成,并且对该画面的编码是逐宏块进行的。将视频流中的每个画面划分为一个或更多个片。片是画面中的可独立解码的一部分。这意味着,如果画面中的一个片丢失,则画面中的其他片仍是可解码的。此外,片可用于并行编码和解码,因为片独立于画面中的其他片。在h.264/mpeg-4avc中,片边界必然出现在两个相邻的(根据编码顺序)宏块的接界之间。

hevc(高效视频编码)是h.264/mpeg-4avc的后续。hevc旨在与h.264/mpeg-4avc相比实质提高编码效率,即,在保持画面质量的同时降低比特率要求。hevc以下一代hdtv(高清晰度电视)显示器和内容捕捉系统为目标,hdtv显示器和内容捕捉系统以渐进扫描帧速率、以及从高达1080p的qvga(四分之一视频图形阵列)(320×240)到超hdtv(7680×4320)的显示分辨率以及改进的画面质量为特征。

hevc使得能够使用所谓的最大编码单元(lcu),lcu是大小比h.264/mpeg-4avc中的宏块要大的像素块,以提供改进的编码效率。为了处理同一画面中的较大的同构区域和较小的详尽区域,已经针对hevc提出了分级编码。按照预定义的顺序扫描画面中的lcu,并且每一个这种lcu可以分割为较小的编码单元(cu),接着cu可以按照四叉树的方式向下分级分割为最小编码单元(scu)。因此,画面可以被编码为具有从lcu向下直到scu的不同大小的编码单元的混合。

与h.264/mpeg-4avc类似,在hevc中,视频流中的画面可以划分为一个或更多个片。在hevc中,片边界与两个相邻的(根据预定义的顺序)lcu的接界对齐。

h.264/mpeg-4avc和hevc标准都需要确定并使用地址,以识别片中的第一宏块或编码单元,并由此识别画面或视频帧中的片的起始。这种地址尽管在解码器处是必需的,但它给编码画面数据增加了开销。此外,随着在hevc中引进lcu的分级分割,出现了与对画面或视频帧进行编码和解码有关的新的挑战。因此,需要一种有效的编码和解码,可以按照有效且灵活的方式来处理片起始的地址。



技术实现要素:

大体目的是提供对画面和视频帧中的片的有效管理。

一个具体目的是以有效方式发信号通知片的起始位置。

这里所公开的实施例满足这些和其他目的。

实施例的一方面定义了一种对包括多个片在内的画面进行编码的方法。针对画面中的每一个片,基于片中的像素的像素值生成编码片表示。针对每一个片分配并设置相应的片标记。将画面中的第一片的片标记设置为第一定义值,而将剩余片各自的片标记设置为第二定义值。片地址使得能够识别片中的第一编码单元的位置,并由此针对画面中的除了第一片以外的剩余片生成画面内的片起始。这些片地址与编码片表示和片标记一起包括在画面的编码画面表示内。

实施例的另一方面涉及一种用于对包括多个片在内的画面进行编码的设备。该设备的表示生成器针对画面中的每一个片,生成相应的编码片表示。该设备还包括标记设置器,配置用于将与画面中的第一片相关联的片标记设置为第一值,而将剩余片的片标记设置为第二定义值。地址生成器针对剩余片中的每一个片生成相应的片地址,以使得能够识别片中的第一编码单元的相应位置,并由此识别片在画面内的片起始。表示管理器针对画面生成编码画面表示,编码画面表示包括编码片表示、片地址和片标记。

实施例的另一方面定义了一种用于对包括多个片在内的画面的编码画面表示进行解码的方法。从所述编码画面表示中检索与画面中的片相关联的片标记。采用该片标记的值,以确定是否需要从编码画面表示中检索片地址,以识别片在画面内的起始位置和属于该片的该片的部分。如果片标记具有第一定义值,则当前片是画面中的第一片。然后,将通过对与片相关联的、并且从编码画面表示中检索的编码片表示进行解码所生成的片中的像素的像素值分配给画面中起始于画面内的定义的片起始的第一部分,例如左上角。如果片标记具有第二定义值,则采用片地址来识别画面内的片起始,并将通过对像素的编码片表示进行解码所生成的像素值分配给画面中起始于所识别的片起始的部分。

实施例的另一方面涉及一种用于对包括多个片在内的画面的编码画面表示进行解码的设备。该设备的表示检索器从编码画面表示中检索与要解码的片相关联的片标记。如果片标记具有第二定义值,则地址检索器从编码画面表示中检索片地址。如果片标记具有第一定义值,则表示生成器基于与片相关联的、并且从编码画面表示中检索的编码片表示来生成片中的像素的像素值的解码表示。然后,由值分配器将这些像素值分配给画面中以定义的起始位置起始的第一部分(例如,左上角),这是在不需要任何发信号通知的片地址的情况下识别的部分。如果片标记具有第二定义值,则值分配器采用所检索的片地址来识别画面中属于当前片的部分的起始,然后将来自表示生成器的像素值分配给该识别的部分。

实施例在提供对画面或视频帧内的片起始位置进行发信号通知和识别的有效方式方面,提供了对画面或视频帧内的片的有效管理。实施例中的片标记提供了对画面中的第一片的片标记的显著改进的识别,而不需要发信号通知并在解码器处计算片地址。

附图说明

通过参考连同附图一起进行的下列描述,可以最好地理解本发明及其其他目的和优点,在附图中:

图1是示意根据实施例的用于对画面进行编码的方法的流程图;

图2示意了被划分为多个片并且包括多个最大编码单元(lcu)的画面的实施例;

图3a和3b示意了与lcu内的编码单元之间的接界重合的片起始的实施例;

图4示意性地示意了用于处理编码单元的编码和解码顺序的实施例;

图5是示意了根据实施例的图1中的编码方法的附加步骤的流程图;

图6示意性地示意了编码画面表示的实施例;

图7是示意了对画面的编码表示进行解码的实施例的流程图;

图8是示意了根据实施例的图7中的方法的附加步骤的流程图;

图9是示意了根据实施例的图7中的方法的附加步骤的流程图;

图10是根据实施例的用于对画面进行编码的设备的示意框图;

图11是根据实施例的用于对编码画面表示进行解码的设备的示意框图;以及

图12是根据实施例的媒体终端的示意框图。

具体实施方式

在全部附图中,相同附图标记用于类似或相应的单元。

实施例大体涉及管理画面或视频帧内的片。更具体地,实施例提供了一种发信号通知片起始地址的灵活且比特有效的方式。实施例可适用于任意画面或视频帧编码和解码,其中画面或视频帧(例如,视频流中的画面或视频帧)可以包括多个(即,至少两个)片,并且需要向解码器发信号通知片的起始。因此,实施例可以应用于现有的画面或视频编码,例如h.264/mpeg-4avc,但尤其适用于利用将像素块分割为较小的像素块的分级分割的画面编码和解码。所以,实施例完全适于与高效视频编码(hevc)一起使用,但不局限于此。

实施例的特性是在画面或视频帧中的第一片与剩余片之间进行区分。在现有技术中,在针对画面中的每个片的编码期间确定片地址,并且片地址包括在画面的编码画面表示中,画面的编码画面表示将由解码器用来识别画面或视频帧的区域内的片的起始。根据画面的总的大小,这些片地址可能相当长,由此给编码画面数据增加了显著的开销量。例如,h.264/mpeg-4avc画面或视频帧可以包括1280×960像素。如果片起始与宏块接界对齐,并且片起始表示为相对于固定原点的x和y坐标(通常为画面的左上角),则在这个简单示例中,片地址需要是log2(ceil(1280/16))+log2(ceil(960/16))=7+6=13个比特。ceil()表示被定义为的天花板函数,并且输出不小于x的最小整数。这可能并不是非常多的数据,但是对于当今用于视频解码和呈现的帧和比特率而言,每秒通常访问数百个片,因而对于视频流而言,需要在编码器处生成并转发给解码器的片地址数据的总大小量相当大。此外,在能够对片的实际像素数据进行解码并将其分配给画面中的正确部分之前,需要在解码器处对片地址进行定位、检索和处理。

如果片起始可以在比最大编码单元低等级的编码单元处对齐,则上述处理片地址的问题可能在采用分级编码和解码(例如在hevc中)时甚至变得更加显著。图2示意性地示出了这个概念。

画面1(例如视频流中的视频帧中的画面1)可以划分为数个最大编码单元(lcu)10,在现有技术中也称为最大编码树块(lctb)或最大编码块(lcb)。lcu10是在编码和解码期间能够应付、并且能够例如根据公知的帧内或帧间编码/解码模式处理的最大可能像素块。lcu10继而可以分级分割为数个更小(就像素数目而言)的像素块,通常表示为编码单元(cu)20a、20b、编码树块(ctb)或编码块(cb)。这些cu20a、20b继而可以按照分级方式进一步分割为甚至更小的像素块30a、30b,直到最小可能像素块(称为最小编码单元(scu))、最小编码树块(sctb)或最小编码块(scb))。

与现有技术(其限制了将画面1中的片2、3的起始定位到与两个相邻lcu10a、10b之间的接界对齐)明显相反,一些实施例提供了通过使片4、5的起始可能能够与画面中的从scu等级直到lcu等级的任意相邻cu10a、10b、20a、20b、30a、30b之间的接界对齐来提供一种灵活得多的片起始定位。因此,可以将片起始定位在lcu内,在该lcu中具有上一片的最后一个cu和当前片的第一个cu。图2示意性地示出了这一点。第一片2与第二片3之间的接界与两个相邻的(根据处理顺序)lcu10a、10b的接界重合。第二片3与第三片4之间的接界反而与两个编码单元20a、20b的接界对齐,编码单元20a、20b的大小各为lcu10的四分之一。相应地,第三片4与第四片5之间的接界在图2中与两个cu30a、30b的接界对齐,每个cu30a、30b的大小为lcu10的1/16。

然而,与mpeg-4/avc相比,分级分割和与小cu(甚至可能是scu)对齐的片起始可能导致更长的片地址。例如并且如先前作为示例已经讨论过的,如果片起始可以与8×8像素的scu的接界对齐,则1280×960像素的画面可以具有19200个可能的片起始地址。如果片起始地址采取x和y坐标的形式,则它们可能需要8+7=15个比特。

根据实施例,采用“片”来表示画面或视频帧中可独立编码和解码的部分。画面由此可以包括单个片或多个(即,至少两个)片。

图1是示意了对包括n个片在内的画面或视频帧进行编码的方法的流程图。参数n是等于或大于2的正整数。该方法开始于步骤s1,步骤s1针对画面中的每一个片生成编码片表示。该编码片表示是根据公知的编码方案(例如,帧内或帧间编码)基于片中的像素的像素值而生成的。

接下来的步骤s2和s3针对画面中的片设置所谓的片标记。更具体地,步骤s2将与画面中的n个片中的第一片相关联的片标记设置为第一定义值(例如,1bin或逻辑1或某个其他定义的符号),以指示当前片是画面的第一片,并由此具有在画面中的定义位置(通常是在画面的左上角)的片起始。步骤s3相应地将与画面中的剩余n-1个片中的每一个片相关联的片标记设置为第二定义值(例如,0bin或逻辑0或某个其他定义的符号)。这意味着,可以使用片标记作为附加信息,以在画面中的第一片与剩余片之间进行区分。

这些剩余片需要具有相关联的片地址,以使得解码器能够识别片在画面区域中的哪个位置起始。对于第一片不需要这样做,取而代之地,第一片在画面内具有定义的起始位置,并且优选地起始于画面中处于左上角的第一像素处。备选地,画面可以划分为比片等级更高的区域。在这种情况下,定义的起始位置可以是画面中的这种区域的原点。

因此,根据实施例,步骤s4针对剩余n-1个片中的每一个片生成片地址,由此排除不需要片地址的第一片。在步骤s4中针对某一个片所生成的片地址使得可以识别该片的第一编码单元的位置,并由此识别画面内的片起始。因此,第一编码单元构成片中的第一编码单元,并且前一个(根据定义的处理顺序)编码单元是画面中的前一个片的最后一个编码单元。第一编码单元可以是任意像素块,并且在mpeg-4/avc中,第一编码单元是片中的第一宏块。相应地,对于hevc,第一编码单元可以是lcu,但是对于分级分割,它可以有利地为从lcu大小下至scu大小的任意编码单元,除非对在画面中的何处可以发现片起始位置方面强加了一些限制(这里将对此进行进一步的讨论)。

处理(即,编码然后再解码)画面中的编码单元的处理顺序可以是任意已知的处理顺序。这种处理顺序的示例是光栅扫描顺序或任意其他编码/解码顺序,例如morton或z顺序,这里将对此进行进一步的讨论。

然后,在步骤s5中采用n个编码片表示、n-1个片地址和n个片标记来生成画面的编码画面表示。编码画面表示通常采取比特序列或比特流的形式,尽管除了二进制字母表以外的其他符号字母表(例如,十六进制或十进制字母表)也可以使用并且在实施例的范围内。图6是对这种编码画面表示50的实施例的示意性示意。对于每个片,编码画面表示50通常包括两个主要部分,即片首部54和编码数据56。片首部54通常包括在步骤s2或s3中针对片所设置的片标记,例如采取码字first_slice_in_pic_flag的形式。画面中除了第一片以外的每一个剩余片的片首部54优选地还包括在步骤s4中生成的片地址,例如采取码字first_cu_in_slice或码字slice_address的形式。在具体实施例中,可以在片首部54中包括附加信息,例如包括片的编码类型。

编码数据56承载片中像素的编码画面数据,即,在步骤s1中生成的编码片表示。

编码表示50可选地还可以包括片参数集合(pps)和/或序列参数集合(sps)52,或以其他方式与片参数集合(pps)和/或序列参数集合(sps)52相关联。pps/sps52可以形成编码画面表示50的一部分。在这种情况下,视频流的每个编码画面表示50可以具有相应的pps和/或sps字段52。在备选方案中,并非所有这种视频流中的编码画面表示50都需要承载pps和/或sps字段52。例如,视频流的第一编码画面表示50可以包括pps和/或sps字段52,并且如果pps和/或sps字段52中的任意参数被更新或改变,则这种字段只包括在视频流的另一编码画面表示中。另一变型是关于编码画面表示50在带外发信号通知pps和/或sps字段52。在这种情况下,pps和/或sps字段52可以与编码画面表示50分开发送,但以解码器能够识别pps和/或sps字段52属于哪个视频流或编码画面表示的方式进行发送。这可以通过在编码画面表示50和在pps和/或sps字段52二者中均包括会话、流和/或画面标识符来实现。

如前面所提及的,片是画面中可独立编码和解码的单元。这意味着,针对画面中的不同片,可以串行执行或者至少部分地并行执行在步骤s1中生成编码片表示、在步骤s2、s3中设置片标记、以及在步骤s4中生成地址。对片进行并行编码通常将减小画面的总编码时间。然后,通常针对任意剩余画面或视频帧(例如,视频流中的任意剩余画面或视频帧)重复步骤s1至s5的方法。此外,步骤s2或步骤s3/s4可以在步骤s1之后、在步骤s1之前或至少部分地与步骤s1并行执行。

在下文中,将结合hevc作为实施例可以应用于的视频编码和解码标准的示例来进一步描述本发明的实施例。然而,这应当仅被视为可以与实施例一同使用的画面或视频编码/解码标准的示意性示例,但实施例不局限于此。

根据hevc,画面或视频帧包括多个lcu,多个lcu就像素数目而言具有选定大小。这意味着,画面中的每一个lcu优选地具有相同数目的像素。lcu可以是矩形的,但优选地是正方形的,即包括m×m像素,其中m是等于或优选地大于2(并且优选为m=2m,其中m是正整数)的定义的正整数。m的适当值的非限制性示例是64或128。画面中的每一个lcu可能分级分割为多个更小的cu,其相应大小比lcu的选定大小要小。

一般地,对lcu进行分级分割包括按照四叉树方式对lcu进行分割。如本领域中公知的,四叉树是一种树数据结构,其中每个内部节点正好有四个子。因此,对lcu进行分级分割意味着通过递归地将lcu所占据的画面的二维空间再分为4个象限或区域来对该二维空间进行划分。在优选实施例中,递归分割包括分割成4个相等大小的cu。根据该实施例,如果对编码单元(即,lcu或更小的cu)进行分割,则将与该编码单元相关联的所谓的分割编码单元标记设置为定义值(优选地为1bin或逻辑1或某个其他定义的符号),指示该编码单元被分级分割为多个(优选地为4个)较小的cu。相应地,如果可分割的编码单元(即,大于scu的编码单元)不分割,则优选地将与该编码单元相关联的分割编码单元标记设置为0bin或逻辑0或某个其他定义的符号。“可分割的”编码单元在这里指的是能够被分级分割为多个(优选地为4个)较小编码单元的编码单元。一般地,除了scu以外的任意编码单元都是可分割的编码单元。尽管编码单元可以分割为较小的编码单元,然而例如如果这种分割并不改善画面的编码质量,则不必对编码单元进行分割。

实施例中的分级分割优选地按照定义的处理顺序(例如,光栅扫描顺序)逐lcu进行处理。光栅扫描顺序通常是从左到右并且从上而下的。备选地,可以使用诸如morton或z顺序之类的编码/解码顺序。图4示意了morton顺序的原理。如果lcu被分割为(优选地为4个相等大小的)cu,则可以按照处理顺序进一步处理这些cu,以选择它们是否应当被分级分割为甚至更小的cu(优选地为4个相等大小的cu)。该处理顺序可以与处理画面中的lcu的顺序相同。在备选方案中,lcu按照光栅扫描顺序进行处理,而cu按照编码/解码顺序(例如,morton顺序)进行处理。上面提及的处理顺序仅仅是可以使用的顺序的示例,并且实施例不局限于此。

因此,对于每一个编码单元,确定是否将编码单元进一步分割为更小的编码单元,除非该编码单元是不能进一步分级分割的scu。每当分割一编码单元时,优选地将与该编码单元相关联的分割编码单元标记设置为1,以及如果确定不再将一编码单元进一步分割为更小的编码单元,则优选地将其关联的分割编码单元标记设置为0。scu通常不需要具有任何关联的分割编码单元标记,这是因为它无法进一步分割。

关于是否分割编码单元的决定基于编码过程。例如,与将表示相当均匀的背景的画面区域分割为较小的编码单元相比,利用较大的cu大小(例如lcu)更有效地表示了该画面区域。然而,如果利用较大编码单元,通常无法准确地表示具有较小细节或大量这种细节的画面区域。在这种情况下,从编码质量的角度,针对画面区域使用若干更小的cu更为有效和优选。由此,可以根据在现有技术中描述的技术并且优选地基于编码效率和质量来选择是否进一步分割cu。

通常将在图1的步骤s1中在片的编码期间生成的分割编码单元标记包括在图6所示的编码画面表示50的编码数据部分56中。

图5是示意了图1的编码方法的附加步骤的流程图。该方法开始于可选的步骤s10,在步骤s10中,针对画面确定分级粒度。分级粒度定义了画面内的片接界对齐的分级等级。该分级等级定义并限制了最小可能可寻址编码单元的大小,画面中的片的起始可以在该最小可能可寻址编码单元处对齐。分级等级和所确定的分级粒度由此定义了在画面中可能可用的、并且片起始可以位于该处的片起始位置的最大数目。这意味着,分级粒度定义了画面内的可寻址cu的数目,其中片的起始可以在这种可寻址的cu与画面中的前一个(根据定义的处理顺序)cu之间的接界对齐。

例如,具有64×64像素的选定大小的lcu可以具有定义了0到3的粒度等级的片粒度,其中scu大小为8×8像素。在这种情况下,粒度等级0指示片起始可以只与lcu之间的接界对齐。对于1280×960像素的画面,这意味着20×15=300个可能的片起始位置。如果粒度等级为1,则片起始可以对齐的最小可能编码单元为32×32像素,其中总的可能片起始位置为40×30=1200个。相应地,粒度等级2意味着有80×60=4800个可能的片起始位置,这是因为片起始可以与16×16像素或更大的cu对齐。最后,粒度等级3指示片起始可以与scu接界对齐,给出160×120=19200个可能的片起始位置。

在本示例中人们想要可以在从220直到14400个可能的片起始位置的情况之间进行选择的理由在于,画面中可用的片起始位置越多,则需要的片地址越长,由此增大了编码画面数据的开销。因此,如果对于目标片大小没有特定要求(例如,使片数据适应单个ip数据分组),则限制画面中的片起始位置的数目是有利的,由此可以减小需要生成和传送到解码器处的地址数据的量。

下一个步骤s11确定了画面中的n-1个片的片地址的长度,其中长度是就片地址的比特或其他符号的数目而言的。片地址的长度取决于可能的片起始位置的数目以及画面内的可寻址编码单元的数目。在mpeg-4/avc的情况下,片起始位置的数目取决于画面的大小,这是因为片起始仅在宏块接界处对齐。这意味着,给定画面总大小,可以在给定固定的宏块大小的情况下计算可能的片起始位置的数目。然后,可以根据这个数目来计算片地址的长度,例如log2(p)或log2(p-1),其中p表示可能的片起始位置的数目,并由此计算出画面中的可能的片地址的总数目。画面的大小通常包括在与编码画面表示相关联的首部字段中,或者可以在先前所提到的编码画面表示50中的pps和/或sps字段52或与编码画面表示50相关联的pps和/或sps字段52中找到(参见图6)。

在hevc中,优选地在步骤s11中基于在步骤s10中针对该画面所确定的分级粒度来确定片地址的长度。然后,该分级粒度可以用于定义可寻址编码单元的大小,以及由此确定最小可能的编码单元的大小,片起始可以在该最小可能的编码单元处对齐。优选地将该粒度信息与画面的大小的信息或画面中的lcu的总数目的信息一起用于在步骤s11中确定片地址的长度。

在实施例中,可以预定义画面中的lcu的大小,并且由此编码器和解码器知道该大小。例如,lcu的大小可以是128×128像素或64×64像素。由此,不需要确定或发信号通知lcu的大小。相应地,可以预定义画面中的scu的大小。这种可以采用的固定的且预定义的scu的大小的示例是16×16像素或8×8像素。

在备选实施例中,编码过程可以另外确定lcu大小和/或scu大小,以用于当前画面。由此,这可以有利地使这些lcu和/或scu的大小适应当前画面的具体特性。例如,对于基本上是统一的均匀背景视图的一些画面,较大的lcu和scu大小是优选的,并且与具有大量较小细节的画面(其中,较小的lcu和scu大小是优选的)相比,导致更为有效的编码。

在一实施例中,因此在编码期间(例如,基于画面中的像素值)确定lcu的大小和/或scu的大小。然后,将对所确定的lcu的大小的通知和/或对所确定的scu的大小的通知与编码画面表示相关联。可以根据不同实施例来执行这些通知与编码画面表示的关联。例如,可以将通知包括在编码画面表示中。备选是将通知包括在pps或sps中。

然后,可以基于参数log2_min_coding_block_size_minus3,并优选地通过按照log2mincusize=log2_min_coding_block_size_minus3+3计算参数log2mincusize,来定义scu大小。然后,采用该参数log2mincusize作为scu大小的表示,并给出scu大小mincusize=(1<<log2maxcusize),其中<<表示左移运算符。根据参数log2mincusize的值,并且由此根据参数log2_min_coding_block_size_minus3,scu大小可以是8或16(作为示意性示例)。

优选地,通过定义参数log2_diff_max_min_coding_block_size,相对于scu大小来确定lcu大小。更具体地,按照log2maxcusize=log2_min_coding_block_size_minus3+3+log2_diff_max_min_coding_block_size计算参数log2maxcusize。然后,采用该参数log2maxcusize作为lcu大小的表示,并给出lcu大小maxcusize=(1<<log2maxcusize)。根据参数log2mincusize的值,并且由此根据参数log2_min_coding_block_size_minus3和log2_diff_max_min_coding_block_size,lcu大小可以是64或128(作为示意性示例)。

由此,对scu大小和lcu大小的通知可以是参数log2_min_coding_block_size_minus3和log2_diff_max_min_coding_block_size。

在备选实施例中,lcu大小不是相对于scu大小而确定的。这意味着,确定lcu大小不需要scu参数。

针对画面中除了第一片以外的每一片所生成的片地址可以将片起始的位置和片的第一cu定义为简单数。然后,将不同的可能片起始位置和可寻址编码单元从0开始向上编号。例如,如果等级粒度定义了最小可能编码单元的大小为16×16像素(画面中的片起始可以在该最小可能编码单元处对齐),则1280×960像素的画面具有4800个唯一的片起始位置。然后可以将这些位置从0向上编号到4799,由此需要13比特的片地址。

备选是分别操作x和y坐标。利用上述示例,x坐标是从0到79,y坐标是从0到59,由此片地址需要7+6个比特。

另一备选是确定片地址,以使得能够从中检索lcu坐标和子lcu坐标。在这种情况下,针对片确定lcu在画面内的位置的坐标。然后,使片起始和该片的第一cu在画面中位于该lcu内。因此,坐标是关于全局原点或起始点(通常在画面的左上角)的。lcu坐标可以是lcu关于该全局原点的坐标,例如就lcu编号或如上所述的x和y坐标而言。也可以确定第一cu的位置的坐标以及由此确定lcu内的片起始。这些坐标是关于局部原点或起始点(通常在lcu的左上角)的。这些子lcu坐标也可以采取数字的形式,或者是就x和y坐标而言的。

然后,基于lcu坐标和子lcu坐标以及分级粒度生成片地址。在通过将该片的可能起始位置和该片的第一cu限制并定义在lcu内来定义子lcu坐标时采用分级粒度。

在一实施例中,基于所确定的lcu坐标生成第一或lcu表示,以及基于子lcu坐标生成第二或子lcu表示。因此片地址可以包括这两个表示。备选地,生成片地址,以使得可以根据片地址确定或计算lcu坐标和子lcu坐标。

可以根据作为非限制性的示例性示例的下列示例来执行导出lcu和子lcu坐标。

在步骤s10中确定的分级粒度是通过码字slice_granularity定义的。slice_granularity通常是从00bin=0直到最大值11bin=3的2比特的值。这实现了四个不同的分级等级。如果只需要两个这样的分级等级,则slice_granularity可以用1比特的值代替。相应地,对于大于四个分级等级,需要3比特或更长的slice_granularity参数。备选地,可以采用可变长度的编码来发信号通知分级粒度。

可选地将slice_granularity码字定义为不大于在画面或视频帧的编码期间确定的两个其他码字的最小值:log2maxcusize-4和log2_diff_max_min_coding_block_size。然后,在解码期间采用码字slice_granularity,按照slicegranularity=(slice_granularity<<1)计算参数slicegranularity。

在编码期间生成的片地址是码字sliceaddress。该码字定义了在片起始时的片粒度分辨率下的片地址。片地址的长度(即,slice_address)如上所述是基于分级粒度确定的。在具体实施例中,slice_address就比特数目而言的长度等于ceil(log2(numlcusinpicture)+slicegranularity)。

参数numlcusinpicture定义了画面中的lcu的总数目,并且是基于画面的大小以及基于固定的或如上面所提及地确定的lcu的大小来确定的。因此,numlcusinpicture可以包括在编码画面表示中,或者可以与编码画面表示相关联(例如,包括在pps或sps字段中)。备选地,解码器能够自己基于lcu的大小(log2_min_coding_block_size_minus3和log2_diff_max_min_coding_block_size)以及在编码画面表示中或与编码画面表示相关联地发信号通知给解码器的画面的总大小来计算参数numlcusinpicture。

然后,将片地址的lcu部分(根据诸如光栅扫描顺序之类的处理顺序)定义为lcuaddress=(sliceaddress>>slicegranularity),其中>>表示右移运算符。按照granularityaddress=slice_address-(lcuaddress<<slicegranularity)计算片地址的子lcu部分(根据诸如morton顺序之类的处理顺序)。

然后,基于lcuaddress和granularityaddress,按照sliceaddress=(lcuaddress<<(log2_diff_max_min_coding_block_stze<<1))+(granularityaddress<<((log2_diff_max_min_coding_block_size<<1)-slicegranularity))计算片地址。

针对除了画面中的第一片之外的剩余片所生成的片地址可以是固定长度的地址,其中地址的长度是针对画面固定的,并且取决于最小可能编码单元的大小以及画面的总大小,画面中的片的起始可以在该最小可能编码单元处对齐。备选可以是使用可变长度的表示。可以使用的可变长度的码的示例是如leeandkuo,complexitymodelingofh.264/avccavlc/uvlcentropydecoders,ieeeinternationalsymposiumoncircuitsandsystems(iscas2008),2008,pp.1616-1619中所提到的通用可变长度编码(uvlc)。简单地说,uvlc使用exp-golomb(eg)码。针无符号整数值c的eg码是[pzeros][1][info],其中p=floor(log2(c+1))以及info=c+1-2p

片地址不仅定义了第一cu的位置,并由此定义了片的起始,而且还定义了能够占据片地址所定义的画面中的位置的最大可能cu的大小。这意味着,该大小取决于片地址所确定的位置。尽管片地址给出了能够占据该位置的最大可能cu的大小,然而第一cu的大小不需要等于能够占据该位置的该最大可能cu的大小。图3a和3b示意了这个概念。在图中,附图标记2和3表示画面中的两个不同的片,粗线表示两个片2、3之间的接界。在这些示例中,片接界出现在lcu10所占据的画面的区域内。附图标记20表示在将lcu10分级分割为4个cu20时针对粒度1所获得的cu。在粒度2的情况下,可以将cu20分级分割为4个更小的cu30。在示出了粒度为3的情况的图3a和3b中,可以将cu30分割为4个scu40。

在图3a中,片3的第一cu表示为30,而在图3b中,它用40b表示。附图标记40(图3a)和40a(图3b)表示lcu10中的根据定义的处理顺序(在本示例中为morton顺序)的前一个cu。在图3a和3b中,片的起始和第一cu30、40b的位置相同,尽管第一cu30、40b在两个示例中的大小不同。然而,片地址在这两种情况下通常相同,并且能够占据相关位置的最大可能cu30的大小相同。两种情况可以通过利用就所谓的分割编码单元标记而言的附加信息补充片地址来区分。

在示例中,假设lcu的大小是128×128像素,并且相应的scu的大小是16×16像素。进一步假设图3a和3b中的lcu10包括两个片2、3,则编码表示可以定义为:

slice_header_syntax()//图3a中的片2-包括地址信息

split_coding_unitflag=1//将128×128lcu分割为4个64×64cu

split_coding_unit_flag=0//第一个64×64cu不进一步分割

codeoffirst64×64cu//第一64×64cu的像素值的编码表示

split_coding_unit_flag=1//将第二个64×64cu分割为4个32×32cu

split_coding_unit_flag=0//第一个32×32cu不进一步分割

codeoffirst32×32cu//第一个32×32cu的像素值的编码表示

split_coding_unit_flag=1//将第二个32×32cu分割为4个scu,不需要另外的分割编码单元标记

codeoffirstscu//第一个scu的像素值的编码表示

codeofsecondscu//第二个scu的像素值的编码表示

codeofthirdscu//第三个scu的像素值的编码表示

codeoffourthscu//第四个scu的像素值的编码表示

split_coding_unit_flag=1//将第三个32×32cu分割为4个scu,不需要另外的分割编码单元标记

codeoffirstscu//第一个scu的像素值的编码表示

codeofsecondscu//第二个scu的像素值的编码表示

codeofthirdscu//第三个scu的像素值的编码表示

codeoffourthscu//第四个scu的像素值的编码表示

split_coding_unit_flag=1//将第四个32×32cu分割为4个scu,不需要另外的分割编码单元标记

codeoffirstscu//第一个scu的像素值的编码表示

codeofsecondscu//第二个scu的像素值的编码表示

codeofthirdscu//第三个scu的像素值的编码表示

codeoffourthscu//第四个scu的像素值的编码表示

split_coding_unit_flag=1//将第三个64×64cu分割为4个32×32cu

split_coding_unit_flag=1//将第一个32×32cu分割为4个scu,不需要另外的分割编码单元标记

codeoffirstscu//第一个cu的像素值的编码表示

codeofsecondscu//第二个scu的像素值的编码表示

codeofthirdscu//第三个scu的像素值的编码表示

codeoffourthscu//图3a中的前一个cu40的像素值的编码表示

slice_header_syntax()//图3a中的片3一包括地址信息

split_coding_unit_flag=0//由于第一个cu的大小等于能够占据所生成的地址信息所定义的画面中的位置的最大可能cu的大小,所以将第一个cu的分割编码单元标记设置为0。-该地址处的最大可能cu是32×32,并且不需要向下分割到32×32的分割标记。取而代之的是,根据地址和粒度导出大小32×32。

codeoffirstcu//图3a中的cu30的像素值的编码表示

split_coding_unit_flag=1//将32×32cu分割为4个scu,不需要另外的分割编码单元标记

codeoffirstscu//第一个scu的像素值的编码表示

codeofsecondscu//第二个scu的像素值的编码表示

codeofthirdscu//第三个scu的像素值的编码表示

codeoffourthscu//第四个scu的像素值的编码表示

split_coding_unit_flag=1//将32×32cu分割为4个scu,不需要另外的分割编码单元标记

codeoffirstscu//第一个scu的像素值的编码表示

codeofsecondscu//第二个scu的像素值的编码表示

codeofthirdscu//第三个scu的像素值的编码表示

codeoffourthscu//第四个scu的像素值的编码表示

split_coding_unit_flag=0//不进一步分割64×64cu

codeof64×64cu//第一个64×64cu的像素值的编码表示

在图3b所示意的实施例中,针对第一片2的码可以与如上所述相同,而针对第二片3,码取而代之地变成:

slice_header_syntax()//图3b中的片-包括地址信息

split_coding_unit_flag=1//由于第一个cu的大小小于能够占据所生成的地址信息所定义的画面中的位置的最大可能cu的大小,所以将第一个cu的分割编码单元标记设置为1,不需要另外的分割编码单元标记。

codeoffirstcu//图3b中的第一cu40b的像素值的编码表示

codeofsecondscu//第二个scu的像素值的编码表示

codeofthirdscu//第三个scu的像素值的编码表示

codeoffourthscu//第四个scu的像素值的编码表示

split_coding_unit_flag=1//将32×32cu分割为4个scu,不需要另外的分割编码单元标记

codeoffirstscu//第一个scu的像素值的编码表示

codeofsecondscu//第二个scu的像素值的编码表示

codeofthirdscu//第三个scu的像素值的编码表示

codeoffourthscu//第四个scu的像素值的编码表示

split_coding_unit_flag=1//将32×32cu分割为4个scu,不需要另外的分割编码单元标记

codeoffirstscu//第一个scu的像素值的编码表示

codeofsecondscu//第二个scu的像素值的编码表示

codeofthirdscu//第三个scu的像素值的编码表示

codeoffourthscu//第四个scu的像素值的编码表示

split_coding_unit_flag=0//不进一步分割64×64cu

codeof64×64cu//第一个64×64cu的像素值的编码表示

图7是示意了对包括多个片在内的画面的编码画面表示进行解码的方法的流程图。该方法开始于步骤s20,在步骤s20中从编码画面表示中(优选地,从编码画面表示中分配给当前片的片首部中)检索与片相关联的片标记。下一个步骤s21基于与片相关联的、并且从编码画面表示中(通常从编码画面表示的编码数据部分中)检索的编码片表示,生成片中的像素的像素值的解码表示。像素值的解码表示是根据公知的解码技术(例如,帧间或帧内模式解码)生成的。

这里所使用的像素值表示分配给像素的像素属性的任意值。在hevc的典型实现中,像素值是色彩值。现有技术中已知不同的色彩格式,并且可以根据实施例来使用不同的色彩格式。例如,色彩值可以包括亮度和色度分量,通常是一个亮度值和两个色度分量。因此像素值可以是像素的亮度值、像素的色度值、或是亮度和色度值二者。常用色彩格式的另一示例是所谓的rgb格式,rgb格式代表红绿蓝。则色彩值包括红色、绿色和蓝色值。因此,像素值可以是rgb值、红色值、绿色值、或蓝色值。rgb格式的变型(例如,rgba)也是已知的,并且可以根据实施例来使用。

实际上,实施例不一定要局限于使用色彩值作为像素值,而也可以应用于其他已知像素值,包括灰度值、标准值(即,x、y、z坐标值)等等。

然后,在步骤s22中采用在步骤s20中检索到的片标记,以确定当前片是否是画面中的第一片以及当前片由此不具有任何关联片地址,或者确定当前片是否不是第一片以及由此该片需要片地址。

如果步骤s22确定当前片确实是第一片,例如当片标记具有的值为1时,该方法继续到步骤s23。步骤s23简单地将在步骤s21中生成的像素值分配给以画面中的定义的片起始为起始的画面中的第一部分(通常是画面的左上角)。通常按照定义的处理顺序(例如,之前提到的morton或光栅扫描顺序)将像素值分配给像素。在应用于hevc的典型实施例中,按照morton顺序处理比lcu小的编码单元,而按照光栅扫描顺序处理画面中的lcu。这意味着解码开始于片中的第一lcu,然后如果该lcu被分割为更小的cu,则按照morton顺序对这些更小的cu进行解码。一旦已经对lcu进行解码,则该处理根据光栅扫描顺序继续下一个lcu,并且按照morton顺序来对该下一个lcu的任意更小的cu进行解码。

在具体实施例中,步骤s22实际上是在步骤s21之前执行的,以确定当前片确实是画面中的第一片。然后,对属于当前片的编码画面表示的编码数据进行解码,并将其分配给每个编码单元的像素编码单元。这意味着,步骤s21和s23形成通过片中的不同cu的环,并且逐个解码每个cu,并根据上面提到的处理顺序逐个cu将像素值分配给像素。

如果步骤s22基于关联片标记的值(例如,值为0)确定当前片不是画面中的第一片,则该方法继续到步骤s24。步骤s24从编码画面表示中(典型地从片的片首部中)检索片的片地址。采用片地址,以识别画面内的片的起始,并由此识别画面中属于该片的部分。然后,下一个步骤s25将像素值分配给画面的所识别部分中的像素,由此生成解码片。

与上面的步骤s21和s23类似,步骤s22和s24可以在步骤s21和s25之前执行,以首先断定当前片不是第一片,然后从编码画面表示中识别并读取片地址。其后,基于片地址来识别片的起始,并且可以开始对片的编码数据进行解码。可以逐cu进行解码,并将解码后的像素值分配给当前cu中的像素值,然后根据处理顺序继续下一个cu。

在备选方案中,在步骤s21之前执行步骤s22。因此,步骤s22调查是否设置了片标记,然后通过生成像素值的解码表示来继续,并如步骤s23中所指示地进行分配,或者首先在步骤s24中检索并使用地址信息,以识别要在步骤s25中将像素值分配给画面中的哪个部分。

一旦已经解码了片中的所有编码数据并将其分配给在步骤s23或s25中针对该片所识别的像素部分,则该方法结束,或进一步前进到当前画面的下一个片,或视频流中的另一画面的另一个片。在这种情况下,针对该下一个或另一个片重复图7中的方法。

然而,在减小画面的总解码时间的优选实施例中,可以并行解码多个片。在这种情况下,针对这些片中的每一个片执行图7的方法,并且因此基于要解码的片的相应片标记来针对每一个片执行步骤s22的判决。

图8是示意了图7中的方法的附加步骤的流程图。该方法从图7中的步骤s22继续,步骤s22基于关联片标记断定当前片不是画面中的第一片。下一个步骤s30检索编码画面表示的分级粒度的信息。如本文中之前所讨论的,粒度信息可以包括在编码画面表示中,然后在步骤s30中从编码画面表示中检索粒度信息。备选地,粒度信息可能已经包括在与同一个视频流相关的先前接收到的编码画面表示中。在这种情况下,从编码画面表示中检索粒度信息,并将其存储以供稍后在对后续编码画面表示进行解码时使用。也可能已经将粒度信息与任意编码画面表示分开发送,例如单独的pps或sps字段。然后,可以使用会话、画面或流标识符来识别当前编码画面表示的相关粒度信息。

下一个可选步骤s31检索当前画面中的lcu的数目的信息。该信息可以简单地标识这种lcu的数目,或者该信息可以被解码器用于计算lcu的数目。例如,可以从编码画面表示或从全局首部信息(例如pps或sps字段)中检索码字numlcusinpicture。备选地,基于画面的总大小的信息(如从编码画面表示中或从全局首部中检索得到的)和lcu大小的信息(例如,之前提到的log2_min_coding_block_size_minus3和log2_diff_max_min_coding_block_size码字)来计算numlcusinpicture。

下一个步骤s32基于分级粒度的信息以及优选地基于画面中的lcu的数目来确定当前片的片地址的长度。在具体实施例中,将片地址的长度定义为ceil(log2(numlcusinpicture)+slicegranularity)。因此,在具体实施例中,基于分级粒度的信息以及基于当前画面中的lcu的数目的信息来确定片地址的长度。优选地,根据slicegranularity=(slice_granularity<<1)从粒度信息slice_granularity中直接获得参数slicegranularity。

然后,该方法继续到图7中的步骤s24,在步骤s24中,基于在步骤s32中确定的片地址的长度的信息,从编码画面表示中检索当前片的片地址。从而,采用该长度来识别编码画面表示的哪些比特或符号通过定义片地址的长度来定义片地址,片地址优选地在片的片首部中具有固定起始点,但是其中结束点取决于片地址长度。

在本发明的实施例应用于h.264/mpeg-4avc之上的情况下,没有粒度信息可用,并且由此可以省略步骤s30。步骤s31检索确定画面中的宏块数目的信息或检索使得可以确定画面中的宏块数目的信息,其中在步骤s32采用该信息以确定片地址的长度。

图9是示意了用于识别片的第一编码单元的位置并由此识别画面内的片起始的具体实施例的流程图。该方法从图7的步骤s24继续。下一步骤s40确定lcu地址,lcu地址表示画面内的存在第一cu和片起始的lcu的位置。步骤s40采用片地址来确定lcu地址。例如,可以将参数lcuaddress确定为slice_address>>slicegranularity,其中slice_address表示片地址。下一步骤s41相应地确定子lcu地址,子lcu地址表示在步骤s40中识别的lcu内的第一cu的位置。该子lcu地址也是基于片地址确定的。例如,将参数granularityaddress确定为slice_address-(lcuaddress<<slicegranularity)。

然后,可以采用lcu和子lcu来将最终片地址计算为(lcuaddress<<log2_diff_max_min_coding_block_size<<l))+(granularityaddress<<((log2_diff_max_min_coding_block_size<<1)-slicegranularity)),这在步骤s42中用于识别画面中属于当前片的部分。这样,该部分开始于片起始和基于片地址所识别的第一cu,然后根据处理顺序在画面内继续,直到片的所有编码数据都已经被解码并被分配给画面中的cu。

在备选实施例中,直接采用从编码画面表示中检索的片地址来识别片起始和第一编码单元。这样,片地址可以对应于片起始位置的数目或片起始于的可寻址cu的数目。因此,片地址可以是所有可能地址的列表中的按照编码/解码顺序的索引。备选地,从片地址中导出x和y坐标,并将其用于定位片起始。另一变型是如本文中之前所描述的,从片地址中检索或计算出lcu坐标和子lcu坐标。

片地址不仅定义了片的第一cu的位置和片起始,而且优选地还定义了第一cu的大小。因此,至少部分地基于片地址来确定第一cu的大小。更具体地,片地址指示第一cu能够具有的就像素数目而言的最大可能大小。这意味着,第一cu的大小可以等于该最大可能大小,或者小于该最大可能大小。在后一种情况下,除了片地址以外,还采用分割编码单元标记来定义第一cu的正确大小,本文中将对此进行进一步的讨论。

例如,第一cu可以与编码画面表示中所包括的(典型地包括在编码数据部分中的)分割编码单元标记相关联。然后,将分割编码单元标记的值与片地址一起用于定义第一cu的正确大小。因此,如果将分割编码单元标记设置为一定义值(优选地为1),则第一cu的大小比能够占据基于片地址所定义的画面内的位置的最大可能cu的大小要小(参见图3b)。然而,如果将分割编码单元标记设置为另一定义值(优选地为0),则第一cu的大小等于能够占据片地址所定义的画面中的位置的最大可能cu的大小(参见图3a)。

第一cu可以与多个分割编码单元标记相关联。例如,如果最大可能cu的大小为32×32像素,而第一cu的大小为8×8像素,其中lcu的大小和scu的大小为64×64像素和8×8像素,则码可以是:

split_coding_unit_flag=1//将32×32cu划分为16×16cu

split_coding_unit_flag=1//将第一16×16cu分割为scu,不需要另外的分割编码单元标记,因为现在已经达到了第一cu的目标大小,并且这也是表示现在可以进行进一步分割的scu大小。

在一些实施例中,可以只基于片地址,而不使用任何分割编码单元标记作为附加信息,来确定第一cu的大小。当能够占据基于片地址所定义的画面内的位置的最大可能cu的大小等于scu的大小时,这是可能的。在这种情况下,不可能将该最大可能cu进一步分割,因为它实际上是scu。

图10是用于对包括多个片在内的画面进行编码的编码器或设备100的示意框图。设备100包括表示生成器110,表示生成器110配置用于:针对画面中的每一个片,基于该片中的像素的像素值,生成相应的编码片表示。表示生成器110根据已知编码方案(例如,帧间或帧内编码)执行该像素编码。设备100中的标记设置器120配置用于设置与该片相关联的片标记。如果当前片是画面中的第一片,则标记设置器120将片标记设置为第一定义值(例如,1),而对于画面中的剩余片,则将相应的片标记设置为第二定义值(例如,0)。

地址生成器130针对画面中的除了第一片以外的每一个片(即,针对片标记被设置为0的每个片)生成相应的片地址。地址生成器130所生成的片地址使得可以识别画面内的片的第一cu的位置,并由此识别画面内的片的起始位置。

设备100还包括表示管理器140,表示管理器140配置用于将来自表示生成器110的相应的编码片表示、来自标记设置器120的片标记、来自片地址生成器130的片地址包括在画面的编码画面表示中。在具体实施例中,在片地址之前将片标记设置在编码表示中。在这种情况下,可以进行解析,因为片标记决定编码片表示中是否有片地址字段。

在一实施例中,地址生成器130基于设备100针对画面所确定的分级粒度来生成片地址。在这种情况下,可以在设备100中实现可选的长度确定器150,以采用分级粒度来确定片地址的长度,并由此确定片地址应当包含的比特的数目。优选地,长度确定器150另外还在确定片地址的长度时使用画面中的lcu的总数目的信息,其中可以如本文中先前所公开的那样来计算lcu的总数目。在另一实施例中,省略长度确定器150,并且地址生成器130自己来确定片地址的长度。

在h.264/mpeg-4avc编码的情况下,长度确定器150优选地基于画面中的宏块的数目来确定片地址的长度,画面中的宏块的数目可以基于画面的总大小的信息来计算。

地址生成器130在生成片地址时使用该长度的信息。在具体实施例中,地址生成器130如本文中之前所公开的那样来确定画面内的lcu位置的坐标以及lcu内的子lcu位置的坐标。因此,片地址可以包括这些lcu和子lcu位置的表示,或可以根据这些lcu和子lcu位置的表示来确定。

有利地,采用设备100来对多个片进行并行编码,以减小总的画面编码时间和总的视频流编码时间。

设备100可以至少以软件来实现。在这样的实施例中,设备100实现为计算机程序产品,该计算机程序产品存储在内存上、并加载和运行在通用或专用计算机、处理器或微处理器(例如中央处理单元(cpu))上。软件包括实现至少表示生成器110、标记设置器120、地址生成器130、表示管理器140和可选的长度确定器150的操作的计算机程序代码单元或软件代码部分。程序可以整体或部分地存储在一个或多个适当的易失性计算机可读介质或数据存储装置(例如ram)或一个或多个非易失性计算机可读介质或数据存储装置(例如磁盘、cd-rom、dvd盘、硬盘、rom或闪存)中。数据存储装置可以是本地数据存储装置或远程设置的,例如设置在数据服务器中。因此,软件可以加载到计算机或等同处理系统的操作内存中以由处理器执行。计算机/处理器不需要专门用于只执行上述功能,而也可以执行其他软件任务。用于定义设备100的程序代码的非限制性示例包括单指令多数据(simd)码。

备选地,设备100可以用硬件实现。可以使用并组合起来以实现设备100中的单元的功能的电路元件的变型有很多。这种变型包括在实施例内。设备100的硬件实现的具体示例是利用数字信号处理器(dsp)硬件和集成电路技术(包括通用电子电路和专用电路二者)的实现。

图11是用于对包括多个片在内的画面的编码表示进行解码的解码器或设备200的实施例的示意框图。设备200包括表示检索器210,表示检索器210配置用于从编码画面表示中(典型地从编码画面表示中的片首部中)检索与要解码的片相关联的片标记。在设备200中设置表示生成器220,用于基于编码画面表示来生成片中的像素的像素值的解码表示。表示生成器220根据已知技术(例如,帧间或帧内模式解码方案)生成像素值。

如果表示检索器210针对当前片所检索的片标记具有第二定义值(例如0),指示该片不是画面中的第一片,则地址检索器230变得可操作。然后,地址检索器230从编码画面表示中(例如,从编码画面表示的片首部中)读取并检索与该片相关联的片地址。然后,在将片解码为基于地址检索器230检索的片地址所识别的片的部分中的像素时,值分配器240分配从表示生成器220获得的像素值。

如果表示检索器针对当前片所检索的片标记具有第一定义值(例如,1),则值分配器240可以直接识别应当将来自表示生成器220的像素值分配给片的哪个部分。这通常是按照编码/解码顺序的画面中的第一部分,例如左上部。因此,在这种情况下,不需要片地址来识别画面中的这个第一部分。

在hevc实现的情况下,并且如果给编码画面数据分配分级粒度信息,则可以在设备200中设置可选的粒度信息检索器250,用以检索适用于要解码的当前片的分级粒度的信息。粒度信息检索器250可以从编码画面表示或从与编码画面表示相关联的全局首部字段(例如,pps或sps字段)中检索粒度信息。可选的长度确定器260采用粒度信息检索器250所检索的粒度信息来确定片地址的长度,并由此确定地址检索器230为了检索片地址而应当读取的比特的数目。备选地,可以省略该长度确定器260,并且地址检索器230自己基于粒度信息来确定地址长度。

在设备200中实现可选的编码单元信息检索器270是有益的,以从编码画面表示(例如,从全局首部字段,pps或sps字段)中检索画面中的lcu的总数目的信息。该信息可以是先前所提到的log2_min_coding_block_size_minus3和log2_diff_max_min_coding_block_size,这使得编码单元信息检索器270可以计算画面中的lcu的数目(给定画面的总大小的信息,这优选地也可以从编码画面表示或从全局首部字段(pps或sps字段)中获得)。

然后,长度确定器260基于来自粒度信息检索器250的粒度信息和编码单元信息检索器270所确定的lcu的总数目来有利地确定片地址的长度。

在一实施例中,地址检索器230配置用于:如果当前片不是画面中的第一片,则基于片地址来确定画面内的lcu的位置的坐标的第一表示或lcu地址。地址检索器230优选地还确定片的第一编码单元的位置的坐标的第二表示或子lcu地址,并由此确定lcu内的片起始。然后,地址检索器230基于本文中所公开的lcu地址和子lcu地址,采用lcu地址和子lcu来识别属于当前片的画面中的部分。

例如,地址检索器230可以基于片地址(slice_address)且基于分级粒度的信息(slicegranularity)来确定参数lcuaddress=slice_address>>slicegranularity。优选地,基于片地址(slice_address)、分级粒度的信息(slicegranularity)和lcu地址,将子lcu地址确定为granularityaddress=slice_address-(lcuaddress<<slicegranularity)。

表示生成器220优选地至少部分地基于片地址来确定片中的第一cu(就像素数目而言)的大小。片地址由此定义了能够占据画面中的片地址所定义的位置的最大可能cu的大小。在一实施例中,表示生成器220仅基于片地址来确定第一cu的大小。当第一cu的大小等于scu的大小,并且不可能进行进一步的cu分割时,这是可能的。在其他实施例中,表示生成器220另外将编码画面表示中包括的一个或多个分割编码单元标记与片地址一起用于确定第一cu的大小。如果单个分割编码单元标记等于0或某个其他定义值,则第一cu的大小等于能够占据片地址所定义的画面内的位置的最大cu的大小。如果分割编码单元标记等于1或某个其他定义值,则第一cu的大小小于能够占据片地址所定义的画面内的位置的最大可能cu的大小(优选地为其四分之一)。

例如,如果起始坐标处的最大可能cu的大小为32×32像素(lcu的大小为64×64像素,scu的大小为8×8像素),则分割编码单元标记可以是:

split_coding_unitflag=0

对于大小为32×32像素的第一cu

split_coding_unit_flag=1

split_coding_unit_flag=0

对于大小为16×16像素的第一cu

split_coding_unit_flag=1

split_coding_unit_flag=1

对于大小为8×8像素的第一cu

设备200可以至少以软件来实现。在这样的实施例中,设备200实现为计算机程序产品,该计算机程序产品存储在内存上、并加载和运行在通用或专用计算机、处理器或微处理器(例如中央处理单元(cpu))上。软件包括实现至少表示检索器210、表示生成器220、地址检索器230、值分配器240、可选的粒度信息检索器250、可选的长度确定器260、和可选的编码单元信息检索器270的操作的计算机程序代码单元或软件代码部分。程序可以整体或部分地存储在一个或多个适当的易失性计算机可读介质或数据存储装置(例如ram)或一个或多个非易失性计算机可读介质或数据存储装置(例如磁盘、cd-rom、dvd盘、硬盘、rom或闪存)中。数据存储装置可以是本地数据存储装置或远程设置的,例如设置在数据服务器中。因此,软件可以加载到计算机或等同处理系统的操作内存中以由处理器执行。计算机/处理器不需要专门用于只执行上述功能,而也可以执行其他软件任务。用于定义设备200的程序代码的非限制性示例包括单指令多数据(simd)码。

备选地,设备200可以用硬件实现。可以使用并组合起来以实现设备200中的单元的功能的电路元件的变型有很多。这种变型包括在实施例内。设备200的硬件实现的具体示例是利用数字信号处理器(dsp)硬件和集成电路技术(包括通用电子电路和专用电路二者)的实现。

图12是容纳设备200的媒体终端300的示意框图,设备200用于对画面的编码表示进行解码。媒体终端300可以是具有媒体解码功能的任意设备,媒体解码功能操作于编码比特流(例如编码视频帧中的视频流),由此对视频帧进行解码并使得视频数据可用。这种设备的非限制性示例包括移动电话和其他便携式媒体播放器、计算机、解码器、游戏控制台等等。媒体终端300包括存储器320,存储器320配置用于存储画面的编码表示,例如编码视频帧。编码表示可以通过媒体终端300自身来生成。在这种情况下,媒体终端300优选地包括媒体引擎或记录器以及连接的编码器,例如图10中的用于对画面进行编码的设备。备选地,编码表示由某一其他设备生成,并以无线方式或通过有线传送到媒体终端300。媒体终端300包括收发机310(发射机和接收机)或输入和输出端口,用以实现数据传送。

将编码表示从存储器320传送到设备200以进行解码,例如图11中所示意的设备。设备200将编码表示解码为解码画面或解码视频帧。将解码数据提供给媒体播放器330,媒体播放器330配置用于将解码画面数据或视频帧呈现为可在媒体终端300的显示器或屏幕340或连接到媒体终端300的显示器或屏幕340上显示。

在图12中,已经将媒体终端300示意为既包括用于解码的设备200,又包括媒体播放器330。然而,这仅仅被视为媒体终端300的实现实施例的示意性的但非限制性的示例。分布式实现也是可能的,并且在这里所使用的媒体终端300的范围内,其中将设备200和媒体播放器330设置在两个物理上分离的设备中。显示器340也可以设置为与媒体终端300相连的分离设备,其中在媒体终端300处进行实际的数据处理。

上面所描述的实施例应被理解为本发明的一些示意性示例。本领域技术人员将理解,在不背离本发明的范围的前提下,可以对实施例作出各种修改、组合和改变。具体地,不同实施例中的不同的部分方案可以组合在其他配置中(只要技术上可行)。然而,本发明的范围由所附权利要求限定。

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