在视频数据流的编码和解码中存储设备的有效使用的制作方法

文档序号:7619868阅读:237来源:国知局
专利名称:在视频数据流的编码和解码中存储设备的有效使用的制作方法
技术领域
本发明涉及在视频数据流的编码和解码中的存储设备的有效使用。
背景技术
视频编解码器(压缩器-解压缩器)是一些压缩算法式,其被设计成对视频数据流进行编码/压缩和解码/解压缩,以此来减少流的大小,从而传输更快并且存储空间更小。然而由于存在损耗,视频编解码器在压缩视频流的二进制数据时尽力保持视频质量。通常使用的视频编解码器的实例有MPEG-4、AVI、WMV、RM、RV、H.261、H.263以及H.264。
视频流由帧序列组成,其中每一帧由多个宏块组成。视频编解码器通过将帧分成一个或多个片段(slice)或子部分,对该序列中的每一帧进行编码,其中每一个片段包含整数个宏块。宏块典型的是16×16像素阵列(尽管其它尺寸的宏块也是可以的),并且可以将宏块分成用于编码和解码的分区。例如,图1表示可以在H.264标准中对宏块进行分区的不同的方式。如图1所示,宏块可以以259种可能的方式中的一种被分区1.一个分区2.两个垂直分区3.两个水平分区以及4.四个较小的正方形分区。
在最后一种情况中,每个最后所得到的的正方形分区可以以相同的方式被分区(通过另外256种方式对宏块进行分区),直到将一个单独的宏块分成最大16个分区。
宏块的容量可以是自备的,或从一个或两个不同的帧中预测得到。在接收到的比特流(在编码过程中生成)中,后面的预测信息可以从每个分区得到运动向量(由x和y分量组成)以及该运动向量所依据的帧(在帧序列中)的相关指示器。该指示器可以是例如基准帧索引,其被用于连同相关的基准帧列表一起来指示该运动向量所依据的特定帧。
图2表示基准帧索引和基准帧列表的概念。对于帧的每个片段,存储了用于识别运动向量的特定帧的一个或多个基准帧列表。在图2的实例中,第一和第二基准帧列表用于识别运动向量的特定帧。典型地,当接收到一个片段时,该片段的头部含有得到帧基准列表的信息。
与运动向量相关的基准帧索引在基准帧列表中指定条目(含有帧号),其指示帧序列中运动向量所依据的帧。在图2的实例中,有七个活动帧(即,目前在存储设备中保持的帧),其从0至6编号。编号为“3”的帧目前正在被处理。如果基准帧索引给相关的第一运动向量指定值0,那么这表示在该第一基准帧列表的第一条目中的帧号是该运动向量所依据的帧。由此,如图2的实例所示,编号为“2”的帧是该第一运动向量所依据的帧。在进一步的实例中,如果基准帧索引给相关的第二运动向量指定值2,那么这表示在第二基准帧列表(用于第二运动向量)的第三条目中的帧号是该第二运动向量所依据的帧。由此,如图2的实例所示,编号为“6”的帧是该第二运动向量所依据的帧。
图3表示含有帧的片段的分区数据的传统的存储设备结构305的原理图。在图3的实例中,该片段由三个宏块所组成,其中第一宏块(宏块0)由1个分区组成,第二宏块(宏块1)由16个分区组成,第三宏块(宏块2)由2个分区组成。
典型地,在解码过程中,基于假定该片段的每个宏块被分成最大数量的分区(例如在H.264标准情况下的16个分区)的“最坏情况设想”,存储设备被分配给片段。由此,在H.264标准下,对于该片段的每个宏块,分配有足够的存储空间来存储头部和16个分区条目(entry)。数据结构中的分区条目在帧的解码过程中存储分区数据。每个分区条目含有单个分区的数据(例如,运动向量和基准帧索引数据)。
图3的图表表示已经分配给片段的该存储设备结构的分配部分310。由于没有将片段的每个宏块典型地分成16个分区,因此宏块将经常分配到比该宏块中所含有的分区更多的分区条目的存储量。由此,宏块的该存储设备结构的分配部分将典型地含有一个或多个使用的分区条目(含有该宏块的实际分区数据的条目)以及一个或多个不使用的分区条目(不含有该宏块的分区数据的条目)。使用的分区条目含有有意义的/有用的数据(例如运动向量和分区的基准帧索引数据),反之,不使用分区条目不含有有意义的/有用的数据。
如图3所示,对于该片段的每个宏块,该存储设备结构含有头部区段和分区条目区段。典型地,在解码过程中,基于假定该宏块被分成16个分区的“最坏情况设想”,给头部分配存储量。由此,对于每个宏块头部,分配了足够的存储空间用于16个头部分区条目。宏块的传统头部含有描述该宏块怎样被分区的数据。这种描述性的数据包括例如每个分区的位置和维数数据。图4表示存储在宏块2的存储设备结构中的传统头部405的原理图。宏块2被分成2个分区。由此,头部将包括2个使用的头部分区条目,每个条目含有特定分区的描述性数据。剩余的14个头部分区条目将为空(不使用)。此外,每个头部典型地含有指示该宏块中的分区数量的数据。
如图3所示,存储设备结构305的第一部分315含有宏块0的数据。由于宏块0由1个分区组成,因此该存储设备结构含有仅用于宏块0的第一分区的使用的分区条目(分区条目0),同时分配给宏块0的剩余15个分区条目(分区条目1-15)为不使用条目。存储设备结构305的第二部分320含有用于宏块1的数据。由于宏块1由16个分区组成,因此该存储设备结构含有用于宏块1的第一至第十六个分区的使用的分区条目(分区条目0-15),使得分配给宏块1的所有条目都被使用。存储设备结构305的第三部分325含有宏块2的数据。由于宏块2由2个分区组成,因此该存储设备结构含有用于宏块2的第一和第二分区的使用的分区条目,同时分配给宏块2的剩余14个分区条目不被使用。
由此,该片段的分区数据典型地以随意的模式存储在存储设备结构中,其中不使用的分区条目散布在使用的分区条目中。存储设备结构中的数据存储的这种随意模式引起该片段的效率低的解码。这是由于当CPU在解码过程中从存储设备中加载分区数据时,CPU从存储设备结构检索存储器的数据块(如相邻的分区数据),而不是仅检索该CPU那时所需要的精确的数据。这些检索到的数据块可能含有使用和不使用的分区条目。这些检索到的数据块存储在该CPU可以快速(典型地以比该CPU可以访问该存储设备结构明显更短的时间)访问的高速缓冲存储器(例如,CPU高速缓冲存储器)中。
如果该CPU在处理该片段的过程中后来需要特定的分区数据,那么该CPU首先确定特定分区数据是否存在于该高速缓冲存储器中,这是由于该特定分区数据可能已经包括在之前检索到的数据块中,并且访问高速缓冲存储器的时间比访问该存储设备结构的时间短。如果特定分区数据存在于高速缓冲存储器中,那么这被称为“高速缓冲存储器命中(hit)”,其中从高速缓冲存储器检索特定分区数据是快速的。如果该特定分区数据没有存在于该高速缓冲存储器中,那么这被称为“高速缓冲存储器失误”,则该CPU必须随后从较慢的该存储设备结构中检索特定分区数据。
当特定数据以随意的方式存储在存储设备结构中时,其中不使用的分区条目散布在使用的分区条目中,那么由于检索到的数据块将还含有与使用的分区条目散布的不使用的分区条目,其中不使用的分区条目含有非有用数据,因此在该片段的处理过程中,典型地存在较高比率的“高速缓冲存储器失误”。
由此,需要一种在存储设备结构中组织分区数据从而可以更有效地处理分区数据的方法。

