用于视频编码的运动矢量存储的制作方法

文档序号:25543549发布日期:2021-06-18 20:40
用于视频编码的运动矢量存储的制作方法

本申请总体上涉及视频数据编码和解码,并且具体地讲,涉及在视频数据编码和解码期间存储运动矢量的方法和系统。



背景技术:

诸如数字电视、膝上型或桌面型计算机、平板计算机、数字相机、数字录音装置、数字媒体播放器、数字游戏控制台、智能电话、视频电话会议装置、视频流传输装置等的各种电子装置支持数字视频。电子装置通过实现如由mpeg-4、itu-th.263、itu-th.264/mpeg-4、part10、高级视频编码(avc)、高效视频编码(hevc)和通用视频编码(vvc)标准定义的视频压缩/解压缩标准来发送、接收、编码、解码和/或存储数字视频数据。视频压缩通常包括执行空间(帧内)预测和/或时间(帧间)预测以减少或去除视频数据中固有的冗余。针对基于块的视频编码,将视频帧分区为一个或更多个条带,其中,每一个条带具有多个视频块,所述视频块也可被称为编码树单元(ctu)。每一个ctu可包含一个编码单元(cu)或被递归地划分为较小的cu直到达到预定义的最小cu尺寸为止。每一个cu(也称为叶cu)包含一个或更多个变换单元(tu)并且每一个cu还包含一个或更多个预测单元(pu)。可以以帧内模式、帧间模式或ibc模式对每一个cu进行编码。使用针对同一视频帧内的邻近块中的参考样点的空间预测来对视频帧的帧内编码(i)条带中的视频块进行编码。视频帧的帧间编码(p或b)条带中的视频块可使用针对同一视频帧内的邻近块中的参考样点的空间预测或针对其它先前参考视频帧和/或未来参考视频帧中的参考样点的时间预测。

基于先前已被编码的参考块(例如,邻近块)的空间预测或时间预测产生针对将被编码的当前视频块的预测块。可通过块匹配算法来完成查找参考块的处理。表示将被编码的当前块与预测块之间的像素差的残差数据被称为残差块或预测误差。根据指向形成预测块的参考帧中的参考块和残差块的运动矢量来对帧间编码块进行编码。确定运动矢量的处理通常被称为运动估计。根据帧内预测模式和残差块对帧内编码块进行编码。为了进一步压缩,将残差块从像素域变换为变换域(例如,频域),从而产生残差变换系数,其中,所述残余变换系数然后可被量化。可对最初排列为二维阵列的量化变换系数进行扫描以生成变换系数的一维矢量,然后将其熵编码为视频比特流以实现甚至更多的压缩。

然后将编码的视频比特流保存在计算机可读存储介质(例如,闪存)中以被具有数字视频能力的另一电子装置存取或被有线或无线地直接发送到电子装置。电子装置然后通过例如对编码的视频比特流进行解析以从比特流获得语义元素并且至少部分地基于从比特流获得的语义元素从编码的视频比特流将数字视频数据重建为其原始格式,来执行视频解压缩(视频解压缩是与上文所描述的视频压缩相反的处理),以及在电子装置的显示器上呈现重建的数字视频数据。

随着数字视频质量从高清晰度变为4k×2k或者甚至8k×4k,将被编码/解码的视频数据量呈指数增长。如何在保持解码的视频数据的图像质量的同时更有效地对视频数据进行编码/解码是一个持续的挑战。



技术实现要素:

本申请描述了涉及视频数据编码和解码的实施方式,并且更具体地讲,涉及基于运动矢量是空间运动矢量预测值还是时间运动矢量预测值而将用于视频编码和解码的运动矢量用不同像素分辨率存储在运动矢量缓冲器中的系统和方法。

根据本申请的第一方面,在具有一个或更多个处理器和存储将由一个或更多个处理器执行的多个程序的存储器的计算装置处执行一种对视频数据进行解码的方法。计算装置执行通过以下步骤对视频数据进行解码的方法:产生具有用于对第一编码块进行解码的第一精度的第一运动矢量;根据确定启用第一高运动矢量精度模式:对第一运动矢量执行第一精度降低操作以产生具有第二精度的第一精度降低的运动矢量;以及将具有第二精度的第一精度经降低的运动矢量存储在时间运动矢量缓冲器中;根据确定不启用第一高运动矢量精度模式:将具有第一精度的第一运动矢量存储在时间运动矢量缓冲器中;以及将具有第一精度的第一运动矢量存储在空间运动矢量线缓冲器中。

根据本申请的第二方面,计算装置包括一个或更多个处理器、存储器和存储在存储器中的多个程序。所述程序在由所述一个或更多个处理器执行时促使计算装置执行如上所述的操作。

根据本申请的第三方面,一种非暂时性计算机可读存储介质存储用于由具有一个或更多个处理器的计算装置执行的多个程序。所述程序在由所述一个或更多个处理器执行时促使计算装置执行如上所述的操作。

附图说明

附图示出所描述的实施方式并且与描述一起用于解释基本原理,其中,所述附图被包括以提供对实施方式的进一步理解并且被并入于此并构成说明书的一部分。相同的附图标号表示相应的部件。

图1是示出根据本公开的一些实施方式的示例性视频编码和解码系统的框图。

图2是示出根据本公开的一些实施方式的示例性视频编码器的框图。

图3是示出根据本公开的一些实施方式的示例性视频解码器的框图。

图4a至图4d是示出根据本公开的一些实施方式的如何将帧递归地四叉树分区为多个不同尺寸的视频块的框图。

图5a是示出根据本公开的一些实施方式的将被编码的当前cu的空间上的邻近块位置和时间上的同位块位置的框图。

图5b是示出根据本公开的一些实施方式的使用波前并行处理对图片的ctu的多个行进行多线程编码的框图。

图6是示出根据本公开的一些实施方式的有条件地降低用于存储器缓冲器中的存储的运动矢量精度的示例性视频编码处理的框图。

图7是示出根据本公开的一些实施方式的视频编码器实现有条件地降低存储器缓冲器中的运动矢量存储精度的技术的示例性处理的流程图。

具体实施方式

现在将详细参照具体实施方式,其中,具体实施方式的示例在附图中示出。在以下详细描述中,阐述许多非限制性具体细节以便帮助理解这里所呈现的主题。但是对于本领域普通技术人员显而易见的是,在不脱离权利要求的范围的情况下,可使用各种替代方案,并且可在没有这些具体细节的情况下实现主题。例如,对于本领域普通技术人员显而易见的是,本文呈现的主题可在具有数字视频能力的许多类型的电子装置上来实现。

图1是示出根据本公开的一些实施方式的用于并行地对视频块进行编码和解码的示例性系统10的框图。如在图1中所示出的,系统10包括源装置12,其中,源装置12产生稍后将由目的装置14解码的视频数据并对所述视频数据进行编码。源装置12和目的装置14可包括多种电子装置中的任何一种,其中,多种电子装置包括桌上型或膝上型计算机、平板计算机、智能电话、机顶盒、数字电视、相机、显示装置、数字媒体播放器、视频游戏控制台、视频流传输装置等。在一些实施方式中,源装置12和目的装置14配备有无线通信能力。

在一些实施方式中,目的装置14可经由链路16接收将被解码的编码视频数据。链路16可包括能够将编码视频数据从源装置12移动到目的装置14的任何类型的通信介质或装置。在一个示例中,链路16可包括用于使源装置12实时地将编码视频数据直接发送到目的装置14的通信介质。编码视频数据可根据通信标准(诸如,无线通信协议)被调制,并且被发送到目的装置14。通信介质可包括任何无线或有线通信介质,诸如,射频(rf)频谱或一个或更多个物理传输线。通信介质可形成基于分组的网络(诸如,局域网、广域网或诸如因特网的全球网络)的部分。通信介质可包括路由器、交换机、基站或可用于促进从源装置12到目的装置14的通信的任何其它装置。

