专利名称:用于数字视频的内部预测的偏移量缓冲器的制作方法
技术领域:
本发明领域一般涉及数字视频编码。
背景技术:
对于视频存储和通信来说,压缩或编码的数字视频正在快速地变得无处不在。一般来说,视频序列在帧之间包含非常大量的统计冗余和主观冗余。因此,视频压缩和源编码通过利用统计冗余和主观冗余来提供数字视频数据的存储和传输的比特率降低。这常常导致与原始源数据相比,编码的视频数据有压缩。视频压缩技术的性能取决于图像数据中所含的冗余的量以及还取决于用于编码的实际压缩技术。例如,使用视频压缩或编码算法来压缩范围广泛的应用的数字视频,包括通过因特网的视频传输、数字电视(TV)广播、卫星数字电视、数字视频光盘(DVD)、DVD播放器、机顶盒、TV功能的个人计算机(PC)以及视频存储和编辑。
目前的压缩算法可以将原始视频数据速率减少15至80倍的系数,而在重构的视频质量上没有显著的损失。一些压缩技术所赖以实施的基本统计属性是像素间相关性。因为视频序列常常包含时间和空间方向上的统计冗余,所以假定可以根据相同帧内的邻近像素(使用帧内编码技术)或根据邻近帧的像素(使用帧间技术)来预测特定图像像素的量值。在一些情况中,例如视频序列的画面改变期间,像素与邻近帧之间的时间相关性是小的(例如视频画面是不正确的静态图像按时间推移的组合)。在此类情况中,帧内编码技术适于利用空间相关性以实现充分的数据压缩。
多种压缩算法对8×8像素的图像块采用离散余弦变换(DCT)编码技术,以有效地利用相同图像内的邻近像素之间的空间相关性。例如,这些过程通常包括读取先前保存过的引用(reference)数据来确定预测方向(例如方向内部预测)并执行预测(例如内部预测预测代码)。此外,在完成内部预测之后,这些过程通常包括将重构的“当前”块的一部分作为引用数据保存到数据缓冲器以供后来预测使用(例如,保存重构的块的第一行和第一列或最后一行和最后一列)。
根据下文的详细描述、权利要求组以及附图,将更透彻地显见到多种特征、方面和优点,在这些附图中图1是用于将数字视频编码的系统和数据的框图。
图2是用于数字视频数据的内部预测器的框图。
图3示出数字视频数据的宏块。
图4示出要存储到缓冲器的数据块的引用数据。
图5示出宏块的引用数据位置的位置。
图6示出Y分量的两行的引用数据位置。
图7示出Y分量的两行的引用数据位置的读指针。
图8示出用于计算Y分量的读指针的两行偏移量。
图9示出用于计算Y分量的读指针的过程的流程图。
具体实施例方式
图1是用于将数字视频编码的系统和数据的框图。图1示出根据标准对数字视频序列或数据流编码或将其压缩的系统100,例如电子系统、计算设备、计算系统、视频系统、视频编码器、视频压缩器、视频转换器。例如,系统100可以根据移动图片专家组(MPEG)标准(例如MPEG2(ISO/IEC 13818-22000,2000年发布)或MPEG4(ISO/IEC 14496-32000,2004年发布))处理视频或对视频编码。示出系统100正在接收数字视频序列110,例如图片流序列或视频数据帧(例如按时间顺序次序的光栅扫描的帧)。确切地来说,数字视频帧数据119、120和122表示连续的帧或数据的图片。
系统100可以对编码和/或解码数据帧120执行方向决策和内部预测过程,例如通过对帧的内部预测块编码以刷新序列的已编码(例如MPEG)版本中序列110的时间预测。因此可以独立于数据帧119和122以内部预测模式对数据帧120编码。
图1还示出数字数据帧的宏块130,例如包括数据帧120的宏块的全部或一部分(例如帧的内部预测块)。因此,宏块130可以包括延伸跨越数据帧120的宽度W的全部或一部分的宏块。宏块130具有四行,行0-132、行1-133、行2-134和行3-135。因此,行0-132至行3-135的每一行或任何一行可以包括延伸(extending)宽度W的样本。确切地来说,宏块130包括具有数据样本或图像信息的十六个宏块(例如宏块MB0、MB1、...、MB15),这些数据样本或图像信息的例子为数据帧120的像素、层、信息或颜色和/或亮度的数据。在一些情况中,样本可以表示由数据实体或帧的像素经过滤、选择、取样或其他方式生成的信息,其中包括颜色样本(例如蓝色色度样本(Cb)和/或红色色度样本(Cr))和/或明度样本(例如亮度样本(Y))。更具体地,存储在宏块的位置中的给定位置、数据实体或像素的颜色样本和亮度样本的组合可以表示分别存储或缓冲的颜色和亮度样本而它们组合时表示图像或数据帧的像素。
可以通过将当前块(例如正在编码的块)的样本与从与该当前块相邻的许多块中选择的“引用块”的样本比较来执行对宏块130的内部预测编码。而且,可以从当前块的多个相邻块中选择引用块,使得当前块与引用块的样本之间的差最小。因此,可以将最小差编码成最少数据,以便根据引用块重构当前块。在此编码期间,可以识别引用块的“方向”(例如方向决策)以便对当前块编码。因此,方向决策可以提供引用块的方向以用于执行内部预测编码和解码。编码期间存储和考虑的当前块和引用块的引用数据可以包括每个宏块的一些或全部颜色和/或亮度样本。
例如,图1示出引用数据位置140,它包括可以用于对样本的当前块编码和解码的引用数据行。位置140包括偶数宏块行142的引用数据的位置和奇数宏块行144的引用数据的位置,例如宏块130的连续行的引用数据的位置。行142包括引用数据位置RD0、RD1、RD2和RD3。行142可以对应于块130的行0-132(例如MB0-MB3)。相似地,行144包括可以对应于块130的行1-133(例如MB4-MB7)的RD4、RD5、RD6和RD7。
可以认为行0-132、1-133、2-134和3-135是“宏块(MB)行”,例如宏块130的宏块行,其中每个MB行包括2行的8×8Y块(例如一行包括Y0和Y1块,而第二行包括Y2和Y3块)、1行的8×8 Cr块和1行的8×8 Cr块。因此,位置140(例如包括偶数宏块行142和奇数宏块行144)可以是4行的8×8 Y块、2行的8×8 Cb块和2行的8×8 Cr块的引用数据的位置。
但是,行142和行144可以对应于块130的任何连续偶数MB行和奇数MB行的位置,其中当编码处理期间不再需要它们的位置处的引用数据时,位置140则被盖写(例如根据写指针执行或在写指针处执行,例如下文就图2描述的写指针172)。确切地来说,处理期间对行142写入行2-134之后(例如并且在对144写入行3-135之前),行142可以对应于块130的行2-134,行144可以对应于块130的行3-135。因此,引用数据位置140的每个位置可以对应于、指向、标识、寻址、存储或缓冲到或者作为缓冲器(例如参阅图2的缓冲器149)中存储诸如引用数据(例如下文结合图4描述的)的数据的位置。
可以在方向决策和预测期间使用引用数据位置读指针指向位置140。例如,图1示出对应于或指向引用数据位置140的引用数据读指针150。指针150可以指向、选择、标识或导向到数据存储器、库或存储器的位置、地址、存储器、缓冲器或其他位置标识符,例如引用数据位置140(或图2的缓冲器149)。指针150包括偶数宏块行读指针152,包括读指针RP0、RP1、RP2和RP3。可以在图2的写指针172指向行142时(例如在读指针RP0包括指向位置140中的位置的两个或两个以上读指针的情况中),在写指针指向位置RD0时或在位置RD0对应于正在编码的当前块(例如当编码期间写指针指向要执行内部预测方向编码和用于MB0的编码的块130的块MB0时)时使用指针152。相似地,指针150包括偶数宏块行读指针154,包括读指针RP4、RP5、RP6和RP7。可以在图2的写指针172指向行144时使用指针154,正如上文有关指针152和行142所描述的。如上文描述的,指针154可以在功能上与指针152相似,除了指针154在功能上用于奇数宏块行,例如通过指向行144的位置。注意,当写指针172指向行142或144时,指针152和154可以指向行142和行144二者中的引用数据。例如,与上文有关位置140的“宏块(MB)行”的描述相似,指针150(例如包括偶数宏块行读指针152和奇数宏块行读指针154)可以是指向4行的8×8Y块、2行的8×8Cb块和2行的8×8Cr块的引用数据的指针。
图2是视频编码器和解码器中为数字视频数据而配备的内部预测器的框图。图2示出内部预测器180,例如作为图1的系统100的全部或一部分的内部预测器。因此,内部预测器180可以处理序列110以产生预测方向184和预测的代码186。图2示出包括视频输入176(诸如用于接收其中的序列110和数字视频帧的输入)的内部预测器180。视频输入176可以是电子硬件输入或视频数据源,例如电缆输入、电视机调谐器输出、电缆调谐器输出、数字视频光盘播放器、压缩光盘播放器或计算机。用于产生预测的代码186和方向184的过程是本领域中公知的。例如,此类过程可以包括视频编码器和视频解码器,视频编码器和视频解码器都具有内部预测过程但使用相反的算法来创建预测的代码186,即使它们使用相同的标准(例如MPEG标准)。
为了产生预测方向184和预测的代码186,内部预测器180可以选择与块130的当前块的相邻位置的方向以便使用指针150将位置140中存储的引用数据与当前块的引用数据比较。例如,图2示出具有引用数据缓冲器149(诸如用于存储由位置140、在位置140处寻址的或对应于位置140的引用数据或样本的数据缓冲器、计算机缓冲器或计算机存储器)的内部预测器180。
内部预测器180还包括写指针172,例如指向当前位置或块或从所引用的数据位置或宏块中选择当前位置或块的指针。例如,写指针172可以选择块130或位置140的其中之一作为要为之确定预测方向184和预测的代码1 86的“当前块”。在一些情况中,写指针172将按“光栅顺序”移动通过块130的宏块和/或位置140的位置。光栅顺序可以定义为如下顺序沿着行从左到右,然后按递增列次序在列上向下移动,然后从左到右通过下一行。例如,光栅顺序可以按如下顺序整个地通过块130MB0、MB1、MB2、MB3、MB4、MB5、MB6、MB7、MB8、...MB15。
内部预测器180包括读指针174,例如选择、导向到、指向、寻址或标识与由写指针指向以便从中读取数据的当前位置邻近、相邻或邻接的数据位置的指针,以便选择和产生预测方向184和预测的代码186。读指针174可以指向与当前块或写指针位置相邻的位置140的多个位置和块130的一个或多个宏块。
具体地说,示出的内部预测器180包括引用数据指针偏移量159,例如用于确定与位置140对应的指针150的偏移量。偏移量159可以表示偏移量缓冲器,例如用于基于或根据写指针172创建或选择读指针的多种偏移量的数据缓冲器、计算机缓冲器或计算机存储器。例如,根据实施例,可以通过偏移量159的偏移量加写指针172来确定读指针174,以便创建、定义、选择或指向指向缓冲器149中对应于位置140的数据的一个或多个读指针。
确切地来说,偏移量159可以包括一组偶数MB行偏移量和一组奇数MB行偏移量,其中当由加法器170将偏移量加写指针172(例如图1的块130的当前宏块的位置或地址是内部预测编码的)时使读指针174指向适合的引用数据位置140,例如指向位置140而无需内部预测器180存储引用数据读指针150。因此,为块130的位置140提供适合的位置(例如指针150标识的),无需在存储器中存储块130的每个宏块的整组或整个表的指针或甚至块130的偶数和奇数宏块行的整组或整个表的指针。相反,可以预先确定偶数MB行引用数据指针偏移量和奇数MB行引用数据指针偏移量,并将其作为偏移量159存储或包含在存储器、数据缓冲器或“偏移量缓冲器”中。偏移量159可以包括适合的偏移量,其与写指针172(例如图1的块130的当前宏块的位置或位置140的引用块位置)相加时指向适合的与当前位置相邻或邻接引用数据位置,以便选择、导向到、指向、标识或定位位置140处的引用数据。因此,将指针172和偏移量159相加可以指向内部预测器180要处理的存储在缓冲器149处或存储在缓冲器149中的引用数据的位置,以选择和/或创建预测方向184和预测的代码186。
例如,加法器170可以将写指针172的地址、位置或指示符与偏移量159的一个或多个偏移量相加、执行累计、执行求和/或组合,以便创建或指向读指针174以标识、选择或指向引用数据位置(例如对应于图1的位置140描述的)和/或缓冲器(例如缓冲器149)的地址、位置或指示符。
在一些情况中,可以将加法器170的功能替换为非加法的其他功能。例如,组合偏移量159和写指针172可以包括加法、减法、乘法、除法、追加或执行其他算术、逻辑、代数、微积分、几何、数字运算、数学函数、数学运算或数学组合,以将写指针提供的值、地址、位置或信息或正在处理的当前块的位置与偏移量值、数字、表达式或信息组合。在一些情况中,将偏移量和写指针或当前位置组合(例如使用数学算术、逻辑、代数、微积分、几何、运算和/或函数来组合)。因此,偏移量159可以包括要与指针172(例如当前块的位置或地址,例如位置140的其中之一)进行数学组合(例如通过加法、减法、乘法和/或除法来进行数学组合)以确定与指针172相邻或邻接的地址或位置处的指针174(例如,与当前块相邻或邻接的地址或位置的读指针,例如与指针172指向的当前位置相邻的位置140的一个或多个位置)的信息。相似地,可以将偏移量159与指针172进行算术组合(例如通过加法或减法)。而且,在一些实施例中,加法器170不索引或查询表中的指针位置或包含通过例如对预定地址的表编索引来预先标识、已选择或已寻址的引用数据位置的其他引用。
虽然本文描述的MB行和“宏块”(例如如现有技术中公知,例如Y、Cr和Cb分量的结构)是本文描述的概念适用的块的示例。例如,在一些实施例中,行0-132、1-133、2-134和3-135;位置140的行(例如包括偶数宏块行142和奇数宏块行144);指针150的行(例如包括偶数宏块行读指针152和奇数宏块行读指针154);以及本文提及的其他宏块(MB)行或其他行可以由本领域中公知的除“宏块”的行之外的样本的行、像素和/或数据来定义(例如除了本文提及的Y、Cr和Cb)。而且,每个行可以表示视频帧的多于或少于1、2、3、4、5、6、7、8、9或10行的多于或少于4×4、4×8、8×4、8×8、8×16、16×8、16×16、16×32、32×16、32×32等的块的样本、像素和/或数据。而且,本文描述的“块”可以对应于视频帧的多种几何形状(例如,正方形、矩形、三角形、六边形等)和部分的尺寸(例如,宽度或高度的整体、一半、四分之一、1/8、1/6、1/32/、1/64、1/128、1/256等)。此外,样本、像素和/或数据还可以是用于亮度、颜色、色度或其他类型的其中一种或多种类型或视频数据或图像信息的值(例如包括Y、Cb和Cr或非Y、Cb和Cr)。
系统100和/或内部预测器180可以包括处理器、存储器,该存储器存储要被处理器执行以使系统100和/或内部预测器180执行本文描述的功能的应用(例如软件、源代码或编译的代码应用)。而且,系统100和/或内部预测器180还可以由计算机或机器根据例如包含指令的机器可访问媒介来控制,其中该指令在被计算机或机器执行时使计算机或机器控制系统100和/或内部预测器180来执行本文描述的功能。此外,系统100和/或内部预测器180还可以包括执行本文描述的功能的多种其他逻辑电路、数据、计算机逻辑硬件、存储器(例如只读存储器(ROM)、闪速存储器、随机存取存储器(RAM)或其他类型的电子和/或磁存储器)、比较器、数据缓冲器和/或寄存器。
因此,系统100和/或内部预测器180可以根据多种标准(例如MPEG标准)利用相邻引用数据块的样本通过读取、比较和/或处理当前数据块或当前引用数据块的样本来处理、编码或压缩视频。确切地来说,系统100和/或内部预测器180可以使用本领域中公知的宏块来执行本领域中公知的方向内部预测,以创建本领域中公知的预测方向184和预测的代码186。
例如,图3示出数字视频数据的宏块。图3示出宏块130,它包括Y分量210、Cb分量220和Cr分量230。Y分量210包括亮度样本块MB0Y、MB1Y、MB2Y、...、MB15Y。相似地,Cb分量220包括蓝色色度样本块MB0B、MB1B、MB2B、....、MB15B。同样地,Cr分量230包括红色色度样本块MB0R、MB1R、MB2R、...、MB15B。Y分量210可以对应于如上文针对图1关于块130描述的明度或亮度样本或分量。同样,Cb分量220可以对应于颜色分量或样本,例如上文针对图1对于块130描述的蓝色色度样本。相似地,Cr分量230可以对应于颜色的样本或分量,例如上文针对图1对于块130描述的红色色度样本。块130可以是具有4∶2∶0格式的视频的宏块,其中按16×16的亮度样本块(Y)、8×8的蓝色色度样本块(Cb)和8×8红色色度样本块(Cr)组织每个宏块。每个16×16的Y样本块可以进一步划分成四个8×8的亮度样本块Y0、Y1、Y2和Y3,如分量210中的虚线所示。换言之,块130可以表示包含64×64个像素的视频帧,其中每个像素由具有4∶2∶0再取样格式的Y、Cb和Cr分量表示,以16个宏块形式,其中每个宏块包含四个Y块、一个Cb块和一个Cr块。例如,四个Y块可以定义按正方形图案定向的四个8×8块,其中8×8 Y0块位于左上,8×8 Y1块位于右上,8×8 Y2块位于左下,8×8 Y3块位于右下(例如参见图3和图5)。此外,还可以将16×16Y样本块(包括四个8×8 Y0、Y1、Y2和Y3块)定义为“16×16块”或“16×16 Y块”。或者,块130可以是视频帧的64×64视频区域部分,例如未包括整个帧的部分。因此,具有分量210、220和230的宏块MB0至MB15各对应于帧的16×16像素区域(例如在每个宏块MB0至MB15是例如MPEG标准的视频编码标准的基本单元的情况中)。
Y分量210的每个亮度样本块(例如亮度样本块MB11Y)包括四个8×8亮度样本块,如Y分量210中的虚线所示。例如,窗口240显示宏块MB11的Y、Cr和Cb分量(例如图1的块1 30的宏块MB11的亮度和颜色的样本)。如图所示,MB11具有16×16亮度样本块MB11 Y、8×8蓝色色度样本块MB11B以及8×8红色色度样本块MB11R。此外,还将16×16样本块MB11Y再划分成四个8×8块MB11Y0、MB11Y1、MB11Y2和MB11Y3。每个块MB11Y0至MB11Y3是8×8亮度样本块、16×16亮度样本块MB11Y。在另一方面,样本MB11B和样本MB11R仅是8×8样本块。因此,每个宏块有数量比所具有的蓝色色度或红色色度样本多四倍的亮度样本(例如因此4∶2∶0再取样格式的特征)。
上文就图1的系统100和/或图2的内部预测器180描述的视频编码过程可以按光栅顺序从左到右并从上到下处理视频,正如上文针对图2的内部预测器180所描述的。因此,读指针可以按光栅格式通过处理或指向每个块的位置同时开始于行0而结束于行3且从左到右地移动通过每一行来处理或选择分量210、220和230的行0-132至行3-135的当前块。而且,还以相似的光栅顺序处理分量210的8×8块。因此,8×8样本块MB11Y将按MB11Y0、MB11Y1、MB11Y2,然后MB11Y3的顺序来被处理。例如,分量210的行213显示为16×16块MB11Y处理8×8样本块的顺序。
此外,上文就图1的系统100或图2的内部预测器180描述的视频处理标准可以将宏块的每个亮度样本或颜色样本块的全部或一些样本作为处理期间要使用的数据(例如被引用的数据)来存储。例如,图4示出要存储到缓冲器的数据块的引用数据。图4示出包括列COL0至COL7和行ROW0至ROW7的块400。块400可以表示8×8亮度样本块的任何一个块(例如MB11Y0至MB11Y3的任何一个)、8×8CB样本块(例如MB11B)或8×8CR样本块(例如MB11R)。
确切地来说,如图4所示,块400包括列0行0样本C0 R0、列1行0样本C1 R0、列2行0样本C2 R0、...、直到列7行7样本C7 R7。因此,这些样本的任何一个样本(例如列4行2样本C4 R2)可以对应于8×8亮度样本块或8×8蓝色或红色色度样本块的样本的其中之一。
因此,引用数据位置140的位置(例如位置RD0)可以存储到或对应于存储块400的行0和列0的样本(例如存储ROW0的样本和COL0的样本)的缓冲器(例如缓冲器149的缓冲器)。例如,可以将块MB11Y0到MB11Y3、MB11B和MB11R的每个块的第一行8个样本中第一列8个样本作为引用数据存储在缓冲器(例如,对应于图1的位置140的缓冲器149)。确切地来说,位置或缓冲器可以在C0 R0、C1 R0、C2 R0、C3 R0、C4 R0、C5 R0、C6 R0、C7 R0、C0 R1、C0 R2、C0 R3、C0 R4、C0 R5、C0 R6、C0 R7以及可选的C0 R0处存储样本,同样总共16个样本。
此外,为了系统100或内部预测器180进行视频处理,可以将相同分量(例如分量210、分量220或分量230)的引用数据存储在一起、定位在一起或存储在相同的缓冲器组处或在相同的缓冲器组中。换言之,可以将块130的MB0-MB5的每个块的第一行和列样本(例如参见块400的第一行和列)存储在三个分开的缓冲器中,这三个缓冲器分别用于Y、Cr和Cb分量(例如其中每个缓冲器是例如缓冲器149的缓冲器)。因此,一个缓冲器存储亮度样本的引用数据(例如Y分量210的引用数据),一个缓冲器存储Cb样本的引用数据(例如分量220的样本),以及一个缓冲器用于存储Cr样本的引用数据(例如分量230的样本)。
而且,为了进行就系统100或内部预测器180描述的视频处理,可以使用来自与当前块位置(例如写指针所指向的块位置)邻近、相邻或邻接的块的引用数据来产生或生成图1的预测方向184和预测的代码186。此类相邻或邻接位置可以包括当前块的下一个位置或与当前块邻接的位置。而且,此类位置还可以包括当前块所在的行的垂直上方的唯一一行。如果此情况为真,则只需在处理期间分别存储Y分量或Cb/Cr分量的引用数据样本的四行或两行,包括当前块的行以及处理所必需的且位于当前行垂直上方或下方的行。因此,引用数据位置和指针对于例如图1的块130的宏块的偶数MB行和奇数MB行的两个宏块(MB)行是唯一必需的,正如上文就图1的位置140和指针150描述的。注意一个宏块行具有Y分量的两个块行并具有Cb和Cr分量的一个块行。
更具体地说,图5示出宏块的引用数据的位置。图5示出引用数据位置140被划分成分别对应于Y、Cb和Cr分量的单独位置。图5示出四行的Y引用数据位置310、两行的Cb引用数据位置320以及两行的Cr引用数据位置330。示出数据位置310具有偶数行312,其中偶数行312包括RD0Y、RD1Y、RD2Y和RD3Y;以及示出数据位置310具有奇数行314,其中奇数行314具有RD4Y、RD5Y、RD6Y和RD7Y。同样地,示出数据位置320具有偶数行322,其中偶数行322包括RD0B、RD1B、RD2B和RD3B;以及示出数据位置320具有奇数行324,其中奇数行324具有RD4B、RD5B、RD6B和RD7B。相似地,示出数据位置330具有偶数行332,其中偶数行332具有RD0R、RD1R、RD2R和RD3R;以及示出数据位置330具有奇数行334,其中奇数行334具有RD4R、RD5R、RD6R和RD7R。数据位置310的每个引用数据位置(例如RD0Y)、数据位置320的每个引用数据位置(例如RD0B)或数据位置330的每个引用数据位置(例如RD0R)因此可以对应于单独分量(例如Y、Cb和Cr)的引用数据的样本位置。
例如,位置RD0Y、RD0B和RD0R可以对应于图1的位置140的位置RD0和/或可以对应于存储样本的缓冲器(例如图1的缓冲器149)的位置。换言之,位置140的每个位置(例如RD0)可以定义位置310、320或330的每一个位置中的引用数据的位置(例如RD0Y、RD0B和RD0R)。
因此,位置310的每个位置可以存储或对应于64个引用数据的样本。因此,RD1Y可以是宏块的64个引用数据样本的位置,该位置具有四个8×8块、各16个样本(例如第一行8个样本和第一列8个样本的16个样本)的位置,其中RD1Y0是16个样本的位置(例如第一列8个样本和第一行8个样本)、RD1Y1是16个样本的位置、RD1Y2是16个样本的位置以及RD1Y3是16个样本的位置。或者,引用数据位置320和330的位置(例如RD0B或RD0R)可以是每个宏块仅16个样本的位置,例如RD0B的引用数据的1行8个样本和1列8个样本。
处理、写指向或选择当前块可以包括按光栅顺序移动通过位置310、320或330的或与之对应的宏块、16×16块或8×8块位置,以确定预测方向184和预测的代码186,正如针对图1和图3所描述的。换言之,在第一级中,对于位置310、320或330的位置,可以沿着宏块(例如16×16块对应于Y;或8×8块对应于Cb和Cr)的路径来选择写指针或当前位置,其中该路径对应于沿着线路326所示的偶数MB行的位置、然后转换到线路327所示的奇数MB行的位置、接着是线路328所示的后续奇数MB行的移动。
此外,因为数据位置3 10包括宏块中的四个8×8 Y块(例如16×16Y块RD1Y包括四个8×8块RD1Y0、RD1Y1、RD1Y2和RD1Y3),所以处理可以按光栅顺序考虑宏块中的四个8×8 Y块(例如RD1Y的RD1Y0-3)的引用位置。确切地来说,对于16×16 Y块RD1Y,处理可以按RD1Y0、RD1Y1、RD1Y2、然后RD1Y3的顺序考虑8×8块。例如,当沿着数据位置310的行312移动时,处理(例如考虑与写指针或当前块相关的位置310的引用数据)必须沿着块RD1Y的线路316移动。然后,在处理块RD1Y之后,处理可以接着沿线路317来处理块RD2Y。在沿着线路328的位置进行处理之后,可以利用帧的宏块(例如块130的)的下一个或后续偶数MB行的引用数据(例如根据写指针或在写指针处,例如图2的写指针172)盖写偶数行322,并且处理可以对该后续偶数MB行的位置沿着线路326的位置重复进行。
而且,处理可以包括当确定上文就图1描述的预测方向184和预测的代码186时考虑或读取从当前位置(例如图2的写指针172指向的位置)的相邻或邻接位置、地址或缓冲器(诸如当前位置左边、左上方、上方和可选的右上方的位置)中的引用数据。例如,图5的模板360示出当前位置CL(例如由写指针处理、考虑或指向的块130的宏块的位置、位置140、数据位置310、数据位置320或数据位置330)。模板360还具有相邻或邻接的左边位置ALL、左上方位置ALLA、上方位置ALA以及可选的右上方位置ALRA。因此,当正在处理的写指针或当前块处于模板360的当前位置CL时,位置ALL、ALLA和ALA提供与CL相邻的引用数据的三个位置。
而且,可以将模板360应用于块级。例如,位置CL、ALL、ALLA、ALA和ALRA可以各对应于8×8 Cb或Cr块(例如RD0B或RD0R)或8×8 Y块(例如RD1Y0、RD1Y1、...)的引用数据的位置。因此,对于对应于位置310、320或330的块位置的写指针或当前位置,可以根据在8×8块级上应用模板360来考虑相邻位置。注意因为模板360仅包括两行相邻或邻接位置,所以仅需要在缓冲器中保存2行的引用数据和引用数据位置,例如在数据位置310、320或330处。
在当前块的处理仅考虑来自两行的相邻或邻接块的引用数据的情况中,“不再使用”“远离的”、非相邻或非邻接的块,可以逐行将它们盖写(例如根据写指针或在写指针处,例如下文就图2描述的写指针172)。因此,当处理(例如写指针)继续到后续行时,利用后续的引用数据盖写未使用的偶数或奇数MB行的数据位置310、320或330,以便仅利用四行的Y引用数据和两行的Cr和Cb引用数据和位置来处理整个帧。确切地来说,可以使用写指针按逐块次序盖写存储在缓冲器中或位置处的所引用的数据,例如按逐位置的方式盖写数据位置310、320和330的位置RD0Y、RD0B、RD0R。
例如,可以将与图1的块1 30的行0-132对应的Cb引用数据位置存储在数据位置320的行322的位置中,并将行1-133的引用数据位置存储在行324的位置中。在沿着线路328处理而处理行1-133的宏块之后,可以利用行2-134的引用数据位置盖写行322的位置(例如根据写指针或在写指针处,例如下文就图2描述的写指针172),以便可以沿着线路326处理行。注意当按行2-134进行处理考虑盖写成沿着线路326的行322的位置的位置时,沿着线路326处理的当前位置上方的相邻或邻接位置仍将存在,因为行1-133的数据仍存储在行324的位置中。在处理行2-134之后,可以利用行3-135的数据盖写行324的位置中的行1-133的数据,并沿着线路328处理,并以此类推。
由于位置310的结构(例如参见图5)的原因,定位与位置310的8×8块相邻的引用数据样本可能比定位位置320的宏块的相邻引用数据样本复杂一些。确切地来说,将模板360应用于位置310的8×8块将包括在针对位置320的线路326和328示出的路径相似的路径上进行处理,但是还将包括沿着线路316和线路317对每个宏块的8×8块进行处理。因此,移动写指针或当前块并确定读指针以访问与之相邻的位置处的引用数据对于位置310更难。
例如,图6示出两个MB行的Y引用数据位置。图6示出两个MB行的Y引用数据位置310,例如图1的块130的引用数据位置140的亮度引用数据。示出位置310包括与用于存储图1的块130的引用数据亮度样本的位置对应的的偶数行612和奇数行614。例如,行612包括用于MB0至MB3以及MB8至MB11的存储器。相似地,行614包括MB4至MB7,以及MB12至MB15。图6还示出按虚线划分的8×8块的引用数据位置,例如在MB0或MB8包括块Y0、Y1、Y2和Y3的情况中。由于盖写,行612和614可以为不同块而执行存储。
例如,可以生成写指针,开始于0并按至下一个块的常数递增。在写指针命中奇数宏块行的最后一个8×8 Y3块(例如在496处的行614的MB15的Y3)之后,就可以返回到0。由于写指针的进度是可预测的,所以可以通过将偏移量与写指针位置数学组合来生成读指针或指向位置。因此,当由于处理期间不再需要MB0至MB3,而根据写指针或在写指针处盖写MB0至MB3(例如下文就图2描述的指针172)时,行612将包括用于MB8至MB11的存储器。
而且,块MB0或MB8的引用数据位置显示每个块中存储的第一数据样本的编号、地址或位置编号(例如写指针的编号,例如下文就图2描述的写指针172将指向或寻址)。确切地来说,对于MB0,图6示出块Y0的位置中的0对应于位于位置0的亮度引用数据的第一个样本,Y1块中的16指示其中的第一个样本位于位置或地址16,32位于Y2块以及48位于Y3块。相似地,MB1的引用数据位置按上文描述的光栅次序进行,使得MB1的Y0块的位置或地址开始于64,如针对MB0中的块描述的按16的增量继续递增。
可以按下文逐行地盖写图6中“远离的”或“不再使用的”引用数据。在使用模板360处理MB5的块Y0之后,块MB8的引用数据可以盖写块MB0的引用数据,因为在处理MB5的块Y0之后,MB5中其余块和MB6和MB7中所有块的处理将至多考虑MB1至MB3中的块处的左边和上方相邻位置。相似地,在利用MB8至MB11中的块的数据第一次盖写行612(例如而MB4至MB7中的块的数据仍被存储在614)之后,在处理块MB9之后,MB12中的块的引用数据可以盖写MB4中的块的引用数据,因为此时将至多需要MB5至MB7中的块的引用数据来处理MB10和11中的块。
虽然图6中行612在行614上方,但是其中行612的全部可能被盖写并处理的行612的位置,而行614中的位置包括来自被写入到行612的那些数据上面的帧中的宏块行的数据。例如,在行614保留宏块MB4至MB7的引用数据时,在处理期间行612可能被宏块MB8至MB11的数据盖写。因此,图6中的每个小框(例如,MB0的引用数据位置的MBY0 8×8块)表示块的16个引用数据样本的位置,例如宏块的Y、Cb或Cr分量的第一行的8个引用数据样本和第一列的8个引用数据样本,其中小框中的数字是对应块的引用数据的起始地址。而且,引用数据位置的Y0、Y1、Y2和Y3块对应于对应的宏块的左上、右上、左下和右下块。
图7示出Y分量的两行引用数据位置的读指针。图7示出引用数据位置310的指针750。例如,在位置310对应于图1的位置140的亮度引用数据位置的情况中,指针750可以对应于指向位置140的指针150,正如上文就图1描述的。指针750包括偶数行指针712和奇数行指针714,其包括指向图6的对应位置的指针。因此,图7示出一个实施例的指针,例如其中模板360包括当前位置CL的考虑相邻位置ALL、ALLA、ALA,但是不包括ALRA。确切地来说,MB5的块Y1的指针可以指向来自MB1的Y2(96)、MB1的Y3(112)和MB5的Y0(320)以及可选的MB2的Y2(160)的引用数据。相似地,MB9的Y0的引用数据的指针可以指向MB4的Y3(304)、MB5的Y2(352)和MB8的Y1(16,因为16现在表示属于MB8的行612中的被盖写的引用数据的第16个样本处开始的引用数据的位置),以及可选的MB5的Y3(368)。
可以认识到虽然写指针(例如图1的写指针172)仅需要可以按处理期间通过引用数据的地址或位置的相同增量递增的一个指针,例如按增量16来递增以处理通过图5和图6所示的位置310或如图5所示的位置320或330,但是确定适合的读指针较为复杂。换言之,使用写指针写入引用数据可以按从最低地址到最高地址的递增地址的顺序次序执行,例如如图6所示从0到496递增。在一些情况中,Y、Cb和Cr引用数据的写指针可以按常数递增(例如16或8)以移动通过一个块的引用数据到下一个块的引用数据。因此,如图6所示,随着处理从行612继续到行614,以及将引用数据盖写入那些行,写指针可以按如下递增0、16、32、48、64、...、480、496、0、16、...。相似地,如图7所示的三个读指针不是按增量递增,而是对于上文次序按如下确定240、288、-48、288、304、0、-48、0、-16、0、16、32、304、352、...。
正如上文就图1的偏移量159所提到的,根据实施例,可以确定一组偏移量,并使用它们来通过如就图2的内部预测器180所描述的将那些偏移量与写指针地址或位置组合或相加来提供图7的偶数行指针712和奇数行指针714。例如,图8示出用于计算Y分量的读指针的两行的偏移量。图8示出偏移量159,它包括偶数行偏移量812和奇数行偏移量814,例如用于与写指针位置或地址数学组合或相加的偏移量以创建、指向、选择或确定图7所示的指针750。图8示出偶数行偏移量812,它包括引用数据位置的偶数MB行的块Y0的引用数据位置的偏移量822。
例如,在给定当前块写指针的情况下,偏移量822提供偏移量以提供指针712的Y0块的任何一个的指针。因此,当写指针指向MB0的Y0,并因此具有图6的行612中所示的0值时,将0值加上偏移量822的所有偏移量,并提供对图7的指针712的块Y0指示的指针(例如240、288、-48)。相似地,当写指针指向图6的行612的MB2的Y0时,将128加上偏移量822的值提供对图7的指针712处的MB2的Y0的指针位置,它们是368、416和80。偏移量812包括块Y1的引用位置的偏移量824,块Y2的引用数据位置的偏移量826,以及块Y3的引用数据位置的偏移量828。
相似地,奇数行偏移量814包括当指针、当前块或处理对宏块的奇数行或引用数据执行时块Y0的引用数据位置的偏移量842,例如行1-133、奇数行读指针144、奇数行读指针154、行614和/或奇数行指针714。例如,当写指针指向图6的行614的MB6的块Y0时,将384值加上偏移量842以提供对图7的指针714中所示的MB6的Y0的指针112、160和336。与偏移量812相似,偏移量814包括引用数据位置的奇数MB行的块Y1的引用数据位置的偏移量844,块Y2的引用数据位置的偏移量846,以及块Y3的引用数据位置的偏移量848。
因此,偏移量159可以是存储在存储器、数据缓冲器或偏移量缓冲器的内容(例如就图1描述的偏移量159中存储的),其经预先计算和预先加载以使偏移量812生成指向偶数宏块行(例如当写指针或当前块位于图1的块130的行0-132中时)的引用数据的指针,而偏移量814中的那些偏移量用于创建或生成指向奇数宏块行(例如写指针或处理位于图1的块130的行1-133中的情况)的引用数据的指针。偏移量822、824、826、828、842、844、846和848的每一项创建位于左上方、上方和左边的宏块的引用数据的读指针(例如参见正在被处理或预测以产生图1的预测方向184和预测的代码186的当前块的图5的模板360。
此外,访问偏移量159的适合偏移量可以通过依次将偏移量作为偏移量822、824、826、828、842、844、846然后848存储来实现。而且,可以通过告知偏移量812的块Y2和Y3的偏移量与偏移量814的那些偏移量相同以在大小上减小要存储偏移量159的偏移量缓冲器或存储器。因此,存储偏移量159的缓冲器或存储器可以存储少于偏移量159中所示的24个偏移量,例如通过存储偏移量822、824、826、828、842和844,并使用指示当需要对应于偏移量846和848的偏移量时可以使用偏移量826和828来代替访问以提供适合的指针的处理来存储较少偏移量。
可以将上文就图1和图8的偏移量159描述的概念扩展以应用于多种过程和视频编码过程(例如内部预测编码),其中对于正在处理或预测的块,从引用缓冲器中读取先前保存的引用数据(例如根据位置140、310、320、330从缓冲器149读取),并将重构的数据的部分样本写入到引用数据缓冲器以供后来预测使用(例如将引用数据写入到位置,如上文关于将数据写入和盖写入位置310、320和330所描述的)。换言之,可以将关于偏移量159的概念应用于如下的多种过程,其中在将数据读出缓冲器时将数据写入到缓冲器以及写指针与读指针之间有关系。因此,可以通过相对于写指针的多个偏移量来简化该关系,使得内部预测可以读取先前块的引用数据同时写入当前块的引用数据。
例如,图9示出用于计算Y分量的读指针的过程的流程图。在框905,过程开始。图9示出过程900,例如用于将从数字视频帧的多个引用数据位置选择的当前位置加上读指针偏移量以选择或标识与当前位置相邻或邻接的块的引用数据样本的过程。在框910,确定写指针是否是位于偶数宏块行,例如图1的块130的行0-132;或图5的行312、322、332;或图6的行612。如果在框910,写指针位于偶数MB行,则过程继续到框915或将写指针设为0或将其初始化,以便指向等于图6的行612的0的MB0的块Y0的引用数据位置;图5的位置310的RD0Y的Y0。接下来,在框920,将临时指针设为偏移量缓冲器的0或将其初始化,例如通过设为偏移量822、824、826和828的0,这标识240的偏移量值(例如偏移量812的第一偏移量值)。从框920,处理进行到框940。
或者,如果在框910,写指针不指向偶数宏块行,则处理进行到框930。在框930,将临时指针设为偏移量缓冲器的12,以便将临时指针移到偏移量159的偏移量814的第一偏移量以具有值-272(例如临时指针指向偏移量842、844、846和848的第一偏移量)。注意对于框920和930,将临时指针设为0或12,因为偏移量812与偏移量814中的偏移量的数值是12个总偏移量(例如每个块的偏移量的数值乘以宏块的块的数量)。可以认识到为了处理其他样本或根据其他标准处理,框930可以将指针设为非12的多个偏移量。从框930,处理进行到框940。在框940,将偏移量指针设为临时指针,例如通过将偏移量159内的指针设为临时指针的当前值。
在框950,读取下三个偏移量,并加上写指针以生成三个读指针。框950可以对应于将偏移量822、824、826、828、842、844、846或848的值加上写指针的值以生成读指针,正如上文就图1和图8的偏移量描述的以及使用偏移量生成读指针与图7所示的那些相似。使用偏移量822至848中的第一、第二和第三偏移量分别创建位于写指针的位置的左上方、上方和左边的块的引用数据的读指针。这三个偏移量可以创建相对于指向先前引用数据的写指针的位置的左上方、上方和左边的读指针,其中有一个块的偏移量的总数值或要访问的邻接或相邻引用数据位置的数量。可以认识到为了处理其他样本或根据其他标准处理,框950可以读取并相加多于或少于3的偏移量。
在框960,按16递增写指针,例如在16是与写指针正指向的块的位置对应的位置或缓冲器中存储的引用数据的样本的数量的情况中。可以认识到为了处理其他样本或根据其他标准,框960可以按非16的数值递增写指针(例如在每个块是非8×8的大小的情况中,或在存储了多于或少于1列8个引用数据样本和1行8个引用数据样本的情况中)。在框970,确定是否已处理了宏块的四个Y块(例如根据写指针或在写指针处,正如下文就图2描述的写指针172)。如果在框970,尚未处理完四个块,则处理返回到框950,其中将下三个偏移量加上写指针以确定写指针寻址的下个块的相邻或邻接引用数据位置(例如在框960中递增的)。可以认识到为了处理其他样本或根据其他标准处理,可以不考虑框970,或框970可以确定是否已处理了非4个块。
如果在框970,处理了四个块,则处理进行到框975,其中确定是否已处理宏块行中的所有宏块,例如通过确定图1中的块130的行0-132的MB0至MB3是否已被处理。如果在框975,尚未处理所有块,则处理返回到框940以处理该行的下一个宏块。或者,如果在框975,已处理行中的所有宏块,则处理进行到框980。
在框980,确定是否已处理数字视频数据帧中的所有宏块行。如果在框980,尚未处理帧的所有宏块,则处理进行到框990,其中处理下一个宏块行,例如从图1的块103的行0-132到行1-133。框990之后,处理返回到框910并处理下一个宏块行。框990可以包括将引用数据写入到块的位置或引用数据位置的行,正如上文就图5和图6描述的。如果在框980,已处理或完成帧中的所有宏块行,则处理进行到框995,其中处理结束。
例如,使用图9的过程900、图6和图7的对应的宏块和8×8块以及图8的偏移量,可以按如下创建、定位左上方、上方和左边读指针或将其导向到指向引用数据位置。为了获取MB0或MB8的Y0块的读指针(参见图6和图7),在框905至框940,将偏移量指针、临时指针和写指针设为零(参见图9)。在框950,从偏移量缓冲器(例如存储如图1所示的偏移量159的内部预测器180的缓冲器)的偏移量822(参见图8)读取下三个偏移量、偏移量240、288和-48。而且,在框950,将偏移量240、288和-48加上写指针零(参见图6的MB0或MB8的块Y0处的值),得到读指针240、288和-48(参见图7的MB0或MB8的块Y0的适合读指针)。因为这些读指针“超过边界”,例如在图6和图7所示的宏块位置结构之外(例如它们在MB0的块Y0的上方和左上方和最左边位置),而当写指针指向MB8的块Y0(参见图6)时指向MB4的块Y2的288指针除外。
接下来,在框960,递增写指针,在框970,确定它不是宏块的最后一个块,并且处理返回到框950以读取下三个偏移量(参见图9)。因此,可以将框950、960和970再重复三次直到宏块的所有四个块均被处理为止。此时,处理继续到框975,并且因为宏块行中的所有宏块尚未全部处理(例如仅MB0或MB8已处理),所以处理返回到框947,其中再次将偏移量指针设为临时指针,它仍为零。
接下来,可以与创建或选择MB0或MB8的块Y0的读指针的描述相似的方式确定MB1或MB9的Y0的读指针。确切地来说,在框950(参见图9),可以从偏移量822中读取读偏移量240、288和-48(参见图8),并将其加上写指针64(参见图6的MB1或MB9的块Y0)以创建或选择读指针304、352和16(参见图7的MB1或MB9的块Y0)。对于MB1,指针304和352超出边界,但是指针16指向MB0的块Y1的引用数据。对于MB9,这些指针分别指向MB4的块Y3、MB5的Y2和MB8的Y1(参见图6)。
根据过程900的处理可以继续直到写指针到达MB4或MB12的块Y1为止。在此情况中,在图9的框950中,从偏移量844中读取偏移量-240、-224和-16(参见图8),因为它们是奇数行614的Y1块偏移量(参见图6和图8)。将这些偏移量加上写指针272以创建或选择读指针32、48和356(参见图7的MB4或MB12的块Y1的适合读指针)。对于MB4,这些指针指向MB0的块Y2和Y3以及MB4的Y0的引用数据位置(参见图6)。对于MB12,它们指向MB8的Y2和Y3以及MB12的Y0(参见图6)。
根据过程900的处理可以继续直到读指针位于MB6或MB14的块Y2为止。此时,在框950,从偏移量缓冲器(例如内部预测器180的缓冲器示出图1的偏移量159)读取偏移量-80、-32和-48,它们是图8的偏移量846。将这些偏移量加上写指针416以提供读指针336、384和368,它们是图7的MB6或MB 14的块Y2中所示的适合读指针。对于MB6,这些指针分别向MB5的Y1、MB6的Y0和MB5的Y3的引用数据位置(如图6所示)。对于MB14,它们分别指向MB13的Y1、MB14的Y0和MB1的Y3(如图6所示)。
例如,上文就图1、8和9的偏移量159描述的概念可以通过如下方式来加以应用基于视频帧的行中的宏块的数量(NUM_MBX)、特定分量的宏块中块(例如亮度分量Y0至Y3的四个块以及分量Cr或Cb的1个块)的数量(NUM_BLK)、块的引用数据的数量(例如,样本,例如16对应于块的第一行8个样本第一列8个样本)(REF_SZ),以及要考虑其引用数据的相邻、邻接、或邻居块的数量(例如3或可选地4,如图5的模板360所示)来使用算术计算偏移量。
使用上面的系数,可以确定系统的偏移量(例如图1的系统100的视频处理系统或图2的内部预测器180,它们使用例如MPEG标准的标准)以考虑至当前块或写指针左边、左上方和上方的引用数据,其中根据如下公式每个宏块具有四个Y引用数据块。
计算一个MB行中Y引用的总数(REF_SZ_MBX=4*REF_SZ*NUM_MBX)。
(0)为了计算左边偏移量如果左边块在相同MB内,则左边偏移量=-REF_SZ。
(1)如果左边块在其他MB内,则左边偏移量=-3*REF_SZ。(2)为了计算上方偏移量如果上方块在相同MB内,则上方偏移量=-2*REF_SZ。(3)如果上方块在其他MB中且当前块是在偶数MB行中,则上方偏移量=REF_SZ_MBX+2*REF_SZ。(4)如果在奇数MB行中,则上方偏移量=-REF_SZ_MBX+2*REF_SZ。(5)为了计算左上方偏移量a)如果左上方和上方块在相同MB内,则左上方偏移量=上方偏移量-REF_SZ。
(6)b)如果左上方和上方块在不同MB内,则左上方偏移量=上方偏移量-3*REF_SZ。(7)假定NUM_MBX为4且REF_SZ为16,则REF_SZ_MBX=256。
然后,下面的示例说明如何从公式(1)-(7)获取图4中的偏移量·使用公式(1)得到Y1或Y3的左边偏移量并得到-16。
·使用公式(2)得到Y0或Y2的左边偏移量并得到-48。
·使用公式(4)得到偶数MB行中的Y0的上方偏移量并得到288。
·使用公式(5)得到奇数MB行中的Y1的上方偏移量并得到-224。
·使用公式(6)得到奇数MB行中的Y1的左上方偏移量并得到-240。
设想使用上面的算术和系数,可以确定视频帧的行中各种其他数量的宏块的偏移量、特定分量的块的数量、块的引用数据或样本的数量以及与所考虑的当前块或写指针相邻的块的数量。
例如,可以将上文就图1和图8的偏移量159描述的概念应用于颜色样本引用数据,例如图5的位置320和330。因此,图6的位置310可以被图5的位置320或330替换,使得图6的每个宏块(例如MB 0-15)包含按16而不是48递增计数的一个块。相似地,图7的指针750可以被指向图5的位置320或330的指针替换,使得图7的每个宏块(例如MB 0-15)包含3个指针(对应于写指针的位置左边、左上方和上方),而不是12个指针。确切地来说,Cb或Cr相邻引用数据读指针的偶数MB行偏移量仅需要三个偏移量(例如48、64和-16),同时沿着位置320的线路326、327和328来处理。因此,48、64和-16代替了图8的偏移量822。同样地,Cb或Cr相邻引用数据读指针的奇数MB行偏移量仅需要三个偏移量(例如-80、-64和-16)。因此,-80、-64和-16代替了图8的偏移量842。对于Cb或Cr,无需三个偏移量824、826、828、844、846和848因为每个8×8 Cb或Cr块对应于16×16 Y块(例如具有四个8×8 Y块)。
而且,上文就图9描述的过程可以应用于Cr和Cb引用数据读指针。确切地来说,可以通过在框930中将临时指针设为等于3并从过程移除框970来修改过程900。
此外,可以认识到上文就图1和图8的偏移量159描述的概念可以扩展到其他相邻或邻接位置,其中包括或不包括图5的模板360中标识的那些位置。此外如上文提及的,可以为可选的位置ALRA考虑偏移量。
还考虑到可以考虑与当前位置CL不相邻或邻接的引用数据位置(例如先前与位置CL分离一个或多个引用数据位置的位置),并可以由此根据本文描述的概念生成偏移量。因此,可以跳过与写指针或正在处理的当前块的相邻或邻接位置处的引用数据,并可以考虑更远的位置。
此外,上文就偏移量159描述的概念可以应用于具有多于或少于4个宏块的宏块的数据帧或数据块(例如多于或少于图1的块130所示的行的宏块)。同样地,这些概念可以应用于存储多于或少于16个引用数据样本的引用数据格式,例如针对多于或少于一列和一行的样本存储引用数据的情况。确切地来说,该概念可以应用于一列和一行的引用数据被存储并且位置列0、行0处的数据仅存储一次,由此仅存储15个样本的情况。因此,将偏移量和写指针调整为15的增量,例如在图6所示的位置按15而不是16递增的情况。
同样,该概念可以应用于如下情况引用数据多于或少于16个样本,因为列和行的大小大于或小于8个样本,和/或多于或少于一列和一行的数据作为引用数据被存储。相似地,该概念可以应用于如下的多种其他视频处理标准使用非Cb和Cr的颜色分量;除了Cb和/或Cr外,使用非Y分量的其他亮度分量;使用多于或少于Y0、Y1、Y2和Y3的亮度;以及使用非宏块的结构。例如,该概念可以应用于如下情况亮度样本也是8×8块,对应于各为8×8的Cb和Cr分量。
在一些情况中,虽然上文对于图1和图8的描述是针对存储在缓冲器中的24亮度(Y)偏移量(例如偏移量159),但是这些概念可以应用于多种图像和视频数据以将多达100个偏移量、数据项、字节或值保存在用于亮度或色度引用数据位置的缓冲器或存储器中。例如,可以使用上文这些概念将多达100个偏移量字节存储在亮度的缓冲器中,以及存储多达此数字的一半用于一种或多种色度类型的引用数据偏移量。而且,该概念可以应用于每个帧多于或少于上文所示的数据宏块。相似地,该概念可以扩展到非宏块的数据帧或数据块的亮度和色度引用数据。
在说明书中,描述了特定的实施例。但是,在不背离权利要求中提出的实施例的较宽精神和范围的前提下,可以对此进行多种修改和更改。因此,本说明书和附图应视为说明性意义的而非限定性意义的。
权利要求
1.一种方法,包括从数字视频帧的多个引用数据位置选择当前位置,其中所述引用数据位置包括偶数行的位置和奇数行的位置;如果所述当前位置在所述偶数行中,则将所述当前位置与多个偶数行偏移量组合以选择与所述当前位置相邻的多个引用数据位置;以及如果所述当前位置在所述奇数行中,则将所述当前位置与多个奇数行偏移量组合以选择与所述当前位置相邻的多个引用数据位置。
2.如权利要求1所述的方法,其特征在于,选择多个引用数据位置包括选择所述当前位置的左边、左上方和上方的其中之一的至少两个位置。
3.如权利要求1所述的方法,还包括将来自所述数字视频帧的多个宏块的多个样本存储在与所述多个引用数据位置对应的多个数据缓冲器的每一个中。
4.如权利要求3所述的方法,还包括使用存储在与所选择多个引用数据位置对应的缓冲器中的样本执行方向内部预测和内部预测预测编码。
5.如权利要求4所述的方法,其特征在于,执行方向内部预测和内部预测预测编码包括将存储在与所选择的多个引用数据位置所对应的缓冲器中的样本与所述当前位置所对应的多个引用数据样本比较。
6.如权利要求3所述的方法,其特征在于,所述偶数行的位置存储来自所述宏块的第一行的延伸所述帧宽度的样本,所述奇数行的位置存储来自与所述第一行相邻的所述宏块的第二行的延伸所述帧宽度的样本。
7.一种方法,包括选择多个指针位置以指向与视频帧的当前位置邻接的位置处的多个数字视频帧的样本,其中选择包括当所述当前位置在所述视频帧的偶数行中时,将所述当前位置与多个偶数行偏移量进行算术组合,以及当所述当前位置在所述视频帧的奇数行中时,将所述当前位置与多个奇数行偏移量进行算术组合。
8.如权利要求7所述的方法,其特征在于,所述当前位置由写指针标识,以及所述多个指针位置包括读指针。
9.如权利要求7所述的方法,其特征在于,所述多个样本包括所述视频帧的宏块的引用数据。
10.一种设备,包括缓冲器,所述缓冲器包括多个偶数宏块(MB)行偏移量,用于在当前位置在引用数据位置的偶数行中时通过将所述当前位置加上所述偶数MB行偏移量以选择与所述多个引用数据位置的当前位置相邻的多个引用数据位置的多个相邻位置,其中每个引用数据位置存储数字视频帧数据的多个样本;多个奇数宏块(MB)行偏移量,用于在当前位置在引用数据位置的奇数行中时通过将所述当前位置加上所述奇数MB行偏移量以选择与所述多个引用数据位置的当前位置相邻的多个引用数据位置的多个相邻位置。
11.如权利要求10所述的设备,其特征在于,所述相邻位置包括所述当前位置的左边、左上方和上方的其中之一的至少两个位置,至少一个相邻位置在偶数MB行的位置中,以及至少一个相邻位置在奇数MB行的位置中。
12.如权利要求10所述的设备,还包括在所述多个引用数据位置处用于存储所述样本的多个数据缓冲器,其中位于所述偶数行的引用数据位置处的数据缓冲器存储来自数据帧的第一行的延伸所述数据帧宽度的样本,以及位于所述奇数行的引用数据位置处的数据缓冲器存储来自与所述第一行相邻的帧的第二行的延伸所述数据帧宽度的样本。
13.如权利要求12所述的设备,其特征在于,所述帧包括多个样本块,以及每个数据缓冲器存储样本块的第一行的样本和第一列的样本。
14.如权利要求13所述的设备,其特征在于,每个样本块包括如下的其中之一8×8蓝色色度样本(Cb)块,8×8红色色度样本(Cr)块,以及包括四个8×8亮度样本块(Y0、Y1、Y2和Y3)的16×16块。
15.如权利要求14所述的设备,其特征在于,所述多个偶数MB行偏移量和所述多个奇数MB行偏移量各包括4个子集,每个子集具有与所述四个8×8亮度样本块(Y0、Y1、Y2和Y3)对应的多个相邻偏移量。
16.如权利要求10所述的设备,还包括写指针,所述写指针用于从所述多个引用数据位置选择所述当前位置。
17.如权利要求10所述的设备,还包括多个读指针,所述多个读指针用于使用所述当前位置和所述偶数MB行偏移量和所述奇数MB行偏移量的其中之一选择多个选择的相邻位置。
18.如权利要求10所述的设备,还包括内部预测器,所述内部预测器用于选择所述多个相邻位置的相邻位置,并将所选的相邻位置的样本与所述当前位置的样本比较以执行方向内部预测和内部预测预测编码。
19.一种系统,包括具有用于接收数字视频帧的视频输入的计算设备;所述设备包括偶数宏块(MB)行的多个引用数据位置,用于存储来自所述输入处接收的数字视频帧的第一行的延伸所述帧宽度的多个样本;奇数MB行的引用数据位置,用于存储来自所述帧的第二行的延伸所述帧宽度的多个样本,所述第二行与所述第一行相邻;多个偶数MB行偏移量,用于通过将当前位置加上所述偶数MB行偏移量以选择所述偶数MB行中与所述引用数据位置的当前位置相邻的多个引用数据位置;多个奇数MB行偏移量,用于通过将当前位置加上所述奇数MB行偏移量以选择所述奇数MB行中与所述引用数据位置的当前位置相邻的多个引用数据位置。
20.如权利要求19所述的系统,还包括加法器,用于将当前位置加上所述偶数MB行偏移量和所述奇数MB行偏移量的其中之一。
21.如权利要求19所述的系统,还包括多个引用数据缓冲器,所述引用数据位置的每一个对应于所述引用数据缓冲器的每一个,并且每个引用数据缓冲器用于存储如下的其中之一Cb缓冲器,用于存储样本宏块的8×8蓝色色度样本(Cb)块的第一行的8个样本和第一列的8个样本;Cr缓冲器,用于存储样本宏块的8×8红色色度样本(Cr)块的第一行的8个样本和第一列的8个样本;以及Y缓冲器,用于存储8×8亮度样本块的第一行的8个样本和第一列的8个样本,其中所述块是样本宏块的16×16亮度样本块的四个8×8块(Y0、Y1、Y2和Y3)的其中之一。
22.如权利要求19所述的系统,其特征在于,所述多个偶数MB行偏移量包括4个子集,每个子集用于从所述偶数MB行的引用数据位置中选择一个相邻位置,以及从所述奇数MB行的引用数据位置中选择至少两个相邻位置;以及其中所述多个奇数MB行偏移量包括4个子集,每个子集用于从所述奇数MB行的引用数据位置中选择一个相邻位置,以及从所述偶数MB行的引用数据位置中选择至少两个相邻位置。
23.如权利要求19所述的系统,还包括内部预测器,用于使用所选的与所述当前位置相邻的多个引用数据位置对所述帧的内部预测代码块编码。
24.一种设备,包括存储多达100个亮度偏移量的指针缓冲器,其中当将指针与视频帧中的当前位置进行数学组合时,每个亮度偏移量指向与所述当前位置相邻的所述视频帧中的位置的引用数据。
25.如权利要求24所述的设备,还包括存储一定数量的亮度偏移量的第二指针缓冲器,其中所述数量小于所述多达100个亮度偏移量的一半。
26.如权利要求24所述的设备,其特征在于,所述亮度偏移量对应于视频帧的偶数行的宏块和奇数行的宏块的引用数据存储位置。
全文摘要
通过使用读指针偏移量加上写指针来选择与写指针标识的当前块相邻的块的引用数据位置以内部预测模式对数字视频帧编码。读指针偏移量包括帧的偶数和奇数宏块行的各自偏移量,其中将这些偏移量加上写指针时创建指向当前块的左边、左上方和上方的块的引用数据的写指针。预先计算这些偏移量并将其预先加载到偏移量缓冲器,考虑帧的行中宏块的数量、宏块中的块的数量、块的引用数据样本的数量以及要读取的相邻块引用数据的数量。该概念可以应用于多种视频处理亮度分量、色度分量和处理标准。
文档编号H04N7/34GK101095360SQ200580045747
公开日2007年12月26日 申请日期2005年12月21日 优先权日2004年12月30日
发明者W·-S·王 申请人:英特尔公司