发明内容
本发明的一些实施方式通过以新颖的方式组织存储设备结构中的帧数据而简化了帧的编码/解码。具体地,在给帧片段已经分配的部分存储设备结构中,使用的分区条目(含有有用数据的条目)存储在该分配部分的第一区段,不使用的分区条目(不含有有用数据的条目)存储在该分配部分的第二区段,第一和第二区段包括在该存储设备结构中的连续和相邻的区域。在一些实施方式中,使用的分区条目“打包”到该存储设备结构的分配部分的第一区段,同时不使用的分区条目占用该分配部分的剩余部分。
在一些实施方式中,确定/识别在视频数据的编码或解码中有用的其它数据,并将其存储在使用的分区条目的未使用字节中。在一些实施方式中,宏块的头部数据存储在该宏块的特定条目中(例如,该宏块的第一分区的第一分区条目)。在这些实施方式中,头部数据与分区条目的分区数据结合为一体。在这些实施方式中,对标准基准帧索引数据进行计算,并将其存储在使用的分区条目的未使用字节中。在一些实施方式中,对宏块的分区进行比较,以确定该宏块的任何分区是否相同,由此将相同的分区合并成宏块的单个分区。


图1表示可以对宏块在H.264压缩标准下进行分区的不同方式。
图2表示基准帧索引和基准帧列表的概念。
图3表示含有帧的片段的分区数据的传统存储设备结构的概念图。
图4表示存储在存储设备结构中的传统头部的概念图。
图5表示在数据结构中在帧解码过程中存储分区数据的分区条目的组成。
图6表示含有用于帧片段的分区数据的存储设备结构的概念图,根据本发明该分区数据在该存储设备结构中被组织。
图7表示与图6所示的存储设备结构的分配部分相关的定位器列表的概念图。
图8是用于存储视频帧片段的数据的方法流程图。
图9表示含有在该条目的6个不使用字节中的有用数据的分区条目的组成。
图10表示H.264标准的查找表。
图11表示含有帧片段的分区数据的存储设备结构的概念图,其中头部数据已经结合在分区条目中。
图12表示使用结合的头部来存储视频帧片段的数据的方法流程图。
图13表示标准基准帧列表的实例。
图14是使用标准基准帧索引来存储帧序列中的一组帧片段的数据的方法流程图。
图15A-B表示合并分区的实例。
图16是用于合并宏块分区的方法流程图。
图17示出了实现本发明某些实施方式的计算机系统。
具体实施例方式
于2004年6月27日提出的序列号为60/583,447,题目为“对图像进行编码和解码”的美国临时专利申请的公开内容在此通过引用清楚地结合。
在以下对本发明的详细描述中,将对本发明的多处细节、实例以及实施方式进行阐述和说明。然而,对本领域技术人员显而易见的是,本发明并不限于阐述的实施方式,并且本发明在没有对某些具体细节以及实例进行讨论的情况下仍可以实现。
分区条目在一些实施方式中,调整分区的分区条目,使其具有预定长度,以加快分区的解码。由于调整上的考虑,因此数据典型地被分成多个特定数量的字节。在这些实施方式中,每个分区条目被调整为相同数量的预定字节。
图5表示在帧的解码过程中存储分区数据的数据结构中分区条目500的组成。每个分区条目含有单个分区数据(即,运动向量以及基准帧索引数据)。在图5所示的实例中,分区条目有16字节的长度。如图所示,在分区条目(两个字节用于运动向量的每个x或y分量)中,第一运动向量505的数据包括四个字节数据,第二运动向量510的数据也包括四个字节的数据。在该分区条目中,第一基准帧索引515的数据包括一个字节,第二基准帧索引520的数据也包括一个字节数据。如图5的实例所示,其中分区条目具有16个字节,分区条目含有十个使用的字节,其中该条目的六个字节525典型地为空并且不被使用(即,不含有有意义的或有用的数据)。
在编码/解码过程中存储设备的有效使用在一些实施方式中,为了简化帧片段的编码/解码,在该存储设备结构中组织该片段数据,使得使用的分区条目不会散布在不使用的分区条目中。具体地,在已经给该片段分配的一部分存储设备结构中,使用的分区条目存储在该分配部分的第一区段,不使用的分区条目存储在该分配部分的第二区段,在该存储设备结构中第一和第二区段的每个包括连续并且相邻的存储区域。在一些实施方式中,使用的分区条目“打包”到该存储设备结构的分配部分的第一预定区段,同时不使用的分区条目占用该分配部分的剩余部分。
与该存储设备结构的分配部分相联系的是定位器列表,其是包含在该分配部分中的分区条目的索引的列表。具体地,该定位器列表包括索引列表(例如,指针),这些索引包含分配部分中的分区条目的位置信息(例如,地址信息)。该定位器列表和该分配部分一起对该分配部分中的特定宏块的特定分区条目进行定位。
在一些实施方式中,每个宏块的头部数据存储在存储该使用的分区条目的该分配部分的第一区段中。在一些实施方式中,宏块的头部数据存储在第一区段中,但是与该宏块的任何分区条目分开存储。在另一些实施方式中,宏块的头部数据存储在宏块的特定分区条目中(例如,该宏块的第一分区的第一分区条目)。在这些实施方式中,该头部数据与分区条目的分区数据相结合。
图6表示含有帧片段的分区数据的存储设备结构605的原理图,根据本发明在存储设备结构中组织该分区数据。在图6的实例中,该片段由和图3实例相同的三个宏块组成,由此第一宏块(宏块0)由1个分区组成,第二宏块(宏块1)由16个分区组成,第三宏块(宏块2)由2个分区组成。
给该片段分配的存储部分610的尺寸基于“最坏情况设想”而确定,使得对于该片段的每个宏块分配有足够的存储空间来存储头部和16个分区条目(其中每个分区条目包括16字节数据)。由此,对于宏块0,有一个使用的分区条目(分区条目0)和15个不使用的分区条目(分区条目1-15);对于宏块1,有16个使用的分区条目;对于宏块2,有两个使用的分区条目和14个不使用的分区条目。
如图6所示,该片段的所有宏块的使用的分区条目存储(“打包”)到该存储设备结构的分配部分的第一区段630中,同时不使用的分区条目存储在该分配部分的第二区段635中(该分配部分的剩余部分)。对于宏块0,头部数据和使用的分区条目0在宏块0的第一“使用的”区段630的子分段615中。宏块0的不使用的分区条目1-15在该分配部分的第二“不使用”区段635中。对于宏块1,头部数据和使用的分区条目0-15在宏块1的第一“使用的”区段630的子分段620中。对于宏块2,头部数据和使用分区条目0-1在宏块2的第一“使用的”区段630的子分段625中。宏块2的不使用的分区条目2-15在该分配部分的第二“不使用”区段635中。与图3形成对比,图3中使用和不使用的分区条目散布在该存储设备结构305的整个分配部分310中。
由于将会遇到较少的高速缓冲存储器失误,因此以这种方式组织分区数据使得对片段进行解码更加有效。当CPU从该分配部分的第一区段中检索分区数据块时,分区数据的每个块将完全或大部分地由使用的分区条目组成,这是由于使用的分区条目已经打包在第一区段中,不使用的分区条目打包在第二独立区段中。由于该高速缓冲存储器由此含有从该使用的分区条目中得到的大比例的有意义的/有用的数据,因此这引起较少的高速缓冲存储器失误。
图7表示与图6所示的存储设备结构605的分配部分610相联系的定位器列表705的原理图。该定位器列表包括索引列表(例如,指针),其包含用于帮助在分配部分中定位分区条目的位置信息(例如,地址信息)。该定位器列表和该分配部分一起帮助对该分配部分中的特定宏块的特定分区条目进行定位。
在一些实施方式中,仅有一个宏块的索引存储在该定位器列表705中。在一些实施方式中,在该定位器列表705中仅存储宏块第一分区的第一分区条目的索引。在这些实施方式中,该列表中的索引识别在该存储设备结构605的分配部分610中的该片段中的宏块号以及该宏块的第一分区条目的位置信息。例如,如图7所示,宏块0的索引含有在分配部分610中宏块0的第一分区条目的位置信息。
图8是用于存储视频帧片段的数据的方法800的流程图。该方法800可以例如通过构造使用数据存储设备结构来编码或解码数据流的应用而实施。
该方法800通过接收(在805)视频帧片段的数据而开始,该片段含有两个或更多宏块,其中每个宏块包含一个或多个分区。该片段的数据包括与该片段的宏块分区相关的分区数据(例如,运动向量和基准帧索引数据),和每个宏块的头部数据。作为可选择的步骤,对于每个宏块,该方法比较(在807)该宏块的分区,并合并(在807)任何相同分区(以下将要讨论)。
该方法然后分配(在810)用于存储片段数据的部分存储设备结构,该分配的存储部分包括为分区条目和宏块头部分配的存储设备。在一些实施方式中,该分配的存储部分的尺寸根据分配给该片段的每个宏块的分区条目的预定个数而确定。在一些实施方式中,该分配的存储部分的尺寸根据“最坏情况设想”而确定,使得该片段的每个宏块分配有足够的存储空间来存储宏块头部和16个分区条目。
然后该方法将与该片段的分区相联系的分区数据存储(在812)在分配的分区条目中(称作使用的分区条目)。作为可选择的步骤,该方法确定(在813)另外的有用的/有意义的数据,并将其存储(在813)在使用的分区条目的不使用的字节中(以下将要讨论)。在一些实施方式中,该方法对结合在一起的头部数据或标准基准帧索引数据进行计算(在813),并将其存储(在813)在使用的分区条目中。在一些实施方式中,该方法计算/识别并存储在分区编码或解码中有用的任何其它数据。
该方法800然后将每个宏块的头部数据存储(在815)在该分配的存储部分的第一区段中。该方法800还将使用的分区条目存储/放置(在817)在该分配的存储部分的第一区段中,其中使用的分区条目含有该片段的宏块的分区数据。该方法800还将不使用的分区条目(不含有分区数据的条目)存储/放置(在820)在分配的存储部分的第二区段中。在一些实施方式中,该第一和第二区段的每个包括在分配的存储部分中的存储设备的连续区域,由此使用的分区条目没有散布在该分配的存储部分中的不使用的分区条目中。
该方法800然后生成(在825)与该分配的存储部分相联系的定位器列表,该定位器列表包括索引列表(例如,指针),其包含分配部分中的分区条目的位置信息(例如,地址信息)。该定位器列表用于帮助在分配部分中定位特定宏块的特定分区条目。在一些实施方式中,在该定位器列表中仅存储宏块第一分区的第一分区条目的索引。然后该方法结束。
分区条目中的不使用的字节的使用被结合的头部如图6所示,对于每个宏块,存在也在该分配部分的第一区段中存储的宏块头部数据,其中该第一区段存储了使用的分区条目。在一些实施方式中,宏块的头部数据存储在第一区段,但是与该宏块的任意分区条目分开存储。在另一些实施方式中,宏块的头部数据存储在该宏块的特定分区条目中。在这些实施方式中,该头部数据和分区条目的分区数据结合在一起。
如图5的实例所示,分区条目可以是16字节长度。如图5所示,分区数据(运动向量和基准帧索引数据)包括10字节505-520的分区条目,留下六字节525的分区条目未使用。图9表示根据本发明的分区条目900的组成,其中,分区条目900在6个未使用的字节525的条目中含有有用数据。
在一些实施方式中,宏块的头部数据存储在宏块的特定分区条目的不使用的字节中。在一些实施方式中,该宏块的头部数据仅结合在该宏块的第一分区的第一分区条目中。在一些实施方式中,被结合的头部数据930包括分区条目900的2字节的不使用字节525。
该被结合的头部数据930和分区配置查找表一起用来识别宏块的唯一分区配置。如以上所讨论的,在H.264标准下,宏块可以被分区成259个不同的可能的分区配置。在这些实施方式中,生成查找表,该查找表含有259种不同的可能的分区配置中的每一个以及与每个分区配置(例如,范围从0-258)相联系的唯一标识符。在图10中示出了H.264标准的查找表1005的实例。在这些实施方式中,对于每个宏块,该被结合的头部数据识别查找表中的特定分区配置,其指示该宏块的分区配置(其中该被结合的头部数据的值与该特定分区配置所相关的唯一标识符相匹配)。
回顾宏块的传统头部含有有关该宏块怎样被分区的说明性数据,并且包括例如在该宏块中的每个分区相对于该宏块的位置和大小的数据。该传统的说明性数据可以从宏块的唯一分区配置中得到,这是由于该分区配置将指示该宏块中的每个分区相对于该宏块的位置和大小的数据。由此,一旦确定了该宏块的唯一分区配置,那么也可以确定在头部中典型地包含的该说明性数据。
由于被结合的头部数据存储在分区条目的不使用的部分中,并且将不需要传统头部的单独的存储空间,因此使用被结合的头部数据将减少存储设备的消耗。图11表示含有帧片段的分区数据的存储设备结构的概念图,其中头部数据已经结合在分区条目中。注意,和图3和6相对比,不再需要用于每个宏块的单独的头部区段。
图12是使用被结合的头部存储视频帧片段的数据的方法1200的流程图。该方法1200可以通过使用数据存储设备结构配置来编码或解码视频数据流的应用而实施。
该方法1200通过接收(在1205)视频帧片段的数据而开始,该片段含有两个或更多个宏块,其中每个宏块包含一个或多个分区。该片段的数据包括与该片段的宏块分区相关的分区数据(例如,运动向量和基准帧索引数据),以及含有描述该宏块怎样被分区的数据的每个宏块的头部数据(例如,该宏块的每个分区的位置和尺寸数据)。
然后该方法1200生成或接收(在1206)分区配置查找表,其含有宏块的每个可能的分区配置,每个可能的分区配置具有相联系的唯一标识符(例如,用数字表示的标识符)。对于该片段的每个宏块,该方法1200随后在该查找表中识别(在1207)与该宏块的分区配置相匹配的特定分区配置。然后该方法1200从该查找表中确定(在1208)与该识别的分区配置相关的唯一标识符。该相关的唯一标识符在此称为宏块的被结合的头部数据。该方法可以使用宏块的接收到的头部数据来识别(在1207)该宏块的特定分区配置,其中接收到的头部数据含有描述宏块怎样被分区的数据。由此,宏块的被结合的头部数据从该宏块的最初接收到的头部数据中得到(在步骤1207和1208)。
然后该方法分配(在1210)部分用于存储该片段的数据的存储设备结构。在一些实施方式中,不用考虑该片段的宏块的头部数据的单独存储区段,就可以确定分配的存储部分的大小。在这些实施方式中,预定个数的分区条目被分配给该片段的每个宏块,同时没有给每个宏块的头部数据分配单独的存储区段(如图11所示)。
然后该方法将与片段的分区相关的分区数据存储(在1212)在分配的分区条目中(称作使用的分区条目)。然后该方法1200将每个宏块的被结合的头部数据(在步骤1208中确定)存储(在1215)在该宏块的分区的使用的分区条目中。该方法可以通过将该被结合的头部数据存储在该宏块的分区条目的任何不使用的字节中来实现这点。在一些实施方式中,宏块的被结合的头部数据仅存储在该宏块的第一分区的第一使用的分区条目中。在一些实施方式中,被结合的头部数据包括使用的分区条目中的2字节不使用的字节。
在一些实施方式中,该方法1200随后将使用的分区条目存储/放置(在1217)在该分配的存储部分的第一区段中。在一些实施方式中,该方法1200还将不使用的分区条目(不含有分区数据的条目)存储/放置(在1220)在该分配的存储部分的第二区段中。在一些实施方式中,该方法1200随后生成(在1225)与该分配的存储部分相关的定位器列表,该定位器列表包括索引列表,其含有在该分配的部分中的分区条目的位置信息。然后该方法结束。
标准基准帧索引在一些实施方式中,对标准基准帧索引进行计算并将其存储在每个分区条目的不使用的字节中。在这些实施方式中,分区条目的第一和第二基准帧索引分别与标准基准帧索引形成映射。
正如以上联系图2所讨论的那样,与运动向量相联系的基准帧索引在基准帧列表中指定条目(含有帧号),其指示该运动向量所依据的帧。由于第一和第二基准帧列表可以对于帧的每个片段而改变,因此不可能有保证地确定在不同宏块的不同分区条目中具有相同值的基准帧索引是否指示同一帧。例如,在两个不同宏块中的两个分区条目可能每个具有与其第一运动向量相关的基准帧索引“2”。可是这并不表示这两个第一运动向量都基于同一帧。
这导致例如在解码过程的去块效应滤波器(deblocking filter)阶段中的低效率。在去块效应滤波器阶段中,对于两个时间相邻的宏块,确定这些分区的第一和第二运动向量的值是否相同(或者在预定偏差之内),并且确定第一和第二运动向量是否基于同一帧。如果是这样,这表示这些分区的运动是相同的(或几乎相同),由此随后应用不同的去块效应滤波过程(例如,较弱的滤波过程)。
典型地,一个效率低的过程用于确定两个分区的第一和第二运动向量是否基于同一帧。这个过程要求每个分区检索与该运动向量相关的基准帧索引、检索基准帧列表、确定由基准帧索引所指定的基准帧列表中的帧号。然后,这个过程需要对这些帧号进行比较,来确定这些帧是否是相同的。
在一些实施方式中,产生标准基准帧列表,并将其存储并用于帧的所有片段或一个序列的所有帧。在一些实施方式中,在解码过程中没有修改该标准基准帧列表。图13表示标准基准帧列表的实例。
在一些实施方式中,分区条目中的基准帧索引与标准基准帧索引形成映射。在这些实施方式中,基准帧索引和相联系的基准帧列表一起确定由基准帧索引所指示的帧号。然后使匹配的帧号在标准基准帧列表中定位,以在含有该匹配帧号的标准基准帧列表中确定条目号(标准基准帧索引)。该确定的标准基准帧索引然后存储在分区条目的不使用的字节中。在图9所示的实例中,标准基准帧索引935的数据包括两个字节的不使用的字节525。
下面是使用图13所示的标准基准帧列表和图2所示的第一和第二基准帧列表进行映射过程的实例。假定第一基准帧索引“2”和第二基准帧索引“0”包含在分区条目中。与基准帧索引“2”相联系的第一基准帧列表在条目号0、1和2处分别含有帧号2、1和0。这样,基准帧索引“2”指示帧号0。在标准基准帧列表中,该帧号0与条目0中的帧号相匹配。这样,基准帧索引2与标准基准帧索引0形成映射。相似地,与第二基准帧索引“0”相联系的第二基准帧列表在条目号0、1和2处分别含有帧号4、5和6。这样,第二基准帧索引“0”指示帧号4。在该标准基准帧列表中,帧号4与条目3中的帧号相匹配。这样,第二基准帧索引0与标准基准帧索引3形成映射。
在一些实施方式中,单个标准基准帧列表被产生并存储。在另一些实施方式中,分别产生并存储用于识别第一运动向量的特定帧的第一标准基准帧列表和用于识别第二运动向量的特定帧的第二标准基准帧列表。
在这些实施方式中,生成标准基准帧列表以及将基准帧索引映射到标准基准帧索引会增加开销。然而,一旦实施这些操作,就及时减少了用于确定两个分区的运动向量是否基于同一帧的过程。在这些实施方式中,为了执行该确定,仅需要检索和比较该分区的标准基准帧索引。此外,由于不需要该帧号的实际值,因此不需要确定由该标准基准帧索引所指示的帧号。由于标准基准帧索引对同一标准基准帧列表进行索引,因此具有相同值的标准基准帧索引由此指定相同的帧号。
图14是使用标准基准帧索引存储帧序列中的一组帧片段的数据的方法1400流程图。该方法1400可以例如通过配置来使用数据存储设备结构对视频数据流进行编码或解码的应用而实施。
该方法1400开始于接收(在1405)视频帧的一组的一个或多个片段,每个片段含有两个或更多个宏块,其中每个宏块包括一个或多个分区。该组片段的数据包括每个片段的头部数据(含有一个或多个初始基准帧列表的数据)、与这些宏块的分区相联系的分区数据(运动向量以及初始基准帧索引数据),以及每个宏块的头部数据。在一些实施方式中,分区的运动向量和初始基准帧索引数据包括用于第一和第二运动向量以及相联系的第一和第二初始基准帧索引的数据。第一初始基准帧索引在相联系的第一初始基准帧列表(其可以从包括的该分区的片段的头部数据中得到)中指定一个条目(含有帧号),该条目指示该第一运动向量所基于的该帧序列中的特定帧。同样,第二初始基准帧索引在相联系的第二初始基准帧列表(其可以从包括该分区的片段的头部数据中得到)中指定一个条目,该条目指示该第二运动向量所基于的该帧序列中的特定帧。
然后该方法生成或接收(在1406)标准基准帧列表,该标准基准帧列表用于该组片段中的所有片段。该标准基准帧列表包括一列标准基准帧索引(条目号)以及一列帧号,每个帧号对应特定标准基准帧索引。在一些实施方式中,生成用于映射第一和第二初始基准帧索引(下面将要讨论)的单个标准基准帧列表。在另一些实施方式中,分别生成用于映射第一和第二初始基准帧索引的第一和第二标准基准帧列表。
对于接收到的一组片段中宏块的每个分区,该方法1400使用初始基准帧列表和标准基准帧列表,将与该分区相联系的第一和第二初始基准帧索引分别映射(在1407)到第一和第二标准基准帧索引。该方法可以通过确定与分区相联系的初始基准帧列表中的初始基准帧索引所指示的帧号,在该标准基准帧列表中匹配该帧号,并且对应于该匹配的帧号来确定标准基准帧索引来实现。这样,第一和第二标准基准帧索引分别指示与该分区相联系的第一和第二运动向量所基于的那些帧。
注意,同一标准基准帧列表用于使分区的初始基准帧索引与标准基准帧索引形成映射。即使该初始基准帧索引可以根据不同的初始基准帧列表(例如,当与该初始基准帧索引相联系的分区处于接收的一组片段中的不同片段中时),这也是不变的。结果,即使这些分区包括在不同的片段中,在具有同一相联系的标准基准帧索引的组中的任一片段中的任何分区都涉及并且指示该帧序列中的同一帧。如上所述,该标准基准帧索引的这个特点可以在该分区随后的处理过程中提供便利。
对于该组片段中的每个片段,然后该方法1400分配(在1410)用于存储该片段数据的存储设备结构的特定部分。在这些实施方式中,给每个片段的每个宏块分配预定个数的分区条目。然后该方法将与该片段的分区相联系的分区数据存储(在1412)在该分配的分区条目中(称为使用的分区条目)。
对于在接收到的该组片段中的每个分区,该方法1400然后将与该分区相联系的第一和第二标准基准帧索引存储(在1415)在该分区的使用的分区条目中。该方法可以通过将第一和第二标准基准帧索引数据存储在该分区的分区条目的任何不使用的字节中来实现。在一些实施方式中,第一和第二标准基准帧索引数据包括使用的分区条目中2个字节的不使用的字节。
在一些实施方式中,对于每个片段(包括多个分区),该方法1400还将使用的分区条目(含该片段中的分区的数据)存储/放置(在1417)在该片段分配得到的存储部分的第一区段中。在一些实施方式中,对于每个片段,该方法1400还将不使用的分区条目(不含有分区数据的条目)存储/放置(在1420)在该片段分配得到的存储部分的第二区段中。在一些实施方式中,对于每个片段,该方法1400产生(在1425)与该片段分配的存储部分相联系的定位器列表,该定位器列表包括索引列表,其含有在该分配的部分中的分区条目的位置信息。然后该方法结束。
在分区条目中的不使用的字节的其它用途如上所述,分区条目含有6个不使用的字节。在一些实施方式中,被结合的头部数据930存储在宏块的第一分区的不使用的字节中。在一些实施方式中,计算标准基准帧索引935,并将其存储在每个分区条目的不使用的字节中。
在另一些实施方式中,使用该分区条目的不使用的字节使分区的编码和解码更有效。在一些实施方式中,分区条目的不使用字节用于存储方便该分区的编码或解码的被识别或计算的数据。例如,可以计算该宏块的多个分区,或将其存储在该宏块的第一分区的不使用字节中。这就不需要在解码过程中之后进行的多个分区的计算。在图9所示的实例中,多个分区940的数据包括一个字节的不使用字节。
在图9所示的实例中,使用的字节525中的数据(诸如被结合的头部数据930以及标准基准帧索引的数据935)以特定的顺序表示在分区条目900中。不过,本领域普通技术人员将理解也可以使用其它数据顺序。
分区的合并在一些实施方式中,当相同宏块的一些或所有分区具有相同的运动向量和相同的基准帧索引(称为同一分区)时,为了解码的目的,相同分区聚集(合并)成单个分区。在这种情况下,对于该宏块只需保存一个分区条目,而不是保存多个分区条目,由此减少了存储设备的开销。
图15A表示当该相同宏块的所有四个分区都具有相同运动向量和基准帧索引时,这四个分区为了解码合并成单个分区的实例。这样,对于该宏块只需保存一个分区条目,而不是四个分区条目。图15B表示当该相同宏块的五个分区中的两个具有相同的运动向量和基准帧索引时的实例,这两个相同的分区位于该宏块的左上侧。如图15B所示,这两个相同的分区合并成单个分区,使得对于该宏块只需保存四个分区条目,而不是五个分区条目。
在一些实施方式中,该合并方法结合本发明的分区条目打包方法(关于图6已在以上讨论)一起使用。在这些实施方式中,在将宏块的使用分区条目打包在存储设备结构分配部分的第一区段中之前,检查该宏块分区,以确定在该宏块中是否有任何相同的分区。如果有,则该宏块的相同分区聚合成单个分区,并且这些相同分区的单个分区条目存储在该分配部分的第一区段中。
当相同宏块分区具有相同的第一和第二运动向量以及相同的第一和第二基准帧索引时,就可以更有效地将同样的分区处理成单个分区。尽管进行运动向量和基准帧索引比较会有初始时间的开销,但是一旦同样的分区合并成单个分区,那么可以比以前更快地执行每个解码阶段,为了执行任何解码功能,仅需要在一个较大的合并过的分区上执行一个操作,而不需要在几个较小的分区上执行几个操作。对每个将要在该合并的分区上执行的每个解码功能在时间上将比之前更有效率,仅需要一个加载操作和一个解码功能的请求,而不需要多个加载操作和多个解码功能请求。
注意,相同宏块的分区使用相同的基准帧列表,这是由于相同的基准帧列表用于相同片段的所有宏块。这样,由于基准帧索引结合相同的基准帧列表一起使用,不需要确定和比较由基准帧索引所指定的实际帧号。
图16是合并视频片段的宏块分区的方法1600流程图。在一些实施方式中,该方法1600包括关于图8描述的方法800的步骤807。在图8的方法800中,方法800接收(在805)视频帧的片段数据,该片段含有两个或更多个宏块,其中每个宏块包含一个或多个分区。该片段的数据包括分区数据(例如,运动向量和基准帧索引数据),其与该片段的宏块的分区以及每个宏块的头部数据相联系。
该方法1600开始于将接收到的片段设定(在1605)成当前宏块。该方法1600然后通过比较与分区相联系的分区数据(运动向量和基准帧索引数据)对当前宏块的所有分区进行比较(在1610)。该方法然后确定(在1615)当前宏块的任何分区是否是相同的(即,与任何分区相联系的该运动向量和基准帧索引数据是否是相同的)。如果相同,则该方法将当前宏块的相同分区合并(在1620)成一个分区,并继续步骤1625。如果不同,那么该方法直接进行到步骤1625。
在步骤1625,该方法确定当前宏块是否是该片段的最后一个宏块。如果不是,该方法将下一个宏块设定(在1630)成当前宏块,并继续步骤1610。如果是最后一个宏块,那么该方法结束。
图17代表计算机系统1700,本发明的一些实施方式通过该计算机系统1700而实现。计算机系统1700包括总线1705、处理器1710、系统存储器1715、只读存储器1720、永久存储设备1725、输入设备1730以及输出设备1735。
总线1705集中代表所有系统、外围设备以及芯片组总线,这些总线可通信地连接计算机系统1700的多个内部设备。例如,总线1705通过只读存储器1720、系统存储器1715以及永久存储设备1725可通信地连接处理器1710。
只读存储器(ROM)1720存储处理器1710和该计算机系统的其它模块所必须的静态数据和指令。另一方面,该永久存储设备1725是读写存储设备。该设备是非易失性存储器单元,即使当该计算机系统1700关闭时,其也存储指令和数据。本发明的一些实施方式使用海量存贮设备(诸如磁盘或光盘以及其相应的磁盘驱动)作为永久存储设备1725。另一些实施方式使用可移动存储设备(诸如软盘或zip盘,及其相应的磁盘驱动器)作为永久存储设备。
和永久存储设备1725类似,系统存储器1715是读写存储器设备。然而与存储设备1725不同的是,系统存储器是易失性读写存储器,诸如随机存取存储器(RAM)。该系统存储器存储处理器在运行期间所需的一些指令和数据。
在一些实施方式中,实现本发明的方法所必需的指令和/或数据存储在系统存储器1715、永久存储设备1725、只读存储器1720或者三者的任意组合中。例如,不同的存储器单元可以包括用于根据本发明的方法编码或解码视频数据流的指令,和/或包括视频数据。为了执行本发明的过程,处理器1710从这些不同的存储单元检索执行的指令和处理的数据。
总线1705也连接到输入和输出设备1730和1735。输入设备1730可以使得用户传递信息并选择给计算机系统1700的命令。输入设备1730包括字母数字键盘和光标控制器。输出设备1735显示由计算机系统1700生成的图像。输出设备包括打印机和显示设备,诸如阴极射线管(CRT)和液晶显示器(LCD)。
最后,如图17所示,例如通过网络适配器(未示出),总线1705也将计算机系统1700连接到网络1765。以这种方式,计算机系统1700可以是计算机网络(诸如局域网(“LAN”)、广域网(“WAN”)或者企业内部互联网)或者网络(诸如因特网)的一部分。计算机系统1700的任何或所有组件可以结合本发明一起使用。然而,本领域的普通技术人员将理解任何其它的系统配置也可以用在本发明中。
虽然根据本发明参考多个具体细节进行了描述,但是本领域的普通技术人员将认识到在不背离本发明的精神的情况下,可以以其它具体的形式来体现本发明。例如,本发明的多个实施方式通过参照宏块进行了上述描述。本领域的普通技术人员将认识到这些实施方式可以结合其它像素值阵列一起使用。
权利要求
1.一种用于将视频帧片段的数据存储在给该片段分配的存储设备中的方法,该片段包括两个或多个宏块,每个宏块包括一个或多个分区,并具有多个分区条目,该多个分区条目分配给所述分配的存储设备中的所述宏块,所述片段数据包括所述宏块分区的分区数据,所述方法包括将所述宏块的使用的分区条目存储在所述分配的存储设备的第一区段中,其中使用的分区条目含有宏块分区数据;以及将所述宏块的不使用的分区条目存储在所述分配的存储设备的第二区段中,其中不使用的分区条目不含有宏块分区的数据。
2.如权利要求1所述的方法,其中所述第一和第二区段的每个包括在所述分配的存储设备中的连续存储区域,由此使用的分区条目不会散布在所述分配的存储设备中的不使用的分区条目中。
3.如权利要求1所述的方法,进一步包括产生与所述分配的存储设备相联系的索引列表,在该索引列表中的索引识别所述片段中的宏块和仅用于所述分配的存储设备中的所述宏块的第一分区条目的位置信息。
4.如权利要求1所述的方法,其中所述片段数据进一步包括每个宏块的初始头部数据,所述方法进一步包括使用所述宏块的初始头部数据得到宏块的被结合的头部数据;以及将得到的用于所述宏块的所述被结合的头部数据存储在所述宏块的使用的分区条目中。
5.如权利要求4所述的方法,其中所述得到步骤包括识别与所述宏块的分区配置相匹配的分区配置;以及确定与所述宏块所识别的分区配置相关的唯一标识符,该唯一标识符包括所述宏块的被结合的头部数据。
6.如权利要求5所述的方法,其中使用包括所述宏块的可能的分区配置的分区配置查找表进行所述识别和确定,其中每个可能的分区配置具有相关的唯一标识符。
7.如权利要求1所述的方法,其中所述片段包括在帧序列中的帧中,所述帧的数据进一步包括第一初始帧基准列表,并且分区具有相联系的运动向量以及指示在所述第一初始帧基准列表中的帧号的初始帧索引,所述帧号指示所述运动向量所根据的帧序列中的特定帧,该方法进一步包括对于该片段中的一个或多个分区,使用所述第一初始帧基准列表和标准帧基准列表使相关的初始基准帧索引映射到标准基准帧索引;以及将所述标准基准帧索引的数据存储在所述分区的使用的分区条目中。
8.如权利要求7所述的方法,其中所述标准基准帧索引指示在所述标准帧基准列表中的帧号,该帧号指示与所述分区相联系的运动向量所依据的所述帧序列中的特定帧。
9.如权利要求7所述的方法,进一步包括接收附加的视频帧片段的数据,其中在所述帧序列中的帧中包括该附加的片段,所述附加的片段数据包括不同于所述第一初始帧基准列表的第二初始帧基准列表,并且所述附加的片段中的分区具有相关的运动向量以及指示所述第二初始帧基准列表中帧号的初始基准帧索引,该帧号指示所述运动向量所根据的该帧序列中的特定帧;以及对于所述附加的片段中的一个或多个分区,使用所述第二初始帧基准列表和标准帧基准列表,使相关的初始基准帧索引映射到标准基准帧索引。
10.如权利要求9所述的方法,其中对于具有相同值的任何一个片段中的任一分区而映射的任何标准基准帧索引指示所述帧序列中的相同的特定帧。
11.如权利要求1所述的方法,其中使用的分区条目包括使用的字节和不使用的字节,使用的字节包括运动向量和基准帧索引数据,该方法进一步包括确定在所述片段的编码或解码中有用的其它数据;以及将该确定的数据存储在使用的分区条目的不使用的字节中。
12.如权利要求1所述的方法,进一步包括确定特定宏块的两个或更多个分区是否相同;以及基于该确定将这两个或更多个分区合并成特定宏块的单个分区。
13.如权利要求12所述的方法,其中分区的分区数据包括运动向量和基准帧索引数据;以及确定两个或更多个分区是否相同的过程包括确定这两个或更多个分区的运动向量以及基准帧索引数据是否相同。
14.一种计算机程序产品,包括具有在其上存储指令的计算机可读介质,当执行时,其将视频帧片段数据存储在为该片段分配的存储设备中,所述片段包括两个或多个宏块,每个宏块包括一个或多个分区,并具有为所述分配的存储设备中的宏块分配的多个分区条目,该片段的数据包括为所述宏块分区的分区数据,所述计算机程序产品包括的指令组用于将所述宏块的使用的分区条目存储在所述分配的存储设备的第一区段中,其中使用的分区条目含有用于宏块分区的数据;以及将所述宏块的不使用的分区条目存储在所述分配的存储设备的第二区段中,其中不使用的分区条目不含有用于宏块分区的数据。
15.如权利要求14所述的计算机程序产品,其中所述第一和第二区段的每个包括在所述分配的存储设备中的连续存储区域,由此使用的分区条目不会散布在所述分配的存储设备中的不使用的分区条目中。
16.如权利要求14所述的计算机程序产品,其中所述片段的数据进一步包括每个宏块的初始头部数据,所述计算机程序产品进一步包括的指令组用于使用所述宏块的初始头部数据得到被结合的宏块的头部数据;以及将为所述宏块得到的被结合的头部数据存储在所述宏块的使用的分区条目中。
17.如权利要求14所述的计算机程序产品,其中所述片段包括在帧序列的帧中,所述片段的数据进一步包括第一初始帧基准列表的数据,分区具有相关的运动向量以及指示所述第一初始帧基准列表中的帧号的初始基准帧索引,所述帧号指示运动向量所依据的所述帧序列中的特定帧,所述计算机程序产品进一步包括的指令组用于对于所述片段中的一个或多个分区,使用所述第一初始帧基准列表和标准帧基准列表,使相关的初始基准帧索引映射到标准基准帧索引;以及将所述标准基准帧索引数据存储在所述分区的使用的分区条目中。
18.如权利要求17所述的计算机程序产品,进一步包括的指令组用于接收附加的视频帧片段数据,其中,该附加的片段包括在所述帧序列的帧中,所述附加的片段数据包括不同于第一初始帧基准列表的第二初始帧基准列表的数据,并且所述附加的片段中的分区具有相关的运动向量以及指示所述第二初始帧基准列表中帧号的初始基准帧索引,该帧号指示该运动向量所依据的该帧序列中的特定帧;以及对于所述附加的片段中的一个或多个分区,使用所述第二初始帧基准列表和标准帧基准列表,使相关的初始基准帧索引映射到标准基准帧索引,其中,具有相同值的任何一个片段中的任一分区所映射的任何标准基准帧索引指示所述帧序列中的相同的特定帧。
19.如权利要求14所述的计算机程序产品,其中使用的分区条目包括使用的字节和不使用的字节,使用的字节包括运动向量和基准帧索引数据,该计算机程序产品进一步包括的指令组用于确定在所述片段的编码和解码中有用的其它数据;以及将所述确定的数据存储在使用的分区条目的不使用的字节中。
20.如权利要求14所述的计算机程序产品,进一步包括的指令组用于确定特定宏块的两个或更多个分区是否相同;以及基于该确定将这两个或更多个分区合并成特定宏块的单个分区。
全文摘要
本发明公开了通过以新颖的方式组织存储设备结构中的帧数据来简化帧的编码/解码的实施方式。具体地,在分配给帧片段的存储设备结构中,使用的分区条目存储在该分配部分的第一区段中,不使用的分区条目存储在该分配部分的第二区段中,第一和第二区段的每个包括在该存储设备结构中的连续区域,使得使用的分区条目不会散布在不使用的分区条目中。在一些实施方式中,确定在视频数据的编码或解码中有用的附加数据,并将其存储在使用的分区条目的不使用的字节中(诸如宏块头部数据或标准基准帧索引数据)。在一些实施方式中,宏块的两个或更多个相同分区合并成单个分区。
文档编号H04N7/26GK1812579SQ20051007999
公开日2006年8月2日 申请日期2005年6月27日 优先权日2004年6月27日
发明者C·L·杜维维耶 申请人:苹果电脑有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1