在一些其它实施方式中,可从输出接口22将编码视频数据发送到存储装置32。随后,可由目的装置14经由输入接口28存取存储装置32中的编码视频数据。存储装置32可包括多种分布式或本地存取的数据存储介质中的任意一种,诸如硬盘驱动器、蓝光光盘、dvd、cd-rom、闪存、易失性或非易失性存储器,或者用于存储编码视频数据的任何其它合适的数字存储介质。在另一示例中,存储装置32可与文件服务器或者可保存由源装置12产生的编码视频数据的另一中间存储装置相应。目的装置14可经由流传输或下载从存储装置32存取存储的视频数据。文件服务器可以是能够存储编码视频数据并且将编码视频数据发送到目的装置14的任何类型的计算机。示例性文件服务器包括(例如,用于网站的)网络服务器、ftp服务器、网络附接存储(nas)装置或本地盘驱动器。目的装置14可通过适合于存取存储在文件服务器上的编码视频数据的任何标准数据连接来存取编码视频数据,其中,所述标准数据连接包括无线信道(例如,wi-fi连接)、有线连接(例如,dsl、电缆调制解调器等)或无线信道与有线连接两者的组合。编码视频数据从存储装置32的传输可以是流传输、下载传输或者流传输和下载传输的组合。

如在图1中所示出的,源装置12包括视频源18、视频编码器20和输出接口22。视频源18可包括诸如视频捕捉装置(例如,摄像机)、包含先前捕捉的视频的视频存档、用于从视频内容提供者接收视频的视频馈送接口、和/或用于产生计算机图形数据作为源视频的计算机图形系统、或者这样的源的组合。作为一个示例,如果视频源18是安全监控系统的摄像机,则源装置12和目的装置14可形成相机电话或视频电话。然而,在本申请中所描述的实施方式通常可适用于视频编码,并且可被应用于无线和/或有线应用。

可由视频编码器20对捕捉的、预捕捉的或计算机产生的视频进行编码。可经由源装置12的输出接口22将编码视频数据直接发送到目的装置14。编码视频数据还(或者可选地)可被存储到存储装置32上以供稍后由目的装置14或其它装置存取以用于解码和/或播放。输出接口22还可包括调制解调器和/或发送器。

目的装置14包括输入接口28、视频解码器30和显示装置34。输入接口28可包括接收器和/或调制解调器,并且经由链路16接收编码视频数据。经由链路16通信传送或在存储装置32上提供的编码视频数据可包括由视频编码器20产生以用于视频解码器30在对视频数据进行解码时使用的多种语义元素。这样的语义元素可被包括在通信介质上发送、存储在存储介质上或存储在文件服务器上的编码视频数据内。

在一些实施方式中,目的装置14可包括显示装置34,其中,显示装置34可以是集成显示装置和被配置为与目的装置14进行通信的外部显示装置。显示装置34将解码视频数据显示给用户,并且可包括多种显示装置中的任意一种,诸如液晶显示器(lcd)、等离子显示器、有机发光二极管(oled)显示器或另一类型的显示装置。

视频编码器20和视频解码器30可根据专有标准或行业标准(诸如,vvc、hevc、mpeg-4、part10、高级视频编码(avc))或此类标准的扩展而进行操作。应当理解的是,本申请不限于特定的视频编码/解码标准,并且可适用于其他视频编码/解码标准。通常预期源装置12的视频编码器20可被配置为根据这些当前或将来的标准中的任何一种对视频数据进行编码。类似地,通常还预期目的装置14的视频解码器30可被配置为根据这些当前或将来的标准中的任意一种对视频数据进行解码。

视频编码器20和视频解码器30每个可被实现为多种合适的编码器电路中的任意一种,诸如一个或更多个微处理器、数字信号处理器(dsp)、专用集成电路(asic)、现场可编程门阵列(fpga)、离散逻辑、软件、硬件、固件或者一个或更多个微处理器、数字信号处理器(dsp)、专用集成电路(asic)、现场可编程门阵列(fpga)、离散逻辑、软件、硬件和固件的任意组合。电子装置在部分地以软件来实现时可将用于软件的指令存储在合适的非暂时性计算机可读介质中,并且使用一个或更多个处理器以硬件执行指令以执行在本公开中所公开的视频编码/解码操作。视频编码器20和视频解码器30中的每一个可被包括在一个或更多个编码器或解码器中,其中,编码器或解码器中的任意一个可被集成为各个装置中的组合编码器/解码器(codec)的部分。

图2是示出根据在本申请中所描述的一些实施方式的示例性视频编码器20的框图。视频编码器20可执行视频帧内的视频块的帧内和帧间预测编码。帧内预测编码依赖于空间预测以减少或去除给定视频帧或图片内的视频数据中的空间冗余。帧间预测编码依赖于时间预测以减少或去除视频序列的相邻视频帧或图片内的视频数据中的时间冗余。

如在图2中所示出的,视频编码器20包括视频数据存储器40、预测处理单元41、解码图片缓冲器(dpb)64、求和器50、变换处理单元52、量化单元54和熵编码单元56。预测处理单元41还包括运动估计单元42、运动补偿单元44、分区单元45、帧内预测处理单元46和帧内块复制(bc)单元48。在一些实施方式中,视频编码器20还包括用于视频块重建的反量化单元58、逆变换处理单元60和求和器62。去块滤波器(未示出)可位于求和器62与dpb64之间以对块边界进行滤波以从重建视频去除块效应。除了去块滤波器之外,还可使用环路内滤波器(未示出)来对求和器62的输出进行滤波。视频编码器20可采取固定或可编程硬件单元的形式,或者可在所示出的固定或可编程硬件单元中的一个或更多个之间分开。

视频数据存储器40可存储将由视频编码器20的组件编码的视频数据。可例如从视频源18获得视频数据存储器40中的视频数据。dpb64是存储参考视频数据以用于视频编码器20在(例如,以帧内或帧间预测编码模式)对视频数据进行编码时使用的缓冲器。视频数据存储器40和dpb64可由多种存储器装置中的任意一种形成。在各种示例中,视频数据存储器40可与视频编码器20的其它组件一起在芯片上,或者相对于那些组件在芯片外。

如在图2中所示出的,在接收视频数据之后,预测处理单元41内的分区单元45将视频数据分区为视频块。此分区还可包括根据与视频数据相关联的预定义划分结构(诸如四叉树结构)将视频帧分区为条带、并行块或其它较大的编码单元(cu)。视频帧可被划分为多个视频块(或被称为并行块的视频块集)。预测处理单元41可基于误差结果(例如,编码速率和失真等级)针对当前视频块选择多个可能的预测编码模式中的一个,诸如多个帧内预测编码模式中的一个或者多个帧间预测编码模式中的一个。预测处理单元41可将得到的帧内或帧间预测编码块提供给求和器50以产生残差块,并且将得到的帧内或帧间预测编码块提供给求和器62以重建用于随后用作参考帧的一部分的编码块。预测处理单元41还将语义元素(例如运动矢量、帧内模式指示符、分区信息和其它此类语义信息)提供给熵编码单元56。

为了选择适用于当前视频块的帧内预测编码模式,预测处理单元41内的帧内预测处理单元46可与将被编码的当前块在同一帧中的一个或更多个邻近块相关地执行当前视频块的帧内预测编码以提供空间预测。预测处理单元41内的运动估计单元42和运动补偿单元44与一个或更多个参考帧中的一个或更多个预测块相关地执行当前视频块的帧间预测编码以提供时间预测。视频编码器20可执行多个编码过程,例如以针对视频数据的每一个块选择适当的编码模式。

在一些实施方式中,运动估计单元42通过根据视频帧的序列内的预定模式产生运动矢量来确定用于当前视频帧的帧间预测模式,其中,所述运动矢量指示当前视频帧内的视频块的预测单元(pu)相对于参考视频帧内的预测块的位移。由运动估计单元42执行的运动估计是产生估计针对视频块的运动运动矢量的处理。例如,运动矢量可指示当前视频帧或图片内的视频块的pu相对于与当前帧内正被编码的当前块(或其它编码单元)相关的参考帧内的预测块(或其它编码单元)的位移。预定模式可将序列中的视频帧指定为p帧或b帧。帧内bc单元48可按照与由运动估计单元42确定用于帧间预测的运动矢量类似的方式确定用于帧内bc编码的矢量(例如,块矢量),或者可利用运动估计单元42确定块矢量。

预测块是在像素差方面被视为与将被编码的视频块的pu紧密匹配的参考帧的块,其中,所述像素差可通过绝对差总和(sad)、平方差总和(ssd)或其它差度量来确定。在一些实施方式中,视频编码器20可计算针对存储在dpb64中的参考帧的子整数像素位置的值。例如,视频编码器20可插值得到参考帧的四分之一像素位置、八分之一像素位置或其它分数像素位置的值。因此,运动估计单元42可相对于全像素位置和分数像素位置执行运动搜索,并且输出具有分数像素精度的运动矢量。

