本申请是申请日为2004年9月3日、国际申请号为PCT/US2004/029000、中国国家申请号为200480024621.8、发明名称为“隔行扫描视频的高级双向预测编码”的专利申请的分案申请。
本申请要求对申请号为60/501,081题为“视频编码和解码工具和技术”(VideoEncoding and Decoding Tools and Techniques)并于2003年9月7日提交的美国临时专利申请的权利,该申请通过参考结合于此。
以下共同待批的美国专利申请涉及本申请,并通过参考结合于此:1)序列号为10/622,378题为“视频帧的高级双向预测编码”(Advanced Bi-DirectionalPredictive Coding of Video Frames)并于2003年7月18日提交的美国专利申请;2)序列号为10/622,284题为“帧内和帧间隔行扫描编码和解码”(Intraframe andInterframe Interlace Coding and Decoding)并于2003年7月18日提交的美国专利申请;3)序列号为10/622,841题为“运动向量信息的编码”(Coding of Motion VectorInformation)并于2003年7月18日提交的美国专利申请;4)序列号为10/857,473题为“预测用于正向预测的隔行扫描视频帧的各个半帧的运动向量”(PredictingMotion Vectors for Fields of Forward-predicted Interlaced Video Frames)并于2004年5月27日提交的美国专利申请。
具体实施方式
本申请涉及用于隔行扫描视频的有效压缩和解压缩的技术和工具。在各个所述实施例中,视频编码器和解码器结合用于编码和解码双向预测的隔行扫描视频帧的技术,和以包括各种层或级别(例如序列级别、帧级别、半帧级别、宏块级别、和/或块级别)的比特流格式或语法使用的相应信号表示技术。
对所述实现的各种可选方案是可能的。例如,参照流程图描述的方法可通过改变各流程图中所示的各阶段的顺序、或重复或略去某些阶段等来变更。作为另一示例,尽管某些实现参照特定宏块格式进行了描述,但是也可使用其它格式。此外,参照双向预测描述的技术和工具也可应用于其它类型的预测。
各种技术和工具可组合或独立地使用。不同实施例实现所述技术和工具的一种或多种。在此所述的一些技术和工具可用于视频编码器或解码器,或者在一些其它系统中并非具体受限于视频编码或解码。
I.计算环境
图20示出可实现若干所述实施例的适当计算环境2000的通用示例。计算环境2000并非旨在提出对本发明使用范围或功能的任何限制,因为本发明的技术和工具可在不同的通用或专用计算环境中实现。
参照图20,计算环境2000包括至少一个处理单元2010和存储2020。在图20中,该最基本配置2030包括在虚线内。处理单元2010执行计算机可执行指令,且可以是实际或虚拟处理器。在多处理系统中,多个处理单元执行计算机可执行指令以增加处理能力。存储器2020可以是易失性存储器(例如寄存器、高速缓存、RAM)、非易失性存储器(例如ROM、EEPROM、闪存等)或两者的组合。存储器2020存储实现进行隔行扫描视频帧的双向预测的视频编码器或解码器的软件2080。
计算环境可具有附加特征。例如,计算环境2000包括存储2040、一个或多个输入设备2050、一个或多个输出设备2060、以及一个或多个通信连接2070。诸如总线、控制器或网络的互连机制(未示出)使计算环境2000的各个组件互相连接。通常,操作系统软件(未示出)向在计算环境2000中执行的其它软件提供一个操作环境,并协调计算环境2000的各个组件的动作。
存储2040可以是可移动或不可移动的,并包括磁盘、磁带或盒式磁带、CD-ROM、CD-RW、DVD、或任何其它可用于存储信息并可在计算环境2000内访问的媒体。存储2040为软件2080存储实现视频编码器或解码器的指令。
输入设备2050可以是诸如键盘、鼠标、电子笔、或跟踪球、语音输入设备、扫描设备、或向计算环境2000提供输入的另一设备。对于音频或视频编码,输入设备2050可以是接受模拟或数字形式的音频或视频输入的声卡、视频卡、TV调谐器卡或相似设备、或将音频或视频样本读入计算环境2000中的CD-ROM或CD-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个8x 8亮度块(Y1到Y4)和与4个亮度块共处的2个8x8色度块,这些色度块符合常规的4:2:0宏块格式但在水平和垂直方向分辨率减半。这些8x8块可在不同阶段上作进一步的细分,例如在频率变换(例如8x4、4x8或4x4DCT)和熵编码阶段。逐行扫描I-帧是帧内编码的逐行扫描视频帧。逐行扫描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像素长。隔行扫描的I-半帧是隔行扫描视频帧的单个独立表示半帧。隔行扫描P-半帧是使用正向预测编码的隔行扫描视频帧的单个独立表示半帧,而隔行扫描B-半帧是使用双向预测编码的隔行扫描视频帧的单个独立表示半帧。隔行扫描P-和B-半帧可包括帧内编码宏块以及不同类型的预测宏块。
术语图片通常指源、经编码或重构的图像数据。对于逐行扫描视频,图片是逐行扫描视频帧。对于隔行扫描视频,取决于上下文,图片可指隔行扫描视频帧、帧的上半帧、或帧的下半帧。
或者,编码器2100或解码器2200是基于对象的、使用不同的宏块或块格式、或对不同于8x 8块和16x 16宏块的大小或配置的像素集执行操作。
B.视频编码器
图21是通用视频编码器系统2100的框图。编码器系统2100接收包括当前图片2105的一个视频图片序列(例如,逐行扫描视频帧、隔行扫描视频帧、或隔行扫描视频帧的半帧),并产生压缩后视频信息2195作为输出。视频编码器的特定实施例通常使用通用编码器2100的变体或补充版本。
编码器系统2100压缩预测图片和关键图片。为演示起见,图21示出关键图片通过编码器系统2100的路径,以及预测图片的路径。编码器系统2100的许多组件用于压缩关键图片和预测图片。由那些组件执行的确切操作可取决于所压缩的信息类型而变化。
预测图片(例如逐行扫描p-帧或b-帧、隔行扫描p-半帧或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可应用8x 8、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 ofForward-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=11/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和oppositefieldpred_y表示来自相反半帧的运动向量预测值的水平和垂直分量。变量samecount和oppositecount分别跟踪当前块或宏块的邻域的多少运动向量参考当前半帧的“相同”极性参考半帧,及多少参考“相反”极性参考半帧。变量samecount和oppositecount在伪码开始时初始化为0。
伪码3300中所提及的缩放运算scaleforsame()和scaleforopposite()被用来从邻居的实际运动向量值中导出“另一”半帧的候选运动向量预测值。缩放运算是实现无关的。示例缩放运算在以下参照图34A、34B、35和36进行描述。或者,其它缩放运算可用来例如补偿诸如图31中所示的垂直位移。(具体用于隔行扫描B-半帧的缩放运算如下进行详细描述。)
图33A和33B示出用于计算帧内的内部位置中典型块或宏块的运动向量预测值的伪码。“帧内”邻居的运动向量被设置为0。对于每个邻居,都设置相同半帧运动向量预测值和相反半帧运动向量预测值,在其中一个通过邻居运动向量的实际值设置时,另一个从中导出。对相同半帧运动向量预测值和相反半帧运动向量预测值计算候选值的中值,而“主”预测值从samecount和oppositecount中确定。变量dominantpredictor表示哪个半帧包含主运动向量预测值。如果运动向量预测值具有与三个候选预测值的大部分相同的极性,则它是主要预测值。(用运动向量差值数据解码的表示信号的值predictor_flag表示使用主还是非主预测值。)
图33C中的伪码解决每行只有一个宏块(它没有邻居B或C)的隔行扫描P-半帧的宏块的情形。图33D或33E中的伪码解决块或宏块在隔行扫描P-半帧的左边缘(没有邻居C)的情形。在此,如果运动向量预测值具有与两个以上候选预测值相同的极性,则它是主预测值;而在不分上下的情形中,相反半帧运动向量预测值为主预测值。最后,图33F中的伪码解决例如宏块在隔行扫描P-半帧的首行中的情形。
3.一个半帧运动向量预测值从另一个半帧运动向量预测值导出的缩放
在一实现中,编码器/解码器使用图34A和34B的伪码3400中示出的缩放运算,将一个半帧运动向量预测值从另一个半帧运动向量预测值导出。SCALEOPP、SCALESAME1、SCALESAME2、SCALEZONE1_X、SCALEZONE1_Y、ZONE1OFFSET_X和ZONE1OFFSET_Y的值是实现相关的。示出两个可能的值集,其中当前半帧是隔行扫描视频帧中的第一半帧的情形在图35的表格3500中示出,而当前半帧是隔行扫描视频帧中的第二半帧的情形在图36的表格3600中示出。对于P-帧,参考帧距离被第一为当前P-帧及其参考帧之间的B-帧(即包含两个B-半帧的视频帧)数量。如果不出现B-帧,则参考距离为0。例如,编码器使用可变大小的语法元素(例如在以下XIV节详细描述的REFDIST语法元素)来编码参考帧距离。
在表格3500和3600中示出的各个示例中,N的值(用作表格中SCALEZONE1_X、SCALEZONE1_Y、ZONE1OFFSET_X和ZONE1OFFSET_Y值的乘数)取决于运动向量范围。例如,经扩展的运动向量范围可通过语法元素EXTENDED_MV=1来用信号表示。如果EXTENDED_MV=1,则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和帧内。
在1MV宏块中,宏块中4个亮度块的位移通过单个运动向量表示。相应的色度运动向量可从亮度运动向量导出,以表示运动向量的2个8x8色度块的每一个的位移。例如,再参看图23中示出的宏块排列,1MV宏块2300包括4个8x8亮度块和2个8x8色度块。亮度块(Y1到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-帧之间的真实运动,以便于改进运动补偿预测。变量BFRACTION表示可在比特流中发送(例如在图片级别或一些其它级别上)以表示该相对时间位置的不同分数。不同分数是0和1之间的有限离散值集。
再参看图17,表格1700是用于比特流元素BFRACTION的可变长度代码(VLC)表格。在相同两个锚之间的逐行扫描B-帧中对BFRACTION的唯一性没有限制;具有相同锚的不同逐行扫描B-帧可具有相同的BFRACTION值。表格1700中的代码可改变或重新安排,以用不同代码表示不同分数。未在表格1700中示出的其它可能代码(例如,1111110或1111111)可被认为是无效代码,或可用于其它目的。例如,条目1111110可用来显式地编码定点格式的BFRACTION。作为另一示例,条目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-帧的宏块的模式(例如1MV模式、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类型是正向或反向then
IfMVSwitch=1then预测模式在上半帧和下半帧之间切换(从正向到反向或反之)
因此,将预测模式切换限于正向和反向模式避免对用信号表示第二模式的更多比特的需要,因为该第二模式从第一模式(在先前用信号表示的)和切换值中隐含。
如果在由隔行扫描B-帧的宏块覆盖的区域中有较高运动,则宏块有可能用半帧模式编码。在这些情形中,正向或反向预测更可能比直接或插值模式(包括像素平均)给出准确的运动补偿结果。因为在平滑中平均了各个结果(例如损失了伴随高运动的高频率元素),所以直接和插值模式并非是编码这些宏块的最佳方法。试验结果表明,因为在半帧编码宏块内的半帧级别上将全部四种预测模式用信号表示为切换选项的增加开销使其低效。
或者,编码器可在隔行扫描B-帧的半帧编码宏块内切换两种以上的预测模式,或可在不同预测模式之间切换。
VII.计算隔行扫描B-帧中的直接模式运动向量
在一些实现中,编码器/解码器缓存来自经先前解码锚的I-帧或P-帧(它是时间上正向的参考帧,用作反向预测参考帧)的运动向量,并选择一个或多个缓存运动向量,以用于计算隔行扫描B-帧中当前宏块的直接模式运动向量。例如,编码器/解码器缓存来自锚帧的每个宏块的上半帧和下半帧的每一个的代表性运动向量,并使用一个或多个所缓存的运动向量来计算当前直接模式宏块的运动向量。该选择至少部分地基于当前宏块的编码模式执行(例如1MV模式、2半帧MV模式等)。
图42示出用于在一实现中计算隔行扫描B-帧中宏块的直接模式运动向量的一种技术4200。在4210,编码器/解码器缓存在先前重构的时间上将来的锚帧中共处宏块的每个宏块的多个运动向量。如果该共处宏块仅具有一个运动向量,则如果需要,该运动向量将被缓存为共处宏块的各个块的运动向量值。在4220,编码器/解码器部分地依赖于当前宏块所需运动向量的数量,选择共处宏块的一个或多个缓存运动向量,用于隔行扫描B-帧中当前宏块的直接模式预测。
在一实现中,解码器缓存共处宏块中的两个运动向量,或缓存来自将来锚帧的最大可能数量的经解码亮度运动向量的一半。锚帧中的各宏块可用不同方法编码,其中每个宏块最多达4个运动向量,但只能缓存最多达两个运动向量,如下所述。而且,为当前宏块产生的正向/反向运动向量对的数量取决于当前宏块的编码模式,而不是仅仅取决于经先前解码的将来锚帧的共处宏块的编码模式。
例如,如果当前直接模式宏块是1MV编码的,则解码器从锚帧的共处宏块的上半帧中取得被缓存的运动向量,并产生一对直接运动向量-一个正向另一个反向。如果当前直接模式宏块是半帧编码的,则解码器从锚帧的共处宏块中取得被缓存的上半帧和下半帧运动向量,并产生两对运动向量,一共有当前直接模式宏块的4个运动向量一对每个半帧都有一个正向另一个反向的运动向量。
图43示出经先前解码的时间上将来的锚帧的共处宏块4300的各个块的运动v量MV1、MV2、MV3和MV4。如果该共处宏块是1MV宏块,则MV1、MV2、MV3和MV4都相等。如果该共处宏块是2半帧MV宏块,则MV1和MV2等于一个值,而MV3和MV4等于另一个值。如果该锚帧的共处宏块是4半帧MV或4帧MV宏块,则MV1、MV2、MV3和MV4可能都是不同的值。然而,即使MV1、MV2、MV3和MV4都可用,解码器仍然仅缓存MV1和MV3。
在图43所示示例中,解码器缓存MV1和MV3。如果当前宏块使用1MV模式,则解码器选择MV1来计算当前宏块的正向和反向直接模式运动向量,并略去MV3。如果当前宏块使用2半帧MV模式,则解码器使用MV1和MV3来计算4个直接模式运动向量。该运算产生当前宏块的上下半帧的运动的良好表示。
在已选择来自锚帧中共处宏块的运动向量时,解码器应用缩放逻辑来导出相应的正向和反向指示运动向量,用于B帧宏块的直接模式预测。例如,解码器可应用图19中的函数Scale_Direct_MV。或者,解码器应用不同的缩放函数。
或者,编码器/解码器可缓存每个锚帧宏块的4个运动向量。例如,如果当前宏块是1MV编码的,则编码器/解码器可取锚帧中共处宏块的左上运动向量,并产生一对直接运动向量,或者可取锚帧宏块的4个运动向量的均值。如果当前宏块是半帧编码的,则编码器/解码器可取左上和左下运动向量,并产生两对(一个半帧一对),或者可取锚帧宏块的上运动向量的均值和下运动向量的均值。
当锚帧中的共处宏块为帧内、或当锚帧为I-帧时,直接模式运动向量被视为(0,0)。
VIII.隔行扫描B-半帧和隔行扫描B-帧中的4MV编码
在一些实现中,编码器使用4运动向量(4MV)编码模式编码隔行扫描的B-半帧和隔行扫描的B-帧。4MV编码可允许复杂运动轨迹的表示比1运动向量(1MV)编码更准确(例如,通过允许宏块中的4个亮度块独立地进行预测和运动补偿)。使用4MV可受限于某些预测模式。例如,在一些实现中,编码器将4MV用于正向和反向模式(包括半帧和帧变化两者),而不用于直接或插值模式。当4MV不用于逐行扫描B-帧时,这不同于逐行扫描编码模式。
直接和插值模式涉及计算经运动补偿预测时的像素平均,它用于平滑细微细节。如果这种平滑是可接受的,则可能可使用1MV模式而不是4MV模式,因为编码1MV较容易,且1MV可用来准确地描述平滑运动轨迹。实验已显示,在隔行扫描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在这些实现中受限于正向和反向模式:
IfMB是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,编码器/解码器基于候选运动向量预测值集计算运动向量预测值。例如,编码器/解码器计算候选运动向量预测值集的中值。在简单情形中,编码器/解码器基于都是1MV宏块的预测值计算1MV当前宏块的运动向量预测值。更复杂的变化描述如下,其中当前宏块和/或邻居宏块具有不同模式。
图45示出正向运动向量缓冲区4510和反向运动向量缓冲区4520中的运动向量。在图45所示示例中,对于重构宏块4530-4570,编码器/解码器将正向运动向量存储在正向运动向量缓冲区4510中,并将反向运动向量存储在反向运动向量缓冲区4520中。为了预测当前宏块4580的运动向量,编码器/解码器使用来自相邻宏块的候选预测值。例如,如果当前宏块4580用正向模式预测,则编码器使用正向运动向量缓冲区中的相邻正向运动向量来预测正向运动向量(例如使用三者中值预测),随后用重构后的运动向量值填充正向运动向量缓冲区中的当前宏块位置。为了填充反向运动向量缓冲区4520中的相应当前宏块位置,编码器/解码器可使用反向运动向量缓冲区中的相邻反向运动向量来预测反向运动向量,并将该预测值置于反向运动向量缓冲区的当前宏块的位置中。
B.隔行扫描B-帧中的运动向量预测
在一些实现中,编码器/解码器采用以下方案来预测隔行扫描B-帧中宏块(包括其不同半帧)的运动向量,它使用分开的正向和反向运动向量上下文。图40A-40B示出从中收集候选运动向量的相邻宏块。
如果1MV宏块是正向预测的,则编码器/解码器从正向运动向量缓冲区的候选运动向量中预测其正向运动向量(例如使用诸如图40A和40B中或别处示出的三者中值预测和预测模式)。编码器/解码器(在添加运动向量预测误差后)将该正向运动向量存储在正向运动向量缓冲区中。编码器/解码器通过从反向运动向量缓冲区的候选运动向量中预测反向运动向量来填充“空穴”(例如与正向预测情形中一样),并将该反向运动向量(在此为预测值)存储在反向运动向量缓冲区中。
如果1MV宏块是反向预测的,则编码器/解码器从反向运动向量缓冲区的候选运动向量中预测其反向运动向量(例如与正向预测情形中一样)。编码器/解码器(在添加预测误差后)将该反向运动向量存储在反向运动向量缓冲区中。编码器/解码器通过从正向运动向量缓冲区的候选运动向量中预测正向运动向量来填充“空穴”,并将该正向运动向量(在此为预测值)存储在正向运动向量缓冲区中。
在正向和反向运动向量缓冲区中略去作为帧内编码宏块的邻居。
各种特定情形确定隔行扫描B-帧中1MV和半帧编码2MV宏块的组合。如果当前1MV宏块的位置A、B或C中的相邻宏块是半帧编码的2MV宏块,则编码器/解码器取2MV宏块的半帧运动向量的均值作为该位置的运动向量预测值。
对于正向预测的当前2半帧MV宏块,例如对于两个正向预测半帧运动向量的每一个,来自邻居的候选运动向量从正向运动向量缓冲区中收集。编码器/解码器基于相邻宏块的编码模式(例如帧内、1MV、2半帧MV)选择一个候选运动向量集,这些相邻宏块存储在正向运动向量缓冲区中。如果相邻宏块存在且不是帧内编码的,则编码器/解码器注意该宏块的运动向量以添加到候选集中去。在一些实施例中,编码器/解码器继续如下动作。对于上半帧正向运动向量,如果位置A、B或C中的相邻宏块是1MV宏块,则编码器将来自正向运动向量缓冲区的相应位置的宏块的运动向量添加到候选集中。对于是2半帧MV宏块的位置A、B或C中的相邻宏块,编码器/解码器将来自正向运动向量缓冲区的相应位置的上半帧MV添加到该集中。
对于下半帧正向运动向量,如果位置A、B或C中的相邻宏块是1MV宏块,则编码器将来自正向运动向量缓冲区的相应位置的宏块的运动向量添加到候选集中。对于是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节描述的技术。
在一些实现中,1MV宏块、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-半帧中1MV和4MV宏块的组合。图6A-10示出用于逐行扫描P-帧的运动向量预测的预测值模式。这些相同模式示出被视为用于混合MV的隔行扫描B-半帧的1MV或4MV宏块的运动向量的运动向量预测的候选运动向量的块或宏块的位置。对于帧是一个宏块宽的特定情形,预测值总是Predicator A(顶部预测值)。各种其它规则解决其它特定情形,诸如首行4MV宏块、首行1MV宏块、和帧内编码预测值。
图6A-10中所示的预测值模式用来使用来自正向运动向量缓冲区中各位置的候选值进行正向预测,并使用来自反向运动向量缓冲区中位置的候选值进行反向预测。此外,图6A-10中所示的预测值模式结合以上所述的对隔行扫描B-半帧的双参考半帧运动向量预测逻辑来使用。
图6A和6B示出被视作用于混合MV的隔行扫描B-半帧中的1MV当前宏块的候选运动向量预测值的块的位置。相邻的各个宏块可以是1MV或4MV宏块。图6A和6B示出假设邻居是4MV的候选运动向量的位置(即预测值A是当前宏块上面的宏块中块2的运动向量,而预测值C是当前宏块左侧紧邻的宏块中块1的运动向量)。如果邻居的任一个是1MV宏块,则图5A和5B中示出的运动向量预测值被视为整个宏块的运动向量预测值。如图6B所示,如果宏块是该行中的最后一个宏块,则预测值B来自左上方宏块的块3而不像其它情形一样来自右上方宏块的块2。
图7A-10示出被视作用于混合MV的隔行扫描B-半帧的4MV宏块中4个亮度块的每一个的候选运动向量预测值的块的位置。图7A和7B是示出被视作用于位置0上一个块的候选运动向量预测值的块的位置的示图;图8A和8B是示出被视作用于位置1上一个块的候选运动向量预测值的块的位置的示图;图9是示出被视作用于位置2上一个块的候选运动向量预测值的块的位置的示图;而图10是示出被视作用于位置3上一个块的候选运动向量预测值的块的位置的示图。再一次,如果邻居是1MV宏块,则该宏块的运动向量预测值用于该宏块的各个块。
对于宏块是行中第一宏块的情形,块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、SCALEZONE1_X、SCALEZONE1_Y、ZONE1OFFSET_X和ZONE1OFFSET_Y取决于参考帧距离。
在一些实现中,使用分数编码来计算用于隔行扫描B-半帧中的正向和反向参考的参考帧距离。BFRACTION语法元素(它用信号表示隔行扫描B-半帧的正向或反向预测模式宏块,而不只是隔行扫描B-帧的直接模式宏块)用来导出正向和反向参考图片距离,如以下伪码所示:
正向参考帧距离(FRFD)=
NINT((BFRACTION分子)/(BFRACTION分母)*参考帧距离-1
If(FRFD<0)then FRFD=0
反向参考帧距离(BRFD)=
参考帧距离-FRFD-1(其中NINT是最近整数操作符)
BFRACTION分子和分母从BFRACTION语法元素中解码。元素BFRACTION可用来表示可在比特流中发送的不同分数(例如在隔行扫描B-半帧的帧级别上)。该分数在0和1之间的有限离散值集中取值,并在通过其锚形成的间隔内标示B-图片的相对时间位置。
对于具有隔行扫描B-半帧的帧中的第二半帧的正向预测和反向预测,编码器/解码器根据图34A和34B中的伪码3400执行运动向量缩放。然而,在一些实现中,执行第一半帧的反向运动向量预测的编码器/解码器使用如在图48中所示伪码4800中定义的函数scaleforopposite_x、scaleforopposite_y、scaleforsame_x、scaleforsame_y。在一实现中用于第一隔行扫描B-半帧的SCALESAME、SCALEOPP1、SCALEOPP2、SCALEZONE1_X、SCALEZONE1_Y、ZONE1OFFSET_X和ZONE1 OFFSET_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-半帧(在此为上半帧)被允许参考正向(时间上过去)锚P1中的两个参考半帧和来自反向(时间上将来)锚P3中的两个参考半帧,总共为4个参考半帧。B2的要解码的第二隔行扫描B-半帧被允许参考来自同一隔行扫描视频帧(因而打破了不允许B-图片的各部分用作参考的惯例)的第一半帧和来自前一锚P1的一个参考半帧,以及来自将来锚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-半帧的直接模式1MV宏块,编码器/解码器基于具有相同极性的参考半帧(例如时间上的下一P-半帧)内共处宏块的一个或多个运动向量,计算用于直接模式缩放的运动向量。如果参考半帧中的共处宏块是1MV宏块,则编码器/解码器使用单个运动向量来导出隔行扫描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
FCM值 |
帧编码模式 |
0 |
逐行扫描 |
10 |
帧-隔行扫描 |
11 |
半帧-隔行扫描 |
半帧图片类型(FPTYPE)(3个比特)
FPTYPE是包括隔行扫描P-半帧、隔行扫描I-半帧、隔行扫描B-半帧和/或隔行扫描BI半帧的帧的帧头中提供的3-比特语法元素。FPTYPE具有隔行扫描视频帧中半帧类型的不同组合的值,如下表4所示。
表格4.半帧图片类型FLC
FPTYPE FLC |
第一半帧类型 |
第二半帧类型 |
000 |
I |
I |
001 |
I |
P |
010 |
P |
I |
011 |
P |
P |
100 |
B |
B |
101 |
B |
BI |
110 |
BI |
B |
111 |
BI |
BI |
参考距离(REFDIST)(可变大小)
REFDIST是可变大小的语法元素。该元素表示当前帧和参考帧之间帧的数量。表格5示出用来编码REFDIST值的VLC。
表格5.REFDISTVLC表格
参考帧距离 |
VLC代码字(二进制) |
VLC大小 |
0 |
00 |
2 |
1 |
01 |
2 |
2 |
10 |
2 |
N |
11[(N-3)1s]0 |
N |
表格5中的最后一行表示用来表示大于2的参考帧距离的代码字。这些被编码为(二进制)11,随后是N-31s,其中N是参考帧距离。代码字中最后一个比特为0。例如:
N=3,VLC代码字=110,VLC大小=3
N=4,VLC代码字=1110,VLC大小=4
N=5,VLC代码字=11110,VLC大小=5
图片类型(PTYPE)(可变大小)
PTYPE是隔行扫描B-帧(或其它类型的隔行扫描帧,诸如隔行扫描I-帧、或隔行扫描P-帧)的帧头中提供的可变大小的语法元素。PTYPE具有不同帧类型的值,如以下表格6所示。
表格6.图片类型VLC
PTYPE VLC |
图片类型 |
110 |
I |
0 |
P |
10 |
B |
1110 |
BI |
1111 |
跳过 |
如果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表示运动向量差值范围。
宏块模式表格(MBMODETAB)(2或3个比特)
MBMODETAB语法元素是固定长度的字段。对于隔行扫描P-半帧,MBMODETAB是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种运动向量编码模式之一,或一种亮度补偿模式(还有某些图片类型的较少可能)。若干后续元素提供附加运动向量模式和/或亮度补偿信息。
B-半帧正向模式MB比特语法元素(FORWARDMB)(可变大小)
FORWARDMB语法元素将位平面编码用来表示用正向模式编码的B-半帧中宏块。FORWARDMB语法元素还用信号表示,正向模式用原始模式来作信号表示,在该情形中正向/非正向模式决定在宏块级别上作信号表示。
图56是示出组合实现中隔行扫描B-半帧的半帧级别比特流语法的示图。在该组合实现中,隔行扫描BI-半帧的半帧级别比特流语法使用与隔行扫描I-半帧一样的语法元素。
3.选定宏块层元素
图57是示出组合实现中隔行扫描B-半帧的宏块的宏块级别比特流语法的示图。图60是示出组合实现中隔行扫描B-帧的宏块的宏块级别比特流语法的示图。特定比特流元素如下所述。宏块的数据包括宏块头,随后是块层数据。
宏块模式(MBMODE)(可变大小)
MBMODE语法元素指示宏块类型(例如隔行扫描B-半帧的1MV、4MV或帧内),以及CBP标记和运动向量数据的出现。
正向B半帧编码模式(FORWARDBIT)(1比特)
FORWARDBIT是如果半帧级别语法元素FORWARDMB表示使用了原始模式时在隔行扫描B-半帧宏块中提供的1-比特语法元素。如果FORWARDBIT=1,则宏块使用正向模式编码。
B宏块运动预测类型(BMVTYPE)(可变大小)
BMVTYPE是隔行扫描B-帧宏块和隔行扫描B-半帧宏块中提供的可变大小语法元素,它表示该宏块使用正向、反向还是插值预测。如表格7所示,对于隔行扫描B-帧的宏块,BFRACTION以及BMVTYPE的值确定使用哪一种类型。
表格7.BMVTYPE VLC
在隔行扫描B-半帧中,如果宏块模式不是正向(由FORWARDMB或FORWARDBIT语法元素所示)且不使用4MV,则发送BMVTYPE。在该情形中,BMVTYPE用于用信号表示该B宏块是反向、直接、还是插值的。这是简单的VLC,其中反向=0,直接=10,插值=11。在宏块模式不是正向且使用4MV的情形中,BMVTYPE是反向的,因为只有正向和反向模式被允许用于4MV。
插值MV提供(INTERPMVP)(1比特)
INTERPMVP是如果半帧级别语法元素BMVTYPE表示该宏块类型为插值时在B-半帧中提供的1-比特语法元素。如果INTERPMVP=1,则插值MV出现,否则它不出现。
B宏块运动向量1(BMV1)(可变大小)
BMV1是差分编码宏块的第一运动向量的可变大小的语法元素。
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比特)
MVSW是如果MB为半帧模式以及如果BMVTYPE为正向或反向时在隔行扫描B-帧宏块中提供的1-比特语法元素。如果MVSW=1,则MV类型和预测类型在从上半帧去到下半帧时从正向变成反向(或者从反向变成正向)。
两运动向量块模式(2MVBP)(可变大小)
2MVBP是在隔行扫描B-帧宏块中提供的可变大小语法元素。如果MBMODE语法元素指示该宏块包含一个运动向量,并且如果该宏块是插值宏块,则提供该语法元素。在该情形中,2MVBP指示提供两个运动向量(正向和反向运动向量)的哪一个。
运动向量数据(MVDATA)(可变大小)
MVDATA是编码宏块的运动向量差值的可变大小语法元素,它的解码在下面详细描述。
图58是示出组合实现中隔行扫描BI-半帧的宏块级别比特流语法的示图。在组合实现中,隔行扫描BI-半帧的宏块级别比特流语法使用与隔行扫描I-半帧的相同语法元素。
B.解码隔行扫描的B-半帧
以下各节描述用于解码组合实现中隔行扫描B-半帧的过程。
1.帧/半帧层解码
隔行扫描B-半帧可以是两种类型之一:1MV或混合MV。
在1MV隔行扫描B-半帧中,取决于宏块的预测类型(BMVTYPE),用0、1或2个运动向量来表示各预测块的位移。当BMVTYPE等于DIRECT(直接)时,推断出正向和反向运动向量,并且不显式地用信号表示其它的运动向量。当BMVTYPE是INTERPOLATED(插值)时,解码两个运动向量:正向和反向。在正向和反向情形中,只解码一个运动向量。1MV模式通过MVMODE图片层语法元素来用信号表示。
在混合MV隔行扫描B-半帧中,每个宏块可被编码为1MV或4MV宏块。在4MV宏块中,4个亮度块的每一个都具有与之相关联的运动向量。此外,4MV宏块只可关联于隔行扫描B-半帧中的正向或反向预测类型(BMVTYPE)。每个宏块的1MV或4MV模式通过每个宏块上的MBMODE语法元素来指示。混合MV模式通过MVMODE图片层语法元素来用信号表示。
2.宏块层解码
隔行扫描B-半帧中的宏块可以是三种可能类型之一:1MV、4MV和帧内。此外,宏块可以是四种预测类型(BMVTYPE)之一:正向、反向、直接或插值。宏块类型通过宏块层中的MBMODE语法元素用信号表示。预测类型通过帧级别位平面FORWARDMB和宏块级别BMVTYPE语法元素的组合用信号表示,其中帧级别位平面FORWARDMB用信号表示每个宏块的正向/非正向,而宏块级别BMVTYPE语法元素则在预测类型为非正向的情形中用信号表示。
以下各节描述1MV和4MV类型、以及如何用信号表示它们。
隔行扫描B-半帧中的1MV宏块
1MV宏块可出现在1MV和混合MV隔行扫描B-半帧中。在1MV宏块中,单个运动向量表示宏块中全部6个块的当前和参考图片之间的位移。对于1MV宏块,宏块层中的MBMODE语法元素表示三点:
1)该宏块类型为1MV
2)是否出现CBPCY语法元素
3)是否出现BMV1语法元素
如果MBMODE语法元素表示BMV1语法元素出现,则BMV1语法元素出现在相应位置的宏块层中。BMV1语法元素编码运动向量差值。运动向量差值与运动向量预测值相组合,以重构运动向量。如果MBMODE语法元素表示BMV1语法元素未出现,则运动向量差值被取为0且因此运动向量等于运动向量预测值。
如果MBMODE语法元素表示CBCPY语法元素出现,则CBCPY语法元素出现在相应位置的宏块层中。CBCPY语法元素表示6个块的哪一个在块层上编码。如果MBMODE语法元素表示CBCPY语法元素未出现,则CBCPY被取为等于0且对宏块中6个块的任一个都不出现块数据。
此外,如果宏块类型为1MV且宏块的预测类型是插值,则编码器使用INTERPMVP语法元素来用信号表示是否出现第二个运动向量差值BMV2。如果出现,则解码器在BMV1之后立即解码BMV2。否则,BMV2的运动向量差值被取为0,而第二个运动向量等于运动向量预测值。
当预测类型是插值时,BMV1对应于正向运动向量而BMV2对应于反向运动向量。
隔行扫描B-半帧中的4MV宏块
4MV宏块仅可出现在混合MVB-半帧图片中,且限于正向和反向预测类型。在4MV宏块中,4个亮度块的每一个都具有关联运动向量。色度块的位移从4个亮度运动向量中导出。在混合MV隔行扫描B-半帧中,4MV宏块仅可关联于正向和反向预测类型。
对于4MV宏块,宏块层中的MBMODE语法元素表示三点:
1)该宏块类型为4MV
2)是否出现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元素如何用信号表示有关全-1MV图片中宏块的信息。
表格8.全-1MV图片中的宏块模式
索引 |
宏块类型 |
CBP出现 |
MV出现 |
0 |
帧内 |
无 |
- |
1 |
帧内 |
有 |
- |
2 |
1MV |
无 |
无 |
3 |
1MV |
无 |
有 |
4 |
1MV |
有 |
无 |
5 |
1MV |
有 |
有 |
以下表格9示出MBMODE元素如何用信号表示有关混合MV图片中宏块的信息。
表格9.混合1MV图片中的宏块模式
索引 |
宏块类型 |
CBP出现 |
MV出现 |
0 |
帧内 |
无 |
- |
1 |
帧内 |
有 |
- |
2 |
1MV |
无 |
无 |
3 |
1MV |
无 |
有 |
4 |
1MV |
有 |
无 |
5 |
1MV |
有 |
有 |
6 |
4MV |
无 |
- |
7 |
4MV |
有 |
- |
8个编码表格之一用于用信号表示MBMODE。所用特定表格通过MBMODETAB语法元素用信号表示。
以下各节描述预测类型解码和直接模式运动向量的解码。
隔行扫描B-半帧中的预测类型解码(BMVTYPE)
预测类型根据以下规则进行解码。如果图片级别位平面FORWARDMB表示宏块是正向类型,则该宏块的预测类型被设置为正向。如果FORWARDMB元素被编码为原始,则编码器/解码器在宏块级别上使用一附加比特FORWARDBIT,来判定预测类型是否为正向。
如果预测类型为非正向,且如MBMODE语法元素用信号表示的该宏块使用4MV(仅在混合MV B图片中可能),则解码器可直接推断预测类型为反向,因为只有正向和反向类型可与4MV模式相关联。否则,解码器显式地解码BMVTYPE语法元素。
解码隔行扫描B-半帧中的直接模式运动向量
为了解码隔行扫描B-半帧中的直接模式运动向量,解码器首先缓存来自先前解码(即时间上在将来)的锚(I或P)图片的运动向量。这样,解码器将所缓存的对应于上半帧的运动向量用作预测值,以便于计算上部B-半帧的直接模式运动向量,并使用对应于下半帧的运动向量计算下部B-半帧的运动向量。例如,半帧z(z=上/下)中的宏块(x,y)将参考从先前解码I或P半帧z(即与当前半帧相同极性的锚半帧中的共处宏块)的宏块(x,y)中缓存的运动向量。
如果所缓存的来自锚图片的运动向量为帧内运动向量(诸如当先前解码半帧z是I-半帧时),或者如果锚图片是P-半帧但宏块(x,y)是帧内编码的,则解码器将经缓存的运动向量视为(0,0)。如果共处宏块为1MV,则解码器使用该运动向量。如果共处宏块为4MV,则解码器将图53中伪码5300所述的逻辑用来计算运动向量预测值。
在伪码5300中,SelectDirectModeMVFromColocatedMB导出在直接模式计算中使用的运动向量预测值。解码器可缓存来自先前解码的锚图片的所有运动向量,并在解码B-半帧期间应用以上直接模式,或者解码器在解码锚半帧的同时可应用以上直接模式规则,并缓存用于B-半帧的结果运动向量。
使用以上获得的运动向量,解码器应用缩放逻辑(图19中的Scale_Direct_MV)。Scale_Direct_MV获得正向和反向指示运动向量。Scale_Direct_MV可导致指向上下半帧的正向和反向运动向量。这是有效的,因为直接运动向量由编码器评估并仅在它们给出好预测时选择,还因为隔行扫描B-半帧在正向和反向方向上都使用两个参考半帧。
在另一实现中,可使用产生以直接模式缩放的运动向量的任何其它过程,包括不涉及任何缓存的过程,它在存储器受限设备中会有用(例如使用随机数发生器来模拟偏零拉普拉斯分布)。这种过程仍将起作用,因为好的编码器将丢弃对直接模式运动向量的较差推测,而在比特流中保留更为准确的推测。
3.运动向量解码过程
以下各节描述组合实现中隔行扫描B-半帧的块和宏块的运动向量解码过程。
填充正向和反向预测上下文
正向和反向运动向量被分开缓存,并分别用来预测正向和反向运动向量。例如在以上X节描述了单独缓冲区在正向和反向上下文中的使用。用于选择运动向量预测值的技术在III节背景技术、III节详细说明、以及说明书的其它部分中描述。
在解码正向运动向量期间用预测运动向量填充反向缓冲区(“缺少方向”缓冲区)时(或在解码反向运动向量期间填充正向缓冲区时),要添加另外两个细节。通常,编码器/解码器可使用运动向量类型信息(例如1MV等)、以及先前解码的运动向量的极性来形成预测。然而,在“空穴填充”情形中,因为编码器/解码器实际上并不解码缺少方向类型的运动向量,编码器/解码器并不具有运动向量类型信息或极性信息(例如相同极性或相反极性)。在该组合实现中,编码器/解码器将运动向量类型设置为1MV,并将主半帧运动向量选为预测值。图47中的伪码4700描述该组合实现中的极性选择过程。
对于帧内编码宏块,“帧内运动向量”用来填充正向和反向运动预测平面。“帧内运动向量”的任何一致表示可由解码器实现来选择。例如,如果运动向量被存储在2-字节短数组中,则“帧内运动向量”可被表示为唯一的大常数,它被填充到运动向量数组中来表示该宏块被编码为帧内宏块。
B-半帧中的正向运动向量预测
正向参考帧距离从BFRACTION语法元素和REFDIST语法元素中计算。正向运动向量预测如以上X节所述地进行。
B-半帧中的反向运动向量预测
正向参考帧距离从BFRACTION语法元素和REFDIST语法元素中计算。正向运动向量预测如以上X节所述地进行。
解码运动向量差值
BMV1、BMV2或BLKMVDATA语法元素编码宏块或宏块中各块的运动信息。1MV宏块具有BMV1和BMV2语法元素,且4MV宏块可具有0到4个之间的BLKMVDATA元素。
当预测类型(BMVTYPE)为插值时,BMV1对应于正向而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
MVRANGE |
k_x |
k_y |
range_x |
range_y |
0(缺省) |
9 |
8 |
256 |
128 |
10 |
10 |
9 |
512 |
256 |
110 |
12 |
10 |
2048 |
512 |
111 |
13 |
11 |
4096 |
1024 |
extend_x:水平运动向量差值的扩展范围,
extend_y:垂直运动向量差值的扩展范围,
extend_x和extend_y从DMVRANGE图片半帧语法元素中导出。如果DMVRANGE表示使用水平分量的扩展范围,则extend_x=1。否则,extend_x=0。类似地,如果DMVRANGE表示使用垂直分量的扩展范围,则extend_y=1。否则,extend_y=0。
变量predictor_flag是表示使用主还是非主运动向量预测值的二进制标记(0=使用主预测值,1=使用非主预测值)。offset_table和size_table数组被定义为如图61A所示。
图61B中的伪码6110示出在另一组合实现中如何解码双参考半帧的运动向量差值。伪码6110用不同方法解码运动向量差值。例如,伪码6110略去经扩展运动向量差值范围的处理。
运动向量预测值
运动向量通过将前面部分中计算的运动向量差值添加到运动向量预测值中来计算。以下各节描述在该组合实现中如何计算1MV-和混合MV隔行扫描B-半帧中宏块的运动向量预测值。
1MV隔行扫描B-半帧中的运动向量预测值
图5A和5B是示出被视作用于1MV宏块的候选运动向量预测值的宏块的位置的示图。候选预测值从左边、上方和右上方宏块中取得,除了宏块是行中最后一个宏块的情形。在该情形中,预测值B从左上方宏块而不是从右上方中取得。对于帧为一个宏块宽的特定情形,预测值总是预测值A(顶部预测值)。当前宏块在首行中的特定情形(没有A或B预测值、或者根本没有预测值)在以上参照图33A-33F以及在以下参照图62A-62F解决。
混合MV隔行扫描B-半帧中的运动向量预测值
图6A-10示出被视作用于混合MV隔行扫描B-半帧中的1MV或4MV宏块的运动向量的候选运动向量的块或宏块的位置。
隔行扫描B-半帧中的主和非主MV预测值
对于每个帧间编码的宏块,导出两个运动向量预测值。一个来自主半帧而另一个来自非主半帧。主半帧被视为包含邻域中候选运动向量预测值的大部分实际值的半帧。在不分上下的情形中,相反半帧的运动向量预测值被视为是主预测值(因为它在时间上较为接近)。帧内编码宏块在主/非主预测值的计算中不作考虑。如果全部候选预测值宏块都是帧内编码的,则主和非主运动向量预测值都被设置为0且主预测值被视为来自相反半帧。
计算隔行扫描B-半帧中的运动向量预测值
对块或宏块的每个运动向量计算两个运动向量预测值-每个参考一个。图62A-62F中的伪码6200描述在组合实现中如何对双参考情形计算运动向量预测值。(图33A-33F中的伪码3300描述在另一实现中如何对双参考情形计算运动向量预测值。)在双参考图片中,当前半帧可参考两个最新半帧。一个预测值用于相同极性的参考半帧,而另一个用于相反极性的参考半帧。
重构隔行扫描B-半帧中的运动向量
以下各节描述如何重构1MV和4MV宏块的亮度和色度运动向量。在重构运动向量之后,它随后可用作邻域运动向量以预测相邻宏块的运动向量。该运动向量将具有“相同”或“相反”的关联极性,并可用来导出另一半帧极性的运动向量预测值,用于运动向量预测。
隔行扫描B-半帧中的亮度运动向量重构
在所有情形(1MV和4MV宏块)中,亮度运动向量通过如下将差值添加到预测值来重构:
mv_x=(dmv_x+predictor_x)smod range_x
mv_y=(dmv_y+predictor_y)smod range_y
模运算“smod”是定义如下的有符号模:
A smod b=((A+b)%(2*b))-b
这确保重构向量是有效的。(A smod b)位于-b和b-1之间。range_x和range_y取决于MVRANGE。
因为隔行扫描B-半帧图片使用两个参考图片,在解码运动向量差值之后导出的predictor_flag与从运动向量预测导出的dominantpredictor值相组合,以确定哪个半帧被用作参考。图63中的伪码6300描述如何确定参考半帧。
在1MV宏块中,对于组成宏块的亮度分量的4个块将有单个运动向量。如果MBMODE语法元素表示没有MV数据在宏块层中出现,则dmv_x=0且dmv_y=0(mv_x=predictor_x和mv_y=predictor_y)。
在4MV宏块中,宏块中每个帧间编码亮度块将具有它自己的运动向量。因此在每个4MV宏块中将有0到4个亮度运动向量。如果4MVBP语法元素表示未出现块的运动向量信息,则该块的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(即,该宏块是使用其1MV运动预测值做运动补偿的),并且没有经编码的块(CBP=0)。
另一方面,如果SKIPMB字段不是1,则MBMODE半帧被解码为表示宏块的类型和有关当前宏块的其它信息,诸如以下小节中描述的信息。
用信号表示宏块模式
有15种通过MBMODE表示的可能事件;MBMODE共同指定宏块的类型(1MV、4帧MV、2半帧MV、4半帧MV、或帧内)、帧间编码宏块的变换类型(即半帧或帧或未编码的块)、以及是否有1MV宏块的运动向量差值。
设<MVP>表示用信号表示是否有非零1MV运动向量差值的二进制事件。设<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。
对于非1MV的帧间编码宏块,发送表示零差值运动向量事件的另一字段。在2半帧MV宏块的情形中,发送表示两个运动向量的哪一个包含非零运动向量差值的2MVBP字段。类似地,发送表示四个运动向量的哪一个包含非零运动向量差值的4MVBP字段。
对于帧内编码宏块,半帧/帧变换和零编码块在各个字段中编码。
2.对隔行扫描P-帧的运动向量解码
隔行扫描P-帧的运动向量预测值
计算当前宏块的运动向量预测值的过程包括两个步骤。首先,当前宏块的三个候选运动向量从其相邻宏块中收集。其次,当前宏块的运动向量预测值从候选运动向量集中计算。图40A-40B示出从中收集候选运动向量的相邻宏块。候选运动向量的收集顺序是重要的。在该组合实现中,收集顺序总是从A开始、继续到B、并在C结束。注意,如果相应块在帧边界之外或者相应块是不同片的一部分,则候选预测值被视为不存在。因而,不跨片边界执行运动向量预测。
以下各节描述是否收集不同类型宏块的候选运动向量,以及如何计算运动向量预测值。
1MV候选运动向量
在该组合实现中,图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=(MVX1+MVX2+1)>>1;
MVXA=(MVY1+MVY2+1)>>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(ValidMVy&4){
ValidMV指向相反半帧。
}else{
ValidMV指向相同半帧。
}
图76中的伪码7600描述如何计算半帧运动向量的运动向量预测值(PMVx,PMVy)。在伪码7600中,SameFieldMV和OppFieldMV表示两个候选运动向量集,而NumSameFieldMV和NumOppFieldMV表示属于每个集的候选运动向量的数量。每个集中的候选运动向量的顺序从候选A(如果它存在)开始,然后是候选B(如果它存在),再后是候选C(如果它存在)。例如,如果SameFieldMV候选运动向量集只包含候选B和候选C,则SameFieldMV[0]是候选B。
解码运动向量差值
MVDATA语法元素包含宏块的运动向量差值信息。取决于运动补偿的类型和每个宏块上用信号表示的运动向量块模式,每个宏块最多可有四个MVDATA语法元素。更具体地,
·对于1MV宏块,取决于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语法元素)如果1MV宏块是正向或反向,则它使用单个运动向量。如果它是1MV但是直接或插值的,则它使用两个运动向量。如果它是2半帧MV类型并是正向或反向预测的,则它使用两个运动向量。如果它是2半帧MV类型并是直接或插值的,则它使用四个运动向量。
以下各节描述隔行扫描B-帧中不同帧间编码的宏块类型的特征。
隔行扫描B-帧中的1MV宏块
在隔行扫描B-帧中的1MV宏块中,亮度块的位移在预测类型是正向或反向时由单个运动向量表示,而在类型是直接或插值时由两个运动向量表示。在每一情形中导出相应的色度向量。在插值和直接预测的情形中,平均来自正向和反向参考图片的运动补偿像素以形成最终预测。
隔行扫描B-帧中的2半帧MV宏块
在隔行扫描B-帧中的2半帧MV宏块中,亮度块的每个半帧的位移由一不同运动向量描述,如图37所示。此外,在从上半帧去到下半帧时该预测类型被允许从正向切换到反向,或反之,从而使上半帧从一参考图片中得到运动补偿,而下半帧从另一参考图片中得到运动补偿,如在以上VII节中所述的。
隔行扫描B-帧中的2MVBP、4MVBP的解释和运动向量顺序
在1MV宏块中,编码器用插值模式使用2MVBP语法元素,以表示出现两个运动向量的哪一个。比特1对应于正向运动向量,而比特0对应于反向运动向量。
在2半帧MV宏块中,编码器用正向和反向模式使用2MVBP语法元素,来表示出现两个半帧的运动向量的哪一个。比特1对应于上半帧运动向量而比特0对应于下半帧运动向量。当MVSW语法元素用来从用于上半帧的正向预测切换到用于下半帧的反向预测或反之时,编码器使用相同的上/下信号表示。编码器用插值模式使用4MVBP语法元素,来表示出现四个运动向量的哪一个。比特3对应于上半帧正向运动向量,比特2对应于上半帧反向运动向量,比特1对应于下半帧正向运动向量,而比特0对应于下半帧反向运动向量。
设置为‘1’的2MVBP和4MVBP的比特表示出现相应运动向量差值,同时设置为‘0’的比特表示相应运动向量等于所预测的运动向量,即未出现相应的运动向量差值。经实际解码的运动向量用与2MVBP或4MVBP中各比特相同的顺序发送。例如,在使用差值模式的2半帧MV宏块中,要由解码器接收的第一运动向量是上半帧正向运动向量,而要接收的最后(即第四)运动向量是下半帧反向运动向量。
用信号表示跳过的宏块
被跳过的宏块以与P帧相同的方式用信号表示。然而,隔行扫描B-帧中的被跳过宏块限于1MV帧类型,即不允许半帧类型。运动向量用零差值运动向量编码(即宏块是使用其1MV运动补偿值进行运动补偿的)且没有已编码块(CBP=0)。如果宏块被跳过,则编码器仅发送该宏块的BMVTYPE信息,从而运动向量可被准确预测为正向、反向、直接或插值。
用信号表示宏块模式
用信号表示宏块模式用与隔行扫描P-帧相同的方法执行,如以上XV.C.节中所述。
预测类型解码(BMVTYPE和MVSW)
隔行扫描B-帧的预测类型根据以下规则解码。如果图片层位平面DIRECTMB表示宏块是直接类型,则该宏块的预测类型被设置成直接。如果直接/非直接决定用原始模式编码,则编码器使用宏块级别上的附加比特DIRECTBBIT,来表示预测类型是否是直接。
如果预测类型是非直接的,则解码器解码BMVTYPE语法元素。如果宏块模式是“2MV半帧编码”,且如果BMVTYPE是正向或反向的,则解码器还解码MVSW比特来判定从该宏块的上半帧去到下半帧时预测类型是否将改变(即,从正向变为反向,或反之)。
解码直接模式运动向量
为了解码直接模式运动向量,解码器首先缓存来自先前解码锚帧的运动向量。具体地,对于先前解码的将来P-帧,解码器缓存来自将来P-帧的经解码亮度运动向量的最大可能数量的一半(即(2*NumberOfMB)个运动向量)。选择要缓存的来自锚帧的这些运动向量的方法在以上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-半帧的宏块的正向/非正向决定(即FORWARDMB标记),以及(2)隔行扫描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、IMODE和DATABITS。
逆转标记(INVERT)
INVERT语法元素是1-比特值,如果设置则表示该位平面具有比0比特更多的设置比特。取决于INVERT和模式,解码器将逆转所解释的位平面以重新创建原始位平面。注意,当使用原始模式时,将忽略该比特的值。以下提供对解码位平面时如何使用INVERT值的描述。
编码模式(IMODE)
IMODE语法元素是指示用来编码位平面的编码模式的可变长度值。表格11示出用来编码IMODE语法元素的代码表。以下提供对解码位平面时如何使用IMODE值的描述。
表格11.IMODE VLC代码表
IMODE VLC |
编码模式 |
10 |
Norm-2 |
11 |
Norm-6 |
010 |
跳行 |
011 |
跳列 |
001 |
Diff-2 |
位平面编码比特(DATABITS)
DATABITS语法元素是编码位平面的符号流的可变大小语法元素。用来编码位平面的方法根据IMODE的值来确定。七种编码模式在以下各节中描述。
原始模式
在该模式中,位平面被编码为每个以宏块的光栅扫描顺序扫描的符号1个比特,并作为宏块层的一部分发送。或者,该信息在半帧或帧级别上以原始模式编码,且DATABITS在长度上为rowMB x colMB比特。
Norm-2模式
如果rowMB x colMB为奇数,则第一个符号被编码为原始。后续符号成对地用自然扫描顺序编码。表格12中的二进制VLC表格被用来编码符号对。
表格1.Norm-2/Diff-2代码表
符号2n |
符号2n+1 |
代码字 |
0 |
0 |
0 |
1 |
0 |
100 |
0 |
1 |
101 |
1 |
1 |
11 |
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=bi2i,bi为该块内自然扫描顺序中第i个比特的二进制值。因此,0≤k<64。VLC、转义码、加上固定长度代码被用来用信号表示k。
Diff-6模式
Norm-6模式用来如上所述地产生位平面,然后Diff-1运算如下所述地应用于位平面。
跳行模式
在跳行编码模式中,用1个比特的开销跳过所有零行。语法如下:对于每一行,单个ROWSKIP比特表示是否跳过该行;如果跳过该行,则接着是下一行的ROWSKIP比特;否则(未跳过该行),则接着是ROWBITS比特(该行中每个宏块的比特)。因而,如果整行为零,则零比特被发送为ROWSKIP符号,并跳过ROWBITS。如果在该行中有一设置比特,ROWSKIP被设置为1,且整个行被发送为原始(ROWBITS)。各行从半帧或帧的顶部扫描到底部。
跳列模式
跳列是跳行的转置。各列从半帧或帧的顶部扫描到底部。
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)位置上的比特。
已经参照各个实施例描述和示出了本发明的各个原理,可以理解各个实施例可在排列和细节中进行更改而不背离这些原理。应当理解,在此所述的程序、过程或方法并不相关于或限于任何特定类型的计算环境,除非另有所示。各种类型的通用或专用计算环境可根据在此所述的教授内容使用或执行操作。在软件中示出的各个实施例的元素可用硬件实现,反之亦然。
根据本发明各原理可应用其中的许多可能实施例,我们将本发明解释为可在以下权利要求及其等效方案的范围和精神内的所有这些实施例。