隔行扫描视频的高级双向预测编码的制作方法

文档序号:7748512阅读:119来源:国知局
专利名称:隔行扫描视频的高级双向预测编码的制作方法
技术领域
描述了用于隔行扫描视频编码和解码的技术和工具。例如,视频编码器对隔行扫 描视频中的双向预测宏块进行编码。
背景技术
数字视频消耗大量的存储和传输容量。典型的原始数字视频序列包括每秒15或 30个图片。每个图片可包括数万或数十万个像素(也称为pel)。每个像素表示图片的小 元素。在原始形式中,计算机通常用24个比特或以上来表示像素。因而,典型的原始数字 视频序列的每秒比特数或比特率可以是5百万比特/秒或以上。大多数计算机和计算机网络缺乏处理原始数字视频的资源。为此,工程师们使用 压缩(也称为译码或编码)来降低数字视频的比特率。压缩可以是无损的,其中视频的质 量未受损,但比特率的降低受视频复杂性的限制。或者,压缩可以是有损的,其中视频的质 量受损,但可获得的比特率降幅更大。解压缩是压缩的反向过程。一般而言,视频压缩技术包括“帧内”压缩和“帧间”或预测压缩。帧内压缩技术 压缩通常称为I-帧或关键帧的各个图片。帧间压缩技术参考前面和/或后续的各帧来压 缩各个帧,而经帧间压缩的帧通常称为预测帧、P-帧、或B-帧。I. Windows Media Video版本8和9中的帧间压缩微软公司的Windows Media Video版本8 [ “WMV8” ]包括视频编码器和视频解码器。WMV8编码器使用帧内压缩和帧间压缩,且WMV8解码器使用帧内解压缩和帧间解压缩。 Windows Media Video版本9[ “WMV9”]则将类似的体系结构用于许多操作。WMV8编码器中的帧内压缩使用基于块的运动补偿预测编码,然后使用残差的变换 编码。图1和2示出WMV8编码器中预测帧的基于块的帧间压缩。特别地,图1示出对预测 帧110的运动估计,而图2示出对预测帧的运动补偿块的预测残差压缩。例如,在图1中,WMV8编码器计算用于预测帧110中的宏块115的运动向量。为 了计算该运动向量,编码器在参考帧130的搜索区域135中进行搜索。在搜索区域135内, 编码器对来自预测帧110的宏块115和各个候选宏块作比较,以便于寻找是好匹配的候选 宏块。编码器输出指定匹配宏块的(经熵编码的)运动向量。因为运动向量值常常相关于空间上位于四周的运动向量的值,所以用来传送运动 向量信息的数据的压缩可通过从相邻宏块中选择运动向量预测值,并使用该预测值来预测 当前宏块的运动向量来获得。编码器可编码运动向量和预测值之前的差值。在通过将差值 添加到预测值中重构运动向量之后,解码器使用该运动向量来用来自参考帧130的信息计 算用于宏块115的预测宏块,该参考帧是在编码器和解码器上可用的先前重构帧。预测很 少是完美的,所以编码器常常编码预测宏块和宏块115本身之间的像素差异(也称为误差 或残差块)的各个块。图2示出WMV8编码器中误差块235的计算和编码的一个示例。该误差块235是 预测块215和原始当前块225之间的差异。编码器将离散余弦变换[“DCT”]240应用于误 差块235,得到系数的8x8块245。然后编码器量化(250) DCT系数,得到经量化的DCT系数 的8x8块255。编码器将8x8块255扫描(260)成一维数组265,从而系数通常从最低频率 到最高频率进行排序。编码器使用运行长度编码270的变体来熵编码经扫描的系数。编码 器从一个或多个run/level/last表格275中选择熵码,并输出该熵码。图3示出对经帧间编码块的相应解码过程300的一个示例。从图3总地看来,解 码器使用具有一个或多个run/level/last表格315的可变长度解码310和运行长度解码 320来解码(310、320)表示预测残差的经熵编码的信息。解码器将存储了经熵编码信息的 一维数组325逆扫描(330)成二维块335。解码器逆量化并逆离散余弦变换(一起编号为 340)该数据,产生经重构的误差块345。在独立的运动补偿路径中,解码器使用运动向量信 息355来计算预测块365,用于相对参考帧的位移。解码器将预测块365与经重构的误差块 345组合(370)在一起,以形成重构块375。原始和重构帧之间的改变量是失真,且编码该帧所需的比特数表示该帧的速率。 失真量大致与速率成反比。II.隔行扫描视频和逐行扫描视频视频帧包含视频信号的各行空间信息。对于逐行扫描视频,这些行包含从一时刻 开始并继续后续行直到帧的底部的样本。逐行扫描I帧是帧内编码的逐行扫描视频帧。逐 行扫描P帧是使用正向预测编码的逐行扫描视频帧,而逐行扫描B帧是使用双向预测编码 的逐行扫描视频帧。典型的隔行扫描视频帧由在不同时间开始扫描的两个半帧组成。例如,参照图4, 隔行扫描的视频帧400包括上半帧410和下半帧420。通常,偶数编号行(上半帧)在一时 间(例如时间t)开始扫描而奇数编号行(下半帧)在不同(通常为后续)时间(例如时间t+1)开始扫描。该定时可在隔行扫描视频帧的区域中创建锯齿状特征,其中因为两个半 帧在不同时间开始扫描而呈现运动。因此,各个隔行扫描的视频帧可根据半帧结构来重新 排列,其中奇数行组合在一个半帧中而偶数行组合在另一个半帧中。称为半帧编码的该排 列对在高运动图片中减少这种锯齿边缘人工效应是有用的。另一方面,在静态区域中,隔行 扫描视频帧中的图像细节无需这种重新排列就可更为有效地保留。因此,帧编码常用于静 态或低运动的隔行扫描视频帧,其中原始的交替半帧行排列得以保留。典型的逐行扫描视频帧由具有非交替行的一内容帧组成。与隔行扫描视频相比,逐行扫描视频不将视频帧分成各个半帧,并且整个帧从某个时间开始进行从左到右、从上 到下的扫描。III.先前WMV编码器和解码器中的P-帧编码和解码先前的WMV编码器和解码器使用P-帧中的逐行扫描及隔行扫描的编码和解码。在 隔行扫描和逐行扫描的P-帧中,运动向量通过计算运动向量和运动向量预测值之间的差 值来在编码器中编码,其中运动向量预测值基于相邻的运动向量进行计算。并且,在解码器 中,运动向量通过将运动向量差值添加到运动向量预测值来重新构建,其中运动向量预测 值再次基于相邻的运动向量进行计算(这次是在解码器中)。当前宏块的预测值或当前宏 块的半帧基于候选预测值来选择,而运动向量差值基于该预测值来计算。通过将运动向量 差值添加到编码器侧或解码器侧的选定运动向量预测值,可重构运动向量。通常,亮度运动 向量从经编码的运动信息中重构,而色度运动向量从经重构的亮度运动向量中导出。A.逐行扫描P-帧的编码和解码例如,在先前的WMV编码器和解码器中,逐行扫描P-帧可包含以一运动向量(IMV) 模式或四运动向量(4MV)模式编码的宏块,或被跳过的宏块,其中决定通常在逐个宏块的 基础上作出。仅具有IMV宏块(以及可能被跳过的宏块)的P-帧被称为IMV P-帧,而都 具有IMV和4MV宏块(以及可能被跳过的宏块)的P-帧被称为混合MV的P-帧。一个运 动向量与每个IMV宏块相关联,而四个运动向量与每个4MV宏块相关联(每个块一个)。图5A和5B是示出被视作用于IMV逐行扫描P-帧中宏块的候选运动向量预测值 的宏块的位置的示图。候选预测值从左边、上方和右上方宏块中取得,除了宏块是行中最后 一个宏块的情形。在该情形中,Predicator (预测值)B从左上方宏块而不是从右上方中取 得。对于帧为一个宏块宽的特定情形,预测值总是预测值A(顶部预测值)。当因为宏块在 首行中从而预测值A在界限之外时,预测值为预测值C。各种其它规则解决其它特定情形, 诸如帧内编码的预测值。图6A-10示出被视作用于混合MV帧中的IMV或4MV宏块的运动向量的至多3个 候选运动向量的块或宏块的位置。在以下附图中,较大的正方形是宏块边界而较小的正方 形是块边界。对于帧为一个宏块宽的特定情形,预测值总是PredictorA(顶部预测值)。各 种其它规则解决其它特定情形,诸如用于首行4MV宏块的首行块、首行IMV宏块、以及帧内 编码预测值。图6A和6B是示出被视作用于混合MV帧中的IMV当前宏块的候选运动向量预测 值的块的位置的示图。相邻的各个宏块可以是IMV或4MV宏块。图6A和6B示出假设邻居 都是4MV的候选运动向量的位置(即预测值A是当前宏块上面的宏块中块2的运动向量, 而预测值C是当前宏块左侧紧邻的宏块中块1的运动向量)。如果邻居的任一个是IMV宏块,则图5A和5B中示出的运动向量预测值被视为整个宏块的运动向量预测值。如图6B所 示,如果宏块是该行中的最后一个宏块,则预测值B来自左上方宏块的块3而不像其它情形 一样来自右上方宏块的块2。图7A-10示出被视作用于4MV宏块中4个亮度块的每一个的候选运动向量预测值 的块的位置。图7A和7B是示出被视作用于位置0上一个块的候选运动向量预测值的块的 位置的示图;图8A和8B是示出被视作用于位置1上一个块的候选运动向量预测值的块的 位置的示图;图9是示出被视作用于位置2上一个块的候选运动向量预测值的块的位置的 示图;而图10是示出被视作用于位置3上一个块的候选运动向量预测值的块的位置的示 图。再一次,如果邻居是IMV宏块,则该宏块的运动向量预测值用于该宏块的各个块。对于宏块是行中第一宏块的情形,块0的预测值B与该行中剩余宏块的块0进行 不同的处理(参见图7A和7B)。在该情形中,预测值B从当前宏块上面紧邻宏块的块3中 取得,而不像其它情形一样从当前宏块左上方的宏块的块3中取得。类似地,对于宏块是行 中最后一个宏块的情形,对块1的预测值B进行不同的处理(参见图8A和8B)。在该情形 中,预测值从当前宏块上面紧邻宏块的块2中取得,而不像其它情形一样从当前宏块右上 方的宏块的块2中取得。一般而言,如果该宏块在第一宏块列中,则块0和2的预测值C被 设置为等于0。B.先前WMV编码器和解码器中隔行扫描P-帧的编码和解码先前WMV编码器和解码器将4:1 1宏块格式用于隔行扫描的P-帧,该宏块格式可 包含用半帧模式或帧模式编码的宏块,或被跳过的宏块,其中决定通常在逐个宏块的基础 上作出。两个运动向量关联于每个半帧编码的宏块(每个半帧一个运动向量),而一个运动 向量关联于每个帧编码的宏块。编码器联合编码运动信息,包括水平和垂直运动向量差值 分量,以及可能的其它信令信息。图11和12A-B示出分别用于先前WMV编码器和解码器的隔行扫描P-帧中的帧编 码4:1:1宏块和半帧编码4:1:1宏块的运动向量预测的候选预测值的示例。图11示出用 于隔行扫描P-帧的内部位置中当前帧编码4:1 1宏块的候选预测值A、B和C(不是宏块行 中第一或最后一个宏块、也不是首行)。预测值可从不同于那些标有A、B和C的不同候选方 向中获得(例如在诸如当前宏块是行中第一宏块或最后一个宏块或在首行中的特定情形, 因为对于这些情形得不到某些预测值)。对于当前的帧编码宏块,候选预测值取决于相邻宏 块是半帧编码还是帧编码的来进行不同的计算。对于相邻的帧编码宏块,运动向量简便地 取作候选预测值。对于相邻的半帧编码宏块,候选运动向量通过平均上半帧和下半帧运动 向量来确定。图12A-B示出用于半帧内部位置中半帧编码的4:1:1宏块内的当前半帧的候选预 测值A、B和C。在图12A中,当前半帧是下半帧,且相邻宏块中的下半帧运动向量被用作候 选预测值。在图12B中,当前半帧是上半帧,且相邻宏块中的上半帧运动向量被用作候选预 测值。因而,对于当前半帧编码宏块中的每个半帧,每个半帧的候选运动向量预测值的数量 最多为3,其中每个候选值来自与当前半帧相同的同一半帧类型(例如上半帧或下半帧)。 再一次,各种特定情形(未示出)在当前宏块是行中第一宏块或最后一个宏块,或在首行中 时应用,因为对于这些情形得不到某些预测值。为了从候选预测值集中选择一预测值,讨论中的先前WMV编码器和解码器使用不同的选择算法,诸如三者中值算法或四者中值算法。三者中值预测的过程在图13的伪码 1300中说明。四者中值预测的过程在图14的伪码1400中说明。IV.双向预测双向预测帧(或B-帧)使用来自源视频的两个帧作为参考(或锚)帧,而不是在P-帧中使用的一个锚。在典型B-帧的锚帧中,一个锚帧来自时间上的过去而另一个锚帧来 自时间上的将来。参照图15,视频序列中的B-帧1510具有时间上在先的参考帧1520和时 间上将来的参考帧1530。使用B-帧提供了根据更大的比特率节约(例如出现某些类型的 移动,诸如闭塞)而有效压缩的优点。具有B-帧的经编码比特流通常比没有B-帧的经编 码比特流使用较少的比特,同时提供相似的视觉质量。B-帧还提供在较小设备空间中使用 时的更多选项和灵活性。例如,解码器可通过选择不解码或显示B-帧来容许空间和时间限 制,因为B-帧通常不被用作参考帧。对视频序列中使用B-帧来使速率-失真改进的估计 的范围为从0到50%。V.先前WMV编码器和解码器中B-帧的编码和解码先前的WMV编码器和解码器使用B-帧。尽管正向预测帧(例如P-帧)中的宏块 仅具有一个方向模式的预测(正向,从先前的I-或P-帧),但B-帧中的宏块可使用五种 不同预测模式来预测正向、反向、直接、插值和帧内。编码器选择并用信号表示比特流中不 同的预测模式。例如,讨论中的先前WMV编码器在帧级别上发送经压缩的位平面,表示用于 B-帧的每个宏块的直接/非直接模式决定,而非直接模式(诸如正向、反向和插值模式)在 宏块级别中示出。正向模式类似于常规的P-帧预测。在正向模式中,宏块从时间上在先的锚中导 出。在反向模式中,宏块从时间上后续的锚中导出。以直接或插值模式预测的宏块在预测 中使用正向和反向锚。直接和插值模式使用将两个参考的像素值组合到一个宏块像素集中 的舍入平均,如以下公式所示平均像素值=(正向插值+反向插值+1) >> 1A.共处(co-located)运动向量的分数编码(Fraction Coding)和缩放在讨论中的先前WMV编码器和解码器中,编码器通过缩放正向锚的共处运动向量 来隐式地导出直接模式的运动向量。该缩放运算依赖于当前B-帧相对于其锚的时间位置。 为了编码参考图片的时间位置,编码器使用分数编码。在分数编码中,编码器显式地将当前B-帧的时间位置编码为其两个锚之间距离 的一分数。变量BFRACTI0N用来表示不同的各个分数,并在帧级别上发送。该分数在0和1 之间离散值的有限集上取值。对于直接模式的运动向量,编码器和解码器使用该分数来缩 放参考帧中的共处运动向量(MV),从而通过实现以下缩放运算来导出当前B-帧的隐式的 直接模式运动向量(MVjP MVb)MVf=分数 *MVMVf =(分数-1)*MV图16示出分数编码如何使编码器能任意缩放周围参考帧之间的运动。为了导出 在B-帧1620中编码的当前宏块的MVf和MVb,编码器和解码器使用分数编码来缩放将来参 考帧1630中相应宏块的运动向量(MV)。在图16所示的示例中,对于分数ρ和q,p+q = 1。 该编码器和解码器使用两个隐式的运动向量来处理在先参考帧1640和将来参考帧1630中的宏块,并使用这些的平均来预测当前宏块1610。例如,在图16中,MVf = (dx*p,dy*p)而 MVb = (_dx氺q,_dy氺q)。图17中的表格1700是用于比特流元素BFRACTI0N的可变长度代码(VLC)表格。 在表格1700所示示例中,3-比特代码字是“短”代码字而7-比特代码字是“长”代码字。该 解码器根据图18中所示伪码1800基于分数的分子和分母来寻找缩放系数。一旦缩放系数已被确定,解码器就用它来缩放用于共处宏块的运动向量的χ-和 y-元素。给定后续的锚帧是P-帧(对于I-帧,所有的运动向量被假定为(0,0))且共处宏 块包含运动向量(MV_X,MV_Y),则解码器导出两个运动向量,其中一个(MV_XF,MV_Yf)参考 正向(在先)锚帧,而另一个(MV_Xb,MV_Yb)参考反向(后续)锚帧。解码器根据图19中所示伪码1900来执行缩放。在伪码1900的函数Scale_ Direct_MV中,输入MV_X和MV_Y是来自将来参考图片的共处宏块的运动向量的χ-和y_元 素,而输出MV_Xf、MV_Yf、MV_Xb和MV_Yb是用于被解码宏块的正向和反向指示运动向量的 χ-禾口 y_元素。B. B/1 帧讨论中的先前WMV编码器和解码器还在逐行扫描编码和解码中使用帧内B-帧 (“B/I-帧”)。B/I帧像I-帧一样编码,因为它们不依赖于参考帧。但与I-帧不一样的 是,B/I帧不是关键帧;不允许其它帧将B/I帧用作锚。C.隔行扫描的B-帧讨论中的先前WMV编码器和解码器还使用隔行扫描的B-帧。隔行扫描B-帧中的 宏块可进行半帧编码或帧编码。经帧编码的宏块可具有一个、两个(例如插值模式的正向 和反向运动向量,直接模式的导出正向和反向运动向量)、或没有运动向量,而半帧编码的 宏块可取决于预测模式具有多达四个运动向量。例如,在直接模式的半帧编码宏块中,导出 四个隐式运动向量上半帧的正向和反向运动向量,以及下半帧的正向和反向运动向量。尽管讨论中的先前WMV编码器和解码器使用隔行扫描的B-帧,但它们在若干重要 方面受限。例如,每个宏块只允许一种宏块预测模式(例如直接模式、正向模式等),不使用 4MV编码(即,对宏块中的每个块使用一个运动向量),且没有任何B-帧部分可以是任何帧 的运动补偿的参考。作为另一示例,讨论中的先前WMV编码器和解码器的隔行扫描编码和 解码(包括隔行扫描的B-帧)仅使用4:1:1宏块格式执行。VI.用于视频压缩和解压缩的标准除了先前的WMV编码器和解码器之外,若干种国际标准涉及视频压缩和解压缩。 这些标准包括来自国际电信同盟[“ITU”]的运动图象专家组[“MPEG”]1、2和4标准以 及H. 261、H. 262、H. 263和H. 264标准。在国际标准中用来获得数字视频序列的数据压缩的 主要方法之一是减少图片之间的时间冗余。这些流行压缩方案(MPEG-l、MPEG-2、MPEG-4、 H. 261、H. 263等)使用运动估计和补偿。例如,当前帧被分成均勻的正方形区域(例如各个 块和/或宏块)。每个当前区域的匹配区域通过发送该区域的运动向量信息来指定。该运动向量指示在先前编码(和重构)帧中要用作当前区域的预测值的区域的位置。当前区域 和参考帧中区域之间称为误差信号逐个像素差值被导出。该误差信号通常具有比原始信号 更低的熵。因此,信息可以较低速率进行编码。因为在先前的WMV编码器和解码器中,运动 向量值常常相关于空间上位于四周的运动向量,所以用来表示运动向量信息的数据的压缩可通过编码当前运动向量与基于先前编码的、相邻运动向量的预测值之间的差异来获得。—些国际标准描述隔行扫描视频帧的运动估计和补偿。H. 262标准使隔行扫描 的视频帧被编码为单个帧或两个半帧,其中帧编码或半帧编码可自适应地在逐帧基础上选 择。H. 262标准描述基于半帧的预测,这是一种仅使用参考帧的一个半帧的预测模式。H. 262 标准还描述双基预测,这是两个正向的基于半帧预测值对隔行扫描P-图片中的16x16块平 均的预测模式。H. 262标准的7. 6节描述“半帧预测”,包括在两个参考半帧中进行选择,以 用作隔行扫描视频帧的当前半帧的宏块的运动补偿。小节7. 6. 3描述运动向量预测和重 构,其中给定宏块的重构运动向量变成经后续编码/解码宏块的运动向量预测值。这种运 动向量预测在许多情形中未能充分预测用于隔行扫描视频帧的半帧的宏块的运动向量。此外,H.262标准的7.6节描述B-图片的“半帧预测”和“帧预测”。在“半帧预 测”和“帧预测”中,对B-图片的预测使用两个最新重构的参考帧(略去其它介入的B-图 片)执行,这些参考帧可被编码为两个半帧或单个帧。知道了视频压缩和解压缩对数字视频的关键重要性,视频压缩和解压缩是得以丰富开发的领域就不足为奇了。然而,不管先前的视频压缩和解压缩技术的优点是什么,它们 并不具有以下技术和工具的优点。