运动估计单元42通过对pu的位置与从第一参考帧列表(列表0)或第二参考帧列表(列表1)选择的参考帧的预测块的位置进行比较来计算针对帧间预测编码的帧中的视频块的pu的运动矢量,其中,第一参考帧列表和第二参考帧列表中的每一个标识dpb64中存储的一个或更多个参考帧。运动估计单元42将计算出的运动矢量发送到运动补偿单元44,然后将其发送到熵编码单元56。

由运动补偿单元44执行的运动补偿可包含基于由运动估计单元42确定的运动矢量提取或产生预测块。在接收到针对当前视频块的pu的运动矢量时,运动补偿单元44可在参考帧列表中的一个中定位运动矢量所指向的预测块,从dpb64检索预测块,并且将预测块转发到求和器50。求和器50然后通过从正被编码的当前视频块的像素值减去由运动补偿单元44提供的预测块的像素值来形成像素差值的残差视频块。形成残差视频块的像素差值可包括亮度差分量或色度差分量或者亮度差分量和色度差分量两者。运动补偿单元44还可产生与视频帧的视频块相关联的语义元素以用于由视频解码器30在对视频帧的视频块进行解码时使用。语义元素可包括例如定义用于识别预测块的运动矢量的语义元素、指示预测模式的任何标志或本文所描述的任何其它语义信息。应注意的是,运动估计单元42和运动补偿单元44可被高度集成,但出于概念目的而单独进行示例说明。

在一些实施方式中,帧内bc单元48可按照与上文结合运动估计单元42和运动补偿单元44所描述的方式类似的方式产生矢量并提取预测块,但其中,预测块在与正被编码的当前块同一帧中,并且所述矢量被称为块矢量而非运动矢量。具体地讲,帧内bc单元48可确定用于对当前块进行编码的帧内预测模式。在一些示例中,帧内bc单元48可例如在单独的编码过程期间使用各种帧内预测模式对当前块进行编码,并且通过率失真分析来测试其性能。接下来,帧内bc单元48可在各种测试的帧内预测模式之中选择适当的帧内预测模式来使用且相应地产生帧内模式指示符。例如,帧内bc单元48可针对各种测试的帧内预测模式使用速失真分析来计算率失真值,并且将测试的模式之中的具有最佳率失真特性的帧内预测模式选为将被使用的适当的帧内预测模式。率失真分析大体上确定编码块与被编码以产生编码块的原始未编码块之间的失真(或误差)量、以及用于产生编码块的比特率(即,比特数)。帧内bc单元48可根据针对各种编码块的失真和速率计算比率,以确定哪种帧内预测模式针对块展现最佳率失真值。

在其它示例中,帧内bc单元48可全部或部分地使用运动估计单元42和运动补偿单元44来执行用于根据这里所描述的实施方式的帧内bc预测的此类功能。在任何一种情况下,对于帧内块复制,预测块可以是在像素差方面被视为与将被编码的块紧密匹配的块,其中,所述像素差可由绝对差总和(sad)、平方差总和(ssd)或其它差度量来确定,并且识别预测块的步骤可包括计算子整数像素位置的值。

无论预测块是来自根据帧内预测的同一帧还是来自根据帧间预测的不同帧,视频编码器20可通过从正被编码的当前视频块的像素值减去预测块的像素值来形成像素差值,从而形成残差视频块。形成残差视频块的像素差值可包括亮度分量差和色度分量差两者。

如上所述,作为由运动估计单元42和运动补偿单元44执行的帧间预测或由帧内bc单元48执行的帧内块复制预测的替代方式,帧内预测处理单元46可对当前视频块进行帧内预测。具体地讲,帧内预测处理单元46可确定用于对当前块进行编码的帧内预测模式。为此,帧内预测处理单元46可例如在单独的编码过程期间使用各种帧内预测模式来对当前块进行编码,并且帧内预测处理单元46(或在一些示例中,模式选择单元)可从测试的帧内预测模式中选择适当的帧内预测模式来使用。帧内预测处理单元46可将指示选择的用于块的帧内预测模式的信息提供给熵编码单元56。熵编码单元56可将指示选择的帧内预测模式的信息编码到比特流中。

在预测处理单元41经由帧间预测或帧内预测确定用于当前视频块的预测块之后,求和器50通过从当前视频块减去预测块来形成残差视频块。残差块中的残差视频数据可被包括在一个或更多个变换单元(tu)中并且被提供给变换处理单元52。变换处理单元52使用变换(诸如,离散余弦变换(dct)或构思上类似的变换)将残差视频数据变换为残差变换系数。

变换处理单元52可将得到的变换系数发送到量化单元54。量化单元54对变换系数进行量化以进一步减小比特率。量化处理还可减小与系数中的一些或全部相关联的比特深度。可通过调整量化参数来修改量化的等级。在一些示例中,量化单元54随后可执行包括量化的变换系数的矩阵的扫描。可选地,熵编码单元56可执行扫描。

在量化之后,熵编码单元56使用例如上下文自适应可变长度编码(cavlc)、上下文自适应二进制算术编码(cabac)、基于语义的上下文自适应二进制算术编码(sbac)、概率区间划分熵(pipe)编码或者另一熵编码方法或技术将量化的变换系数熵编码为视频比特流。编码的比特流然后可被传输到视频解码器30,或者被存档在存储装置32中以在稍后被发送到视频解码器30或被视频解码器30检索。熵编码单元56还可对针对正被编码的当前视频帧的运动矢量和其它语义元素进行熵编码。

反量化单元58和逆变换处理单元60分别应用反量化和逆变换以在像素域中重建残差视频块以用于产生用于预测其它视频块的参考块。如上文所提及的,运动补偿单元44可从存储在dpb64中的帧的一个或更多个参考块产生运动补偿预测块。运动补偿单元44还可将一个或更多个插值滤波器应用于预测块以计算用于运动估计的子整数像素值。

求和器62将重建的残差块与由运动补偿单元44产生的运动补偿预测块相加以生成参考块以存储在dpb64中。参考块然后可被帧内bc单元48、运动估计单元42和运动补偿单元44用作预测块以对后续视频帧中的另一视频块进行帧间预测。

图3是示出根据本申请的一些实施方式的示例性视频解码器30的框图。视频解码器30包括视频数据存储器79、熵解码单元80、预测处理单元81、反量化单元86、逆变换处理单元88、求和器90和dpb92。预测处理单元81还包括运动补偿单元82、帧内预测处理单元84和帧内bc单元85。视频解码器30可执行与上文结合图2的针对视频编码器20所描述的编码处理大体上互逆的解码处理。例如,运动补偿单元82可基于从熵解码单元80接收的运动矢量产生预测数据,而帧内预测单元84可基于从熵解码单元80接收的帧内预测模式指示符来产生预测数据。

在一些示例中,视频解码器30的单元可被分配任务以执行本申请的实施方式。另外,在一些示例中,本公开的实施方式可分散在视频解码器30的单元中的一个或更多个之中。例如,帧内bc单元85可单独地或与视频解码器30的其它单元(例如,运动补偿单元82、帧内预测处理单元84和熵解码单元80)组合地执行本申请的实施方式。在一些示例中,视频解码器30可以不包括帧内bc单元85,并且帧内bc单元85的功能可由预测处理单元81的其它组件(例如,运动补偿单元82)来执行。

视频数据存储器79可存储将被由视频解码器30的其它组件解码的视频数据(例如,编码视频比特流)。可例如从存储装置32、从本地视频源(例如相机)、经由视频数据的有线或无线网络通信或通过访问物理数据存储介质(例如,闪盘驱动器或硬盘)获得存储在视频数据存储器79中的视频数据。视频数据存储器79可包括存储来自编码的视频比特流的编码视频数据的编码图片缓冲器(cpb)。视频解码器30的解码图片缓冲器(dpb)92存储用于由视频解码器30在(例如,以帧内或帧间预测编码模式)对视频数据进行解码时使用的参考视频数据。视频数据存储器79和dpb92可由多种存储器装置(例如,包括同步dram(sdram)的动态随机存取存储器(dram)、磁阻式ram(mram)、电阻式ram(rram)或其它类型的存储器装置)中的任何一个形成。出于示意性的目的,在图3中将视频数据存储器79和dpb92描绘为视频解码器30的两个有区别的组件。但所属领域的技术人员将明白的是,视频数据存储器79和dpb92可由同一存储器装置或单独的存储器装置来提供。在一些示例中,视频数据存储器79可与视频解码器30的其它组件一起在芯片上,或者相对于那些组件在芯片外。

在解码处理期间,视频解码器30接收表示编码的视频帧的视频块和相关联的语义元素的编码的视频比特流。视频解码器30可在视频帧级别和/或视频块级别接收语义元素。视频解码器30的熵解码单元80对比特流进行熵解码以产生量化系数、运动矢量或帧内预测模式指示符和其它语义元素。熵解码单元80然后将运动矢量和其它语义元素转发到预测处理单元81。

当视频帧被编码为帧内预测编码(i)帧或者被编码用于其它类型的帧中的帧内编码预测块时,预测处理单元81的帧内预测处理单元84可基于用信号传送的帧内预测模式和来自当前帧的先前解码块的参考数据来产生用于当前视频帧的视频块的预测数据。

当视频帧被编码为帧间预测编码(即,b或p)帧时,预测处理单元81的运动补偿单元82基于从熵解码单元80接收的运动矢量和其它语义元素产生针对当前视频帧的视频块的一个或更多个预测块。可从参考帧列表中的一个参考帧列表内的参考帧产生预测块中的每一个。视频解码器30可基于存储在dpb92中的参考帧使用默认构建技术来构建参考帧列表(列表0和列表1)。

在一些示例中,当根据这里所描述的帧内bc模式对视频块进行编码时,预测处理单元81的帧内bc单元85基于从熵解码单元80接收的块矢量和其它语义元素产生针对当前视频块的预测块。预测块可在与由视频编码器20定义的当前视频块同一图片的重建区域内。

运动补偿单元82和/或帧内bc单元85通过对运动矢量和其它语义元素进行解析来确定针对当前视频帧的视频块的预测信息,并且然后使用预测信息生成针对正被解码的当前视频块的预测块。例如,运动补偿单元82使用所接收的语义元素中的一些来确定用于对视频帧的视频块进行编码的预测模式(例如,帧内或帧间预测)、帧间预测帧类型(例如,b或p)、针对帧的参考帧列表中的一个或更多个的构建信息、帧的每一个帧间预测编码视频块的运动矢量、针对帧的每一个帧间预测编码视频块的帧间预测状态和用于对当前视频帧中的视频块进行解码的其它信息。

类似地,帧内bc单元85可使用所接收的语义元素中的一些,例如,用于确定当前视频块是使用帧内bc模式被预测的标志、帧的哪些视频块在重建区域内并且应被存储在dpb92中的构建信息、针对帧的每一个帧内bc预测视频块的块矢量、针对帧的每一个帧内bc预测视频块的帧内bc预测状态、以及用于对当前视频帧中的视频块进行解码的其它信息。

运动补偿单元82还可使用如由视频编码器20在视频块的编码期间使用的插值滤波器执行插值,以计算针对参考块的子整数像素的插值。在此情况下,运动补偿单元82可从所接收的语义元素确定由视频编码器20使用的插值滤波器,并且使用所述插值滤波器来生成预测块。

反量化单元86使用由视频编码器20针对视频帧中的每一个视频块计算的相同量化参数对在比特流中提供且由熵解码单元80熵解码的量化变换系数进行反量化以确定量化的等级。逆变换处理单元88将逆变换(例如,逆dct、逆整数变换或构思上类似的逆变换处理)应用于变换系数,以便在像素域中重建残差块。

在运动补偿单元82或帧内bc单元85基于矢量和其它语义元素产生针对当前视频块的预测块之后,求和器90通过对来自逆变换处理单元88的残差块与由运动补偿单元82和帧内bc单元85产生的相应预测块求和来重建针对当前视频块的解码视频块。环路内滤波器(未图示)可位于求和器90与dpb92之间以对解码视频块进行进一步处理。然后将给定帧中的解码视频块存储在dpb92中,其中,dpb92存储用于下一视频块的后续运动补偿的参考帧。dpb92或与dpb92分离的存储装置还可存储解码的视频以用于稍后呈现在显示装置(诸如,图1的显示装置34)上。

在典型的视频编码处理中,视频序列通常包括帧或图片的有序集合。每一个帧可包括被表示为sl、scb和scr的三个样点阵列。sl是亮度样点的二维阵列。scb是cb色度样点的二维阵列。scr是cr色度样点的二维阵列。在其它情况下,帧可以是单色的并因此仅包括一个亮度样点的二维阵列。

如在图4a中所示出的,视频编码器20(或更具体地讲,分区单元45)通过首先将帧分区为编码树单元(ctu)的集合来产生帧的编码的表示。视频帧可包括按照光栅扫描顺序从左侧到右侧以及从上方到下方连续排序的整数数量个ctu。每一个ctu是最大逻辑编码单元,并且由视频编码器20在序列参数集中用信号传送ctu的宽度和高度,使得视频序列中的所有ctu具有128×128、64×64、32×32和16×16中的一个的同一尺寸。但是应当注意的是,本申请不一定限于特定尺寸。如在图4b中所示出的,每一个ctu可包括亮度样点的一个编码树块(ctb)、色度样点的两个相应的编码树块以及用于对编码树块的样点进行编码的语义元素。语义元素描述编码的像素块的不同类型的单元的属性以及可如何在视频解码器30处重建视频序列,其中,所述语义元素包括帧间预测或帧内预测、帧内预测模式、运动矢量和其它参数。在单色图片或具有三个单独色彩平面的图片中,ctu可包括单个编码树块和用于对编码树块的样点进行编码的语义元素。编码树块可以是n×n的样点块。

为了实现更好的性能,视频编码器20可对ctu的编码树块递归地执行树分区(例如,二叉树分区、四叉树分区或二叉树分区和四叉树分区两者的组合)并且将ctu划分为较小的编码单元(cu)。如在图4c中所描绘的,首先将64×64ctu400划分为四个较小的cu,其中,每一个cu具有32×32的块尺寸。在四个较小的cu之中,按照块尺寸将cu410和cu420每一个划分为四个16×16的cu。将两个16×16cu430和cu440每一个进一步划分为块尺寸为8×8的四个cu。图4d描绘示出如在图4c中所描绘的ctu400的分区处理的最终结果的四叉树数据结构,其中,四叉树的每一个叶节点与范围从32×32到8×8的各个尺寸的一个cu相应。类似于在图4b中所描绘的ctu,每一个cu可包括亮度样点的编码块(cb)和两个相应的同一尺寸帧的色度样点的编码块、以及用于对编码块的样点进行编码的语义元素。在单色图片或具有三个单独色彩平面的图片中,cu可包括单个编码块和用于对编码块的样点进行编码的语义结构。

在一些实施方式中,视频编码器20还可将cu的编码块分区为一个或更多个m×n预测块(pb)。预测块是应用了相同的预测(帧间或帧内)的样点的矩形(正方形或非正方形)块。cu的预测单元(pu)可包括亮度样点的预测块、两个相应的色度样点的预测块和用于预测所述预测块的语义元素。在单色图片或具有三个单独色彩平面的图片中,pu可包括单个预测块和用于预测所述预测块的语义结构。视频编码器20可针对cu的每一个pu的亮度预测块、cb预测块和cr预测块产生预测亮度块、预测cb块和预测cr块。

视频编码器20可使用帧内预测或帧间预测来产生针对pu的预测块。如果视频编码器20使用帧内预测来产生针对pu的预测块,则视频编码器20可基于与pu相关联的帧的解码的样点产生pu的预测块。如果视频编码器20使用帧间预测来产生pu的预测块,则视频编码器20可基于除了与pu相关联的帧之外的一个或更多个帧的解码样点产生pu的预测块。

在视频编码器20针对cu的一个或更多个pu产生预测亮度块、预测cb块和预测cr块之后,视频编码器20可通过从cu的原始亮度编码块减去cu的预测亮度块来产生针对cu的亮度残差块,使得cu的亮度残差块中的每一个样点指示cu的预测亮度块之一中的亮度样点与cu的原始亮度编码块中的相应样点之间的差。类似地,视频编码器20可针对cu分别产生cb残差块和cr残差块,使得cu的cb残差块中的每一个样点指示cu的预测cb块之一中的cb样点与cu的原始cb编码块中的相应样点之间的差,并且cu的cr残差块中的每一个样点可指示cu的预测cr块之一中的cr样点与cu的原始cr编码块中的相应样点之间的差。