发明内容
总而言之,详细描述涉及用于编码和解码双向预测的隔行扫描视频帧(例如隔行 扫描的B-半帧、隔行扫描的B-帧)的各种技术和工具。所述技术和工具改进了速率/失 真性能,并便于更好地支持具有较低CPU资源的设备(例如具有较小形状系数的设备)。所述各实施例实现一种或多种用于编码和/或解码隔行扫描B-图片的所述技术 和工具,如下包括但不限于在一方面中,对于隔行扫描B-帧,编码器/解码器在隔行扫描B-帧的半帧编码宏 块中的半帧之间切换预测模式。例如,编码器/解码器在半帧编码宏块中的上半帧的正向 预测模式和下半帧的反向模式之间切换。同一半帧编码宏块内正向和反向预测之间的切换 使发现对隔行扫描B-帧的不同部分的有效预测模式更为灵活。在另一方面中,对于隔行扫描B-帧,编码器/解码器通过为先前解码的时间后续 锚的共处宏块的上半帧和下半帧的每一个选择至多一个代表性运动向量,计算当前宏块的 直接模式运动向量。例如,至少部分地基于编码当前隔行扫描B-帧的宏块的模式(例如 IMV模式、2半帧MV模式等)执行选择。在又一方面中,对于隔行扫描B-半帧或隔行扫描B-帧,编码器/解码器使用4MV 编码。例如,4MV被用于单向预测模式(正向或反向模式),但不用于其它可用预测模式(例 如直接、插值)。使用4MV允许对隔行扫描B-半帧和隔行扫描B-帧进行更准确的运动补 偿;将4MV限制在正向和反向模式减少了编码开销,并避免了关联于组合4MV与诸如直接和 插值的模式的解码复杂性。在另一方面中,对于隔行扫描B-半帧或隔行扫描B-巾贞,正向运动向量使用来自正 向运动向量缓冲区的先前重构(或估计)的正向运动向量由编码器/解码器进行预测,而 反向运动向量使用来自反向运动向量缓冲区的先前重构(或估计)的反向运动向量进行预 测。结果的运动向量被添加到相应的缓冲区中。运动向量缓冲区中的空穴可用估计的运动向量值来填充。例如,对于隔行扫描B-帧,当正向预测用来预测运动向量且运动向量被添 加到正向运动向量缓冲区中时,反向运动向量缓冲区中的相应位置以仅将反向运动向量用 作预测值的预测运动向量来填充(“空穴填充”)。作为另一示例,对于隔行扫描B-半帧,要 为空穴填充在不同极性的运动向量(例如“相同极性”或“相反极性”)之间选择,编码器/ 解码器选择主极性半帧运动向量。锚和当前帧之间的距离使用各种语法元素计算,且计算 出的距离被用于缩放参考半帧运动向量。各个运动向量缓冲区和各个运动向量缓冲区中的 空穴填充使得对隔行扫描B-半帧和隔行扫描B-帧的运动向量预测更为准确。在又一方面中,对于隔行扫描的B-半帧,编码器/解码器使用“自参考”巾贞。例如, 当前帧中的第二个B-半帧在运动补偿预测中参考来自当前帧的第一 B-半帧。使帧中第一个B-半帧用作该帧中第二个B-半帧的参考使得第二个半帧的预测更加准确,同时还保留 在当前帧中具有B-半帧的时间可缩放性优点。在另一方面中,对于隔行扫描的B-半巾贞,编码器发送指示用于隔行扫描B-半帧中 的一个或多个宏块的预测模式是正向还是非正向的二进制信息。例如,编码器在经压缩位 平面的B-半帧级别上发送正向/非正向决定信息。在经压缩位平面的B-半帧级别上发送 正向/非正向预测模式决定信息可减少预测模式编码的编码开销。解码器执行相应的解 码。在又一方面中,对于隔行扫描的B-半帧,如果下一锚图片的相应半帧中的相应宏 块使用四个运动向量编码,则编码器/解码器使用利于主极性的逻辑来选择直接模式的运 动向量。例如,如果相应宏块的相同极性运动向量数量上超过其相反极性的运动向量,则编 码器/解码器计算相同极性运动向量的中值,以获得用于导出直接模式运动向量的运动向 量。该选择过程允许导出准确的用于具有4MV宏块锚的隔行扫描B-半帧的直接模式运动 向量。各种技术和工具可组合或单独使用。从以下参照附图进行的不同实施例的详细描述中,本发明的其它特征和优点将变 得显而易见。