此外,如在图4c中所示出的,视频编码器20可使用四叉树分区来将cu的亮度残差块、cb残差块和cr残差块分解为一个或更多个亮度变换块、cb变换块和cr变换块。变换块是应用了相同变换的矩形(正方形或非正方形)样点块。cu的变换单元(tu)可包括亮度样点的变换块、色度样点的两个相应变换块和用于对变换块样点进行变换的语义元素。因此,cu的每一个tu可与亮度变换块、cb变换块和cr变换块相关联。在一些示例中,与tu相关联的亮度变换块可以是cu的亮度残差块的子块。cb变换块可以是cu的cb残差块的子块。cr变换块可以是cu的cr残差块的子块。在单色图片或具有三个单独色彩平面的图片中,tu可包括单个变换块和用于对变换块的样点进行变换的语义结构。

视频编码器20可将一个或更多个变换应用于tu的亮度变换块以产生针对tu的亮度系数块。系数块可以是变换系数的二维阵列。变换系数可以是标量。视频编码器20可将一个或更多个变换应用于tu的cb变换块以产生针对tu的cb系数块。视频编码器20可将一个或更多个变换应用于tu的cr变换块以产生针对tu的cr系数块。

在产生系数块(例如,亮度系数块、cb系数块或cr系数块)之后,视频编码器20可对系数块进行量化。量化通常是指对变换系数进行量化以能够减少用于表示变换系数的数据量,从而提供进一步压缩的处理。在视频编码器20对系数块进行量化之后,视频编码器20可对指示量化的变换系数的语义元素进行熵编码。例如,视频编码器20可对指示量化的变换系数的语义元素执行上下文自适应二进制算术编码(cabac)。最终,视频编码器20可输出包括形成作为编码的帧和相关联数据的表示的比特的序列的比特流,其中,所述比特流被保存在存储装置32中或被发送到目的装置14。

在接收到由视频编码器20产生的比特流之后,视频解码器30可对比特流进行解析以从比特流获得语义元素。视频解码器30可至少部分地基于从比特流获得的语义元素重建视频数据的帧。重建视频数据的处理通常与由视频编码器20执行的编码处理互逆。例如,视频解码器30可对与当前cu的tu相关联的系数块执行逆变换以重建与当前cu的tu相关联的残差块。视频解码器30还通过将针对当前cu的pu的预测块的样点与针对当前cu的tu的变换块的相应样点相加来重建当前cu的编码块。在重建针对帧的每一个cu的编码块之后,视频解码器30可重建帧。

如以上所提及的,视频编码主要使用两种模式(即,帧内的预测(或帧内预测)和帧间的预测(或帧间预测))来实现视频压缩。应注意的是,ibc可被视为帧内预测或第三模式。在两种模式之间,因为使用运动矢量来从参考视频块预测当前视频块,所以帧间预测比帧内预测对编码效率的贡献更大。

但随着不断改进的视频数据捕捉技术和用于保留视频数据中的细节的更精细的视频块尺寸,表示针对当前帧的运动矢量所需的数据量也大幅增加。克服此挑战的一种方式得益于以下事实:不仅空间域和时间域两者中的一组邻近cu出于预测目的而具有相似的视频数据,而且这些邻近cu之间的运动矢量也是类似的。因此,可通过探索空间邻近cu和/或时间同位cu的空间相关性和时间相关性来将空间邻近cu和/或时间同位cu的运动信息用作当前cu的运动信息(例如,运动矢量)的近似,这也被称为当前cu的“运动矢量预测值”(mvp)。

作为将如上文结合图2所描述的由运动估计单元42确定的当前cu的实际运动矢量编码到视频比特流中的代替,从当前cu的实际运动矢量减去当前cu的运动矢量预测值以产生针对当前cu的运动矢量差(mvd)。通过这样做,无需将由运动估计单元42针对帧的每一个cu确定的运动矢量编码到视频比特流中,并且可显著减少用于表示视频比特流中的运动信息的数据量。

类似于在编码块的帧间预测期间选择参考帧的预测块的处理,视频编码器20和视频解码器30两者需要采用一组规则来使用与当前cu的空间邻近cu和/或时间同位cu相关联的那些潜在候选运动矢量来构建针对当前cu的运动矢量候选列表(也被称为“合并列表”),并且然后从运动矢量候选列表选择一个成员作为针对当前cu的运动矢量预测值。通过这样做,无需在视频编码器20与视频解码器30之间发送运动矢量候选列表本身,并且运动矢量候选列表内的所选择的运动矢量预测值的索引足以使视频编码器20和视频解码器30使用运动矢量候选列表内的相同运动矢量预测值来对当前cu进行编码和解码。

在一些实施方式中,每一个帧间预测cu具有三个运动矢量预测模式,其中,所述三个运动矢量预测模式包括用于构建运动矢量候选列表的帧间(其也被称为“高级运动矢量预测”(amvp))、跳过以及合并。在每一个模式下,可根据下文所描述的算法将一个或更多个运动矢量候选添加到运动矢量候选列表。最终,将候选列表中的运动矢量中的一个用作将由视频编码器20编码到视频比特流中或由视频解码器30从视频比特流解码的帧间预测cu的最佳运动矢量预测值。为了从候选列表找到最佳运动矢量预测值,引入运动矢量竞争(mvc)方案以从包括空间运动矢量候选和时间运动矢量候选的给定的运动矢量的候选集(即,运动矢量候选列表)选择运动矢量。

除了从空间邻近cu或时间同位cu推导运动矢量预测值候选之外,还可从所谓的“基于历史的运动矢量预测”(hmvp)表推导运动矢量预测值候选。hmvp表容纳预定义数量个运动矢量预测值,其中,每一个运动矢量预测值被用于对同一行的ctu(或有时是同一ctu)的特定cu进行编码/解码。由于这些cu的空间/时间的接近度,因此hmvp表中的运动矢量预测值中的一个可被再次用于对同一行的ctu内的不同cu进行编码/解码的可能性很高。因此,可通过在构建运动矢量候选列表的处理时包括hmvp表来实现更高的编码效率。

在一些实施方式中,hmvp表具有固定长度(例如,5),并且以准先进先出(fifo)方式被管理。例如,当对cu的一个帧间编码块进行解码时,针对cu重建运动矢量。因为重建的运动矢量可以是后续cu的运动矢量预测值,使用利用此类运动矢量在运行时更新hmvp表。当更新hmvp表时,存在两种情境:(i)重建的运动矢量与hmvp表中的其它现有运动矢量不同或者(ii)重建的运动矢量与hmvp表中的现有运动矢量中的一个现有运动矢量相同。针对第一情境,如果hmvp表未满,则将重建的运动矢量作为最新的一个运动矢量添加到hmvp表。如果hmvp表已满,则将重建的运动矢量添加为最新的一个运动矢量之前,需要首先从hmvp表移除hmvp表中的最旧的运动矢量。换句话说,在此情况下,hmvp表类似于fifo缓冲器,使得位于fifo缓冲器的头部处并且与另一先前帧间编码块相关联的运动信息被移出缓冲器,使得将重建的运动矢量作为hmvp表中的最新的成员添加到fifo缓冲器的尾部。针对第二情境,在将重建的运动矢量作为最新运动矢量添加到hmvp表之前,从hmvp表移除hmvp表中的与重建的运动矢量大体上相同的现有运动矢量。如果还以fifo缓冲器的形式保持hmvp表,则将hmvp表中的相同运动矢量之后的运动矢量预测值向前移位一个元素以占据由移除的运动矢量留下的空间,并且然后将重建的运动矢量作为hmvp表中的最新的成员添加到fifo缓冲器的尾部。

可在不同预测模式(诸如,amvp、合并、跳过等)下将hmvp表中的运动矢量添加到运动矢量候选列表。已发现的是,存储在hmvp表中的即使不与当前块相邻的先前帧间编码块的运动信息也可被用于更有效的运动矢量预测。

在针对当前cu的运动矢量的给定的候选集内选择一个mvp候选之后,视频编码器20可产生用于相应的mvp候选的一个或更多个语义元素并且将它们编码到视频比特流中,使得视频解码器30可使用语义元素从视频比特流检索mvp候选。根据用于构建运动矢量候选集的特定模式,不同模式(例如,amvp、合并、跳过等)具有不同的语义元素的集合。对于amvp模式,语义元素包括帧间预测指示符(列表0、列表1或双向预测)、参考索引、运动矢量候选索引、运动矢量预测残差信号等。对于跳过模式和合并模式,因为当前cu从编码的合并索引所引用的邻近cu继承包括帧间预测指示符、参考索引和运动矢量的其它语义元素,所以仅将合并索引编码到比特流中。在跳过编码的cu的情况下,也省略运动矢量预测残差信号。

图5a是示出根据本公开的一些实施方式的将被编码/解码的当前cu的空间邻近块位置和时间同位块位置的框图。对于给定的模式,通过首先检查与空间上的左侧邻近块位置和上方邻近块位置相关联的运动矢量的可用性以及与时间同位块位置相关联的运动矢量的可用性,然后检查hmvp表中的运动矢量,来构建运动矢量预测(mvp)候选列表。在构建mvp候选列表的处理期间,从候选列表移除一些冗余的mvp候选,并且如果必要的话,添加零值运动矢量以使候选列表具有固定长度(注意的是,不同模式可具有不同固定长度)。在构建mvp候选列表之后,视频编码器20可从候选列表选择最佳运动矢量预测值并且将指示所选择的候选的相应索引编码到视频比特流中。

使用图5a作为示例并且假设候选列表的固定长度为二,可通过在amvp模式下按顺序执行以下步骤来构建当前cu的运动矢量预测值(mvp)候选列表:

1)从空间上的邻近cu选择mvp候选

a)从以a0开始并以a1结束的两个左侧空间邻近cu中的一个推导最多一个未缩放的mvp候选;

b)如果在前一步骤中没有来自左侧的未缩放mvp候选可用,则从以a0开始并以a1结束的两个左侧空间邻近cu中的一个推导最多一个缩放的mvp候选;

c)从以b0开始、然后b1并以b2结束的三个上方空间邻近cu中的一个推导最多一个未缩放的mvp候选;

d)如果a0和a1都不可用或者如果它们以帧内模式被编码,则从以b0开始、然后是b1并以b2结束的三个上方空间邻近cu中的一个推导最多一个缩放的mvp候选;

2)如果在先前步骤中找到两个mvp候选并且它们相同,则从mvp候选列表移除所述两个候选中的一个;

3)从时间同位cu选择mvp候选

a)如果经过先前步骤之后的mvp候选列表不包括两个mvp候选,则从时间同位cu(例如,t0)推导最多一个mvp候选

4)从hmvp表选择mvp候选

a)如果经过先前步骤之后的mvp候选列表不包括两个mvp候选,则从hmvp表推导最多两个基于历史的mvp;以及

5)如果经过先前步骤之后的mvp候选列表不包括两个mvp候选,则将最多两个零值mvp添加到mvp候选列表。

由于在上文构建的amvp模式mvp候选列表中仅存在两个候选,因此将相关联语义元素(如二进制标志)编码到比特流中以指示将候选列表内的两个mvp候选中的哪一个用于对当前cu进行解码。

在一些实施方式中,可通过按照类似于以上步骤的顺序执行一组类似步骤来构建用于跳过或合并模式下的当前cu的mvp候选列表。应注意的是,被称为“成对合并候选”的一种特殊类型的合并候选也被包括在用于跳过或合并模式的mvp候选列表中。通过对两个先前推导出的合并模式运动矢量候选的mv求平均来产生成对合并候选。在当前cu的条带头中用信号传送合并mvp候选列表的大小(例如,从1到6)。对于合并模式中的每一个cu,使用截断一元二值化(tu)来对最佳合并候选的索引进行编码。利用上下文对合并索引的第一个二进制位进行编码,并且将旁路编码用于其它二进制位。

如上文所提及的,可将基于历史的mvp在空间mvp和时间mvp之后添加到amvp模式mvp候选列表或合并mvp候选列表。先前的帧间编码cu的运动信息被存储在hmvp表中并且被用作针对当前cu的mvp候选。在编码/解码处理期间保持hmvp表。每当存在非子块帧间编码cu时,(如果hmvp表已满并且在该表中不存在相关联运动矢量信息的相同副本的话)在从hmvp表移除存储在hmvp表的第一条目中的运动矢量信息的同时,将相关联运动矢量信息作为新候选添加到hmvp表的最后一个条目。可选地,在将相关联运动矢量信息添加到hmvp表的最后一个条目之前,从该表中移除相关联运动矢量信息的相同副本。

如上所述,帧内块复制(ibc)可显著提高屏幕内容材料的编码效率。由于ibc模式被实现为块级别编码模式,因此在视频编码器20处执行块匹配(bm)以找到针对每一个cu的最优块矢量。此处,块矢量被用于指示从当前块到参考块的位移,其中,所述参考块已经在当前图片内被重建。ibc编码cu被视为除帧内预测模式或帧间预测模式之外的第三预测模式。

在cu级别,可如下将ibc模式用信号传送为ibcamvp模式或ibc跳过/合并模式:

–ibcamvp模式:以与在上文所描述的在amvp模式下对运动矢量差进行编码相同的方式对cu的实际块矢量与从cu的块矢量候选选择的cu的块矢量预测值之间的块矢量差(bvd)进行编码。块矢量预测方法使用两个块矢量候选作为预测值,其中,(如果被ibc编码的话)一个块矢量候选来自左侧相邻者并且另一块矢量候选来自上方邻近者。当任何一个邻近者都不可用时,默认块矢量将被用作块矢量预测值。用信号传送二进制标志以指示块矢量预测值索引。ibcamvp候选列表由空间候选和hmvp候选组成。

–ibc跳过/合并模式:合并候选索引被用于指示来自邻近ibc编码块的合并候选列表(也被称为“合并列表”)中的块矢量候选中的哪一个被用于预测针对当前块的块矢量。ibc合并候选列表由空间候选、hmvp候选和成对候选组成。

提高现有技术编码标准所采用的编码效率的另一方法是使用例如多核处理器将并行处理引入视频编码/解码处理。例如,已将波前并行处理(wpp)作为使用多个线程对多行ctu进行并行编码或解码的特征引入hevc中。

图5b是示出根据本公开的一些实施方式的使用波前并行处理(wpp)对图片的多行的ctu进行多线程编码的框图。当启用wpp时,可以以波前方式对多行ctu进行处理,其中,在两个邻近波前的开始之间可能存在两个ctu的延迟。例如,为了使用wpp对图片500进行编码,视频编解码器(例如,视频编码器20和视频解码器30)可将图片500的编码树单元划分为多个波前,其中,每一个波前与图片中各行ctu相应。视频编码器可例如使用第一编码器核或线程开始对顶部波前进行编码。在视频编码器已经对顶部波前的两个或更多个ctu进行了编码之后,视频编码器可例如使用第二并行编码器核或线程与对顶部波前进行编码并行地开始对第二至顶部波前进行编码。在视频编码器已经对第二至顶部波前的两个或更多个ctu进行了编码之后,视频编码器可例如使用第三并行编码器核或线程与对更高波前进行编码并行地开始对第三至顶部波前进行编码。此模式可沿着图片500中的波前继续。在本公开中,视频编解码器正在使用wpp同时编码的一组ctu被称为“ctu组”。因此,当视频编码器使用wpp对图片进行编码时,ctu组中的每一个ctu可属于图片的唯一波前,并且ctu可相对于各个上方波前中的ctu偏移图片的至少两列ctu。

视频编码器可基于上述波前的前两个块的数据、以及针对包括当前波前的第一编码块的条带的条带头的一个或更多个元素,来对当前波前的上下文进行初始化以执行当前波前的上下文自适应二进制算术编码(cabac)。视频编码器可在对后续ctu行上方的ctu行的两个ctu进行编码之后,使用上下文状态执行后续波前(或ctu行)的cabac初始化。换句话说,在开始对当前波前进行编码之前,假设当前波前不是图片的ctu的顶行,视频编码器(或更具体地讲,视频编码器的线程)可对当前波前上方的波前的至少两个块进行编码。视频编码器然后可在对当前波前上方的波前的至少两个块进行编码之后对针对当前波前的cabac上下文进行初始化。在该示例中,图片500的每一个ctu行是分离的分区并且具有相关联的线程(wpp线程1、wpp线程2、……),使得可对图片500中的ctu行的数量进行并行编码。

因为hmvp表的当前实施方式使用全局运动矢量(mv)缓冲器来存储先前重建的运动矢量,所以无法在上文结合图5b所描述的启用wpp的并行编码方案上实现此hmvp表。具体地讲,由视频编码器的编码/解码处理的所有线程共享全局mv缓冲器的事实阻碍了第一wpp线程(即,wpp线程1)之后的wpp线程的开始,这是因为这些线程必须等待hmvp表根据第一wpp线程(即,第一ctu行)的最后一个ctu(即,最右侧的ctu)完成更新。