图1是示出根据现有技术的视频编码器的运动估计的示图。图2是示出根据现有技术的视频编码器中预测残差的8x8块的基于块的压缩。图3是示出根据现有技术的视频编码器中预测残差的8x8块的基于块的解压缩。图4是示出根据现有技术的隔行扫描帧的示图。图5A和5B是示出用于根据现有技术的逐行扫描P-帧中IMV宏块的候选运动向 量预测值的宏块的位置的示图。图6A和6B是示出用于根据现有技术的混合1MV/4MV逐行扫描P-帧中的IMV宏 块的候选运动向量预测值的块的位置的示图。图7A、7B、8A、8B、9和10是示出用于根据现有技术的混合1MV/4MV逐行扫描P-帧 中的4MV宏块中各位置上块的候选运动向量预测值的块的位置的示图。图11是示出用于根据现有技术的隔行扫描P-帧中当前帧编码宏块的候选运动向 量预测值的示图。
图12A-12B是示出用于根据现有技术的隔行扫描P-帧中当前半帧编码宏块的候 选运动向量预测值的示图。图13和14是示出根据现有技术的用于分别执行三者中值和四者中值计算的伪码的代码示图。图15是示出根据现有技术的具有过去和将来参考帧的B-帧的示图。图16是示出根据现有技术的使用分数编码的直接模式预测的示图。图17示出根据现有技术的比特流元素BFRACTI0N的VLC表格。图18是示出根据现有技术的用于寻找缩放直接模式预测中共处宏块的运动向量 的缩放系数的伪码的代码清单。图19是示出根据现有技术的用于根据缩放系数缩放共处宏块中运动向量的χ-和 y-元素的伪码的代码清单。图20是适当计算环境的框图,结合该环境可实现若干所述实施例。图21是通用视频编码器系统的框图,结合该系统可实现若干所述实施例。图22是通用视频解码器系统的框图,结合该系统可实现若干所述实施例。图23是在若干所述实施例中使用的宏块格式的示图。图24A是一部分隔行扫描视频帧的示图,其中示出上半帧和下半帧的交替行。图 24B是为编码/解码组织成帧的隔行扫描视频帧的示图,而图24C是为编码/解码组织成半 帧的隔行扫描视频帧的示图。图25和26是示出具有两个参考半帧的隔行扫描P-半帧的示图。图27和28是示出使用所允许的最新参考半帧的隔行扫描P-半帧的示图。图29和30是示出使用所允许的第二最新参考半帧的隔行扫描P-半帧的示图。图31是示出运动向量的各垂直分量与当前和参考半帧极性的不同组合的相应空 间位置之间的关系的示图。图32是示出当前宏块的两组三个候选运动向量预测值的示图。图33A-33F是示出用于计算两个参考半帧的隔行扫描P-或B-半帧中的运动向量 预测值的伪码的代码清单。图34A-34B是示出用于缩放来自一个半帧的预测值以导出来自另一个半帧的预 测值的伪码的代码清单。图35和36是示出关联于不同参考帧距离的缩放运算值的表格。图37是示出隔行扫描P-帧的2半帧MV宏块中亮度块的运动向量和色度块的导 出运动向量的示图。图38是示出隔行扫描P-帧的4帧MV宏块中4个亮度块的每一个的不同运动向 量和4个色度子块的每一个的导出运动向量的示图。图39是示出隔行扫描P-帧的4半帧MV宏块中亮度块的运动向量和色度块的导 出运动向量的示图。图40A-40B是示出隔行扫描P-帧的当前宏块的候选预测值的示图。图41是示出使用不同预测模式预测隔行扫描B-帧的半帧编码宏块中的各个半帧 的运动向量的技术的流程图。图42是示出计算隔行扫描B-帧的宏块的直接模式运动向量的技术的流程图。
图43是先前已解码的时间上后续锚帧的共处宏块的各个块的缓存运动向量的示 图,这些缓存运动向量用于计算隔行扫描B-帧的宏块的直接模式运动向量。图44是示出使用正向和/或反向运动向量缓冲区预测隔行扫描B-帧的当前宏块的运动向量的技术的流程图。图45是示出用于预测宏块运动向量的正向运动向量缓冲区和反向运动向量缓冲 区中的运动向量的示图。图46是示出正向运动向量缓冲区和反向运动向量缓冲区中重构宏块的上半帧和 下半帧运动向量的示图。图47是示出描述用于隔行扫描B-半帧运动向量预测中的实值缓存和空穴填充的 极性选择过程的伪码的代码清单。图48A-48B是示出缩放来自一个半帧的预测值以导出来自另一半帧的预测值用 于经反向预测的隔行扫描B-半帧的伪码的代码清单。图49是示出关联于第一隔行扫描B-半帧的不同参考帧距离的缩放运算值的表 格。图50A和50B是示出隔行扫描B-半帧的参考半帧的示图。图51是示出用于在具有一个或多个位平面编码模式的视频编码器中编码隔行扫 描B-半帧的宏块的正向/非正向预测模式决定信息的技术的流程图。图52是示出用于解码隔行扫描B-半帧的宏块的正向/非正向预测模式决定信息 的技术的流程图,其中该决定信息由具有一个或多个位平面编码模式的视频编码器编码。图53是显示描述对用作隔行扫描B-半帧中直接模式运动向量的基础的运动向量 的选择过程的伪码的代码清单。图54是示出用于组合实现中隔行扫描B-半帧或BI-半帧的帧_层比特流语法的 示图。图55是示出用于组合实现中隔行扫描B-半帧的半帧-层比特流语法的示图。图56是示出用于组合实现中隔行扫描BI-半帧的半帧-层比特流语法的示图。图57是用于组合实现中隔行扫描B-半帧的宏块的宏块-层比特流语法的示图。图58是用于组合实现中隔行扫描BI-半帧的宏块的宏块-层比特流语法的示图。图59是用于组合实现中隔行扫描B-帧的帧-层比特流语法的示图。图60是用于组合实现中隔行扫描B-帧的宏块的宏块-层比特流语法的示图。图61A-61B是示出用于组合实现中解码运动向量差值和主/非主预测值信息的伪 码的代码清单。图62A-62F是示出用于组合实现中计算双参考隔行扫描P-半帧中的运动向量预 测值的伪码的代码清单。图63是示出用于组合实现中确定隔行扫描B-半帧的参考半帧的伪码的代码清单。图64是示出用于组合实现中收集隔行扫描P-帧的IMV宏块的候选运动向量的伪 码的代码清单。图65、66、67和68是示出用于组合实现中收集隔行扫描P-帧的4帧MV宏块的候 选运动向量的伪码的代码清单。
图69和70是示出用于组合实现中收集隔行扫描P-帧的2半帧MV宏块的候选运 动向量的伪码的代码清单。图71、72、73和74是示出用于组合实现中收集隔行扫描P-帧的4半帧MV宏块的 候选运动向量的伪码的代码清单。图75是示出用于组合实现中计算隔行扫描P-帧的帧运动向量的运动向量预测值 的伪码的代码清单。图76是示出用于组合实现中计算隔行扫描P-帧的半帧运动向量的运动向量预测 值的伪码的代码清单。图77A和77B是示出用于组合实现中解码隔行扫描P-帧和B-帧的运动向量差值 的伪码的代码清单。图78是示出用于组合实现中导出隔行扫描P-帧的色度运动向量的伪码的代码清单。图79A-79C是示出用于隔行扫描B-半帧的宏块的正向/非正向预测模式决定信 息的Norm-6和Diff-6位平面编码模式的平铺显示的示图。
具体实施例方式本申请涉及用于隔行扫描视频的有效压缩和解压缩的技术和工具。在各个所述实 施例中,视频编码器和解码器结合用于编码和解码双向预测的隔行扫描视频帧的技术,和 以包括各种层或级别(例如序列级别、帧级别、半帧级别、宏块级别、和/或块级别)的比特 流格式或语法使用的相应信号表示技术。对所述实现的各种可选方案是可能的。例如,参照流程图描述的方法可通过改变 各流程图中所示的各阶段的顺序、或重复或略去某些阶段等来变更。作为另一示例,尽管某 些实现参照特定宏块格式进行了描述,但是也可使用其它格式。此外,参照双向预测描述的 技术和工具也可应用于其它类型的预测。各种技术和工具可组合或独立地使用。不同实施例实现所述技术和工具的一种或多种。在此所述的一些技术和工具可用于视频编码器或解码器,或者在一些其它系统中并 非具体受限于视频编码或解码。I.计算环境图20示出可实现若干所述实施例的适当计算环境2000的通用示例。计算环境 2000并非旨在提出对本发明使用范围或功能的任何限制,因为本发明的技术和工具可在不 同的通用或专用计算环境中实现。参照图20,计算环境2000包括至少一个处理单元2010和存储2020。在图20中, 该最基本配置2030包括在虚线内。处理单元2010执行计算机可执行指令,且可以是实际或 虚拟处理器。在多处理系统中,多个处理单元执行计算机可执行指令以增加处理能力。存 储器2020可以是易失性存储器(例如寄存器、高速缓存、RAM)、非易失性存储器(例如ROM、 EEPR0M、闪存等)或两者的组合。存储器2020存储实现进行隔行扫描视频帧的双向预测的 视频编码器或解码器的软件2080。计算环境可具有附加特征。例如,计算环境2000包括存储2040、一个或多个输入 设备2050、一个或多个输出设备2060、以及一个或多个通信连接2070。诸如总线、控制器或网络的互连机制(未示出)使计算环境2000的各个组件互相连接。通常,操作系统软件 (未示出)向在计算环境2000中执行的其它软件提供一个操作环境,并协调计算环境2000 的各个组件的动作。存储2040可以是可移动或不可移动的,并包括磁盘、磁带或盒式磁带、⑶-ROM、CD-RW、DVD、或任何其它可用于存储信息并可在计算环境2000内访问的媒体。存储2040为 软件2080存储实现视频编码器或解码器的指令。输入设备2050可以是诸如键盘、鼠标、电子笔、或跟踪球、语音输入设备、扫描设 备、或向计算环境2000提供输入的另一设备。对于音频或视频编码,输入设备2050可以是 接受模拟或数字形式的音频或视频输入的声卡、视频卡、TV调谐器卡或相似设备、或将音频 或视频样本读入计算环境2000中的⑶-ROM或⑶-RW。输出设备2060可以是显示器、打印 机、扬声器、CD刻录机、或从计算环境2000提供输出的另一设备。通信连接2070允许经通信媒体与另一计算实体的通信。通信媒体在已调制数据 信号中传送诸如计算机可执行指令、音频或视频输入或输出、或其它数据等信息。已调制数 据信号是使其特征的一个或多个以在信号中编码信息的方式进行设置或改变的信号。作为 示例且非限制,通信媒体包括用电子、光学、RF、红外线、声学或其它载体实现的有线或无线 技术。这些技术和工具可在计算机可读媒体的一般上下文中描述。计算机可读媒体是可 在计算环境内访问的任何可用媒体。作为示例,但非限制,对于计算环境2000,计算机可读 媒体包括存储器2020、存储2040、通信媒体、以及以上任一个的组合。这些技术和工具可在计算机可执行指令的一般上下文中描述,诸如在目标实际或 虚拟处理器上的计算环境中执行的程序模块所包括的计算机可执行指令。通常,程序模块 包括执行具体任务或实现具体抽象数据类型的例程、程序、库、对象、类、组件、数据结构等。 程序模块的功能可在各个实施例中按需在程序模块之间组合或划分。程序模块的计算机可 执行指令可在本地或分布式的计算环境内执行。为说明起见,详细描述使用像“估计”、“补偿”、“预测”和“应用”的术语来描述计 算环境中的计算机操作。这些术语是由计算机执行的操作的高层抽象,且不应与人执行的 动作相混淆。对应于这些术语的实际计算机操作取决于实现而变化。II.通用视频编码器和解码器图21是通用视频编码器2100的框图,结合该系统可实现若干所述实施例。图22 是通用视频解码器2200的框图,结合该系统可实现若干所述实施例。编码器2100和解码器2200内各模块之间的所示关系表示编码器和解码器中的一 般信息流;其它关系为简化起见并未示出。特别地,图21和22通常并未示出表示用于视频 序列、图片、宏块、块等的编码器设置、模式、表格等的辅助信息。这些辅助信息通常在辅助 信息的熵编码之后在输出比特流中发送。输出比特流的格式可以是Windows Media Video 版本9格式或其它格式。编码器2100和解码器2200处理视频图片,它们可以是视频帧、视频半帧、或帧和 半帧的组合。图片和宏块级别上的比特流语法和语义可依赖于是使用帧还是半帧。也可 以有对宏块组织和整体定时的改变。编码器2100和解码器2200是基于块的,并对帧使用 4:2:0的宏块格式,其中每个宏块包括4个8x8亮度块(常被视为一个16x16宏块)和2个8x8色度块。对于半帧,可使用相同或不同的宏块组织和格式。这些8x8块可在不同阶段上作进一步的细分,例如在频率变换和熵编码阶段。示例视频帧组织如下进行更详细的描 述。或者,编码器2100和解码器2200是基于对象的、使用不同的宏块或块格式、或对不同 于8x8块和16x16宏块的大小或配置的像素集执行操作。取决于所需的压缩实现和类型,编码器或解码器的模块可添加、略去、划分成多个 模块、与其它模块相组合、和/或用类似模块替换。在替换实施例中,具有不同模块和/或 模块其它配置的编码器或解码器执行一种或多种所述技术。A.视频帧组织在一些实现中,编码器2100和解码器2200处理如下组织的视频帧。帧包含视频 信号的各行空间信息。对于逐行扫描视频,这些行包含从一时刻开始并继续后续行直到帧 的底部的样本。逐行扫描视频帧被分成诸如图23中所示宏块2300的宏块。宏块2300包 括4个8x8亮度块(Yl到Y4)和与4个亮度块共处的2个8x8色度块,这些色度块符合常 规的4:2:0宏块格式但在水平和垂直方向分辨率减半。这些8x8块可在不同阶段上作进一 步的细分,例如在频率变换(例如8x4、4x8或4x4DCT)和熵编码阶段。逐行扫描1_帧是帧 内编码的逐行扫描视频帧。逐行扫描P-帧是使用正向预测编码的逐行扫描视频帧,而逐行 扫描B-帧是使用双向预测编码的逐行扫描视频帧。逐行扫描P-和B-帧可包括帧内编码 宏块以及不同类型的经预测宏块。隔行扫描视频帧由一个帧的两次扫描组成一一次包括该帧的偶数行(上半帧)而 另一次包括该帧的奇数行(下半帧)。这两个半帧可表示两个不同时段,或者它们可来自同 一时段。图24A示出隔行扫描视频帧2400的一部分,包括隔行扫描视频帧2400中左上方 的上半帧和下半帧的交替行。图24B示出为编码/解码而组织为帧2430的图24A的隔行扫描视频帧2400。隔 行扫描视频帧2400已被分成诸如宏块2431和2432的宏块,它们使用如图23所示的4:2:0 格式。在亮度平面中,每个宏块2431、2432包括来自上半帧的8行、与之交替的来自下半帧 的8行(一共为16行),且每一行为16像素长。(宏块2431、2432内亮度块和色度块的实 际组织和放置并未示出,且实际上对于不同的编码决定可变化。)在给定宏块内,上半帧信 息和下半帧信息在各个阶段的任一个上可联合或独立地编码。隔行扫描的I-帧是隔行扫 描视频帧的两个帧内编码半帧,其中宏块包括两个半帧的信息。隔行扫描P-帧是使用正向 预测编码的隔行扫描视频帧的两个半帧,而隔行扫描B-帧是使用双向预测编码的隔行扫 描视频帧的两个半帧,其中宏块包括两个半帧的信息。隔行扫描P-和B-帧可包括帧内编 码宏块以及不同类型的预测宏块。图24C示出为编码/解码而组织为半帧2460的图24A的隔行扫描视频帧2400。 隔行扫描视频帧2400的两个半帧的每一个被分成各个宏块。上半帧被分成诸如宏块2461 的宏块,而下半帧被分成诸如宏块2462的宏块。(再一次,各宏块使用如图23所示的4 2 0 格式,且各宏块内亮度块和色度块的组织和放置并未示出。)在亮度平面中,宏块2461包括 来自上半帧的16行、宏块2462包括来自下半帧的16行,且每一行为16像素长。隔行扫描 的ι-半帧是隔行扫描视频帧的单个独立表示半帧。隔行扫描P-半帧是使用正向预测编码 的隔行扫描视频帧的单个独立表示半帧,而隔行扫描B-半帧是使用双向预测编码的隔行 扫描视频帧的单个独立表示半帧。隔行扫描P-和B-半帧可包括帧内编码宏块以及不同类型的预测宏块。术语图片通常指源、经编码或重构的图像数据。对于逐行扫描视频,图片是逐行扫描视频帧。对于隔行扫描视频,取决于上下文,图片可指隔行扫描视频帧、帧的上半帧、或帧 的下半帧。或者,编码器2100或解码器2200是基于对象的、使用不同的宏块或块格式、或对不同于8x8块和16x16宏块的大小或配置的像素集执行操作。B.视频编码器图21是通用视频编码器系统2100的框图。编码器系统2100接收包括当前图片 2105的一个视频图片序列(例如,逐行扫描视频帧、隔行扫描视频帧、或隔行扫描视频帧的 半帧),并产生压缩后视频信息2195作为输出。视频编码器的特定实施例通常使用通用编 码器2100的变体或补充版本。编码器系统2100压缩预测图片和关键图片。为演示起见,图21示出关键图片通 过编码器系统2100的路径,以及预测图片的路径。编码器系统2100的许多组件用于压缩 关键图片和预测图片。由那些组件执行的确切操作可取决于所压缩的信息类型而变化。预测图片(例如逐行扫描ρ-帧或b_帧、隔行扫描ρ-半帧或b_半帧、或隔行扫描 P-帧或b_帧)根据来自一个或多个其它图片(通常称为参考图片或锚)的预测(或差值) 来表示。预测残差是所预测图片和原始图片之间的差值。相反,关键图片(例如逐行扫描 I-帧、隔行扫描I-半帧、或隔行扫描I-帧)不参照其它图片进行压缩。如果当前图片2105是正向预测图片,则运动估计器2110参照一个或多个参考图 片估计当前图片2105的宏块或其它像素集的运动,其中参考图片是例如缓存在图片存储 2120中的重构的先前图片2125。如果当前图片2105是双向预测图片,则运动估计器2110 参照(例如隔行扫描B-半帧的)多达4个重构参考图片来估计当前图片2105中的运动。通 常,运动估计器参照一个或多个时间上在先的参考图片和一个或多个时间上将来的参考图 片来估计B-图片中的运动。因此,编码器系统2100可将分别的存储2120和2122用于多个 参考图片。对于有关逐行扫描B-帧的更多信息,参见序列号为10/622,378题为“Advanced Bi-Directional PredictiveCoding of Video Frames”(视频帧的高级双向预测编码)并 于2003年7月18日提交的美国专利申请。运动估计器2110可按像素、1/2像素、1/4像素或其它增量进行估计,并可在逐个 图片基础或其它基础上切换运动估计的分辨率。运动估计器2110 (和补偿器2130)还可在 每帧或其它基础上在参考图片像素插值类型之间(例如双三次和双线性)切换。运动估计 的分辨率可水平地或垂直地相同或不同。运动估计器2110输出诸如差值运动向量信息的 辅助信息运动信息2115。编码器2100通过例如计算运动向量的一个或多个预测值、计算运 动向量和预测值之间的差值、并熵编码这些差值,来编码运动信息。为了重构运动向量,运 动补偿器2130组合预测值与差值运动向量信息。用于计算运动向量预测值、计算差值运动 向量、并重构隔行扫描B-半帧和隔行扫描B-帧的运动向量的各种技术如下所述。运动补偿器2130将重构运动向量应用于重构图片2125,以形成经运动补偿的当 前图片2135。然而,预测很少是完美的,且经运动补偿的当前图片2135和原始的当前图片 2105之间的差值为预测残差2145。在图片的随后重构中,预测残差2145被添加到经运动 补偿的当前图片2135中,以获得更接近于原始当前图片2105的重构图片。然而,在有损压缩中,仍有一些信息从原始当前图片2105中丢失。或者,运动估计器和运动补偿器应用另 一类型的运动估计计/补偿。频率变换器2160将空间域视频信息转换成频域(即频谱)数据。对于基于块的 视频图片,频率变换器2160将DCT、DCT的变体、或其它块变换应用于像素数据或预测残差 数据的块,从而产生频率变换系数的块。或者,频率变换器2160应用诸如傅立叶变换的另 一种常规频率变换、或使用小波或子频带分析。频率变换器2160可应用8x8、8x4、4x8、4x4 或其它大小的频率变换。然后量化器2170量化频谱数据系数的各个块。该量化器将均勻的标量量化应用 于频谱数据,其中步长在逐个图片或其它基础上变化。或者,量化器将另一种类型的量化应 用于频谱数据系数,例如不均勻的向量或非自适应量化,或者直接在不使用频率变换的编 码器系统中量化空间域数据。除了自适应量化之外,编码器2100可将帧丢弃、自适应滤波 或其它技术用于速率控制。编码器2100可将特定的信号表示用于被跳过的宏块,该宏块是没有特定类型信 息的宏块(例如没有该宏块的运动信息和没有残差信息)。当需要重构后的当前帧用于随后的运动估计/补偿时,逆量化器2176对量化后的 频谱数据系数执行逆量化。然后反向频率变换器2166执行频率变换器2160的反向操作,产 生重构后预测残差(用于预测图片)或重构后的关键图片。如果当前图片2105是关键图 片,则重构后的关键图片被取作重构后的当前图片(未示出)。如果当前图片2105是预测 图片,则重构后的预测残差被添加到经运动补偿的当前图片2135中以形成重构后的当前 图片。一个或多个图片存储2120、2122缓存重构后的当前图片,以用于运动补偿预测。在 某些实施例中,编码器将解块滤波器应用于重构后的帧以自适应地使图片中的间断点和其 它人工效应平滑。熵编码器2180压缩量化器2170的输出以及某些辅助信息(例如运动信息2115、 量化步长)。典型的熵编码技术包括算术编码、差分编码、哈夫曼编码、运行长度编码、LZ编 码、字典编码以及以上的组合。熵编码器2180通常使用用于不同类型信息(例如DC系数、 AC系数、不同类型的辅助信息)的不同编码技术,并可从特定编码技术内的多个代码表中 选择。熵编码器2180向多路复用器[“MUX”]2190提供压缩后的视频信息2195。MUX 2190可包括缓冲区,且缓冲区级别指示符被反馈给比特率自适应模块作速率控制。在MUX 2190之前或之后,压缩后的视频信息2195可被信道编码用于在网络上传输。信道编码可将 差错检测和纠正数据应用于压缩后的视频信息2195。C.视频解码器图22是一般视频解码器系统2200的框图。解码器系统2200接收用于视频图片的经压缩序列的信息2295,并产生包括重构图片2205的输出(例如,逐行扫描视频帧、隔行 扫描视频帧、或隔行扫描视频帧的半帧)。视频解码器的特定实施例通常使用通用解码器 2200的变体或补充版本。解码器系统2200解压缩预测图片和关键图片。为演示起见,图22示出关键图片 通过解码器系统2200的路径,以及正向预测图片的路径。解码器系统2200的许多组件用 于解压缩关键图片和预测图片。由那些组件执行的确切操作取决于所解压缩的信息类型而变化。DEMUX (多路分解器)2290接收压缩后视频序列的信息2295,并使接收到的信息可用于熵解码器2280。DEMUX 2290可包括一抖动缓冲区和其它缓冲区。在DEMUX 2290之前 或之后,经压缩的视频信息可进行信道解码和用于差错检测和纠正处理。熵解码器2280通常应用编码器中执行的熵编码的逆,对熵编码后的量化数据以 及熵编码后的辅助信息(例如运动信息2215、量化步长)进行熵解码。熵解码技术包括算 术解码、差分解码、哈夫曼解码、运行长度解码、LZ解码、字典解码以及以上的组合。熵解码 器2280经常使用用于不同类型信息(例如DC系数、AC系数、不同类型的辅助信息)的不 同解码技术,并可从特定解码技术内的多个代码表中选择。解码器2200通过例如计算运动向量的一个或多个预测值、熵解码差值运动向量、 并组合解码后的差值运动向量和用于重构运动向量的预测值,来解码运动2215。用于计算 运动向量预测值、计算差值运动向量、并重构隔行扫描B-半帧和隔行扫描B-帧的各种技术 如下所述。运动补偿器2230将运动信息2215应用于一个或多个参考图片2225,以形成被重 构的图片2205的预测值2235。例如,运动补偿器2230使用一个或多个宏块运动向量来寻 找参考图片2225中的宏块。一个或多个图片存储(例如图片存储2220、2222)存储先前重 构后的图片,以用作参考图片。通常,B-图片具有一个以上的参考图片(例如至少一个时 间上在先的参考图片和至少一个时间上将来的参考图片)。因此,解码器系统2200可将分 别的图片存储2220和2222用于多个参考图片。运动补偿器2230可按像素、1/2像素、1/4 像素或其它增量补偿运动,并可在逐个图片基础或其它基础上切换运动补偿的分辨率。运 动补偿器2230还可在每帧或其它基础上在参考图片像素插值类型之间(例如双三次和双 线性)切换。运动补偿的分辨率可水平地或垂直地相同或不同。或者,运动补偿器应用另 一类型的运动补偿。由运动补偿器进行的预测很少是完美的,因此解码器2200还重构预测 残差。逆量化器2270对熵解码后的数据执行逆量化。一般而言,该逆量化器将均勻的标 量逆量化应用于熵解码后的数据,其中步长在逐帧或其它基础上变化。或者,该逆量化器将 另一种类型的逆量化应用于数据,例如在不均勻的向量或非自适应量化后重构,或者在不 使用逆频率变换的解码器系统中直接逆量化空间域数据。逆频率变换器2260将量化后的频域数据转换成空间域视频信息。对于基于块的 视频图片,逆频率变换器2260将逆DCT[ “IDCT"] ,IDCT的变体、或其它逆向块变换应用于 频率变换系数的块,从而分别产生关键图片或预测图片的像素数据或预测残差数据。或者, 反向频率变换器2260应用诸如傅立叶逆变换的另一种常规反向频率变换、或使用小波或 子频带分析。反向频率变换器2260可应用8x8、8x4、4x8、4x4或其它大小的反向频率变换。对于预测图片,解码器2200组合重构后的预测残差2245和经运动补偿的预测 2235来形成重构后的图片2205。当解码器需要用于随后运动补偿的重构后图片2205时, 一个或两个图片存储(例如图片存储2220)缓存重构后图片2205,以用于预测下一图片。 在一些实施例中,解码器2200将解块滤波器应用于重构后图片以自适应地使图片中的间 断点和其它人工效应平滑。III.隔行扫描P-半帧和隔行扫描P-帧
典型的隔行扫描视频帧由在不同时间扫描的两个半帧(例如上半帧和下半帧)组成。一般而言,通过一起编码半帧来编码隔行扫描视频帧的静态区域是更为有效的(“帧模 式”编码)。另一方面,通过分开编码半帧来编码隔行扫描视频帧的移动区域通常更为有效 (“半帧模式”编码),因为这两个半帧倾向于具有不同的运动。正向预测的隔行扫描视频 帧可被编码为两个独立的正向预测半帧-隔行扫描P-半帧。例如,当在隔行扫描视频帧上 有较高运动从而在各半帧之间有很大差异时,分开编码正向预测的隔行扫描视频帧的半帧 会比较有效。或者,正向预测的隔行扫描视频帧可使用半帧编码和帧编码的混合来编码为隔行 扫描P-帧。对于隔行扫描P-帧的宏块,该宏块包括上半帧和下半帧的像素行,且各行可用 帧编码模式一起编码,或用半帧编码模式分开编码。A.隔行扫描P-半帧隔行扫描P-半帧参考一个或多个先前解码的半帧。例如,在一些实现中,隔行扫 描P-半帧参考一个或两个先前解码的半帧,而隔行扫描B-半帧参考多达两个先前的和两 个将来的参考半帧(即多达总共四个参考半帧)。(用于隔行扫描B-半帧的编码和解码技 术在下面详细描述。)图25和26示出具有两个参考半帧的隔行扫描P-半帧的示例。在图25中,当前 半帧2510参考时间上在先的隔行扫描视频帧中的上半帧2520和下半帧2530。因为半帧 2540和2550是隔行扫描的B-半帧,所以它们不用作参考半帧。在图26中,当前半帧2610 参考在包含当前半帧2610的隔行扫描视频帧前面紧邻的隔行扫描视频帧中的上半帧2620 和下半帧2630。对于有关双参考的隔行扫描P-半帧的更多信息,参见序列号为xx/yyy,ZZZ 题为"Predicting Motion Vectors for Fields of Forward-predicted Interlaced Video Frames”(预测正向预测的隔行扫描视频帧的半帧的运动向量)并于2004年5月27日提 交的美国专利申请。图27和28示出具有一个参考半帧-所允许的时间上最新参考半帧的隔行扫描 P-半帧的示例。在图27中,当前半帧2710参考时间上在先的隔行扫描视频帧的下半帧 2730,但不参考该隔行扫描视频帧上不那么新的上半帧2720。在图27所示示例中,半帧 2740和2750是隔行扫描B-半帧,且不是所允许的参考半帧。在图28中,当前半帧2810参 考在包含当前半帧2810的隔行扫描视频帧前面紧邻的隔行扫描视频帧中的下半帧2830, 而不参考不那么新的上半帧2820。图29和30示出使用所允许的第二最新参考半帧的隔行扫描P-半帧的示例。在 图29中,当前半帧2910参考时间上在先的隔行扫描视频帧的上半帧2920,但不参考更新的 下半帧2920。在图29所示示例中,半帧2940和2950是隔行扫描B-半帧,且不是所允许的 参考半帧。在图30中,当前半帧3010参考上半帧3020,而不参考更新的下半帧3030。在一实现中,图25-30中示出的全部情形在隔行扫描P-半帧语法中都是许可的。 其它实现也是可能的。例如,图片可将来自不同类型或时间位置的其它图片的半帧用作参 考半帧。1.半帧图片坐标系统和半帧极性运动向量表示以1/4像素为单位的水平和垂直位移。例如,如果运动向量的垂直 分量表示6个1/4像素单位的位移,则这表示参考块是当前块位置下方1. 5个半帧行处(6*1/4 = 1 1/2)。图31示出在一实现中运动向量的垂直分量和空间位置之间的关系。图31所示示 例示出当前和参考半帧类型(例如上和下)的三种不同组合的三种不同情形3110、3120和 3130。如果半帧类型对当前和参考半帧不同,则极性“相反”。如果半帧类型相同,则极性 “相同”。对于每种情形,图31示出当前半帧中一个垂直像素列和参考半帧中的第二垂直像 素列。实际上,该两列是水平对齐的。圆圈表示实际整数像素位置,而X表示插值的1/2或 1/4像素位置。水平分量值(未示出)无需说明因为隔行扫描的任何偏移量,因为各个半帧 都是水平对齐的。负值表示在相反方向上比所示正值垂直偏移量更偏上的偏移量。在情形3110中,极性“相反”。当前半帧为上半帧,而参考半帧为下半帧。相对于当 前半帧,参考半帧的位置因为隔行扫描而在向下方向上偏移1/2像素。垂直运动向量分量 值为0是“无垂直运动”偏移,并表示参考半帧中与当前半帧中位置在同一垂直水平上(绝 对值)的位置;垂直运动向量分量值为+2表示参考半帧中偏移到当前半帧中位置下方1/2 像素(绝对值)的位置,该位置是参考半帧中的实际值;而垂直分量值为+4表示参考半帧 中偏移到当前半帧中位置下方1整个像素(绝对值)的位置,该位置是参考半帧中的插值。在情形3120中,极性也“相反”。当前半帧是下半帧,而参考半帧是上半帧。相对 于当前半帧,参考半帧的位置因为隔行扫描而在向上方向上偏移1/2像素。垂直运动向量 分量值为-2表示参考半帧中偏移到当前半帧中位置上方1/2像素(绝对值)的位置;垂直 分量值为0表示参考半帧中与当前半帧中位置在同一水平上(绝对值)的位置;而垂直分 量值为+2表示参考半帧中偏移到当前半帧中位置下方1/2像素(绝对值)的位置。在情形3130中,极性“相同”。相对于当前半帧,参考半帧的位置在垂直方向上相 同。垂直运动向量分量值为0是“无垂直运动”偏移,并表示参考半帧中与当前半帧中位置 在同一垂直水平上(绝对值)的位置;垂直运动向量分量值为+2表示参考半帧中偏移到当 前半帧中位置下方1/2像素(绝对值)的位置,该位置是参考半帧中的插值;而垂直分量值 为+4表示参考半帧中偏移到当前半帧中位置下方1整个像素(绝对值)的位置,该位置是 参考半帧中的实际值。或者,运动向量的位移根据不同惯例来表达。2.双参考半帧的隔行扫描P-半帧中的运动向量预测双参考半帧的隔行扫描P-半帧参考相同时间方向上的两个半帧(例如两个最近的先前参考半帧)。对每个宏块计算两个运动向量预测值。在一些实现中,一个预测值来自 相同极性的参考半帧,而另一个预测值来自相反极性的参考半帧。极性的其它组合也是可 能的。(以下描述每个方向上使用双参考半帧的隔行扫描B-半帧。在一些实现中,这些隔 行扫描B-半帧将与隔行扫描P-半帧相同的技术用于计算运动向量预测值。)在一些实现中,编码器/解码器通过寻找奇半帧预测值和偶半帧预测值、并选择 处理预测值之一用于处理宏块,来计算当前块或宏块的运动向量预测值。例如,编码器/解 码器确定奇半帧运动向量预测值和偶半帧运动向量预测值。运动向量预测值之一因而具有 与当前半帧相同的极性,而另一运动向量预测值具有相反极性。编码器/解码器从奇半帧 运动向量预测值和偶半帧运动向量预测值中选择一运动向量预测值。例如,编码器基于哪 个给出较佳预测在各运动向量预测值之间选择。编码器使用简单的选择信号或使用较复杂 的结合改进编码效率的上下文信息的信号表示来用信号表示要使用哪个运动向量预测值。该上下文信息可表示奇半帧或偶半帧的哪一个、或相同极性半帧或相反极性半帧的哪一个已主要用于块或宏块周围的邻域中。解码器基于选择信号和/或上下文信息选择要使用哪 个运动向量预测值。然后,编码器/解码器使用选定的运动向量预测值处理该运动向量。例 如,编码器编码运动向量和运动向量预测值之间的差值。或者,解码器通过组合运动向量差 值和运动向量预测值来解码运动向量。或者,编码器和/或解码器可跳过确定奇半帧运动向量预测值、或跳过确定偶半 帧运动向量预测值。例如,如果编码器确定奇半帧将用于特定块或宏块的运动补偿,则编码 器只确定奇半帧运动向量预测值。或者,如果解码器从上下文和/或信号表示信息中确定 奇半帧将用于运动补偿,则解码器只确定奇半帧运动向量预测值。这样,编码器和解码器可 避免不必要的运算。解码器可采用以下技术来确定当前隔行扫描P-半帧的运动向量预测值。对于隔行扫描P-半帧中具有运动向量的每个块或宏块,可获得两组三个候选运 动向量预测值。从中获得这些候选运动向量预测值的相邻宏块相对于当前宏块3200的位 置如图32所示。这些候选值的三个来自偶参考半帧,而另三个来自奇参考半帧。因为每个 候选方向中的相邻宏块(A、B和C)是帧内编码的或具有参考偶半帧或奇半帧的实际运动向 量,所以需要导出其它半帧的运动向量(或导出帧内编码宏块的奇半帧和偶半帧运动向量 候选值)。例如,对于给定宏块,假设预测值A具有参考奇半帧的运动向量。在该情形中, “偶半帧”候选预测值A从“奇半帧”候选预测值A的运动向量中导出。该导出使用缩放运 算来完成。(参见例如以下图34A和34B的解释。)或者,导出用另一种方式完成。一旦已得到三个奇半帧候选运动向量预测值,就使用中值运算来从三个奇半帧候 选值中导出奇半帧运动向量预测值。类似地,一旦已得到三个偶半帧候选运动向量预测值, 就使用中值运算来从三个偶半帧候选值中导出偶半帧运动向量预测值。或者,使用另一种 机制来基于候选半帧运动向量预测值选择半帧运动向量预测值。解码器判定是将偶半帧还 是奇半帧用作运动向量预测值(例如通过选择主预测值),及偶还是奇运动向量预测值被 用来重构运动向量。图33A-33F中的伪码3300示出用来从如图32所示排列的预测值A、B和C中产 生运动向量预测值的过程。尽管图32示出当前隔行扫描P-半帧中典型宏块的邻域,但图 33A-33F的伪码3300解决了宏块位置的各个特定情形。此外,伪码3300可用来计算各个位 置上块的运动向量的运动向量预测值。在伪码3300中,术语“相同半帧”和“相反半帧”被理解成与当前编码或解码的半 帧相关。例如,如果当前半帧是偶半帧,则“相同半帧”是偶参考半帧而“相反半帧”是奇参考 半帧。伪码3300中的变量samefieldpred_x和samefieldpred_y表示来自相同半帧的运动 向量预测值的水平和垂直分量,而变量oppositefieldpred_x和oppositef ieldpred_y表 示来自相反半帧的运动向量预测值的水平和垂直分量。变量samecount和oppositecount 分别跟踪当前块或宏块的邻域的多少运动向量参考当前半帧的“相同”极性参考半帧,及多 少参考“相反”极性参考半帧。变量samecount和oppositecount在伪码开始时初始化为 O0伪码3300中所提及的缩放运算scaleforsameO和scaleforopposite ()被用来 从邻居的实际运动向量值中导出“另一”半帧的候选运动向量预测值。缩放运算是实现无关的。示例缩放运算在以下参照图34A、34B、35和36进行描述。或者,其它缩放运算可用来例如补偿诸如图31中所示的垂直位移。(具体用于隔行扫描B-半帧的缩放运算如下进 行详细描述。)图33A和33B示出用于计算帧内的内部位置中典型块或宏块的运动向量预测值的 伪码。“帧内”邻居的运动向量被设置为0。对于每个邻居,都设置相同半帧运动向量预测值 和相反半帧运动向量预测值,在其中一个通过邻居运动向量的实际值设置时,另一个从中 导出。对相同半帧运动向量预测值和相反半帧运动向量预测值计算候选值的中值,而“主” 预测值从samecount禾口 oppositecount中确定。变量dominantpredictor表示明个半中贞包 含主运动向量预测值。如果运动向量预测值具有与三个候选预测值的大部分相同的极性, 则它是主要预测值。(用运动向量差值数据解码的表示信号的值prediCt0r_flag表示使用 主还是非主预测值。)图33C中的伪码解决每行只有一个宏块(它没有邻居B或C)的隔行扫描P-半帧 的宏块的情形。图33D或33E中的伪码解决块或宏块在隔行扫描P-半帧的左边缘(没有 邻居C)的情形。在此,如果运动向量预测值具有与两个以上候选预测值相同的极性,则它 是主预测值;而在不分上下的情形中,相反半帧运动向量预测值为主预测值。最后,图33F 中的伪码解决例如宏块在隔行扫描P-半帧的首行中的情形。3. 一个半帧运动向量预测值从另一个半帧运动向量预测值导出的缩放在一实现中,编码器/解码器使用图34A和34B的伪码3400中示出的缩放运算, 将一个半帧运动向量预测值从另一个半帧运动向量预测值导出。SCALE0PP、SCALESAME1、 SCALESAME2、SCALEZ0NE1_X、SCALEZ0NE1_Y、Z0NE10FFSET_X 和 Z0NE10FFSET_Y 的值是实现 相关的。示出两个可能的值集,其中当前半帧是隔行扫描视频帧中的第一半帧的情形在图 35的表格3500中示出,而当前半帧是隔行扫描视频帧中的第二半帧的情形在图36的表格 3600中示出。对于P-帧,参考帧距离被第一为当前P-帧及其参考帧之间的B-帧(即包含 两个B-半帧的视频帧)数量。如果不出现B-帧,则参考距离为0。例如,编码器使用可变 大小的语法元素(例如在以下XIV节详细描述的REFDIST语法元素)来编码参考帧距离。在表格3500和3600中示出的各个示例中,N的值(用作表格中SCALEZ0NE1_X、 SCALEZONE 1_Y>ZONE 10FFSET_X和Z0NE10FFSET_Y值的乘数)取决于运动向量范围。例如, 经扩展的运动向量范围可通过语法元素EXTENDED_MV = 1来用信号表示。如果EXTENDED_ MV=I,则MVRANGE语法元素在图片头中出现,并用信号表示运动向量范围。如果EXTENDED_ MV = 0,则使用缺省运动向量范围。以下的表格1示出N和MVRANGE之间的关系。表格1 图35和36中N的导出 表格3500和3600中示出的各个值可依赖于实现而更改。或者,N被假设为1(即缩放不依赖于N),或者缩放可用一些其它方式来执行。B.隔行扫描P-帧在一些实现中,隔行扫描P-帧中的宏块可以是5种类型之一 1MV、2半帧MV、4帧 MV,4半帧MV和帧内。在IMV宏块中,宏块中4个亮度块的位移通过单个运动向量表示。相应的色度运 动向量可从亮度运动向量导出,以表示运动向量的2个8x8色度块的每一个的位移。例如, 再参看图23中示出的宏块排列,IMV宏块2300包括4个8x8亮度块和2个8x8色度块。亮 度块(Yl到Y4)的位移通过单个运动向量表示,且相应的色度运动向量可从亮度运动向量 导出,以表示2个色度块(U和V)的每一个的位移。在2半帧MV宏块中,宏块中4个亮度块的每个半帧的位移通过不同运动向量描 述。例如,图37示出,上半帧运动向量描述全部4个亮度块的偶数行的位移,下半帧运动向 量描述全部4个亮度块的奇数行的位移。使用上半帧运动向量,编码器可导出相应的上半 帧色度运动向量,它描述色度块偶数行的位移。类似地,编码器可导出下半帧色度运动向 量,它描述色度块奇数行的位移。参照图38,在4帧MV宏块中,4个亮度块的每一个的位移通过不同运动向量(MV1、 MV2、MV3和MV4)描述。每个色度块可通过使用4个导出色度运动向量(MV1’、MV2’、MV3’ 和MV4’ )来进行运动补偿,这些色度运动向量描述4个4x4色度子块的位移。每个4x4色 度子块的运动向量可从空间上相应的亮度块的运动向量中导出。参照图39,在4半帧MV宏块中,亮度块的每一个半帧的位移通过两个不同运动向 量来描述。亮度块的偶数行被垂直细分以形成2个8x8区域。对于偶数行,左边区域的位 移通过左上方半帧块的运动向量描述,而右边区域的位移通过右上方半帧块的运动向量描 述。亮度块的奇数行也被垂直细分以形成2个8x8区域。左边区域的位移通过左下方半帧 块的运动向量描述,而右边区域的位移通过右下方半帧块的运动向量描述。每个色度块也 可用与亮度块相同的方式分成4个区域,且每个色度块区域可使用导出运动向量进行运动 补偿。对于帧内宏块,运动假设为0。一般而言,计算隔行扫描P-帧中当前宏块的运动向量预测值的过程包括两个步 骤。首先,从其相邻宏块收集当前宏块的三个候选运动向量。例如,在一实现中,候选运动 向量基于图40A-40B中示出的排列(和首行宏块等的各种特定情形)来收集。或者,候选 运动向量可在一些其它顺序或排列中收集。其次,当前宏块的运动向量预测值从候选运动 向量集中计算。例如,预测值可使用3个预测值的中值、或通过其它方法来计算。对于有关隔行扫描P-帧的宏块的预测值计算和色度运动向量导出的其它细节,参 见申请号为 60/501,081 题为"Video Encoding and Decoding Tools andTechniques”(视 频编码和解码工具及技术)并于2003年9月7日提交的美国临时专利申请,如以下XIV节 所述。
IV.逐行扫描视频帧的双向预测如上所述,逐行扫描B-帧中的宏块可使用5种不同预测模式来预测正向、反向、 直接、插值和帧内。编码器选择并用信号表示在宏块级别或一些其它级别上比特流中的不 同预测模式。在正向模式中,当前逐行扫描B-帧中的宏块从时间上在先的锚中导出。在反 向模式中,当前逐行扫描B-帧中的宏块从时间上后续的锚中导出。用直接或插值模式预测 的宏块将正向和反向锚用于预测。因为有直接和插值模式的两个参考帧,所以对于每个宏 块通常都有至少两个运动向量(显式编码或导出的)。(用于逐行扫描B-帧的编码、信号 表示和解码的各个方面也可用于隔行扫描B-帧,如下所述。)在一些实现中,编码器通过使用分数值缩放正向锚的共处运动向量,隐式地用直接模式导出运动向量。该分数可反映当前逐行扫描B-帧在通过其锚形成的间隔内的相对 时间位置,但不需要反映真实的帧间距离。因而,编码器无需采取固定速度。这使得编码器 有附加的自由度,来通过改变来自“实际”时间位置的分数准确并容易地描述锚和当前逐行 扫描B-帧之间的真实运动,以便于改进运动补偿预测。变量BFRACTI0N表示可在比特流中 发送(例如在图片级别或一些其它级别上)以表示该相对时间位置的不同分数。不同分数 是0和1之间的有限离散值集。再参看图17,表格1700是用于比特流元素BFRACTI0N的可变长度代码(VLC)表格。在相同两个锚之间的逐行扫描B-帧中对BFRACTI0N的唯一性没有限制;具有相同锚 的不同逐行扫描B-帧可具有相同的BFRACTI0N值。表格1700中的代码可改变或重新安 排,以用不同代码表示不同分数。未在表格1700中示出的其它可能代码(例如,1111110或 1111111)可被认为是无效代码,或可用于其它目的。例如,条目1111110可用来显式地编码 定点格式的BFRACTI0N。作为另一示例,条目1111111可用于用信号表示特定帧类型(例 如,帧内编码的逐行扫描B-帧)。再参看图18,解码器根据伪码1800寻找缩放系数。再参看图19,解码器使用该 缩放系数来缩放后续参考图片中共处宏块的运动向量的X和y元素。伪码1900中的函数 Scale_Direct_MV取输入MV_X和MV_Y,并用直接模式来导出两个运动向量,其中一个运动 向量参考正向(先前)锚图片(MV_XF、MV_YF),而另一个运动向量参考反向(后续)锚图片 (MV_Xb, MV_Yb) ο逐行扫描B-帧中的“跳过”宏块信号表示对给定宏块未出现运动向量预测误差。 所预测的运动向量将精确地等同于编码器/解码器在重构宏块时使用的运动向量(即不应 用运动向量预测误差)。编码器仍然用信号表示宏块的预测模式,因为该宏块可使用直接、 正向、反向或插值预测来跳过。V.对隔行扫描B-图片的预测编码/解码的创新的纵览各所述实施例包括用于编码和解码隔行扫描B-图片(例如隔行扫描B-半帧、隔 行扫描B-帧)的技术和工具。各所述实施例实现所述用于编码和/或解码双向预测的隔 行扫描图片的技术和工具的一种或多种,如下包括但不限于1.对于隔行扫描B-帧,编码器/解码器在隔行扫描B-帧的宏块中的上半帧和下 半帧之间切换预测模式。2.对于隔行扫描B-帧,编码器/解码器通过为先前解码的时间后续锚的共处宏块 的上和下半帧的每一个选择一个代表性运动向量,计算当前宏块的直接模式运动向量。该选择至少可部分地基于编码当前隔行扫描B-帧的宏块的模式(例如IMV模式、2半帧MV模 式等)执行。3.对于隔行扫描B-半帧或隔行扫描B-帧,编码器/解码器使用4MV编码。例如,4MV可用于单向预测模式(正向或反向模式),但不用于其它可用预测模式(例如直接、插 值)。4.对于隔行扫描B-半帧或隔行扫描B-帧,正向运动向量使用来自正向运动向量 缓冲区的先前重构(或估计)的正向运动向量进行预测,而反向运动向量使用来自反向运 动向量缓冲区的先前重构(或估计)的反向运动向量进行预测。结果的运动向量被添加到 相应的缓冲区中,且运动向量缓冲区中的空穴可用估计的运动向量值来填充。a.对于隔行扫描B-帧,当正向预测用来预测运动向量且运动向量被添加到正向 缓冲区中时,反向缓冲区中的相应位置以仅将反向运动向量用作预测值的预测运动向量来 填充(“空穴填充”)。类似地,当反向预测用来预测运动向量且运动向量被添加到反向缓 冲区中时,正向运动向量缓冲区中的相应位置以仅将正向运动向量用作预测值的预测运动 向量来填充。b.对于隔行扫描B-半帧,要为空穴填充在不同极性的运动向量(例如“相同极性” 或“相反极性”)之间选择,编码器/解码器选择主极性半帧运动向量。锚和当前帧之间的 距离使用各种语法元素计算,且计算出的距离被用于缩放参考半帧运动向量。5.对于隔行扫描的B-半帧,编码器/解码器使用“自参考”巾贞。例如,当前帧中的 第二个B-半帧在运动补偿预测中参考来自当前帧的第一 B-半帧。6.对于隔行扫描的B-半帧,编码器发送指示用于隔行扫描B-半帧中的一个或多 个宏块的预测模式是正向还是非正向的二进制信息(例如,在经压缩位平面的B-半帧级别 上)。解码器执行相应的解码。7.对于隔行扫描的B-半帧,如果下一锚图片的相应半帧中的相应宏块使用四个 运动向量编码,则编码器/解码器使用利于主极性的逻辑来选择直接模式的运动向量。8.帧内编码半帧当没有好的运动补偿对B半帧可能时,它可被编码为帧内(即 非预测的)B-半帧(“Bi-半帧”)。各种所述技术和工具可彼此组合、或与其它技术组合、或可单独使用。VI.切换隔行扫描B-帧中半帧编码宏块内的预测模式在一些实现中,编码器在隔行扫描B-帧的宏块内执行预测模式切换。例如,编码 器允许在隔行扫描B-帧的宏块中从上半帧去到下半帧时,预测模式可从正向切换成反向, 或从反向切换成正向。与用一种预测方向模式编码整个宏块相反,预测方向模式的组合被 用来编码单个宏块。在宏块的各个半帧中改变预测方向模式的能力在许多情形中导致隔行 扫描B-帧的更有效编码。图41示出使用不同预测模式预测隔行扫描B-帧的半帧编码宏块中的各个半帧的 运动向量的一种技术4100。在4110,在隔行扫描B-帧中,编码器/解码器使用第一预测模 式预测半帧编码宏块中第一半帧的运动向量。在一些实现中,该“第一半帧”可以是上半帧 或下半帧,对其的判定独立地用信号表示。在4120,编码器/解码器使用一不同预测模式预 测同一宏块中第二半帧的运动向量。例如,对于使用两个运动向量半帧编码的宏块,上半帧可以是正向预测的(即,上半帧运动向量参考先前的锚图片),而下半帧可以是反向预测的(即,下半帧参考后续的锚 图片)。在一些实现中,隔行扫描B-帧中的半帧编码宏块不使用4个运动向量编码。或者, 如果该宏块使用4个运动向量进行半帧编码(例如每个半帧两个运动向量),则上半帧的这 两个运动向量将参考一个锚(正向或反向),而下半帧运动向量将参考另一个锚。这种预测模式的切换在该宏块类型不是以直接或插值开始的情形中仅需一个附加比特,如在以下隔行扫描B-帧的伪码中进一步示出IfMB是半帧编码的AND MB类型是正向或反向thenIfMVSwitch = Ithen预测模式在上半帧和下半帧之间切换(从正向到反向或反 之)因此,将预测模式切换限于正向和反向模式避免对用信号表示第二模式的更多比 特的需要,因为该第二模式从第一模式(在先前用信号表示的)和切换值中隐含。如果在由隔行扫描B-帧的宏块覆盖的区域中有较高运动,则宏块有可能用半帧 模式编码。在这些情形中,正向或反向预测更可能比直接或插值模式(包括像素平均)给出 准确的运动补偿结果。因为在平滑中平均了各个结果(例如损失了伴随高运动的高频率元 素),所以直接和插值模式并非是编码这些宏块的最佳方法。试验结果表明,因为在半帧编 码宏块内的半帧级别上将全部四种预测模式用信号表示为切换选项的增加开销使其低效。或者,编码器可在隔行扫描B-帧的半帧编码宏块内切换两种以上的预测模式,或 可在不同预测模式之间切换。VII.计算隔行扫描B-帧中的直接模式运动向量在一些实现中,编码器/解码器缓存来自经先前解码锚的I-帧或P-帧(它是时 间上正向的参考帧,用作反向预测参考帧)的运动向量,并选择一个或多个缓存运动向量, 以用于计算隔行扫描B-帧中当前宏块的直接模式运动向量。例如,编码器/解码器缓存来 自锚帧的每个宏块的上半帧和下半帧的每一个的代表性运动向量,并使用一个或多个所缓 存的运动向量来计算当前直接模式宏块的运动向量。该选择至少部分地基于当前宏块的编 码模式执行(例如IMV模式、2半帧MV模式等)。图42示出用于在一实现中计算隔行扫描B-帧中宏块的直接模式运动向量的一种 技术4200。在4210,编码器/解码器缓存在先前重构的时间上将来的锚帧中共处宏块的每 个宏块的多个运动向量。如果该共处宏块仅具有一个运动向量,则如果需要,该运动向量将 被缓存为共处宏块的各个块的运动向量值。在4220,编码器/解码器部分地依赖于当前宏 块所需运动向量的数量,选择共处宏块的一个或多个缓存运动向量,用于隔行扫描B-帧中 当前宏块的直接模式预测。在一实现中,解码器缓存共处宏块中的两个运动向量,或缓存来自将来锚帧的最 大可能数量的经解码亮度运动向量的一半。锚帧中的各宏块可用不同方法编码,其中每个 宏块最多达4个运动向量,但只能缓存最多达两个运动向量,如下所述。而且,为当前宏块 产生的正向/反向运动向量对的数量取决于当前宏块的编码模式,而不是仅仅取决于经先 前解码的将来锚帧的共处宏块的编码模式。例如,如果当前直接模式宏块是IMV编码的,则解码器从锚帧的共处宏块的上半 帧中取得被缓存的运动向量,并产生一对直接运动向量-一个正向另一个反向。如果当前 直接模式宏块是半帧编码的,则解码器从锚帧的共处宏块中取得被缓存的上半帧和下半帧运动向量,并产生两对运动向量,一共有当前直接模式宏块的4个运动向量-对每个半帧都 有一个正向另一个反向的运动向量。图43示出经先前解码的时间上将来的锚帧的共处宏块4300的各个块的运动向量 MV1、MV2、MV3和MV4。如果该共处宏块是IMV宏块,则MV1、MV2、MV3和MV4都相等。如果 该共处宏块是2半帧MV宏块,则MVl和MV2等于一个值,而MV3和MV4等于另一个值。如 果该锚帧的共处宏块是4半帧MV或4帧MV宏块,则MV1、MV2、MV3和MV4可能都是不同的 值。然而,即使MV1、MV2、MV3和MV4都可用,解码器仍然仅缓存MVl和MV3。在图43所示示例中,解码器缓存MVl和MV3。如果当前宏块使用IMV模式,则解码 器选择MVl来计算当前宏块的正向和反向直接模式运动向量,并略去MV3。如果当前宏块使 用2半帧MV模式,则解码器使用MVl和MV3来计算4个直接模式运动向量。该运算产生当 前宏块的上下半帧的运动的良好表示。在已选择来自锚帧中共处宏块的运动向量时,解码器应用缩放逻辑来导出相应的 正向和反向指示运动向量,用于B帧宏块的直接模式预测。例如,解码器可应用图19中的 函数Scale_Direct_MV。或者,解码器应用不同的缩放函数。或者,编码器/解码器可缓存每个锚帧宏块的4个运动向量。例如,如果当前宏块 是IMV编码的,则编码器/解码器可取锚帧中共处宏块的左上运动向量,并产生一对直接运 动向量,或者可取锚帧宏块的4个运动向量的均值。如果当前宏块是半帧编码的,则编码器 /解码器可取左上和左下运动向量,并产生两对(一个半帧一对),或者可取锚帧宏块的上 运动向量的均值和下运动向量的均值。当锚帧中的共处宏块为帧内、或当锚帧为I-帧时,直接模式运动向量被视为(0, 0)。VIII.隔行扫描B-半帧和隔行扫描B-帧中的4MV编码在一些实现中,编码器使用4运动向量(4MV)编码模式编码隔行扫描的B-半帧和 隔行扫描的B-帧。4MV编码可允许复杂运动轨迹的表示比1运动向量(IMV)编码更准确 (例如,通过允许宏块中的4个亮度块独立地进行预测和运动补偿)。使用4MV可受限于某 些预测模式。例如,在一些实现中,编码器将4MV用于正向和反向模式(包括半帧和帧变化 两者),而不用于直接或插值模式。当4MV不用于逐行扫描B-帧时,这不同于逐行扫描编码 模式。直接和插值模式涉及计算经运动补偿预测时的像素平均,它用于平滑细微细节。 如果这种平滑是可接受的,则可能可使用IMV模式而不是4MV模式,因为编码IMV较容易, 且IMV可用来准确地描述平滑运动轨迹。实验已显示,在隔行扫描B-半帧和隔行扫描B-帧 的宏块中使用4MV模式,而将4MV模式限于正向和反向预测宏块中是有利的。有利于将4MV 限于正向和反向模式中的另一个因素是组合4MV与直接或插值模式将导致每种情形中一 共有8个运动向量。信号表示开销(用于插值模式)和实现以及关联于8个运动向量的解 码复杂性通常抵销了准确性优点。此外,当通常在较高质量设置上编码的(即较不强烈量 化的)P_图片通常可仅将一个或四个运动向量用于运动补偿时,用8个运动向量来编码隔 行扫描B-图片通常是不实用的。将4MV限于某些预测模式还具有其它优点。例如,如果4MV仅限于正向和反向预测模式,并且如果正向/非正向模式决定已用信号表示(例如用诸如在以下XI节所述的位平面编码技术),编码器无需发送任何附加比特来用信号表示4MV宏块的预测模式。
以下伪码可应用于隔行扫描B-半帧的宏块,其中正向/非正向决定是位平面编码 的,并在任何宏块级别信息之前发送(例如在图片级别上发送)
IfMB是4MV编码的AND预测模式是非正向的then预测模式=反向(不发送任何更多比特来用信号表示模式)在一些实现中,直接/非直接预测模式决定在任何宏块级别信息之前发送(例如在图片级别上的经压缩位平面中)。(对于有关编码直接/非直接信息的更多信息,参见 序列号为 10/622,378 的题为"Advanced Bi-Directional Predictive Coding ofVideo Frames”(视频帧的高级双向预测编码)并于2003年7月18日提交的美国专利申请。)以 下伪码可应用于隔行扫描B-帧的宏块,其中4MV在这些实现中受限于正向和反向模式If MB是4MV编码的AND预测模式是非正向的then发送一附加比特来用信号表示预测模式(正向或反向)或者,4MV用于不同于或除正向或反向模式之外的预测模式、不用于正向模式、不 用于反向模式、或不用于任何预测模式。例如,在一些实现中,4MV用于隔行扫描B-半帧, 但不用于隔行扫描B-帧。在其它可选实现中,其它代码或代码长度可用于用信号表示结合 4MV编码的预测模式。IX.使用分开的正向和反向运动向量缓冲区来预测隔行扫描B-图片中的运动向隔行扫描B-图片的运动向量使用分开的正向和反向运动向量上下文来预测。一 般而言,正向运动向量使用存储在正向运动向量缓冲区中的运动向量来预测,而反向运动 向量使用存储在反向运动向量缓冲区中的运动向量来预测。然后当前宏块的结果运动向量 存储在适当的缓冲区中,并可用于其它宏块的后续运动向量预测值中。通常,正向和反向运 动向量缓冲区中的相应空间都为每个宏块填充,即使给定宏块仅用正向运动向量(在正向 预测宏块的情形中)或仅用反向运动向量(在反向预测宏块的情形中)预测。以下各节描 述用于预测隔行扫描B-图片(如,隔行扫描B-半巾贞,隔行扫描B-帧)中的运动向量,以及 用于为“遗漏”的正向或反向运动向量“填充”运动向量缓冲区中的相应空间的技术。A.正向和反向缓冲区当预测隔行扫描B-图片的运动向量时,编码器/解码器使用正向运动向量缓冲区 和/或反向运动向量缓冲区中的先前重构的运动向量。在正向模式中,编码器/解码器使 用来自正向运动向量缓冲区的经重构正向运动向量,来预测用于正向运动补偿的当前运动 向量。在反向模式中,编码器/解码器使用来自反向运动向量缓冲区的经重构反向运动向 量,来预测用于反向运动补偿的当前运动向量。对于直接模式或插值模式宏块,编码器/解 码器使用正向运动向量缓冲区来预测正向运动向量分量(或可能多个正向运动分量),并 使用反向运动向量缓冲区来预测反向运动向量分量(或可能多个反向运动分量)。在重构隔行扫描B-图片的运动向量之后,编码器/解码器将重构后的正向运动向 量缓存在正向运动向量缓冲区中,并将重构后的反向运动向量缓存在反向运动向量缓冲区 中。在正向模式中,编码器/解码器将重构后的正向运动向量存储在正向运动向量缓冲区 中。在反向模式中,编码器/解码器将重构后的反向运动向量存储在反向运动向量缓冲区 中。对于使用直接或插值预测模式的宏块,编码器/解码器将(各)正向运动向量分量存储在正向运动向量缓冲区中,并将(各)反向运动向量分量存储在反向运动向量缓冲区中。例如,如果编码器在隔行扫描B-图片中的宏块坐标位置(12,13)上编码正向预测宏块时,则编码器计算正向运动向量预测值并在比特流中发送该正向运动向量的残差(假 设该宏块未被“跳过”)。解码器解码该残差(即差值),并重构运动向量。编码器/解码器 将重构后的运动向量插入正向运动向量缓冲区。然后编码器/解码器使用运动向量预测逻 辑来计算要填充反向运动向量的反向运动向量预测值,并将反向运动向量置于反向运动向 量缓冲区中的位置(12,13)上。例如,在三者中值的预测情形中,编码器/解码器可取位置 (11,13)、(12,12)和(13,12)上的缓存反向运动向量的中值(当前正向预测宏块的左、上、 右上邻居),来填充(12,13)的反向运动向量。图44示出使用正向和/或反向运动向量缓冲区来预测隔行扫描B-图片中当前宏 块的运动向量的一种技术4400。在4410,取决于要预测的运动向量是正向还是反向运动向 量,编码器/解码器选择使用正向还是反向运动向量缓冲区。如果当前运动向量是正向运 动向量,则编码器/解码器在4420从正向运动向量缓冲区选择一个候选运动向量预测值 集。如果当前运动向量是反向运动向量,则编码器/解码器在4430从反向运动向量缓冲区 选择一个候选运动向量预测值集。在4440,编码器/解码器基于候选运动向量预测值集计 算运动向量预测值。例如,编码器/解码器计算候选运动向量预测值集的中值。在简单情形 中,编码器/解码器基于都是IMV宏块的预测值计算IMV当前宏块的运动向量预测值。更 复杂的变化描述如下,其中当前宏块和/或邻居宏块具有不同模式。图45示出正向运动向量缓冲区4510和反向运动向量缓冲区4520中的运动向量。 在图45所示示例中,对于重构宏块4530-4570,编码器/解码器将正向运动向量存储在正向 运动向量缓冲区4510中,并将反向运动向量存储在反向运动向量缓冲区4520中。为了预 测当前宏块4580的运动向量,编码器/解码器使用来自相邻宏块的候选预测值。例如,如 果当前宏块4580用正向模式预测,则编码器使用正向运动向量缓冲区中的相邻正向运动 向量来预测正向运动向量(例如使用三者中值预测),随后用重构后的运动向量值填充正 向运动向量缓冲区中的当前宏块位置。为了填充反向运动向量缓冲区4520中的相应当前 宏块位置,编码器/解码器可使用反向运动向量缓冲区中的相邻反向运动向量来预测反向 运动向量,并将该预测值置于反向运动向量缓冲区的当前宏块的位置中。B.隔行扫描B-帧中的运动向量预测在一些实现中,编码器/解码器采用以下方案来预测隔行扫描B-帧中宏块(包括 其不同半帧)的运动向量,它使用分开的正向和反向运动向量上下文。图40A-40B示出从 中收集候选运动向量的相邻宏块。如果IMV宏块是正向预测的,则编码器/解码器从正向运动向量缓冲区的候选运 动向量中预测其正向运动向量(例如使用诸如图40A和40B中或别处示出的三者中值预测 和预测模式)。编码器/解码器(在添加运动向量预测误差后)将该正向运动向量存储在 正向运动向量缓冲区中。编码器/解码器通过从反向运动向量缓冲区的候选运动向量中预 测反向运动向量来填充“空穴”(例如与正向预测情形中一样),并将该反向运动向量(在 此为预测值)存储在反向运动向量缓冲区中。如果IMV宏块是反向预测的,则编码器/解码器从反向运动向量缓冲区的候选运 动向量中预测其反向运动向量(例如与正向预测情形中一样)。编码器/解码器(在添加预测误差后)将该反向运动向量存储在反向运动向量缓冲区中。编码器/解码器通过从正 向运动向量缓冲区的候选运动向量中预测正向运动向量来填充“空穴”,并将该正向运动向 量(在此为预测值)存储在正向运动向量缓冲区中。在正向和反向运动向量缓冲区中略去作为帧内编码宏块的邻居。各种特定情形确定隔行扫描B-帧中IMV和半帧编码2MV宏块的组合。如果当前IMV宏块的位置A、B或C中的相邻宏块是半帧编码的2MV宏块,则编码器/解码器取2MV宏 块的半帧运动向量的均值作为该位置的运动向量预测值。对于正向预测的当前2半帧MV宏块,例如对于两个正向预测半帧运动向量的每一 个,来自邻居的候选运动向量从正向运动向量缓冲区中收集。编码器/解码器基于相邻宏 块的编码模式(例如帧内、1MV、2半帧MV)选择一个候选运动向量集,这些相邻宏块存储在 正向运动向量缓冲区中。如果相邻宏块存在且不是帧内编码的,则编码器/解码器注意该 宏块的运动向量以添加到候选集中去。在一些实施例中,编码器/解码器继续如下动作。对 于上半帧正向运动向量,如果位置A、B或C中的相邻宏块是IMV宏块,则编码器将来自正向 运动向量缓冲区的相应位置的宏块的运动向量添加到候选集中。对于是2半帧MV宏块的 位置A、B或C中的相邻宏块,编码器/解码器将来自正向运动向量缓冲区的相应位置的上 半帧MV添加到该集中。对于下半帧正向运动向量,如果位置A、B或C中的相邻宏块是IMV宏块,则编码器 将来自正向运动向量缓冲区的相应位置的宏块的运动向量添加到候选集中。对于是2半帧 MV宏块的位置A、B或C中的相邻宏块,编码器/解码器将来自正向运动向量缓冲区的相应 位置的下半帧MV添加到该集中。为了计算2半帧MV宏块的半帧运动向量的预测值,编码器/解码器然后计算候选 集的中值。为了计算2半帧MV宏块的反向预测运动向量,逻辑与正向预测情形相同,但来自 邻居的候选运动向量是从反向运动向量缓冲区中收集的。再一次,对于运动向量预测,略去位置A、B或C中帧内编码的邻居。在重构2半帧MV宏块的运动向量之后(例如通过添加运动向量差值信息),重构 后的实际运动向量按适合重构后运动向量的预测方向,被置入正向运动向量缓冲区或反向 运动向量缓冲区。运动向量缓冲区的用于缺少方向的相应空槽通过计算缺少方向的运动向 量预测值并将该运动向量预测值存储在空槽中来填充。如果使用预测模式切换(参见以上VI节),一例外牵涉到隔行扫描B-帧内半帧编 码宏块的空穴填充。在该情形中,给定半帧编码的2MV宏块具有一个正向运动向量和一个 反向运动向量。在重构隔行扫描B-帧的半帧编码宏块之后,在半帧编码宏块在上半帧和下 半帧之间切换预测方向时,编码器/解码器用正向运动向量填充正向运动向量缓冲区的上 下运动向量“槽”,并用反向运动向量填充反向缓冲区的上下运动向量槽。尽管正向运动向 量仅对一个半帧(例如上半帧)发送,编码器将同一运动向量置入正向运动向量缓冲区的 上下半帧运动向量槽。类似地,尽管反向运动向量仅对下半帧发送,编码器将它置入反向运 动向量缓冲区的上下半帧槽。例如,图46示出正向运动向量缓冲区4610和反向运动向量缓冲区4620中重构 宏块4680的上下半帧的运动向量。在图46所示示例中,对于重构宏块4630-4670,编码器/解码器将正向运动向量存储在正向运动向量缓冲区4610中,并将反向运动向量存储在反 向缓冲区4620中。重构宏块4680是用预测切换进行半帧编码的,且其上半帧运动向量被 存储在正向或反向运动向量缓冲区中(取决于上半帧运动向量的预测方向)的上下位置。 宏块4680的下半帧运动向量被存储在其它运动向量缓冲区的上下位置中。在该示例中,重 构宏块4680使用预测模式切换。尽管正向运动向量和方向运动向量都仅对一个半帧发送, 但编码器将同一运动向量置入相应正向和反向运动向量缓冲区的上下半帧运动向量槽中。如果当前宏块被插值,则编码器/解码器使用正向运动向量缓冲区来预测正向运 动向量(或2半帧MV宏块的正向运动向量),使用反向运动向量缓冲区来预测反向运动向量(或2半帧MV宏块的反向运动向量),并(在添加了 一计算好就添加的预测误差之后) 将该正向和反向运动向量分别存储在正向和反向运动向量缓冲区中。如果宏块是在隔行扫描B-帧中直接预测的,则编码器/解码器可使用以上VII节 描述的技术。在一些实现中,IMV宏块、2半帧MV宏块和帧内宏块被允许用于隔行扫描B-帧(但 不是其它MV宏块类型),因为只需要确定较少的当前/邻居模式组合而简化了用于预测运 动向量的逻辑。或者,允许其它和/或附加MV模式,诸如4帧MV宏块和4半帧MV宏块。例 如,图64、69和70中示出的伪码的一部分可用来确定隔行扫描B-帧的这种其它组合。C.隔行扫描B-半帧的运动向量预测一般而言,对于隔行扫描B-半帧,先前重构(或导出)的正向半帧运动向量被用 作当前正向半帧运动向量的预测值,且先前重构(或导出)的反向半帧运动向量被用作当 前反向半帧运动向量的预测值。在正向或反向模式中,当前正向或反向半帧的运动向量被 添加到适当的运动向量缓冲区中,且另一(缺少)方向的运动向量(例如正向模式中的反 向方向,或反向模式中的正向方向)被导出用作将来使用的预测值。在一些实现中,半帧运动向量预测选择根据以上III. A. 2节的详细描述和以下 XIV. B. 3节描述的双参考半帧运动向量预测逻辑进行。例如,图33A-33F中示出的伪码用 来计算隔行扫描B-半帧的宏块的两个半帧的正向运动向量预测值,且一个运动向量预测 值被选择用于重构正向半帧的运动向量。然后将重构的运动向量置于正向运动向量缓冲区 中。该伪码也用来计算该宏块的两个半帧的反向运动向量预测值,且一个预测值被选择用 作反向运动向量缓冲区的填充值。对于隔行扫描B-半帧,为了填充缺少方向的运动向量缓 冲区中的“空穴”,编码器/解码器在相同极性和相反极性的运动向量预测值之间选择。这 种极性之间的选择因为两个预测值在给定缺少方向中产生_ 一个与当前半帧极性相同,另 一个与当前半帧极性相反。因此,在一些实现中,编码器/解码器选择用于缺少方向运动向 量的主要或“主”极性预测值。这样,正向和方向运动向量的完整集就被提供用于运动向量 预测。或者,确定主极性、首先进行预测值选择、并只计算选定运动向量预测值。在一实现中通过从不同极性的半帧运动向量预测值中选择来进行实际值缓存和 空穴填充的过程如图47中的伪码4700所示。伪码4700示出,在空穴填充预测期间,没有 实际运动向量被提供为缺少方向,因此具有主极性的经预测的缺少方向运动向量由编码器 /解码器来选择。在一些实现中,隔行扫描B-半帧的运动向量预测的整个方案如下所述。如果宏块是正向预测的,则编码器/解码器从正向运动向量缓冲区的候选相同和/或相反极性运动向量(例如大多数情形中使用来自左、上和右上邻居的三者中值预测)或 从缓存运动向量中导出的运动向量中预测其正向运动向量。编码器/解码器将重构后的正 向运动向量存储在正向运动向量缓冲区中,计算主反向运动向量预测值(类似于用来自反 向运动向量缓冲区的空间邻域的三者中值预测的),并将其存储在反向运动向量缓冲区中 的相应位置。如果宏块是反向预测的,则编码器/解码器从反向运动向量缓冲区的候选相同和/或相反极性运动向量(例如大多数情形中使用来自左、上和右上邻居的三者中值预测)或 从缓存运动向量中导出的运动向量中预测其反向运动向量。编码器/解码器将重构后的反 向运动向量存储在反向运动向量缓冲区中,计算主正向运动向量预测值(类似于用来自正 向运动向量缓冲区的空间邻域的三者中值预测的),并将其存储在正向运动向量缓冲区中 的相应位置。如果该宏块是插值的,则编码器/解码器使用正向运动向量缓冲区来预测正向运 动向量分量,使用反向运动向量缓冲区来预测反向运动向量分量,并(在添加了一计算好 就添加的预测误差之后)将重构后的正向和反向运动向量分别存储在正向和反向运动向 量缓冲区中。如果宏块是直接预测的,则编码器/解码器计算当前半帧的直接模式运动向量, 并将正向和反向运动向量分量存储在相应的运动向量缓冲区中。在运动向量预测中,略去位置A、B或C中帧内编码的邻居。各种特定情形确定隔行扫描B-半帧中IMV和4MV宏块的组合。图6A-10示出用 于逐行扫描P-帧的运动向量预测的预测值模式。这些相同模式示出被视为用于混合MV的 隔行扫描B-半帧的IMV或4MV宏块的运动向量的运动向量预测的候选运动向量的块或宏 块的位置。对于帧是一个宏块宽的特定情形,预测值总是Predicator A(顶部预测值)。各 种其它规则解决其它特定情形,诸如首行4MV宏块、首行IMV宏块、和帧内编码预测值。图6A-10中所示的预测值模式用来使用来自正向运动向量缓冲区中各位置的候 选值进行正向预测,并使用来自反向运动向量缓冲区中位置的候选值进行反向预测。此外, 图6A-10中所示的预测值模式结合以上所述的对隔行扫描B-半帧的双参考半帧运动向量 预测逻辑来使用。图6A和6B示出被视作用于混合MV的隔行扫描B-半帧中的IMV当前宏块的候选 运动向量预测值的块的位置。相邻的各个宏块可以是IMV或4MV宏块。图6A和6B示出假 设邻居是4MV的候选运动向量的位置(即预测值A是当前宏块上面的宏块中块2的运动向 量,而预测值C是当前宏块左侧紧邻的宏块中块1的运动向量)。如果邻居的任一个是IMV 宏块,则图5A和5B中示出的运动向量预测值被视为整个宏块的运动向量预测值。如图6B 所示,如果宏块是该行中的最后一个宏块,则预测值B来自左上方宏块的块3而不像其它情 形一样来自右上方宏块的块2。图7A-10示出被视作用于混合MV的隔行扫描B-半帧的4MV宏块中4个亮度块的 每一个的候选运动向量预测值的块的位置。图7A和7B是示出被视作用于位置O上一个块 的候选运动向量预测值的块的位置的示图;图8A和8B是示出被视作用于位置1上一个块 的候选运动向量预测值的块的位置的示图;图9是示出被视作用于位置2上一个块的候选 运动向量预测值的块的位置的示图;而图10是示出被视作用于位置3上一个块的候选运动向量预测值的块的位置的示图。再一次,如果邻居是IMV宏块,则该宏块的运动向量预测值 用于该宏块的各个块。对于宏块是行中第一宏块的情形,块0的预测值B与该行中剩余宏块的块0进行 不同的处理(参见图7A和7B)。在该情形中,预测值B从当前宏块上面紧邻宏块的块3中 取得,而不像其它情形一样从当前宏块左上方的宏块的块3中取得。类似地,对于宏块是行 中最后一个宏块的情形,块1的预测值B进行不同的处理(参见图8A和8B)。在该情形中, 预测值从当前宏块上面紧邻宏块的块2中取得,而不像其它情形一样从当前宏块右上方的 宏块的块2中取得。一般而言,如果该宏块在第一宏块列中,则块0和2的预测值C被设置 为等于0。再一次,对于运动向量预测,略去位置A、B或C中帧内编码的邻居。在重构4MV宏块的运动向量之后(例如通过添加运动向量差值信息),重构后的实 际运动向量按适合重构后运动向量的预测方向,被置入正向运动向量缓冲区或反向运动向 量缓冲区。运动向量缓冲区的用于缺少方向的相应空槽通过计算缺少方向的相同和相反极 性的运动向量预测值、在不同极性运动向量预测值之间选择、并将该运动向量预测值存储 在空槽中来填充。再参看图34A和34B,对于运动向量预测,编码器/解码器使用伪码3400中所示 的缩放运算,将一个半帧运动向量预测值从另一个半帧运动向量预测值导出。示出两个可 能的值集,其中当前半帧是隔行扫描视频帧中的第一半帧的情形在图35的表格3500中示 出,而当前半帧是隔行扫描视频帧中的第二半帧的情形在图36的表格3600中示出。在表 格 3500 和 3600 中,SCALEOPP、SCALESAME1、SCALESAME2、SCALEZ0NE1_X、SCALEZ0NE1_Y、 Z0NE10FFSET_X和Z0NE10FFSET_Y取决于参考帧距离。在一些实现中,使用分数编码来计算用于隔行扫描B-半帧中的正向和反向参考 的参考帧距离。BFRACTI0N语法元素(它用信号表示隔行扫描B-半帧的正向或反向预测模 式宏块,而不只是隔行扫描B-帧的直接模式宏块)用来导出正向和反向参考图片距离,如 以下伪码所示正向参考帧距离(FRFD)=NINT ((BFRACTI0N 分子)/ (BFRACTI0N 分母)* 参考帧距离If (FRFD < 0) then FRFD = 0反向参考帧距离(BRFD)=参考帧距离-FRFD-I (其中NINT是最近整数操作符)BFRACTI0N分子和分母从BFRACTI0N语法元素中解码。元素BFRACTION可用来表 示可在比特流中发送的不同分数(例如在隔行扫描B-半帧的帧级别上)。该分数在0和1 之间的有限离散值集中取值,并在通过其锚形成的间隔内标示B-图片的相对时间位置。对于具有隔行扫描B-半帧的帧中的第二半帧的正向预测和反向预测,编码器/解码器根据图34A和34B中的伪码3400执行运动向量缩放。然而,在一些实现中,执行第 一半帧的反向运动向量预测的编码器/解码器使用如在图48中所示伪码4800中定义的 函数 scaleforopposite_x、scaleforopposite_y> scaleforsame_x> scaleforsame_y。在 一实现中用于第一隔行扫描 B-半帧的 SCALESAME、SCALEOPPU SCALE0PP2、SCALEZ0NE1_X、 SCALEZONE 1_Y>ZONE 10FFSET_X 和 Z0NE10FFSET_Y 在图 49 的表格 4900 中示出。在表格 4900中,变量N和运动向量范围之间的关系与以上参考图35和36和表格1所述的关系相同。或者,参考帧距离用另一种方法计算,或者缩放根据不同算法执行。例如,缩放与N的值无关地执行(即N取为1)。X.具有隔行扫描B-半帧的“自参考”帧具有隔行扫描B-半帧的帧被编码为两个独立(且某种程度上独立编码的)的半 帧。上半帧由帧的偶光栅行(从行0开始)组成,而下半帧由帧的奇光栅行组成。因为“半 帧图片”中的半帧可独立解码,所以它们不需要以任何预先设置顺序发送。例如,编码器可 先发送下半帧再发送上半帧,或反之。在有些实现中,两个半帧的顺序由“先上半帧”的语 法元素表示,该语法元素取决于解码帧的两个半帧的准确时间顺序而为真或假。现有的编码器和解码器已将前后锚帧(例如I-或P-帧)或前后锚帧中的半帧用 作“参考”图片,以执行对当前B-图片的运动补偿。现有的编码器和解码器还限制B-图片 或其任何部分用作任何图片的运动补偿参考。然而,在所述技术和工具的一些实现中,一种 或多种这些“规则”被放松。例如,在一些实现中,第一隔行扫描B-半帧参考来自前后锚图片的第一和第二半 帧。第二隔行扫描B-半帧参考作为“相反极性”半帧的来自当前图片的第一隔行扫描B-半 帧和作为“相同极性”半帧的前一锚帧的相同极性半帧,以及来自下一锚图片的第一和第二 半帧。图50B是示出隔行扫描视频帧B2中两个隔行扫描B-半帧的每一个的参考半帧的 示图。在图50B所示示例中,要解码的第一 B-半帧(在此为上半帧)被允许参考正向(时 间上过去)锚Pl中的两个参考半帧和来自反向(时间上将来)锚P3中的两个参考半帧, 总共为4个参考半帧。B2的要解码的第二隔行扫描B-半帧被允许参考来自同一隔行扫描 视频帧(因而打破了不允许B-图片的各部分用作参考的惯例)的第一半帧和来自前一锚 Pl的一个参考半帧,以及来自将来锚P3的两个半帧。为作比较,图50A示出隔行扫描视频 帧的隔行扫描P-半帧遵守的惯例。实现这些隔行扫描B-半帧参考规则的技术和工具可提供更好的压缩。隔行扫描 视频的半帧编码对于编码高运动是最为有效的,高运动即为在上半帧和下半帧之间有相当 运动时。例如,在该情形中,帧的上(且首先编码的)半帧对于同一帧下半帧中的像素将是 比从前一帧中(来自较远的时间距离)取得的上半帧好得多的预测值。由于它们之间较大 的时间距离,当运动较高时这些时间上将来的预测值提供弱得多的预测。此外,对于时间上 更远的预测值来说闭塞的可能性放大,这导致更多编码昂贵的帧内编码宏块。特别地,实验 证实允许帧的第二个时间隔行扫描B-半帧参考同一帧的第一时间隔行扫描B-半帧可产生 显著的压缩增益。XI.隔行扫描B-半帧中正向模式的位平面编码如以上X节所述,在一些实现中,当前帧的第二已编码隔行扫描B-半帧可参考当 前帧的第一已编码隔行扫描B-半帧。该“自参考”技术在具有高运动的帧的隔行扫描B-半 帧中是有效的,因为当前帧的时间上较近的B-半帧常常是比时间上较远的锚半帧更好的 预测值。当具有隔行扫描B-半帧的帧具有较高运动,且时间上第二隔行扫描B-半帧首选 时间上第一隔行扫描B-半帧作为预测参考时,第二隔行扫描B-半帧中宏块的更有效预测 模式将常常是“正向”模式。
因为隔行扫描B-半帧中的正向模式预测是用于降低比特率的有效工具,所以特 别是在低比特率情形中,减少信号表示开销以降低用信号表示正向模式预测的整体成本是 有利的。因此,在一些实施例中,编码器使用统一的位平面编码技术来编码正向模式预测信 息。例如,编码器编码压缩位平面中的正向模式预测信息,其中位平面中的每个比特关联于 一宏块,且每个比特的值用信号表示该宏块是用正向模式还是用非正向预测模式编码。经压缩位平面可在帧级别、半帧级别或在一些其它级别上发送。与用于隔行扫描B-半帧的其它预测模式相比,位平面编码技术偏向于利用正向模式。例如,如果隔行扫描 B-半帧上的大多数宏块使用正向预测,则编码器通过位平面编码正向/非正向决定,可将 信号表示开销降为每个宏块小于一个比特。图51示出在具有一个或多个位平面编码模式的视频编码器中用于编码隔行扫描 B-半帧的宏块的正向/非正向预测模式决定信息的一种技术5100。图52示出用于解码由 具有一个或多个位平面编码模式的视频编码器编码的正向/非正向预测模式决定信息的 相应技术5200。。参照图51,编码器选择用于编码正向/非正向预测模式决定信息的位平面编码模 式(5110)。在选择编码模式之后,编码器用所选模式来编码正向/非正向预测模式决定信 息(5120)。该编码器在逐个半帧基础上选择位平面编码模式。或者,编码器在一些其它基 础上(例如在序列级别)选择位平面编码模式。或者,如果只使用一种位平面编码模式, 则不进行位平面编码模式的选择。当编码器完成编码正向/非正向预测模式决定信息时 (5130),正向/非正向预测模式决定信息的编码结束。参照图52,解码器确定编码器使用(并用信号表示)的编码正向/非正向预测模 式决定信息的位平面编码模式(5210)。然后该解码器用选定模式解码正向/非正向预测模 式决定信息。该解码器在逐个半帧基础上确定位平面编码模式。或者,解码器在一些其它 基础上(例如在序列级别)确定位平面编码模式。或者,如果只有一种位平面编码模式可 用,则不进行位平面编码模式的选择。当解码器完成解码正向/非正向预测模式决定信息 时(5230),正向/非正向预测模式决定信息的解码结束。对于有关根据若干组合实现来用信号表示和解码各种位平面编码模式的其它细 节,参见以下XIV节。对于有关一般位平面编码的更多细节,参见序列号为10/321,415题 为“Skip Macroblock Coding” (跳过宏块编码)并于2002年12月16日提交的美国专利 申请,其公开内容通过引用结合在此。或者,表示正向/非正向模式信息的比特可未经压缩 地和/或在一些其它级别(例如宏块级别)上发送。如果指示的是非正向预测,则编码器指定该宏块的非正向预测模式(例如反向模 式、直接模式、插值模式、或帧内模式)。在一些实现中,编码器在宏块级别参照VLC表格编 码非正向预测模式,如以下表格2所示。
表格2.运动预测模式VLC表格在表格2所示示例中,反向模式是较佳的非正向预测模式。编码器用1-比特信号 表示反向模式,并用2-比特信号表示直接和插值模式。或者,编码器使用不同代码来表示 不同的预测模式和/或首选一种不同的非正向预测模式。在一些实现中,帧内模式由特定运动向量差值来作信号表示,该值用预测模式是 帧内模式的编码方式来表示。运动向量差值因此用来推断该宏块是帧内编码的,但是按照 惯例编码器将预测类型设置为反向,以便于不会具有任何未定义预测类型。XII.在隔行扫描B-半帧中选择用于直接模式的共处运动向量在一些实现中,半帧编码B-图片中宏块的直接模式运动向量使用特殊逻辑来选 择。对于隔行扫描B-半帧中的当前宏块,如果下一锚图片的相应半帧的共处宏块使用4 个运动向量进行编码,则该逻辑在该共处宏块的最多达四个运动向量中偏向更主要的极性 (例如相同或相反)。一旦选择了用于当前宏块的运动向量,编码器/解码器就可应用缩放 运算以给出直接模式运动向量。在一些实现中,对于隔行扫描B-半帧的直接模式IMV宏块,编码器/解码器基于 具有相同极性的参考半帧(例如时间上的下一 P-半帧)内共处宏块的一个或多个运动向 量,计算用于直接模式缩放的运动向量。如果参考半帧中的共处宏块是IMV宏块,则编码 器/解码器使用单个运动向量来导出隔行扫描B-半帧中宏块的直接模式运动向量。另一 方面,如果参考半帧中的共处宏块是4MV宏块,则编码器/解码器在选择用于导出隔行扫描 B-半帧中宏块的直接模式运动向量的运动向量时考虑该4个运动向量的极性(偏向主要极 性)。在解码隔行扫描B-半帧期间编码器/解码器在需要时可将该选择逻辑应用于参考半 帧中的4MV宏块。或者,编码器/解码器可在解码参考半帧之后应用该选择逻辑,然后仅缓 存要在后来隔行扫描B-半帧解码中使用的值。例如,对于参考半帧中的共处4MV宏块,如果(4者中)来自相同极性半帧的运动 向量数量超过来自相反极性半帧的运动向量数量,则如果相同极性运动向量的数量分别为 4、3、2或1,编码器/解码器可使用四者中值、三者中值、二者中值或相同极性半帧运动向量 的值来计算在直接模式隔行扫描B-半帧解码中使用的运动向量。否则,如果来自相反极 性半帧的运动向量数量超过来自相同极性半帧的运动向量,则编码器/解码器可使用类似 运算来从相反极性半帧的运动向量中得到代表性的运动向量,以用于直接模式的隔行扫描 B-半帧解码。如果共处宏块的四个运动向量的原始集中(不管极性)两个以上运动向量是 帧内编码的,则编码器/解码器可将共处代表性运动向量简单地视为是帧内编码的(即(0, 0))。然而,在一些实现中,隔行扫描B-半帧中的所有帧内MB都被编码为1MV,所以原始的 4个运动向量中的两个以上为帧内编码的情形导致共处代表性运动向量被视为是帧内编码 在实际上不可能。图53中的伪码5300示出对用作隔行扫描B-半帧中直接模式运动向量的基础的 运动向量的选择过程。在一些实现中,该选择过程是产生正向和反向指示直接模式运动向量的缩放运算的前身。XIII.隔行扫描视频帧中的帧内编码B-半帧隔行扫描BI-半帧(或“帧内B-半帧”)是与其参考图片独立编码的半帧。在隔行扫描BI-半帧不可用作预测其它图片的锚的意义上,它们不同于其它帧内半帧(例如隔 行扫描I-半帧)。没有对隔行扫描BI-半帧的图片间依赖性,且它在比特流中的出现不 表示可独立解码分段或图片组的开始。然而,隔行扫描视频帧中的第一半帧如果被编码为 BI-半帧,则可用来预测该帧中可被编码为隔行扫描B-半帧的第二个半帧。这种革新还通 过在许多情形中仅对帧的一半(第一编码半帧)使用帧内编码而不将整个帧编码为内帧或 将两个半帧编码为帧内半帧,来改进整体压缩。在一些实现中,帧可包括两个B-半帧、两个 BI-半帧、或一个B-或一个BI-半帧。使用隔行扫描BI-半帧而不使用隔行扫描I-半帧是有理由的。一个理由是避免 牺牲时间可缩放性。例如,当解码器提交数字视频且需要立即丢弃一些图片以跟上处理需 求时,它可寻找它可能丢弃的半帧序列。如果序列中的帧内半帧变成关键半帧,则解码器将 被迫解码它们以用作其它半帧的参考,并且不能丢弃它们。然而,如果序列中的帧内半帧被 编码为BI-半帧,则解码器将仍然有丢弃它们的选择,而不损害后续运动补偿。在隔行扫描BI-半帧更有效地用信号表示用于帧内编码和解码的语法元素的意 义上,隔行扫描BI-半帧不同于具有帧内宏块的隔行扫描B-半帧,因为BI-半帧内运动补 偿相关元素(或信号表示其缺失的元素)可被消除。换言之,当在视频序列中的帧间半帧 预测中断点上(例如因为场景变化或复杂运动)编码隔行扫描B-半帧时,使用隔行扫描 BI-半帧(而不是常规B-半帧)的理由产生。常常这种半帧中的大多数宏块将需要编码为 帧内宏块。在该情形中,根据比特率来看,要将整个B-半帧编码为一个BI-半帧常常比发 送该半帧中每个宏块的预测模式信息要容易。当对隔行扫描B-半帧的较好预测或运动补 偿不可能时,它可被编码为BI-半帧。在一些实现中,编码器可用信号表示比特流中作为图片类型的可能值之一的 BI-半帧的出现。或者,BI-半帧的出现可用一些其它方法来指示。XIV.组合实现现在描述对比特流语法、语义和解码器的详细组合实现,以及与主要组合实现有 细微差异的另一组合实现。A.比特流语法在各种组合实现中,用于隔行扫描B-图片的数据以具有多个层(例如,序列、帧、 半帧、宏块、块和/或子块层)的比特流形式呈现。对于具有隔行扫描B-半帧和/或BI-半帧的隔行扫描视频帧,帧级别比特流元 素如图54所示。每个帧的数据包括帧头,随后是半帧层的数据(示为每个半帧的重复 “FieldPicLayer”元素)。组成隔行扫描B-半帧和BI-半帧的半帧头的比特流元素分别如 图55和56所示。组成隔行扫描B-半帧(帧内、1MV、或4MV宏块)和BI-半帧的宏块层的 比特流元素分别如图57和58所示。对于隔行扫描B-帧,帧级别比特流元素如图59所示。每个帧的数据包括帧头,随 后是宏块层的数据。组成隔行扫描B-帧的宏块层的比特流元素(帧内或各种帧间类型宏 块)如图60所示。
以下小节描述帧、半帧和宏块层中的选定比特流元素,它们与相关于双向预测隔 行扫描图片的信号表示相关。尽管选定比特流元素在特定层的上下文中描述,但一些比特 流元素可在一个以上层中使用。1.选定帧层元素图54是示出包含隔行扫描B-半帧或BI-半帧(或可能其它类隔行扫描半帧)的 帧的帧级别比特流语法的示图。图59是示出隔行扫描B-帧的帧级别比特流语法的示图。 特定的比特流元素如下所述。帧编码模式(FCM)(可变大小)FCM是用来表示图片编码类型的可变长度代码字[“VLC”]。FCM具有如以下表格 3所示的帧编码模式的值。表格3.帧编码模式VLC 半帧图片类型(FPTYPE) (3个比特)FPTYPE是包括隔行扫描P-半帧、隔行扫描1_半帧、隔行扫描B-半帧和/或隔行 扫描BI半帧的帧的帧头中提供的3-比特语法元素。FPTYPE具有隔行扫描视频帧中半帧类 型的不同组合的值,如下表4所示。表格4.半帧图片类型FLC 参考距离(REFDIST)(可变大小)REFDIST是可变大小的语法元素。该元素表示当前帧和参考帧之间帧的数量。表 格5示出用来编码REFDIST值的VLC。表格5. REFDISTVLC 表格 表格5中的最后一行表示用来表示大于2的参考帧距离的代码字。这些被编码为 (二进制)11,随后是N-3 ls,其中N是参考帧距离。代码字中最后一个比特为0。例如N = 3, VLC 代码字=110,VLC 大小=3N = 4,VLC 代码字=1110,VLC 大小=4N = 5, VLC 代码字=11110, VLC 大小=5图片类型(PTYPE)(可变大小)PTYPE是隔行扫描B-帧(或其它类型的隔行扫描帧,诸如隔行扫描1_帧、或隔行 扫描P-帧)的帧头中提供的可变大小的语法元素。PTYPE具有不同帧类型的值,如以下表 格6所示。表格6.图片类型VLC 如果PTYPE指示该帧被跳过,则该帧被视为与其参考帧等同的P帧。被跳过帧的重构在概念上等同于复制该参考帧。被跳过帧意思是没有该帧的其它数据被传送。B-帧直接模式MB比特语法元素(DIRECTMB)(可变大小)DIRECTMB语法元素使用位平面编码来表示B图片(在此为隔行扫描B-帧)中以 直接模式编码的宏块。DIRECTMB语法元素还可用信号表示该直接模式是用原始模式来作 信号表示的,在该情形中直接模式在隔行扫描B-帧的宏块的宏块级别上作信号表示。经扩展的MV范围标记(MVRANGE)(可变大小)MVRANGE是在序列层EXTENDED_MV比特被设置为1时提供的可变大小的语法元素。 MVRANGE VLC表示运动向量范围。经扩展的差值MV范围标记(DMVRANGE)(可变大小)DMVRANGE是如果序列层语法元素EXTENDED_DMV = 1时提供的可变大小的语法元素,该DMVRANGE VLC表示运动向量差值范围。宏块模式表格(MBM0DETAB) (2或3个比特)MBM0DETAB语法元素是固定长度的字段。对于隔行扫描P_半帧,MBM0DETAB是3 比特值,表示8个哈夫曼表格的哪一个用来解码宏块层中的宏块模式语法元素(MBMODE)。运动向量表格(MVTAB) (2或3个比特)MVTAB语法元素是2或3个比特的值。对于NUMREF = 1的隔行扫描P-半帧,MVTAB 是表示8个隔行扫描哈夫曼表格的哪一个用来解码运动向量的数据的3比特语法元素。2MV块模式表格(2MVBPTAB) (2个比特)2MVBPTAB语法元素是2个比特的值,它表示4个哈夫曼表格的哪一个用来解码 2MV半帧宏块中2MV块模式(2MVBP)语法元素。4MV块模式表格(4MVBPTAB) (2个比特)4MVBPTAB语法元素是2个比特的值,它表示4个哈夫曼表格的哪一个用来解码 4MV半帧宏块中4MV块模式(4MVBP)语法元素。在另一组合实现中,图片类型信息在隔行扫描B-半帧的半帧级别的开始处,而不 是在包括隔行扫描B-半帧的隔行扫描视频帧的帧级别上用信号表示,并可略去参考距离。2.选定半帧层元素图55是示出组合实现中隔行扫描B-半帧的半帧级别比特流语法的示图。特定比 特流元素如下所述。运动向量模式(MVMODE)(可变大小或1比特)MVMODE语法元素用信号表示4种运动向量编码模式之一,或一种亮度补偿模式 (还有某些图片类型的较少可能)。若干后续元素提供附加运动向量模式和/或亮度补偿 fn息οB-半帧正向模式MB比特语法元素(F0RWARDMB)(可变大小)FORffARDMB语法元素将位平面编码用来表示用正向模式编码的B-半帧中宏块。FORWARDMB语法元素还用信号表示,正向模式用原始模式来作信号表示,在该情形中正向/ 非正向模式决定在宏块级别上作信号表示。图56是示出组合实现中隔行扫描B-半帧的半帧级别比特流语法的示图。在该组 合实现中,隔行扫描BI-半帧的半帧级别比特流语法使用与隔行扫描I-半帧一样的语法元素。3.选定宏块层元素图57是示出组合实现中隔行扫描B-半帧的宏块的宏块级别比特流语法的示图。 图60是示出组合实现中隔行扫描B-帧的宏块的宏块级别比特流语法的示图。特定比特流 元素如下所述。宏块的数据包括宏块头,随后是块层数据。宏块模式(MBMODE)(可变大小)MBMODE语法元素指示宏块类型(例如隔行扫描B-半帧的1MV、4MV或帧内),以及 CBP标记和运动向量数据的出现。正向B半帧编码模式(F0RWARDBIT) (1比特)FORffARDBIT是如果半帧级别语法元素FORWARDMB表示使用了原始模式时在隔行 扫描B-半帧宏块中提供的1-比特语法元素。如果F0RWARDBIT = 1,则宏块使用正向模式编码。B宏块运动预测类型(BMVTYPE)(可变大小)BMVTYPE是隔行扫描B-帧宏块和隔行扫描B-半帧宏块中提供的可变大小语法元 素,它表示该宏块使用正向、反向还是插值预测。如表格7所示,对于隔行扫描B-帧的宏块, BFRACTION以及BMVTYPE的值确定使用哪一种类型。 在隔行扫描B-半帧中,如果宏块模式不是正向(由FORWARDMB或F0RWARDBIT语 法元素所示)且不使用4MV,则发送BMVTYPE。在该情形中,BMVTYPE用于用信号表示该B宏 块是反向、直接、还是插值的。这是简单的VLC,其中反向=0,直接=10,插值=11。在宏 块模式不是正向且使用4MV的情形中,BMVTYPE是反向的,因为只有正向和反向模式被允许 用于4MV。插值MV 提供(INTERPMVP) (1 比特)INTERPMVP是如果半帧级别语法元素BMVTYPE表示该宏块类型为插值时在B-半帧 中提供的1-比特语法元素。如果INTERPMVP = 1,则插值MV出现,否则它不出现。B宏块运动向量1 (BMVl)(可变大小)BMVl是差分编码宏块的第一运动向量的可变大小的语法元素。B宏块运动向量2 (BMV2)(可变大小)BMV2是如果使用插值模式时隔行扫描B-帧宏块和隔行扫描B-半帧宏块中提供的 可变大小的语法元素。该语法元素差分地编码宏块的第二运动向量。
4MV 块模式(4MVBP) (4 个比特)该4MVBP语法元素指示4个亮度块的哪一个包含非零运动向量差值,它的使用在 下面详细描述。 块级别运动向量数据(BLKMVDATA)(可变大小)BLKMVDATA是包含该块的运动信息并在4MV宏块中提供的可变大小的语法元素。半帧变换标记(FIELDTX) (1比特)FIELDTX是在隔行扫描B-帧的帧内编码宏块中提供的1比特语法。该语法元素指 示宏块是帧编码还是半帧编码(基本上是宏块的内部组织)。FIELDTX = 1指示该宏块是 半帧编码的。否则,宏块是帧编码的。在帧间编码宏块中,该语法元素可从MBMODE推断。直接B帧编码模式(DIRECTBBIT) (1比特)DIRECTBBIT是如果帧级别语法元素DIRECTMB表示使用原始模式时在隔行扫描 B-帧宏块中提供的1-比特语法元素。如果DIRECTBBIT = 1,则宏块使用直接模式编码。B 帧 MV 切换(MVSW) (1 比特)MVSff是如果MB为半帧模式以及如果BMVTYPE为正向或反向时在隔行扫描B-帧宏块中提供的1-比特语法元素。如果MVSW = 1,则MV类型和预测类型在从上半帧去到下半 帧时从正向变成反向(或者从反向变成正向)。两运动向量块模式(2MVBP)(可变大小)2MVBP是在隔行扫描B-帧宏块中提供的可变大小语法元素。如果MBMODE语法元 素指示该宏块包含一个运动向量,并且如果该宏块是插值宏块,则提供该语法元素。在该情 形中,2MVBP指示提供两个运动向量(正向和反向运动向量)的哪一个。 运动向量数据(MVDATA)(可变大小)MVDATA是编码宏块的运动向量差值的可变大小语法元素,它的解码在下面详细描 述。图58是示出组合实现中隔行扫描BI-半帧的宏块级别比特流语法的示图。在组 合实现中,隔行扫描BI-半帧的宏块级别比特流语法使用与隔行扫描I-半帧的相同语法元B.解码隔行扫描的B-半帧以下各节描述用于解码组合实现中隔行扫描B-半帧的过程。1.帧/半帧层解码隔行扫描B-半帧可以是两种类型之一 IMV或混合MV。在IMV隔行扫描B-半帧中,取决于宏块的预测类型(BMVTYPE),用0、1或2个运动 向量来表示各预测块的位移。当BMVTYPE等于DIRECT(直接)时,推断出正向和反向运动 向量,并且不显式地用信号表示其它的运动向量。当BMVTYPE是INTERPOLATED (插值)时, 解码两个运动向量正向和反向。在正向和反向情形中,只解码一个运动向量。IMV模式通 过MVMODE图片层语法元素来用信号表示。在混合MV隔行扫描B-半帧中,每个宏块可被编码为IMV或4MV宏块。在4MV宏 块中,4个亮度块的每一个都具有与之相关联的运动向量。此外,4MV宏块只可关联于隔行 扫描B-半帧中的正向或反向预测类型(BMVTYPE)。每个宏块的IMV或4MV模式通过每个宏 块上的MBMODE语法元素来指示。混合MV模式通过MVMODE图片层语法元素来用信号表示。
2.宏块层解码隔行扫描B-半帧中的宏块可以是三种可能类型之一 1MV、4MV和帧内。此外,宏块可以是四种预测类型(BMVTYPE)之一正向、反向、直接或插值。宏块类型通过宏块层中的 MBMODE语法元素用信号表示。预测类型通过帧级别位平面F0RWARDMB和宏块级别BMVTYPE 语法元素的组合用信号表示,其中帧级别位平面F0RWARDMB用信号表示每个宏块的正向/ 非正向,而宏块级别BMVTYPE语法元素则在预测类型为非正向的情形中用信号表示。以下各节描述IMV和4MV类型、以及如何用信号表示它们。隔行扫描B-半帧中的IMV宏块IMV宏块可出现在IMV和混合MV隔行扫描B-半帧中。在IMV宏块中,单个运动向 量表示宏块中全部6个块的当前和参考图片之间的位移。对于IMV宏块,宏块层中的MBMODE 语法元素表示三点1)该宏块类型为IMV2)是否出现CBPCY语法元素3)是否出现BMVl语法元素如果MBMODE语法元素表示BMVl语法元素出现,则BMVl语法元素出现在相应位置 的宏块层中。BMVl语法元素编码运动向量差值。运动向量差值与运动向量预测值相组合, 以重构运动向量。如果MBMODE语法元素表示BMVl语法元素未出现,则运动向量差值被取 为0且因此运动向量等于运动向量预测值。如果MBMODE语法元素表示CBCPY语法元素出现,则CBCPY语法元素出现在相应位 置的宏块层中。CBCPY语法元素表示6个块的哪一个在块层上编码。如果MBMODE语法元素 表示CBCPY语法元素未出现,则CBCPY被取为等于0且对宏块中6个块的任一个都不出现 块数据。此外,如果宏块类型为IMV且宏块的预测类型是插值,则编码器使用INTERPMVP语 法元素来用信号表示是否出现第二个运动向量差值BMV2。如果出现,则解码器在BMVl之后 立即解码BMV2。否则,BMV2的运动向量差值被取为0,而第二个运动向量等于运动向量预 测值。当预测类型是插值时,BMVl对应于正向运动向量而BMV2对应于反向运动向量。隔行扫描B-半帧中的4MV宏块4MV宏块仅可出现在混合MVB-半帧图片中,且限于正向和反向预测类型。在4MV 宏块中,4个亮度块的每一个都具有关联运动向量。色度块的位移从4个亮度运动向量中导 出。在混合MV隔行扫描B-半帧中,4MV宏块仅可关联于正向和反向预测类型。对于4MV宏块,宏块层中的MBMODE语法元素表示三点1)该宏块类型为4MV2)是否出现CBPCY语法元素3)是否出现4MVBP语法元素4MVBP语法元素表示4个亮度块的哪一个包含非零运动向量差值。该4MVBP语法元 素解码到0到15的值。对于4MVBP中4个比特位置的每一个,值0表示未出现该块的运动 向量差值(BLKMVDATA)且运动向量差值取为0。值1表示该块的运动向量差值(BLKMVDATA) 出现在相应位置中。例如,如果4MVBP解码为值100 ( 二进制),则比特流包含块0和1的blkmvdata并且未出现块2禾π 3的blkmvdata。如果mbmode语法元素表示4mvbp语法元素未出现,则假设出现全部4个亮度块的 运动向量差值数据(blkmvdata)。取决于mvmode语法元素是表示混合mv还是全_1mv,mbmode如下用信号表示信 息。以下表格8示出mbmode元素如何用信号表示有关全-imv图片中宏块的信息。表格8.全-imv图片中的宏块模式 以下表格9示出mbmode元素如何用信号表示有关混合mv图片中宏块的信息。表格9.混合imv图片中的宏块模式 8个编码表格之一用于用信号表示mbm0de。所用特定表格通过mbm0detab语法元素用信号表示。以下各节描述预测类型解码和直接模式运动向量的解码。隔行扫描B-半帧中的预测类型解码(BMVTYPE)预测类型根据以下规则进行解码。如果图片级别位平面F0RWARDMB表示宏块是正 向类型,则该宏块的预测类型被设置为正向。如果F0RWARDMB元素被编码为原始,则编码器 /解码器在宏块级别上使用一附加比特F0RWARDBIT,来判定预测类型是否为正向。如果预测类型为非正向,且如MBMODE语法元素用信号表示的该宏块使用4MV (仅 在混合MV B图片中可能),则解码器可直接推断预测类型为反向,因为只有正向和反向类 型可与4MV模式相关联。否则,解码器显式地解码BMVTYPE语法元素。解码隔行扫描B-半帧中的直接模式运动向量为了解码隔行扫描B-半帧中的直接模式运动向量,解码器首先缓存来自先前解 码(即时间上在将来)的锚(I或P)图片的运动向量。这样,解码器将所缓存的对应于上 半帧的运动向量用作预测值,以便于计算上部B-半帧的直接模式运动向量,并使用对应于 下半帧的运动向量计算下部B-半帧的运动向量。例如,半帧z(z =上/下)中的宏块(X, y)将参考从先前解码I或P半帧ζ (即与当前半帧相同极性的锚半帧中的共处宏块)的宏 块(x,y)中缓存的运动向量。如果所缓存的来自锚图片的运动向量为帧内运动向量(诸如当先前解码半帧ζ是 I-半帧时),或者如果锚图片是P-半帧但宏块(X,y)是帧内编码的,则解码器将经缓存的 运动向量视为(0,0)。如果共处宏块为1MV,则解码器使用该运动向量。如果共处宏块为 4MV,则解码器将图53中伪码5300所述的逻辑用来计算运动向量预测值。在伪码5300 中,SelectDirectModeMVFromColocatedMB 导出在直接模式计算中 使用的运动向量预测值。解码器可缓存来自先前解码的锚图片的所有运动向量,并在解码 B-半帧期间应用以上直接模式,或者解码器在解码锚半帧的同时可应用以上直接模式规贝U,并缓存用于B-半帧的结果运动向量。使用以上获得的运动向量,解码器应用缩放逻辑(图19中的SCale_DireCt_MV)。 Scale_Direct_MV获得正向和反向指示运动向量。Scale_Direct_MV可导致指向上下半帧 的正向和反向运动向量。这是有效的,因为直接运动向量由编码器评估并仅在它们给出好 预测时选择,还因为隔行扫描B-半帧在正向和反向方向上都使用两个参考半帧。在另一实现中,可使用产生以直接模式缩放的运动向量的任何其它过程,包括不 涉及任何缓存的过程,它在存储器受限设备中会有用(例如使用随机数发生器来模拟偏零 拉普拉斯分布)。这种过程仍将起作用,因为好的编码器将丢弃对直接模式运动向量的较差 推测,而在比特流中保留更为准确的推测。3.运动向量解码过程以下各节描述组合实现中隔行扫描B-半帧的块和宏块的运动向量解码过程。填充正向和反向预测上下文正向和反向运动向量被分开缓存,并分别用来预测正向和反向运动向量。例如在 以上X节描述了单独缓冲区在正向和反向上下文中的使用。用于选择运动向量预测值的技 术在III节背景技术、III节详细说明、以及说明书的其它部分中描述。在解码正向运动向量期间用预测运动向量填充反向缓冲区(“缺少方向”缓冲区)时(或在解码反向运动向量期间填充正向缓冲区时),要添加另外两个细节。通常,编码器 /解码器可使用运动向量类型信息(例如IMV等)、以及先前解码的运动向量的极性来形成 预测。然而,在“空穴填充”情形中,因为编码器/解码器实际上并不解码缺少方向类型的 运动向量,编码器/解码器并不具有运动向量类型信息或极性信息(例如相同极性或相反 极性)。在该组合实现中,编码器/解码器将运动向量类型设置为1MV,并将主半帧运动向 量选为预测值。图47中的伪码4700描述该组合实现中的极性选择过程。对于帧内编码宏块,“帧内运动向量”用来填充正向和反向运动预测平面。“帧内运动向量”的任何一致表示可由解码器实现来选择。例如,如果运动向量被存储在2-字节短 数组中,则“帧内运动向量”可被表示为唯一的大常数,它被填充到运动向量数组中来表示 该宏块被编码为帧内宏块。B-半帧中的正向运动向量预测正向参考帧距离从BFRACTI0N语法元素和REFDIST语法元素中计算。正向运动向 量预测如以上χ节所述地进行。B-半帧中的反向运动向量预测正向参考帧距离从BFRACTI0N语法元素和REFDIST语法元素中计算。正向运动向 量预测如以上χ节所述地进行。解码运动向量差值BMVl、BMV2或BLKMVDATA语法元素编码宏块或宏块中各块的运动信息。IMV宏块 具有BMVl和BMV2语法元素,且4MV宏块可具有0到4个之间的BLKMVDATA元素。当预测类型(BMVTYPE)为插值时,BMVl对应于正向而BMV2对应于反向运动向量残差。以下各节描述对于应用于B-图片的双参考情形如何计算运动向量差值。双参考半帧图片中的运动向量差值双参考半帧图片在使用半帧图片对隔行扫描帧的编码中出现。序列的每个帧都被 分成两个半帧,且每个半帧使用实际上逐行扫描代码路径来编码。在具有两个参考半帧的半帧图片中(诸如具有隔行扫描B-半帧的图片),宏块层 中的每个MVDATA或BLKMVDATA语法元素联合编码三种信息1)水平运动向量差值分量,2) 垂直运动向量差值分量,3)使用主还是非主预测值,即两个半帧的哪一个被运动向量参考。MVDATA或BLKMVDATA语法元素是可变长度的哈夫曼代码字,然后是一固定长度代 码字。哈夫曼代码字的值确定固定长度代码字的大小。图片层中的MVTAB语法元素指定用 来解码可变大小代码字的哈夫曼表格。图61A中的伪码6100示出如何解码运动向量差值 和主/非主预测值信息。值predictor_flag、dmv_x 和 dmv_y 在图 61A 中的伪码 6100 中计算。伪码 6100 中的各个值定义如下dmv_x 运动向量水平差值分量,dmv_y 运动向量垂直差值分量,k_x, k_y 长运动向量的固定长度,k_x和k_y取决于由MVRANGE符号定义的运动向量范围。
表格 10.由 MVRANGE 指定的 k_x 和 k_y
extend_x 水平运动向量差值的扩展范围,extend_y 垂直运动向量差值的扩展范围,extend_x和extend_y从DMVRANGE图片半帧语法元素中导出。如果DMVRANGE表示 使用水平分量的扩展范围,则extend_x = 1。否则,extend_x = 0。类似地,如果DMVRANGE 表示使用垂直分量的扩展范围,则eXtend_y = 1。否则,extend_y = 0。变量prediCt0r_flag是表示使用主还是非主运动向量预测值的二进制标记(0 = 使用主预测值,1 =使用非主预测值)。Offsetjable和Sizejable数组被定义为如图61A 所示。图61B中的伪码6110示出在另一组合实现中如何解码双参考半帧的运动向量差 值。伪码6110用不同方法解码运动向量差值。例如,伪码6110略去经扩展运动向量差值 范围的处理。运动向量预测值运动向量通过将前面部分中计算的运动向量差值添加到运动向量预测值中来计 算。以下各节描述在该组合实现中如何计算IMV-和混合MV隔行扫描B-半帧中宏块的运 动向量预测值。IMV隔行扫描B-半帧中的运动向量预测值图5A和5B是示出被视作用于IMV宏块的候选运动向量预测值的宏块的位置的示 图。候选预测值从左边、上方和右上方宏块中取得,除了宏块是行中最后一个宏块的情形。 在该情形中,预测值B从左上方宏块而不是从右上方中取得。对于帧为一个宏块宽的特定 情形,预测值总是预测值A(顶部预测值)。当前宏块在首行中的特定情形(没有A或B预 测值、或者根本没有预测值)在以上参照图33A-33F以及在以下参照图62A-62F解决。混合MV隔行扫描B-半帧中的运动向量预测值图6A-10示出被视作用于混合MV隔行扫描B-半帧中的IMV或4MV宏块的运动向 量的候选运动向量的块或宏块的位置。隔行扫描B-半帧中的主和非主MV预测值对于每个帧间编码的宏块,导出两个运动向量预测值。一个来自主半帧而另一个 来自非主半帧。主半帧被视为包含邻域中候选运动向量预测值的大部分实际值的半帧。在 不分上下的情形中,相反半帧的运动向量预测值被视为是主预测值(因为它在时间上较为 接近)。帧内编码宏块在主/非主预测值的计算中不作考虑。如果全部候选预测值宏块都是帧内编码的,则主和非主运动向量预测值都被设置为O且主预测值被视为来自相反半帧。计算隔行扫描B-半帧中的运动向量预测值对块或宏块的每个运动向量计算两个运动向量预测值-每个参考一个。图62A-62F中的伪码6200描述在组合实现中如何对双参考情形计算运动向量预测值。(图 33A-33F中的伪码3300描述在另一实现中如何对双参考情形计算运动向量预测值。)在双 参考图片中,当前半帧可参考两个最新半帧。一个预测值用于相同极性的参考半帧,而另一 个用于相反极性的参考半帧。重构隔行扫描B-半帧中的运动向量以下各节描述如何重构IMV和4MV宏块的亮度和色度运动向量。在重构运动向量 之后,它随后可用作邻域运动向量以预测相邻宏块的运动向量。该运动向量将具有“相同” 或“相反”的关联极性,并可用来导出另一半帧极性的运动向量预测值,用于运动向量预测。隔行扫描B-半帧中的亮度运动向量重构在所有情形(1MV和4MV宏块)中,亮度运动向量通过如下将差值添加到预测值来 重构mv_x = (dmv_x+predictor_x)smod range_xmv_y = (dmv_y+predictor_y)smod range_y模运算“smod”是定义如下的有符号模A smod b = ((A+b) % (2*b)) _b这确保重构向量是有效的。(A smod b)位于_b和b_l之间。range_x和range_ y取决于MVRANGE。因为隔行扫描B-半帧图片使用两个参考图片,在解码运动向量差值之后导出的 predictor_flag与从运动向量预测导出的dominantpredictor值相组合,以确定哪个半帧 被用作参考。图63中的伪码6300描述如何确定参考半帧。在IMV宏块中,对于组成宏块的亮度分量的4个块将有单个运动向量。如果MBMODE 语法元素表示没有MV数据在宏块层中出现,则dmv_x = 0且dmv_y = 0 (mv_x = predictor, χ 禾口 mv_y = predictor_y)。在4MV宏块中,宏块中每个帧间编码亮度块将具有它自己的运动向量。因此在每 个4MV宏块中将有0到4个亮度运动向量。如果4MVBP语法元素表示未出现块的运动向量 信息,贝1Ji亥块的 dmv_x = 0 且 dmv_y = 0 (mv_x = predictor_x 禾口 mv_y = predictor_y)。色度运动向量重构色度运动向量从亮度运动向量中导出。此外,对于4MV宏块,对要将色度块编码为 帧间块还是帧内块的决定是基于亮度块或半帧的状态作出的。C.解码隔行扫描P-帧在描述组合实现中用于解码隔行扫描B-帧的过程之前,描述用于解码隔行扫描 P"帧的过程。描述用于解码隔行扫描B-帧的过程的小节将参照本节中讨论的各个概念进 行。1.隔行扫描P-帧的宏块层解码在隔行扫描P-帧中,每个宏块可用使用一个或四个运动向量的帧模式、或使用两 个或四个运动向量的半帧模式作运动补偿。帧间编码的宏块不包含任何帧内块。此外,运动补偿之后的残差可用帧变换模式或半帧变换模式来编码。更具体地,如果用半帧变换模 式编码残差,则残差的亮度分量根据各个半帧来重新排列,而在帧变换模式中当色度分量 保持不变时残差保持不变。宏块也可被编码为帧内宏块。运动补偿可被限制为不包括四个运动向量(半帧/帧),并且它通过4MVSWITCH用 信号表示。每个宏块的运动补偿和残差编码的类型通过MBMODE和SKIPMB联合表示。MBMODE 根据4MVSWITCH采用不同的表格集。隔行扫描P-帧中的各个宏块被分成5种类型1MV、2半帧MV、4帧MV、4半帧MV和 帧内。前四类宏块是帧间编码的,而最后一类表示该宏块是帧内编码的。宏块类型由宏块 层中的MBMODE语法元素以及跳过比特用信号表示。MBMODE对不同类型的宏块共同编码宏 块类型以及有关该宏块的各条信息。用信号表示跳过的宏块SKIPMB字段表示宏块的跳过条件。如果SKIPMB字段为1,则表示要跳过当前宏 块,并且在SKIPMB字段之后没有发送其它信息。该跳过条件暗示当前宏块是具有0差值运 动向量的1MV(即,该宏块是使用其IMV运动预测值做运动补偿的),并且没有经编码的块 (CBP = 0)。另一方面,如果SKIPMB字段不是1,则MBMODE半帧被解码为表示宏块的类型和有 关当前宏块的其它信息,诸如以下小节中描述的信息。用信号表示宏块模式有15种通过MBMODE表示的可能事件;MBMODE共同指定宏块的类型(1MV、4帧MV、 2半帧MV、4半帧MV、或帧内)、帧间编码宏块的变换类型(即半帧或帧或未编码的块)、以 及是否有IMV宏块的运动向量差值。设<MVP>表示用信号表示是否有非零IMV运动向量差值的二进制事件。设〈Field/ Frame transform〉(〈半帧/帧变换 >)表示用信号表示宏块的残差是帧变换编码、半帧变换 编码、还是零编码块(即CBP = 0)的三元事件。MBMODE共同用信号表示以下事件集MBMODE = {<1MV,MVP,半帧/帧变换>,<2半帧MV,半帧/帧变换>,<4中贞MV,半 帧/帧变换>,<4半帧MV,半帧/帧变换 >,〈帧内>} ;<1MV,MVP = 0,CBP = 0>的事件除外,它通过跳过条件用信号表示。对于帧间编码宏块,当MBMODE中的半帧/帧变换事件表示无编码块时,不解码 CBPCY语法元素。另一方面,如果MBMODE中的半帧/帧变换事件表示半帧或帧变换时,则解 码CBPCY。所解码事件〈半帧/帧变换〉被用来设置标记FIELDTX。如果该事件表示宏块是 半帧变换编码的,则FIELDTX被设置为1。如果该事件表示宏块是帧变换编码的,则FIELDTX 被设置为0。如果该事件表示0编码块,则FIELDTX被设置为与运动向量相同的类型,即如 果它是FIELDMV则FIELDTX被设置为1,且如果它是FRAMEMV则被设置为0。对于非IMV的帧间编码宏块,发送表示零差值运动向量事件的另一字段。在2半 帧MV宏块的情形中,发送表示两个运动向量的哪一个包含非零运动向量差值的2MVBP字 段。类似地,发送表示四个运动向量的哪一个包含非零运动向量差值的4MVBP字段。对于帧内编码宏块,半帧/帧变换和零编码块在各个字段中编码。2.对隔行扫描P-帧的运动向量解码隔行扫描P-帧的运动向量预测值
计算当前宏块的运动向量预测值的过程包括两个步骤。首先,当前宏块的三个候选运动向量从其相邻宏块中收集。其次,当前宏块的运动向量预测值从候选运动向量集中 计算。图40A-40B示出从中收集候选运动向量的相邻宏块。候选运动向量的收集顺序是重 要的。在该组合实现中,收集顺序总是从A开始、继续到B、并在C结束。注意,如果相应块 在帧边界之外或者相应块是不同片的一部分,则候选预测值被视为不存在。因而,不跨片边 界执行运动向量预测。以下各节描述是否收集不同类型宏块的候选运动向量,以及如何计算运动向量预 测值。IMV候选运动向量在该组合实现中,图64中的伪码6400被用来收集该运动向量的最多三个候选运
动向量。4帧MV候选运动向量对于4帧MV宏块,对于当前宏块中四个帧块运动向量的每一个,收集来自相邻块 的候选运动向量。在该组合实现中,图65中的伪码6500用来收集左上帧块运动向量的最 多三个候选运动向量。图66中的伪码6600用来收集右上帧块运动向量的最多三个候选运 动向量。图67中的伪码6700用来收集左下帧块运动向量的最多三个候选运动向量。图68 中的伪码6800用来收集右下帧块运动向量的最多三个运动向量。2半帧MV候选运动向量的导出对于2半帧MV宏块,对于当前宏块中两个帧运动向量的每一个,收集来自相邻块 的候选运动向量。图69中的伪码6900用来收集上半帧运动向量的最多三个候选运动向量。 图70中的伪码7000用来收集下半帧运动向量的最多三个候选运动向量。4半帧MV候选运动向量的导出对于4半帧MV宏块,对于当前宏块中四个半帧块的每一个,收集来自相邻块的候 选运动向量。图71中的伪码7100用来收集左上半帧块运动向量的最多三个候选运动向量。 图72中的伪码7200用来收集右上半帧块运动向量的最多三个候选运动向量。图73中的 伪码7300用来收集左下半帧块运动向量的最多三个候选运动向量。图74中的伪码7400 用来收集右下半帧块运动向量的最多三个候选运动向量。平均半帧运动向量给定两个半帧运动向量(MVX1, MVY1)和(MVX2,MVY2),用来形成候选运动向量 (MVXa, MVYa)的平均运算是MVXa = (MVX^MVX2+!) >> 1 ;MVXa = (MVY^MVY2+!) >> 1 ;从候选运动向量中计算帧的MV预测值本节描述给定一个候选运动向量集如何计算帧运动向量的运动向量预测值。在 该组合实现中,运算对计算4帧MV宏块中4帧块运动向量的每一个的预测值相同。图75中的伪码7500描述如何计算帧运动向量的运动向量预测值(PMVx,PMVy)。 在伪码7500中,TotalValidMV表示候选运动向量集中运动向量的总数(TotalValidMV = 0,1,2或3),且ValidMV数组表示候选运动向量集中的运动向量。从候选运动向量中计算半帧的MV预测值
本节描述给定一个候选运动向量集如何计算半帧运动向量的运动向量预测值。 运算对计算2半帧MV宏块中2个半帧运动向量的每一个、或4半帧MV宏块中4个半帧块 运动向量的每一个的预测值相同。首先,候选运动向量被分成两个集,其中一个集只包含指向与当前半帧相同的半帧的候选运动向量,而另一个集包含指向相反半帧的候选运动向量。假设候选运动向量在 1/4像素单元中表示,编码器或解码器可通过对其y_分量的以下检查,来检查候选运动向 量是否指向相同半帧if (ValidMVyM) {ValidMV指向相反半帧。}else{ValidMV指向相同半帧。}图76中的伪码7600描述如何计算半帧运动向量的运动向量预测值(PMVx,PMVy)。 在伪码7600中,SameFieldMV和OppFieldMV表示两个候选运动向量集,而NumSameFieldMV 和NumOppFieldMV表示属于每个集的候选运动向量的数量。每个集中的候选运动向量的顺 序从候选A (如果它存在)开始,然后是候选B (如果它存在),再后是候选C (如果它存在)。 例如,如果SameFieldMV候选运动向量集只包含候选B和候选C,则SameFieldMV
是候选 B0解码运动向量差值MVDATA语法元素包含宏块的运动向量差值信息。取决于运动补偿的类型和每个宏块上用信号表示的运动向量块模式,每个宏块最多可有四个MVDATA语法元素。更具体地,·对于IMV宏块,取决于MBMODE中的MVP字段可出现0或1个MVDATA语法元素。·对于2半帧MV宏块,取决于2MVBP可出现0、1、或2个MVDATA语法元素。 对于4帧/半帧MV宏块,取决于4MVBP可出现0、1、2、3或4个MVDATA语法元在该组合实现中,运动向量差值用与隔行扫描P-半帧的单参考半帧运动向量差 值相同的方法来解码。(图77A中的伪码7700示出如何解码单参考半帧的运动向量差值。 图77B中的伪码7710示出在另一组合实现中如何解码单参考半帧的运动向量差值。伪码 7710用一种不同方法解码运动向量差值。例如,伪码7710略去对经扩展的运动向量差值范 围的处理。)重构运动向量给出运动向量差值dmv,亮度运动向量通过如以上XV. B. 3节中所述的将差值添加 到预测值中来重构。给定亮度帧或半帧运动向量,导出相应的色度帧或半帧运动向量来补 偿Cb/Cr块的一部分或全部。图78中的伪码7800描述色度运动向量CMV如何从隔行扫描 P-帧中的亮度运动向量LMV中导出。D.解码隔行扫描B-帧本节参照前一节中讨论的概念描述组合实现中用于解码隔行扫描B-帧的过程。1.隔行扫描B-帧的宏块级别解码在宏块级别上,隔行扫描B-帧语法类似于上述隔行扫描P-帧。隔行扫描B-帧中的宏块被分成三种类型1MV、2半帧MV、和帧内。在本组合实现中4帧MV和4半帧MV模式不被允许用于隔行扫描B-帧。这三种模式像在隔行扫描P-帧中一样,与MBMODE语法元素 共同编码。每个宏块也被预测为正向、反向、直接或插值(使用DIRECTMB和BMVTYPE语法 元素)如果IMV宏块是正向或反向,则它使用单个运动向量。如果它是IMV但是直接或插 值的,则它使用两个运动向量。如果它是2半帧MV类型并是正向或反向预测的,则它使用 两个运动向量。如果它是2半帧MV类型并是直接或插值的,则它使用四个运动向量。以下各节描述隔行扫描B-帧中不同帧间编码的宏块类型的特征。隔行扫描B-帧中的IMV宏块在隔行扫描B-帧中的IMV宏块中,亮度块的位移在预测类型是正向或反向时由单 个运动向量表示,而在类型是直接或插值时由两个运动向量表示。在每一情形中导出相应 的色度向量。在插值和直接预测的情形中,平均来自正向和反向参考图片的运动补偿像素 以形成最终预测。 隔行扫描B-帧中的2半帧MV宏块在隔行扫描B-帧中的2半帧MV宏块中,亮度块的每个半帧的位移由一不同运动 向量描述,如图37所示。此外,在从上半帧去到下半帧时该预测类型被允许从正向切换到 反向,或反之,从而使上半帧从一参考图片中得到运动补偿,而下半帧从另一参考图片中得 到运动补偿,如在以上VII节中所述的。隔行扫描B-帧中的2MVBP、4MVBP的解释和运动向量顺序在IMV宏块中,编码器用插值模式使用2MVBP语法元素,以表示出现两个运动向量 的哪一个。比特1对应于正向运动向量,而比特0对应于反向运动向量。在2半帧MV宏块中,编码器用正向和反向模式使用2MVBP语法元素,来表示出现 两个半帧的运动向量的哪一个。比特1对应于上半帧运动向量而比特0对应于下半帧运动 向量。当MVSW语法元素用来从用于上半帧的正向预测切换到用于下半帧的反向预测或反 之时,编码器使用相同的上/下信号表示。编码器用插值模式使用4MVBP语法元素,来表示 出现四个运动向量的哪一个。比特3对应于上半帧正向运动向量,比特2对应于上半帧反 向运动向量,比特1对应于下半帧正向运动向量,而比特0对应于下半帧反向运动向量。设置为‘1’的2MVBP和4MVBP的比特表示出现相应运动向量差值,同时设置为‘0, 的比特表示相应运动向量等于所预测的运动向量,即未出现相应的运动向量差值。经实际 解码的运动向量用与2MVBP或4MVBP中各比特相同的顺序发送。例如,在使用差值模式的2 半帧MV宏块中,要由解码器接收的第一运动向量是上半帧正向运动向量,而要接收的最后 (即第四)运动向量是下半帧反向运动向量。用信号表示跳过的宏块被跳过的宏块以与P帧相同的方式用信号表示。然而,隔行扫描B-帧中的被跳过 宏块限于IMV帧类型,即不允许半帧类型。运动向量用零差值运动向量编码(即宏块是使 用其IMV运动补偿值进行运动补偿的)且没有已编码块(CBP = 0)。如果宏块被跳过,则 编码器仅发送该宏块的BMVTYPE信息,从而运动向量可被准确预测为正向、反向、直接或插值。用信号表示宏块模式用信号表示宏块模式用与隔行扫描P-帧相同的方法执行,如以上XV. C.节中所述。 预测类型解码(BMVTYPE和MVSW)隔行扫描B-帧的预测类型根据以下规则解码。如果图片层位平面DIRECTMB表示 宏块是直接类型,则该宏块的预测类型被设置成直接。如果直接/非直接决定用原始模式 编码,则编码器使用宏块级别上的附加比特DIRECTBBIT,来表示预测类型是否是直接。如果预测类型是非直接的,则解码器解码BMVTYPE语法元素。如果宏块模式是 “ 2MV半帧编码”,且如果BMVTYPE是正向或反向的,则解码器还解码MVSW比特来判定从该宏 块的上半帧去到下半帧时预测类型是否将改变(即,从正向变为反向,或反之)。解码直接模式运动向量为了解码直接模式运动向量,解码器首先缓存来自先前解码锚帧的运动向量。具 体地,对于先前解码的将来P-帧,解码器缓存来自将来P-帧的经解码亮度运动向量的最大 可能数量的一半(即(2*Number0fMB)个运动向量)。选择要缓存的来自锚帧的这些运动向 量的方法在以上XIII节中描述。使用以上所获得的运动向量,解码器应用图19中伪码1900示出的SCale_DireCt_ MV中的缩放逻辑,来获得正向和反向指示运动向量,而无需回拉运动向量。在本组合实现中,不计算其中不使用诸如正向和反向预测宏块的直接模式预测的 宏块的直接模式运动向量。相反,非直接宏块的运动向量基于正向或反向运动向量缓冲区 来预测。2.对隔行扫描B-帧的运动向量解码隔行扫描B-帧的运动向量预测值与隔行扫描P-帧一样,计算隔行扫描B-帧的当前宏块的运动向量预测值的过程 包括,从当前宏块的相邻宏块中收集其候选运动向量,并且从候选运动向量集中计算当前 宏块的运动向量预测值。图40A-40B示出从中收集候选运动向量的相邻宏块。在该组合实 现中,隔行扫描B-帧的运动向量预测值根据以上XV. C.节所述的用于隔行扫描P-帧的规 则来从候选集中选择。不同的预测上下文被用于正向和反向模式运动向量。解码器使用正向预测上下文 来预测正向运动向量,并使用反向预测上下文来预测反向运动向量。填充隔行扫描B-帧中的正向和反向预测上下文解码器分开缓存正向和反向运动向量,并分别用它们来预测正向和反向运动向 量。对于插值宏块,解码器使用正向预测缓冲区来预测正向运动向量(第一个经解码的 MVDATA元素),并使用反向缓冲区来预测反向运动向量(第二个经解码的MVDATA元素)。 当宏块是直接或插值,则解码器将正向MV分量缓存在正向缓冲区中,并将反向MV分量缓存 在反向缓冲区中。每种情形中(例如1MV宏块、2半帧MV宏块等)用于从一个候选集中选 择运动向量预测值的实际预测逻辑如以上XV. C.节中所述。用于填充正向和反向运动向量缓冲区、并从这些缓冲区的运动向量中预测运动向 量的方案如以上X.C.节中所述。解码隔行扫描B-帧中的运动向量差值隔行扫描B-帧中的运动向量差值根据图77A和77B中的伪码7700和7710解码, 如以上XV. C. 2节中所述。
重构隔行扫描B-帧中的运动向量隔行扫描B-帧中的运动向量根据图78中的伪码7800并如以上XV. B. 3和XV. C. 2 节中所述地解码。E.位平面编码宏块特定的二进制信息可用每个宏块一个二进制符号来编码,这些二进制信息诸 如(1)隔行扫描B-半帧的宏块的正向/非正向决定(即F0RWARDMB标记),以及⑵隔行 扫描B-半帧的宏块的直接/非直接决定(即DIRECTMB标记)。例如,隔行扫描B-半帧的 宏块是否用正向模式(与诸如反向、直接或插值的另一模式相对)作运动补偿可用1个比 特作信号表示。在这些情形中,半帧或帧中全部宏块的状态可被编码为位平面并在半帧或 帧头中传送。该规则的一个例外是如果位平面编码模式被设置成原始模式时,在该情形中 每个宏块的状态被编码为每个符号1个比特,并在宏块级别上与其它宏块级别语法元素一 起传送。半帧/帧级别位平面编码被用来编码两维二进制数组。每个数组的大小是rowMB x colMB,其中rowMB和colMB分别是讨论中半帧或帧中宏块行和列的数量。在比特流内, 每个数组被编码为一个连续比特集。七种模式之一被用来编码每个数组。该七种模式是1.原始模式-编码为每个符号1个比特并作为MB级别语法的一部分传送的信息;2.正常-2 (Norm-2)模式-共同编码的两个符号;3.差值-2(Diff_2)模式-位平面的差值编码,随后是共同编码两个残差符号;4.正常-6 (Norm-6)模式-共同编码的六个符号;5.差值-6(Diff_6)模式-位平面的差值编码,随后是共同编码六个残差符号;6. rowskip (跳行)模式-用信号表示跳过没有设置比特的行的一个比特;以及7. columnskip (跳列)模式-用信号表示跳过没有设置比特的列的一个比特。半帧或帧级别上位平面的语法元素顺序如下INVERT、IM0DE和DATABITS。逆转标记(INVERT)INVERT语法元素是1-比特值,如果设置则表示该位平面具有比0比特更多的设 置比特。取决于INVERT和模式,解码器将逆转所解释的位平面以重新创建原始位平面。注 意,当使用原始模式时,将忽略该比特的值。以下提供对解码位平面时如何使用INVERT值 的描述。编码模式(IM0DE)IM0DE语法元素是指示用来编码位平面的编码模式的可变长度值。表格11示出用 来编码IM0DE语法元素的代码表。以下提供对解码位平面时如何使用IM0DE值的描述。表格11. IM0DE VLC 代码表 位平面编码比特(DATABITS)DATABITS语法元素是编码位平面的符号流的可变大小语法元素。用来编码位平面 的方法根据IM0DE的值来确定。七种编码模式在以下各节中描述。原始模式在该模式中,位平面被编码为每个以宏块的光栅扫描顺序扫描的符号1个比特, 并作为宏块层的一部分发送。或者,该信息在半帧或帧级别上以原始模式编码,且DATABITS 在长度上为rowMB x co 1MB比特。Norm-2 模式如果rowMB x colMB为奇数,则第一个符号被编码为原始。后续符号成对地用自 然扫描顺序编码。表格12中的二进制VLC表格被用来编码符号对。表格1. Norm-2/Diff-2 代码表 Diff-2 模式Norm-2模式用来如上所述地产生位平面,然后Diff—1运算如下所述地应用于位平Norm-6 模式在Norm-6和Diff_6模式中,位平面分6个像素的组进行编码。这些像素被分成 2x3或3x2的块。位平面使用一系列规则来最大程度地平铺,且剩余像素使用跳行和跳列模 式的变体进行编码。如果且仅当rowMB是3的倍数而colMB不是,则使用2x3“竖直”块。否 则,使用3x2“水平”块。图79A示出2x3“竖直”块的简化示例。图79B和79C示出3x2“水 平”±夬,对这些块细长的黑色矩形为1个像素宽并使用跳行和跳列编码进行编码。对于如图79C所示平铺的平面,在图片的上边缘和左边缘使用线性块,这些块的编码顺序符合以下模 式。先编码6-元素块,然后是跳列和跳行编码的线性块。如果数组大小是2x3或3x2的倍 数,则后面的线性块不存在,且位平面被完美平铺。该6-元素矩形块使用不完整的哈夫曼代码编码,即不将所有端点用于编码的哈 夫曼代码。设N是块中设置比特的数量,即0彡N彡6。对于N<3,使用VLC来编码该块。 对于N = 3,固定长度的转义码之后为5比特固定长度代码,对于N > 3,固定长度转义码之 后为该块的补码。该矩形块包含6个比特的信息。设k为关联于块的代码,其中k = b^Sb,为该块 内自然扫描顺序中第i个比特的二进制值。因此,0彡k < 64。VLC、转义码、加上固定长度 代码被用来用信号表示k。Diff-6 模式Norm-6模式用来如上所述地产生位平面,然后DifT1运算如下所述地应用于位平跳行模式在跳行编码模式中,用1个比特的开销跳过所有零行。语法如下对于每一行,单 个R0WSKIP比特表示是否跳过该行;如果跳过该行,则接着是下一行的R0WSKIP比特;否则 (未跳过该行),则接着是R0WBITS比特(该行中每个宏块的比特)。因而,如果整行为零, 则零比特被发送为R0WSKIP符号,并跳过R0WBITS。如果在该行中有一设置比特,R0WSKIP 被设置为1,且整个行被发送为原始(R0WBITS)。各行从半帧或帧的顶部扫描到底部。跳列模式跳列是跳行的转置。各列从半帧或帧的顶部扫描到底部。Diff—1 逆向差值解码在使用任一差值模式(Diff-2或Diff-6)时,“差值比特”的位平面首先使用相应 的正常模式(Norm-2或Norm-6)解码。差值比特被用来重新产生原始位平面。重新产生过 程是二进制字母表上的2-D DPCM。为了在位置(i,j)上重新产生比特,预测值bp(i,j)如 下产生(从位置(i,j)上的比特b(i,j))
否则对于差值编码模式,不执行基于INVERT的逐个比特逆转过程。然而,INVERT标记 以不同容量用来表示符号A的值,用于导出所示预测值。更具体地,如果INVERT等于0则A 等于0,且如果INVERT等于1则A等于1。位平面的实际值通过异或预测值和经解码的差 值比特值来获取。在以上公式中,b(i,j)是在最终解码之后(即进行Norm-2或Norm-6,然 后是与其预测值的差值异或之后)第(i,j)位置上的比特。已经参照各个实施例描述和示出了本发明的各个原理,可以理解各个实施例可在 排列和细节中进行更改而不背离这些原理。应当理解,在此所述的程序、过程或方法并不相 关于或限于任何特定类型的计算环境,除非另有所示。各种类型的通用或专用计算环境可 根据在此所述的教授内容使用或执行操作。在软件中示出的各个实施例的元素可用硬件实现,反之亦然。 根据本发明各原理可应用其中的许多可能实施例,我们将本发明解释为可在以下 权利要求及其等效方案的范围和精神内的所有这些实施例。
权利要求
一种使用视频解码器来解码已编码视频的方法,所述包括用所述视频解码器接收比特流中的已编码数据;以及使用所述已编码数据来解码隔行扫描B-半帧,包括,对于所述隔行扫描B-半帧中的宏块,所述宏块具有第一预测方向的重构后第一运动向量并且仅在所述第一预测方向上使用运动补偿将所述重构后第一运动向量存储在用于所述第一预测方向的第一运动向量缓冲区中以供在后续的运动向量预测中使用;计算用于与所述第一预测方向相反的第二预测方向的运动向量预测值,其中所述运动向量预测值至少部分地基于来自用于所述第二预测方向的第二运动向量缓冲区的一个或多个候选运动向量预测值,其中所述运动向量预测值是所述第二运动预测方向上的填充第二运动向量的预测的值,并且其中,计算用于所述第二预测方向的运动向量预测值包括,至少部分地基于来自所述第二运动向量缓冲区的所述一个或多个候选运动向量预测值的极性信息,在以下两者之间选择在所述第二预测方向上使用引用所述隔行扫描B-半帧的第一参考半帧的相同极性运动向量预测值作为所述运动向量预测值,所述第一参考半帧具有与所述隔行扫描B-半帧相同的极性,或者在所述第二运动方向上使用引用所述隔行扫描B-半帧的第二参考半帧的相反极性运动向量预测值作为所述运动向量预测值,所述第二参考半帧具有与所述隔行扫描B-半帧相反的极性;以及将所述运动向量预测值作为所述填充第二运动向量存储在所述第二运动向量缓冲区中以供在后续的运动向量预测中使用。
2.如权利要求1所述的方法,其特征在于,所述极性信息包括主极性的指示,且其中计 算用于所述第二预测方向的运动向量预测值包括选择所述相同极性运动向量预测值或所 述相反极性运动向量预测值作为候选主极性预测值。
3.如权利要求1所述的方法,其特征在于,所述第一预测方向为正向而所述第二预测 方向为反向。
4.如权利要求1所述的方法,其特征在于,所述第一预测方向为反向而所述第二预测 方向为正向。
5.如权利要求1所述的方法,其特征在于,重构所述第一运动向量包括至少部分地基于来自第一运动向量缓冲区的一个或多个候选运动向量预测值,计算用 于所述第一预测方向的运动向量预测值;以及组合用于所述第一预测方向的运动向量预测值与运动向量差值信息。
6.如权利要求1所述的方法,其特征在于,所述隔行扫描B-半帧中的宏块是IMV宏块, 且其中具有所述第一和第二运动向量缓冲区中的运动向量的至少一个宏块是4MV宏块。
7.如权利要求1所述的方法,其特征在于,所述隔行扫描B-半帧中的宏块是4MV宏块, 且其中具有所述第一和第二运动向量缓冲区中的运动向量的至少一个宏块是IMV宏块。
8.一种使用视频解码器来解码已编码视频的方法,所述方法包括用所述视频解码器接收比特流中的已编码数据;以及使用所述已编码数据来解码隔行扫描B-半帧,包括将第一运动向量存储在用于第一预测方向的第一运动向量缓冲区中,其中所述第一运 动向量用于所述隔行扫描B-半帧中的宏块,所述宏块仅在所述第一预测方向上使用运动 补偿;计算用于与所述第一预测方向相反的第二预测方向的主极性运动向量预测值,其中所 述主极性运动向量预测值是所述第二预测方向上的填充第二运动向量的预测的值,并且其 中,所述计算主极性运动向量预测值包括,至少部分地基于关于来自用于所述第二预测方 向的第二运动向量缓冲区的一个或多个候选运动向量预测值的极性信息,在以下两者之间 选择在所述第二预测方向上使用引用所述隔行扫描B-半帧的第一参考半帧的相同极性 运动向量预测值作为所述主极性运动向量预测值,所述第一参考半帧具有与所述隔行扫描 B-半帧相同的极性;在所述第二预测方向上使用引用所述隔行扫描B-半帧的第二参考半帧的相反极性 运动向量预测值作为所述主极性运动向量预测值,所述第二参考半帧具有与所述隔行扫描 B-半帧相反的极性;以及将所述主极性运动向量预测值作为所述填充第二运动向量存储在所述第二运动向量 缓冲区中。
9.如权利要求8所述的方法,其特征在于,所述第一预测方向为正向而所述第二预测 方向为反向,或者所述第一预测方向为反向而所述第二预测方向为正向。
10.如权利要求8所述的方法,其特征在于,所述隔行扫描B-半帧中的宏块是IMV或 4MV宏块。
11.一种使用视频编码器来编码视频的方法,所述方法包括用所述视频编码器对隔行扫描B-半帧进行编码,包括,对于所述隔行扫描B-半帧中的宏块,所述宏块具 有第一预测方向上的第一运动向量并仅在所述第一预测方向上使用运动补偿将所述第一运动向量存储在用于所述第一预测方向的第一运动向量缓冲区中以供在 后续的运动向量预测中使用;计算用于与所述第一预测方向相反的第二预测方向的运动向量预测值,其中所述运动 向量预测值至少部分地基于来自用于所述第二预测方向的第二运动向量缓冲区的一个或 多个候选运动向量预测值,其中所述运动向量预测值是所述第二方向上的填充第二运动向 量的预测的值,并且其中计算用于所述第二预测方向的运动向量预测值包括,至少部分地 基于关于来自所述第二运动向量缓冲区的一个或多个候选运动向量预测值的极性信息,在 以下两者之间选择在所述第二预测方向上使用引用所述隔行扫描B-半帧的第一参考半帧的相同极性 运动向量预测值作为所述主极性运动向量预测值,所述第一参考半帧具有与所述隔行扫描 B-半帧相同的极性;在所述第二预测方向上使用引用所述隔行扫描B-半帧的第二参考半帧的相反极性 运动向量预测值作为所述主极性运动向量预测值,所述第二参考半帧具有与所述隔行扫描B-半帧相反的极性;以及将所述运动向量预测值作为所述填充第二运动向量存储在所述第二运动向量缓冲区 中以供在后续的运动向量预测中使用;以及在比特流中输出所述隔行扫描B-半帧的已编码数据。
12.如权利要求11所述的方法,其特征在于,所述极性信息包括主极性的指示,且其中 计算用于所述第二预测方向的运动向量预测值包括选择所述相同极性运动向量预测值或 所述相反极性运动向量预测值作为候选主极性预测值。
13.如权利要求11所述的方法,其特征在于,所述第一预测方向为正向而所述第二预 测方向为反向。
14.如权利要求11所述的方法,其特征在于,所述第一预测方向为反向而所述第二预 测方向为正向。
15.如权利要求11所述的方法,其特征在于,重构所述第一运动向量包括至少部分地基于来自第一运动向量缓冲区的一个或多个候选运动向量预测值,计算用 于所述第一预测方向的运动向量预测值;以及组合用于所述第一预测方向的运动向量预测值与运动向量差值信息。
16.如权利要求11所述的方法,其特征在于,所述隔行扫描B-半帧中的宏块是IMV宏 块,且其中具有所述第一和第二运动向量缓冲区中的运动向量的至少一个宏块是4MV宏 块。
17.如权利要求11所述的方法,其特征在于,所述隔行扫描B-半帧中的宏块是4MV宏 块,且其中具有所述第一和第二运动向量缓冲区中的运动向量的至少一个宏块是IMV宏 块。
18.一种使用视频解码器来解码已编码视频的方法,所述方法包括 用所述视频解码器接收比特流中的已编码数据;以及使用所述已编码数据来解码隔行扫描B-半帧,其中所述隔行扫描B-半帧具有一个或 多个正向宏块以及一个或多个反向宏块,并且其中所述解码包括 对于所述一个或多个正向宏块中的每一个 重构用于该宏块的正向运动向量;将所重构的正向运动向量存储在正向运动向量缓冲区中用于该宏块的对应位置中; 使用来自反向运动向量缓冲区的一个或多个候选运动向量预测值,并且还使用关于来 自所述反向运动向量缓冲区的一个或多个候选运动向量预测值的极性信息,预测反向运动 向量,包括在以下两者之间选择使用引用所述隔行扫描B-半帧的第一参考半帧的相同极性反向运动向量预测值作为 所预测的反向运动向量,所述第一参考半帧具有与所述隔行扫描B-半帧相同的极性;或者 使用引用所述隔行扫描B-半帧的第二参考半帧的相反极性反向运动向量预测值作为 所预测的反向运动向量,所述第二参考半帧具有与所述隔行扫描B-半帧相反的极性;以及 将所预测的反向运动向量存储在所述反向运动向量缓冲区中用于该宏块的对应位置 中;以及对所述一个或多个反向宏块中的每一个重构用于该宏块的反向运动向量;将所重构的反向运动向量存储在所述反向运动向量缓冲区中用于该宏块的对应位置中;使用来自所述正向运动向量缓冲区的一个或多个候选运动向量预测值,并且还使用关 于来自所述正向运动向量缓冲区的一个或多个候选运动向量预测值的极性信息,预测正向 运动向量,包括在以下两者之间选择使用引用所述隔行扫描B-半帧的第三参考半帧的相同极性正向运动向量预测值作为 所预测的正向运动向量,所述第三参考半帧具有与所述隔行扫描B-半帧相同的极性;或者 使用引用所述隔行扫描B-半帧的第四参考半帧的相反极性正向运动向量预测值作为 所预测的正向运动向量,所述第四参考半帧具有与所述隔行扫描B-半帧相反的极性;以及 将所预测的正向运动向量存储在所述正向运动向量缓冲区中用于该宏块的对应位置中。
19.如权利要求1所述的方法,其特征在于,所述选择包括对来自所述第二运动向量缓 冲区的一个或多个候选运动向量预测值中有多少是相反极性运动向量进行计数,和/或对 来自所述第二运动向量缓冲区的一个或多个候选运动向量预测值中有多少是相同极性运 动向量进行计数。
20.如权利要求11所述的方法,其特征在于,所述选择包括对来自所述第二运动向量 缓冲区的一个或多个候选运动向量预测值中有多少是相反极性运动向量进行计数,和/或 对来自所述第二运动向量缓冲区的一个或多个候选运动向量预测值中有多少是相同极性 运动向量进行计数。
全文摘要
对于隔行扫描B-半帧或隔行扫描B-帧,正向运动向量使用来自正向运动向量缓冲区的正向运动向量由编码器/解码器预测,而反向运动向量使用来自反向运动向量缓冲区的反向运动向量由编码器/解码器预测。结果的运动向量被添加到相应的缓冲区中。运动向量缓冲区中的空穴可用所估计的运动向量值填充。编码器/解码器在隔行扫描B-帧的半帧编码宏块中的半帧之间切换预测模式。对于隔行扫描B-半帧或隔行扫描B-帧,编码器/解码器计算直接模式运动向量。对于隔行扫描B-半帧或隔行扫描B-帧,编码器/解码器使用4MV编码。编码器/解码器使用“自参考”B-帧。编码器发送二进制信息,表示对隔行扫描B-半帧的一个或多个宏块的预测模式是正向还是非正向的。编码器/解码器使用帧内编码的B-半帧[“BI-半帧”]。
文档编号H04NGK101841718SQ20101016982
公开日2010年9月22日 申请日期2004年9月3日 优先权日2003年9月7日
发明者K·慕克吉, T·W·赫尔科比 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1