为了克服该问题,提出了利用多个ctu行专用缓冲器替换由wpp线程共享的全局mv缓冲器,使得ctu行的每一个波前具有其自己的缓冲器,其中,所述缓冲器用于当在视频编码器处启用wpp时存储与由相应的wpp线程处理的ctu行相应的hmvp表。应注意的是,每一个ctu行具有其自己的hmvp表相当于在对ctu行的第一cu进行编码之前重置hmvp表。hmvp表重置是清除由另一ctu行的编码产生的hmvp表中的所有运动矢量。在一个实施方式中,重置操作是将hmvp表中的可用运动矢量预测值的大小设置为零。在另一实施方案中,重置操作可将hmvp表中的所有条目的参考索引设置为无效值(诸如,-1)。通过这样做,无论amvp、合并和跳过三种模式中的哪一种模式,特定波前内的针对当前ctu的mvp候选列表的构建都取决于与处理对该特定波前的wpp线程相关联的hmvp表。除了上述双ctu延迟之外,不同波前之间不存在相互依赖性,并且可像图5b中描绘的wpp处理一样并行进行与不同波前相关联的运动矢量候选列表的构建。换句话说,在开始处理特定波前时,将hmvp表重置为空,而不影响由另一wpp线程对ctu的另一波前的编码。在一些情况下,可在每一个单独的ctu的编码之前将hmvp表重置为空。在此情况下,hmvp表中的运动矢量限于特定ctu,并且可能存在较高机会将hmvp表内的运动矢量选择为特定ctu内的当前cu的运动矢量。

图6是示出根据本公开的一些实施方式的有条件地降低用于存储器缓冲器中的存储的运动矢量精度的示例性视频编码处理600的框图。尽管视频编码处理600可以是编码或解码处理,但出于说明性目的,下文将视频编码处理600描述为由视频解码器(例如,经由图3的预测处理单元81的视频解码器30)执行的解码处理。

当对以帧间模式编码的当前块进行解码时,视频解码器30从解码图片缓冲器92检索先前存储的运动信息以对当前块执行运动估计。在一些情形(例如,高级运动矢量预测(amvp))中,先前存储的运动信息包含可用作用于预测当前块的运动矢量的参考运动矢量的其它参考块的运动矢量。视频解码器30然后将残差运动数据(例如,运动矢量差(mvd))与预测运动矢量相加以形成用于当前块的运动补偿的运动矢量。视频解码器30然后通过使用所产生的运动矢量对参考块执行运动补偿来产生当前块的预测块。

例如,视频解码器30可将与同一视频帧中的当前块的邻近块相关联的运动矢量用于空间运动矢量预测(smvp),或者将与其它视频帧中的时间同位编码块相关联的运动矢量用于时间运动矢量预测(tmvp)。在smvp时,视频解码器选择与邻近块相关联的运动矢量(例如,与图5a的编码块a0、编码块a1、编码块b0、编码块b1和编码块b2相关联的运动矢量)以预测针对当前编码块的运动矢量。如果邻近块共享与当前块相同的参考帧,则所选择的运动矢量可被用于预测而无需被缩放。另一方面,如果邻近块与当前块不共享相同的参考帧,则视频解码器30需要在使用所选择的运动矢量来预测当前块的运动矢量之前对所选择的运动矢量进行缩放。在tmvp时,与不同视频帧的同位块相关联的运动矢量(例如,与图5a的块t1和块t0相关联的运动矢量)被用于预测针对当前块的运动矢量。由于与不同帧的同位块相关联的运动矢量不共享与当前块相同的参考帧,因此视频解码器需要在预测之前对所选择的运动矢量进行缩放。

在一些实施例中,视频解码器30将与空间邻近块或时间同位块相关联的运动矢量存储在存储器缓冲器(例如,图3的解码图片缓冲器92)中以用作用于后续运动矢量预测(例如,smvp或tmvp)的参考运动矢量。例如,当视频解码器30对帧(或条带)的块进行解码时,将与重建块相关联的运动矢量存储在与帧相关联的空间运动矢量线缓冲器中。因此,先前存储的运动矢量可被用于同一帧中的后续编码块的smvp。

在一些实施例中,在已重建帧或条带的所有块之后,将与帧或条带的重建块相关联的运动矢量存储在时间运动矢量缓冲器中以随后用于其它帧或条带的块的tmvp。可选地,随着相应块被重建时,运动矢量被连续地存储在时间运动矢量缓冲器中。

在一些实施例中,时间运动矢量缓冲器中的基本单元是n×n块。例如,4×4块被用作hevc中的时间运动矢量缓冲器中的基本单元。当在时间运动矢量缓冲器中存在许多类似运动矢量时,可将运动矢量压缩用于减少由tvmp的运动矢量占用的存储器空间。例如,对于每个16×16块,仅与左上方4×4块相关联的运动矢量可被选择以被存储在时间运动矢量缓冲器中,并且随后被用作16×16块的代表性运动矢量。

在一些实施例中,为了提高运动估计精度,存储具有诸如1/2像素、1/4像素、1/8像素、1/16像素等的子像素精度的运动矢量。例如,在vvc中,可存储具有1/16像素精度的运动矢量,使得通过求平均或缩放处理产生的运动矢量可实现比hevc中的运动矢量精度更高的运动矢量精度(例如,1/16像素或1/8像素)。

但存储具有提高的精度的运动矢量也需要更多的存储器空间。例如,存储精度为1/16像素的运动矢量比存储精度仅为1/8像素的运动矢量需要更多的字节。为了在不显著影响运动矢量预测准确度的情况下减少用于存储运动矢量的存储器空间要求,下面描述有条件地减少用于存储在存储器缓冲器中的运动矢量精度的方法。

如在图6中所描绘的,在第一视频解码处理602期间,视频解码器30从解码图片缓冲器92获得运动矢量604,其中,运动矢量604被用作用于通过运动补偿重建帧或条带的块的参考运动矢量。应注意的是,帧的一些块可以不具有参考运动矢量,例如如果所述块是以帧内模式被重建的情况。

视频解码器30首先检查与运动矢量604相关联的精度以确定精度是否大于预定义阈值(606)。例如,如果预定义阈值为1/8像素并且运动矢量604具有1/16像素的精度,则运动矢量具有大于预定义阈值的精度。

如果运动矢量604具有大于预定义阈值的精度(606-是),则视频解码器30对运动矢量604执行精度降低610以产生精度降低的运动矢量604’。例如,运动矢量604可在精度降低610之前具有1/16像素的精度,并且运动矢量604’可在预测降低610之后具有1/8像素的精度。在一些实施例中,视频解码器30通过对运动矢量604执行逐位下移或逐位右移运算来执行精度降低610。例如,如果运动矢量604具有1/16像素的精度,并且预定义阈值为1/8像素,则视频解码器30可右移或下移一个比特以减少用于存储此类精度降低的运动矢量604’的存储器使用。视频解码器30然后将精度降低的运动矢量604’存储在时间运动矢量缓冲器612中。作为精度降低610的结果,存储运动矢量604’比存储运动矢量604需要更少的存储器空间。当使用固定比特(例如,针对每一个运动矢量分量的16比特)来存储运动矢量时,将较低精度用于运动矢量存储增加了所存储的运动矢量的有效范围。在一些实施方式中,视频解码器30通过利用对运动矢量604的舍入执行逐位下移或逐位右移运算来执行精度降低610。例如,通过等式:x=(x+1<<(n-1))>>n将运动矢量604(其为1/16像素)的x分量和y分量向下舍入到较低精度(例如,1/4)。n是表示用于表示原始精度的比特深度与降低的精度之间的差。在该示例中,n=2。

如果运动矢量604具有等于或小于预定义阈值的精度(606-否),则视频解码器30将具有原始精度的运动矢量604直接存储在时间运动矢量缓冲器612中。

在一些实施例中,在将运动矢量604(或精度降低的运动矢量604’)存储在时间运动矢量缓冲器612中的同时或之前,视频解码器30将具有原始精度的运动矢量604存储在空间运动矢量线缓冲器614中。

可选地,视频解码器30在将运动矢量604存储在空间运动矢量线缓冲器614中之前对运动矢量604执行精度降低。例如,视频解码器30可将运动矢量604的精度与预定义阈值(该预定义阈值可与如上文所描述的用于存储在时间运动矢量缓冲器612中的预定义阈值相同或不同)进行比较,并且然后根据比较结果执行精度降低操作。

总之,尽管通过先前的解码处理(例如,第一视频解码处理602)产生的运动矢量具有第一精度,但视频解码器30可存储具有低于第一精度的不同的第二精度的运动矢量。精度降低取决于运动矢量是存储在空间运动矢量线缓冲器中还是存储在时间运动矢量缓冲器中,并且还取决于是否针对特定编码/解码处理启用高精度。

尽管时间运动矢量缓冲器中的运动矢量可具有降低的精度,但因为在tmvp期间,运动矢量必须在充当用于预测针对当前块的运动矢量的参考之前被缩放(例如,与运动矢量相关联的块具有与当前块的参考帧不同的参考帧),并且运动矢量的此类缩放可能无法保持运动矢量的原始精度,所以可忽略由此类精度降低引入的误差。换句话说,因为后续缩放操作无论如何都将引入估计误差,所以针对tmvp存储具有高精度的运动矢量可能浪费存储器使用。

接下来,在第二视频解码处理608(在第一视频解码处理602之后发生)期间,视频解码器30接收重建针对将被解码的当前块的运动矢量的请求。注意的是,第二视频解码处理608可以是被应用于与和运动矢量604相关联的块同一帧的块或者被应用于与它们不同的帧的块的处理。

在第二视频解码处理608期间,视频解码器30识别当前块的运动矢量预测模式(616)。例如,可使用smvp或tmvp预测与当前块相关联的运动矢量。如果将使用smvp预测当前块的运动矢量(即,当前块与和运动矢量604相关联的块在同一帧上),则视频解码器30从空间运动矢量线缓冲器614检索相应运动矢量604。如果将使用tmvp预测与当前块相关联的运动矢量(即,当前块不在与和运动矢量604相关联的块同一帧上),则视频解码器30从时间运动矢量缓冲器612检索精度降低的运动矢量604’(618)。

最后,视频解码器30使用smvp或tmvp从检索到的运动矢量预测针对当前块的运动矢量(620)。

图7是示出根据本公开的一些实施方式的视频编码器实现有条件地降低用于缓冲器中的存储的运动矢量精度的技术的示例性处理700的流程图。尽管处理700可以是解码或编码处理,但为方便起见,将处理700描述为由视频解码器(例如,图3的视频解码器30)执行的解码处理。

作为第一步骤,视频解码器(例如,使用缩放或求平均处理)产生具有用于对第一编码块进行解码的第一精度的第一运动矢量(702)。在一些实施例中,第一运动矢量被用于对针对第一编码块的预测块进行运动补偿。可通过任何运动矢量预测方法(例如,选择空间运动矢量候选或时间运动矢量候选)产生第一运动矢量。第一精度可以是基于子块的值,如1/2像素、1/4像素、1/8像素、1/16像素、1/32像素、1/64像素等。

如果视频解码器确定启用第一高运动矢量精度,则视频解码器对第一运动矢量执行第一精度降低操作以产生具有第二精度的第一精度降低的运动矢量,并且将具有第二精度的第一精度降低的运动矢量存储在时间运动矢量缓冲器中(704)。在一些实施例中,如果第一精度大于第一预定义精度阈值,则启用第一高运动矢量精度模式。例如,如果预定义精度阈值为1/8像素,并且第一精度为1/16像素,则启用第一高运动矢量精度模式。在一些实施例中,执行第一精度降低操作的步骤包括对第一运动矢量执行逐位操作,诸如右移或下移一些比特。例如,如果第一精度为x个比特,则通过对第一运动矢量右移或下移y个比特,精度降低的运动矢量具有(x-y)个比特的第二精度。因此,与存储具有第一精度的第一运动矢量相比,存储第一精度降低的运动矢量需要较少存储器。

如果视频解码器确定不启用第一高运动矢量精度,则视频解码器将具有第一精度的第一运动矢量存储在时间运动矢量缓冲器中(706)。

接下来,视频解码器将具有第一精度的第一运动矢量存储在空间运动矢量线缓冲器中(708)。

在一些实施例中,随后,视频解码器接收预测针对第二编码块的第二运动矢量的请求。例如,第二编码块可以是与第一编码块同一帧上的块,或者可以是稍后的视频帧的编码块。如果视频解码器确定第二编码块在与第一编码块同一帧上(例如,将使用空间运动矢量预测来预测第二运动矢量),则视频解码器从空间运动矢量线缓冲器检索相应的参考运动矢量。如果视频解码器确定第二编码块在与第一编码块不同的帧上(例如,将使用时间运动矢量预测来预测第二运动矢量),则视频解码器然后从时间运动矢量缓冲器检索相应的参考运动矢量。在一些实施例中,时间运动矢量缓冲器中的参考运动矢量可具有降低的精度。视频解码器然后使用检索到的参考运动矢量预测第二运动矢量。

在一些实施例中,如果视频解码器确定启用第二高运动矢量精度模式,则视频解码器在将第一运动矢量存储在空间运动矢量线缓冲器中之前对第一运动矢量执行第二精度降低操作。例如,如果第一精度大于第二预定义精度阈值,则可启用第二高运动矢量精度模式。第二预定义精确度阈值可与第一预定义精确度阈值相同或不同。作为结果,具有降低的精度的第一运动矢量被存储在空间运动矢量线缓冲器中。例如,如果第一预定义阈值是1/8像素,第二预定义阈值是1/16像素,并且第一精度是1/64像素,则视频解码器将具有降低的精度的运动矢量存储在空间运动矢量线缓冲器和时间运动矢量缓冲器两者中。

在一些实施例中,当帧包括将被解码的多个块时,视频解码器在相应块被解码(例如,运动信息变得可用)之后立即将相应的运动矢量存储在空间运动矢量线缓冲器中,但仅在帧中的所有块已被解码之后才将运动矢量存储在时间运动矢量缓冲器中。

在一个或更多个示例中,所描述的功能可以以硬件、软件、固件或硬件、软件和固件的任何组合来实现。如果以软件实现,则所述功能可作为一个或更多个指令或代码被存储在计算机可读介质上或经由计算机可读介质被传输,并且由基于硬件的处理单元来执行。计算机可读介质可包括计算机可读存储介质,其中,所述计算机可读存储介质相应于有形介质(诸如数据存储介质)或包括促进(例如,根据通信协议)将计算机程序从一处传送到另一处的任何介质的通信介质。以此方式,计算机可读介质通常可相应于(1)作为非暂时性的有形计算机可读存储介质、或(2)通信介质(例如,信号或载波)。数据存储介质可以是可由一个或更多个计算机或者一个或更多个处理器存取以检索用于实现本申请中描述的实现方式的指令、代码和/或数据结构的任何可用介质。计算机程序产品可包括计算机可读介质。

在这里的实施方式的描述中所使用的术语仅出于描述特定实施方式的目的,并不旨在限制权利要求的范围。如在实施方式的描述和所附权利要求中所使用的,除非上下文另有明确说明,否则单数形式“一”、“一个”和“该(所述)”意在也包括复数形式。还将理解的是,如这里所使用的术语“和/或”是指并且涵盖相关联的所列项中的一个或更多个项的任何和所有可能的组合。将进一步理解的是,术语“包括”和/或“包括着”在本说明书中被使用时指定所述特征、元件和/或组件的存在,但不排除一个或更多个其他特征、元件、组件和/或其他特征、元件和组件的组的存在或添加。

还应当理解的是,尽管这里可使用术语第一、第二等来描述各种元件,但这些元件不应受这些术语的限制。这些术语仅被用于将一个元件与另一个元件区分开。例如,在不脱离实施方式的范围的情况下,第一电极可被称为第二电极,并且类似地,第二电极可被称为第一电极。第一电极和第二电极都是电极,但它们不是同一电极。

已经出于说明和描述的目的呈现了本申请的描述,并且本申请的描述并不意在穷举或将本发明限于所公开的形式。受益于前面的描述和相关联的附图中所呈现的教导,对于本领域普通技术人员来说许多修改、变化和替代实施方式将是显而易见的。选择和描述实施例是为了最好地解释本发明的原理、实际应用,并且使本领域的其他技术人员能够理解本发明的各种实施方式,并且最好地利用基本原理和具有适合于预期的特定用途的各种修改的各种实施方式。因此,应当理解的是,权利要求的范围不限于所公开的实施方式的具体示例,并且修改和其他实施方式意在被包括在所附权利要求的范围内。

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