用于视频译码中最坏情况下带宽减少的限制的制作方法

文档序号:26013211发布日期:2021-07-23 21:34阅读:99来源:国知局
用于视频译码中最坏情况下带宽减少的限制的制作方法

本申请要求于2019年9月20日提交的美国申请no.16/577,991的优先权,该美国申请要求于2018年9月24日提交的美国临时申请no.62/735,723和于2018年9月27日提交的美国临时申请no.62/737,604的权益,以上三者中的每一个的全部内容通过引用合并于此。

本公开涉及视频编码和视频解码。



背景技术:

数字视频功能可以被集成到各种各样的设备中,包括数字电视、数字直播系统、无线广播系统、个人数字助理(pda)、膝上型或台式计算机、平板计算机、电子书阅读器、数码相机、数字记录设备、数字媒体播放器、视频游戏设备、视频游戏控制台、蜂窝或卫星无线电话、所谓的“智能电话”、视频电话会议设备、视频流设备等等。数字视频设备实现视频译码技术,例如那些在由下述定义的标准中描述的技术:mpeg-2、mpeg-4、itu-th.263、itu-th.264/mpeg-4第10部分、高级视频译码(avc)、itu-th.265/高效视频译码(hevc)、以及上述各标准的扩展。通过实现这些视频译码技术,上述视频设备可以更有效地对数字视频信息进行发送、接收、编码、解码和/或存储。

视频译码技术包括空间(图片内)预测和/或时间(图片间)预测,以减少或去除视频序列中固有的冗余。对于基于块的视频译码,可以将视频切片(例如,视频图片或视频图片的一部分)划分为视频块,这些视频块也可以被称为编码树单元(ctu)、编码单元(cu)和/或编码节点。对于图片的帧内编码的(i)切片中的视频块,使用相对于同一图片中相邻块中的参考样本的空间预测进行编码。图片的帧间编码的(p或b)切片中的视频块,可以使用相对于同一图片中相邻块中参考样本的空间预测或者相对于其他参考图片中的参考样本的时间预测。图片可以被称为帧,并且参考图片可以被称为参考帧。



技术实现要素:

本公开总体上涉及用于减少用于预测视频数据的样本的存储器带宽的量的技术。视频译码器(例如,视频编码器或视频解码器)基于视频数据的一个或更多个参考块的样本(称为参考样本)来预测视频数据的当前块的样本。为了根据参考样本来预测当前块的样本,视频译码器必须从存储器中检索这些参考样本。视频译码器用来预测视频数据的当前块的样本的存储器带宽的量可以是所检索到的参考样本的数量。从存储器中检索参考样本会消耗功率并增加处理时间。在这种情况下,在某些示例中,希望最小化视频译码器所使用的存储器带宽。

根据本发明的一种或更多种技术,视频译码器可以施加一个或更多个约束以减少用于预测视频数据的当前块的样本的存储器带宽的量。举例来说,视频译码器可以确定当前块所需的存储器带宽,并且可以基于当前块的所确定的存储器带宽是否满足带宽阈值来对用于预测当前块的样本的运动补偿方法进行选择性地修改。以这种方式,视频译码器可以减少用于预测当前块的样本所消耗的功率的量和/或所需的处理时间。

在一个示例中,一种方法包括:获得针对被选择以使用仿射模式进行译码的、视频数据的当前块的控制点运动向量(cpmv)的值;确定对基于cpmv的值所得到的多个参考块的样本进行访问所需的存储器带宽是否满足带宽阈值;基于所确定的存储器带宽是否满足所述带宽阈值,来对用于预测视频数据的当前块的样本的运动补偿方法进行选择性地修改;以及使用经选择性地修改的运动补偿方法,从多个参考块的样本中预测视频数据的当前块的样本。

在另一示例中,一种用于对视频数据进行译码的设备包括:被配置为存储视频数据的存储器;以及以电路实现的一个或更多个处理器,一个或更多个处理器被配置为:获得针对被选择以使用仿射模式进行译码的、视频数据的当前块的控制点运动向量(cpmv)的值;确定对基于cpmv的值所得到的多个参考块的样本进行访问所需的存储器带宽是否满足带宽阈值;基于所确定的存储器带宽是否满足带宽阈值,来对用于预测视频数据的当前块的样本的运动补偿方法进行选择性地修改;以及使用经选择性地修改的运动补偿方法,从多个参考块的样本中预测视频数据的当前块的样本。

在另一示例中,一种其上存储有指令的计算机可读存储介质,当执行这些指令时,使得视频译码器的一个或更多个处理器:获得针对被选择以使用仿射模式进行译码的、视频数据的当前块的控制点运动向量(cpmv)的值;确定对基于cpmv的值所得到的多个参考块的样本进行访问所需的存储器带宽是否满足带宽阈值;基于所确定的存储器带宽是否满足所述带宽阈值,来对用于预测视频数据的当前块的样本的运动补偿方法进行选择性地修改;以及使用经选择性地修改的运动补偿方法,从多个参考块的样本中预测视频数据的当前块的样本。

在另一示例中,一种用于对视频数据进行译码的设备包括:用于获得针对被选择以使用仿射模式进行译码的、视频数据的当前块的控制点运动向量(cpmv)的值的部件;用于确定对基于cpmv的值所得到的多个参考块的样本进行访问所需的存储器带宽是否满足带宽阈值的部件;用于基于所确定的存储器带宽是否满足带宽阈值来对用于预测视频数据的当前块的样本的运动补偿方法进行选择性地修改的部件;以及用于使用经选择性地修改的运动补偿方法从多个参考块的样本中预测视频数据的当前块的样本的部件。

在以下附图和描述中阐明了本公开一个或更多个示例的细节。根据说明书、附图和权利要求书,上述技术的多个方面的其他特征、目的和优势将是显而易见的。

附图说明

图1是示出执行本公开的技术的一种示例视频编码和解码系统的框图。

图2a和图2b是示出一种示例四叉树二叉树(qtbt)结构以及对应的译码树单元(ctu)的示意图。

图3a-3e是示出视频数据的示例划分的示意图。

图4是示出可以执行本公开的技术的一种示例视频编码器的框图。

图5是示出可以执行本公开的技术的一种示例视频解码器的框图。

图6是示出仿射模式下的控制点的示意图。

图7是示出根据本公开的一个或更多个方面的用于重建当前块的非重叠参考区域的示意图。

图8是示出根据本公开的一个或更多个方面的用于重建当前块的重叠参考区域的示意图。

图9是示出一种用于对当前块进行编码的示例方法的流程图。

图10是示出一种用于对当前块进行解码的示例方法的流程图。

图11是示出根据本公开的一种或更多种技术的一种用于对用于预测视频数据的存储器带宽进行管理的示例方法的流程图。

图12是示出根据本公开的一个或更多个方面的一种简化的存储器带宽测试的示意图。

具体实施方式

图1是示出可以执行本公开的技术的一种示例视频编码和解码系统100的框图。本公开的技术通常针对译码(编码和/或解码)视频数据。通常,视频数据包括用于处理视频的任何数据。因而,视频数据可以包括原始的,未编码的视频,已编码视频,已解码(例如,重建的)视频以及视频元数据,例如信令数据。

如图1所示,在本示例中,系统100包括源设备102,源设备102提供将要由目标设备116解码和显示的已编码视频数据。具体的,源设备102经由计算机可读介质110向目标设备116提供视频数据。源设备102和目标设备116可以包括多种设备中的任何设备,包括台式计算机、笔记本(即,膝上型)电脑、平板电脑、机顶盒、例如智能电话的电话手机、电视、相机、显示设备、数字媒体播放器、视频游戏控制台、视频流设备等等。在某些情况下,源设备102和目标设备116被配置用于无线通信,并且因此被称为无线通信设备。

在图1的示例中,源设备102包括视频源104、存储器106、视频编码器200和输出接口108。目标设备116包括输入接口122、视频解码器300、存储器120和显示设备118。根据本公开所述,源设备102的视频编码器200和目标设备116的视频解码器300可以被配置为对用于减少经仿射译码的视频数据的存储器带宽的技术进行应用。因而,源设备102表示视频编码设备的示例,而目标设备116表示视频解码设备的示例。在其他示例中,源设备和目标设备可以包括其他组件或布置。例如,源设备102可以从诸如外部相机的外部视频源接收视频数据。同样地,目标设备116可以与外部显示设备连接,而不是包括集成显示设备。

图1中所示的系统100仅仅是一个示例。总的来说,任何数字视频编码和/或解码设备都可以执行用于减少经仿射译码的视频数据的存储器带宽的技术。源设备102和目标设备116仅仅是这些译码设备的示例,其中,源设备102生成经译码的视频数据以传输到目标设备116。本公开将“译码”设备称为进行数据的译码(编码和/或解码)的设备。因此,视频编码器200和视频解码器300表示译码设备的示例,具体分别表示视频编码器的示例和视频解码器的示例。在某些示例中,设备102、116可以以基本对称的方式运行,使得设备102、116中的每一个都包括视频编码组件和视频解码组件。因此,系统100可以支持视频设备102、116之间的单向或双向视频传输,例如,用于视频流,视频回放,视频广播或视频电话。

通常,视频源104表示视频数据(即,原始的、未编码的视频数据)的源,并将视频数据的连续系列的图片(也称为“帧”)提供给视频编码器200。视频编码器200为这些图片编码数据。源设备102的视频源104可以包括例如摄像机的视频捕获设备,包含先前捕获的原始视频的视频档案,和/或用于从视频内容提供者接收视频的视频馈送接口。作为另一可替换方案,视频源104可以生成基于计算机图形的数据作为源视频,或者实时视频,存档视频和计算机生成的视频的组合。在每种情况下,视频编码器200都对捕获到的视频数据、预捕获到的视频数据或计算机生成的视频数据进行编码。视频编码器200可以将图片从接收顺序(有时称为“显示顺序”)重新排列为用于译码的译码顺序。视频编码器200可以生成包括已编码视频数据的比特流。之后,源设备102可以经由输出接口108将已编码视频数据输出到计算机可读介质110上,以用于通过例如目标设备116的输入接口122的接收和/或检索。

源设备102的存储器106和目标设备116的存储器120表示通用存储器。在某些示例中,存储器106和存储器120可以存储原始视频数据,例如,来自视频源104的原始视频和来自视频解码器300的原始的、已解码的视频数据。另外或可替换地,存储器106和存储器120可以存储可分别由例如视频编码器200和视频解码器300执行的软件指令。尽管在本示例中被与视频编码器200和视频解码器300分离地被示出,但应该理解的是,视频编码器200和视频解码器300还可以包括内部存储器,以实现功能上相似或等效的目的。此外,存储器106和存储器120可以存储例如从视频编码器200输出的已编码视频数据以及输入到视频解码器300的已编码视频数据。在某些示例中,存储器106和存储器120的部分可以被分配为一个或更多个视频缓存器,例如,以存储原始视频数据、已解码视频数据和/或已编码视频数据。

计算机可读介质110可以表示能够将已编码视频数据从源设备102传输到目标设备116的任何类型的介质或设备。在一个示例中,计算机可读介质110表示使得源设备102,例如经由射频网络或基于计算机的网络,实时地将已编码视频数据直接发送到目标设备116的通信介质。根据诸如无线通信协议的通信标准,输出接口108可以对包括已编码视频数据的传输信号进行调制,并且输入接口122可以对接收到的传输信号进行解调。通信介质可以包括任何无线或有线通信介质,例如射频(rf)频谱或一条或更多条物理传输线。通信介质可以形成基于分组的网络的部分,诸如局域网,广域网或诸如因特网的全球网络。通信介质可以包括路由器、交换机、基站或任何其他有助于从源设备102到目标设备116的通信的装备。

在某些示例中,源设备102可以将已编码数据从输出接口108输出到存储设备112。类似地,目标设备116可以经由输入接口122访问来自存储设备112的已编码数据。存储设备112可以包括多种分布式的或本地访问的数据的存储媒介中的任何一种,例如硬盘驱动器、blu-ray光盘、dvd、cd-rom、闪存、易失性或非易失性存储器、或用于存储已编码视频数据的任何其他合适的数字存储媒介。

在某些示例中,源设备102可以将已编码视频数据输出到文件服务器114或可以存储由源设备102生成的已编码视频的另一中间存储设备。目标设备116可以以流式或下载的方式来访问文件服务器114所存储的视频数据。文件服务器114可以是能够存储已编码视频数据并能将所述已编码视频数据发送至目标设备116的任何类型的服务器设备。文件服务器114可以表示web服务器(例如,用于网站)、文件传输协议(ftp)服务器、内容分发网络设备、或网络连接式存储(nas)设备。目标设备116可以通过包括因特网连接的任何标准数据连接来访问文件服务器114的已编码视频数据。这可以包括无线信道(例如wi-fi连接)、有线连接(例如数字用户线缆(dsl)、电缆调制解调器等)、或者二者的组合,该组合适合于访问存储在文件服务器114上的已编码视频数据。文件服务器114和输入接口122可以被配置为根据流式传输协议、下载传输协议或二者的组合来运行。

输出接口108和输入接口122可以表示无线发送器/接收器、调制解调器、有线网络组件(例如以太网卡)、根据多种ieee802.11标准中的任一种运行的无线通信组件、或其他物理组件。在输出接口108和输入接口122包括无线组件的示例中,输出接口108和输入接口122可以被配置为根据蜂窝通信标准来传送例如已编码视频数据的数据。所述蜂窝通信标准包括例如4g、4g-lte(长期演进)、lteadvanced、5g等等。在输出接口108包括无线发送器的某些示例中,输出接口108和输入接口122可以被配置为根据其他无线标准来传送例如已编码视频数据的数据。所述其他无线标准包括ieee802.11规范、ieee802.15规范(例如zigbeetm)、bluetoothtm标准等等。在某些示例中,源设备102和/或目标设备116可以包括相应的片上系统(soc)设备。例如,源设备102可以包括执行分发给视频编码器200和/或输出接口108的功能的soc设备,而目标设备116可以包括执行分发给视频解码器300和/或输入接口122的功能的soc设备。

可以将本公开的技术应用于支持多种多媒体应用中任一种视频译码。所述多媒体应用包括例如空中电视广播、有线电视传输、卫星电视传输、因特网流视频传输,例如基于http的动态自适应流(dash)、编码至数据存储介质上的数字视频、存储于数据存储介质上的数字视频的解码、或其他应用。

目标设备116的输入接口122接收来自计算机可读介质110(例如,存储设备112、文件服务器114等)的已编码视频比特流。已编码视频比特流可以包括由视频编码器200定义的用信令通知信息。所述用信令通知信息也被视频解码器300使用,例如具有描述视频块或其他已译码单元(例如,切片、图片、图片组、序列等)的特征和/或处理的值的语法元素。显示设备118向用户显示已解码视频数据的已解码图片。显示设备118可以表示多种显示设备中的任何一种。所述多种显示设备例如阴极射线管(crt)显示器、液晶显示器(lcd)、等离子显示器、有机发光二极管(oled)显示器或另一种类显示设备。

虽然图1中未示出,在某些示例中,视频编码器200和视频解码器300分别可以与音频编码器和/或音频解码器集成在一起,并且可以包括适当的mux-demux单元或其他硬件和/或软件,以处理包括普通数据流中的音频和视频两者的复用流。如果适用,则mux-demux单元可以遵循ituh.223多路复用器协议或例如用户数据报协议(udp)的其他协议。

视频编码器200和视频解码器300均可以实现为多种合适的编码器和/或解码器电路中的任何一种。上述多种合适的编码器和/或解码器电路包括:例如,一个或更多个微处理器、数字信号处理器(dsp)、专用集成电路(asic)、现场可编程门阵列(fpga)、离散逻辑、软件、硬件、固件或以上各种电路的任意组合。在使用软件部分地实现上述技术的情况下,设备可以将用于软件的指令存储在合适的非暂时性计算机可读介质中,并在使用一个或更多个处理器的硬件中执行这些指令,以进行本公开的技术。视频编码器200和视频解码器300中的每一个可以被包括在一个或更多个编码器或解码器中,视频编码器200和视频解码器300中的任一个可以被集成为相应设备中的组合编码器/解码器(codec)的一部分。包括视频编码器200和/或视频解码器300的设备可以包括集成电路、微处理器和/或无线通信设备,例如蜂窝电话。

视频编码器200和视频解码器300可以根据诸如itu-th.265(也称为高效视频译码(hevc))或其扩展(例如多视图和/或可缩放视频译码扩展)的视频译码标准来运行。可替换地,视频编码器200和视频解码器300可以根据诸如联合探索测试模型(jointexplorationtestmodel,jem)或itu-th.266(也称为通用视频编码(versatilevideocoding,vvc)),的其他专有或工业标准运行。2018年7月10日至18日在斯洛文尼亚(slovenia,si)的卢布尔雅那(ljubljana)举办的itu-tsg16wp3和iso/iecjtc1/sc29/wg11的联合视频专家组(jvet)第11次会议提案的jvet-12001-ve章节中的bross等人的versatilevideocoding(draft2)描述了vvc标准的最新草案(以下简称“vvc草案2”)。然而,本公开的技术不限于任何特定的编码标准。

通常,视频编码器200和视频解码器300可以执行基于块的图片译码。术语“块”通常是指包括待处理的(例如,已编码的、已解码的、或者在编码和/或解码过程中使用的)数据的结构。例如,块可以包括亮度和/或色度数据的样本的二维矩阵。通常,视频编码器200和视频解码器300可以对以yuv(例如,y,cb,cr)格式表示的视频数据进行译码。也就是说,视频编码器200和视频解码器300不是对图片的样本的红、绿和蓝(rgb)数据进行译码,而是可以对亮度和色度分量进行译码,其中色度分量可以包括红色色度分量和蓝色色度分量两者。在某些示例中,视频编码器200在编码之前将接收到的rgb格式的数据转换成yuv表示,而视频解码器300将yuv表示转换成rgb格式。可替换地,预处理单元和后处理单元(未示出)可以执行这些转换。

本公开通常可以指图片的译码(例如,编码和解码),以包括对该图片的数据进行编码或解码的过程。类似地,本公开可以指对图片的块的译码,以包括对块的数据进行编码或解码的过程,例如,预测和/或残差编码。已编码视频比特流通常包括用于语法元素(syntaxelements)的一系列值,这些语法元素表示译码决策(例如,译码模式)和图片到块的划分方式。因此,通常应该将对图片或块进行译码的描述理解为用于形成该图片或块的语法元素的译码值。

hevc定义了各种块,包括编码单元(cu)、预测单元(pu)、和变换单元(tu)。根据hevc,视频译码器(例如,视频编码器200)根据四叉树结构将编码树单元(ctu)划分为cu。也就是说,该视频译码器将ctu和cu划分为四个相等的且不重叠的正方形,并且该四叉树的每个节点具有零个或四个子节点。没有子节点的节点可以被称为“叶节点”,并且这种叶节点的cu可以包括一个或更多个pu和/或一个或更多个tu。视频译码器可以对pu和tu进行进一步划分。例如,在hevc中,残差四叉树(rqt)表示tu的划分。在hevc中,pu表示帧间预测数据,而tu表示残差数据。帧内预测所得的cu包括帧内预测信息,例如帧内模式指示。

作为另一示例,视频编码器200和视频解码器300可以被配置为根据jem或vvc运行。根据jem或vvc,视频译码器(例如,视频编码器200)将图片划分为多个编码树单元(ctu)。视频编码器200可以根据树结构对ctu进行划分,该树结构包括诸如四叉树-二叉树(quadtree-binarytree,qtbt)结构或混合树(multi-typetree,mtt)结构。qtbt结构取消了多种划分类型的概念,例如hevc的cu、pu和tu之间的区别。qtbt结构包括两个级别:根据四叉树划分进行划分所获得的第一级,以及根据二叉树划分进行划分所获得的第二级。该qtbt结构的根节点对应于ctu。二叉树的叶节点对应于编码单元(cu)。

在mtt划分结构中,可以利用四叉树(qt)划分、二叉树(bt)划分以及一种或更多种三叉树(tt)(也称为三分树(tt))划分对各块进行划分。在三叉或三分树划分中,将块划分为三个子块。在某些示例中,三叉或三分树划分以不通过中心对原始块进行划分的方式将块划分为三个子块。mtt中的划分类型(例如qt、bt和tt)可以是对称的,也可以是不对称的。

在某些示例中,视频编码器200和视频解码器300可以使用单个qtbt或mtt结构来表示亮度分量和色度分量中的每一个。而在其他示例中,视频编码器200和视频解码器300可以使用两个或更多个qtbt或mtt结构,例如一个qtbt/mtt结构用于亮度分量而另一个qtbt/mtt结构用于两个色度分量(或者两个qtbt/mtt结构用于相应的色度分量)。

视频编码器200和视频解码器300可以被配置为使用基于hevc的四叉树划分、qtbt划分、mtt划分、或其他划分结构。为了说明的目的,基于qtbt划分对本公开的技术进行了描述。然而,应该理解的是,本公开的技术还可以应用于配置为使用四叉树划分或其它类型的划分的视频译码器。

可以以多种方式对图片中的各个块(例如,ctu或cu)进行分组。作为一个示例,砖块(brick)指图片中特定片内的ctu行组成的矩形区域。片(tile)是图片中的特定片列和特定片行内的ctu组成的矩形区域。片列是指ctu组成的矩形区域,该矩形区域的高度等于图片的高度,其宽度(例如,诸如在图片参数集中)由语法元素指定。片行是指ctu组成的矩形区域,该矩形区域的高度(例如,诸如在图片参数集中)由语法元素指定,其宽度等于图片的宽度。

在某些示例中,可以将片划划分为多个砖块,每个砖块包括该片内的一个或更多个ctu行。没有被划分为多个砖块的片也可以称为砖块。但是,作为片的真子集的砖块不能称为片。

图片中的砖块也可以排列于切片中。切片可以是图片的可以排他包含在单个网络抽象层(networkabstractionlayer,nal)单元中的整数个砖块。在某些示例中,切片包括多个完整的片或仅包括一个片的连续序列的完整砖块。

本公开可以互换地使用“n×n”和“n乘n”来指代块(例如cu或其他视频块)在垂直维度和水平维度上的样本维度,例如16×16样本或16乘16样本。通常,16×16的cu在垂直方向上会有16个样本(y=16),并且在水平方向上会有16个样本(x=16)。同样地,n×n的cu通常在垂直方向上具有n个样本并且在水平方向上也具有n个样本,其中n表示非负的整数值。cu中的样本可以以行和列的方式排列。此外,cu在水平方向上的样本数量不必与垂直方向上的样本数量相同。举例来说,cu可以包括n×m个样本,其中m不必要等于n。

视频编码器200对表示预测和/或残差信息以及其他信息的cu的视频数据进行编码。预测信息指示将如何对该cu进行预测以便形成针对该cu的预测块。残差信息通常表示预测块与编码之前的cu样本之间的逐样本差值。

为了预测cu,视频编码器200通常可以通过帧间预测或帧内预测来形成用于cu的预测块。帧间预测通常指根据先前已译码的图片的数据来预测cu,而帧内预测通常指根据同一图片的先前已译码的数据来预测cu。为了执行帧间预测,视频编码器200可使用一个或更多个运动向量来生成预测块。视频编码器200通常可以进行运动搜索,例如,根据cu与参考块之间的差,来识别与cu紧密匹配的参考块。视频编码器200可以使用绝对差值和(sad)、平方差值和(ssd)、平均绝对差(mad)、均方差(msd)或其他此类差值计算来计算差值度量,以确定参考块是否紧密匹配当前cu。在某些示例中,视频编码器200可以使用单向预测或双向预测来预测该当前cu。

jem和vvc的某些示例还提供可以被认为是帧间预测模式的仿射运动补偿模式。在仿射运动补偿模式中,视频编码器200可以确定表示非平移运动的两个或更多个运动向量。该非平移运动例如放大或缩小、旋转、透视运动或其他不规则运动类型。

为了进行帧内预测,视频编码器200可以选择帧内预测模式来生成预测块。jem和vvc的某些示例提供了67种帧内预测模式,包括各种方向模式以及平面模式和dc模式。通常,视频编码器200选择描述当前块(例如,cu的块)的、根据其预测当前块的样本的相邻样本的帧内预测模式。假设视频编码器200以光栅扫描顺序(从左到右,从上到下)对ctu和cu进行译码,则相邻样本通常位于同一图片中当前块的上方,左上方,或左侧。

视频编码器200对表示当前块的预测模式的数据进行编码。举例来说,对于帧间预测模式,视频编码器200可以对表示使用多种可用帧间预测模式中的哪一种的数据以及用于对应模式的运动信息进行编码。对于单向或双向帧间预测,例如,视频编码器200可以使用高级运动向量预测(amvp)或合并模式来对运动向量进行编码。对于仿射运动补偿模式,视频编码器200可以使用类似的模式来对运动向量进行编码。

在诸如块的帧内预测或帧间预测的预测之后,视频编码器200可以计算针对该块的残差数据。残差数据,例如残差块,表示该块与使用对应的预测模式形成的该块的预测块之间的逐样本差值。视频编码器200可以对残差块应用一种或更多种变换,以在变换域而非样本域中生成经变换的数据。举例来说,视频编码器200可以将离散余弦变换(dct)、整数变换、小波变换或概念上类似的变换应用于残差视频数据。另外,视频编码器200可以在一次变换之后应用二次变换,例如,模式依赖的不可分的二次变换(mode-dependentnon-separablesecondarytransform,mdnsst)、信号依赖的变换、karhunen-loeve变换(klt)等。视频编码器200在应用一种或更多种变换之后产生变换系数。

如上所述,在进行任何生成变换系数的变换之后,视频编码器200可以对这些变换系数进行量化。量化通常是指对变换系数进行量化以使得可能减少用于表示所述系数的数据量,从而提供进一步的压缩。通过进行量化过程,视频编码器200可以减小与系数中某些或全部相关联的位深度。例如,视频编码器200可以在量化期间将n位值舍入为m位值,其中n大于m。在某些示例中,为了进行量化,视频编码器200可以对待量化的值进行按位右移。

在量化之后,视频编码器200可以对变换系数进行扫描,从而根据包括已量化变换系数的二维矩阵来生成一维向量。该扫描可以被设计为将较高能量(因此频率较低)的系数放在向量的前部,而将较低能量(因此频率较高)的变换系数放在向量的后部。在某些示例中,视频编码器200可以利用预定义的扫描顺序来扫描已量化变换系数以生成串行化的向量,并且然后对该向量的已量化变换系数进行熵编码。在其他示例中,视频编码器200可以进行自适应扫描。在对已量化变换系数进行扫描而形成一维向量之后,视频编码器200可以例如根据上下文的自适应二进制算术译码(context-adaptivebinaryarithmeticcoding,cabac)对该一维向量进行熵编码。视频编码器200还可以对描述元数据的语法元素的值进行熵编码,该元数据与视频解码器300在解码视频数据中使用的已编码视频数据相关联。

为了进行cabac,视频编码器200可以将上下文模型内的上下文分配给要发送的符号。该上下文可以涉及例如该符号的相邻值是否为零值。概率确定可以基于分配给该符号的上下文。

视频编码器200还可以生成给视频解码器300的语法数据,例如基于块的语法数据、基于图片的语法数据以及基于序列的语法数据。上述语法数据生成于例如图片头部、块头部、切片头部中,或其他语法数据中,诸如序列参数集(sequenceparameterset,sps)、图片参数集(pictureparameterset,pps)或视频参数集(videoparameterset,vps)中。视频解码器300可以同样地对这些语法数据进行解码以确定如何解码对应的视频数据。

以这种方式,视频编码器200可以生成比特流。该比特流包括已编码视频数据,例如,描述将图片划分为块(例如,cu)的语法元素以及针对上述块的预测和/或残差信息。最终,视频解码器300可以接收该比特流并对上述已编码视频数据进行解码。

通常,视频解码器300进行与视频编码器200相反的过程,来对比特流的已编码视频数据进行解码。比如,尽管与视频编码器200的cabac编码过程相反,但视频解码器300可以以大体上相似的方式来使用cabac以对比特流的语法元素的值进行解码。语法元素可以定义将图片的信息划分成ctu的划分、以及根据对应的划分结构(诸如qtbt结构)的每个ctu的划分,从而定义该ctu的cu。语法元素还可以对视频数据的块(例如,cu)的预测和残差信息进行定义。

残差信息可以由例如已量化变换系数表示。视频解码器300可以对块的已量化变换系数进行逆量化和逆变换以重现该块的残差块。视频解码器300使用已用信令通知的预测模式(帧内或帧间预测)和相关的预测信息(例如,用于帧间预测的运动信息)来形成该块的预测块。视频解码器300然后可以将该预测块和上述残差块(在逐样本的基础上)进行组合以重现原始块。视频解码器300可以进行附加处理,例如进行解块过程以减少沿着块的边界的视觉伪像。

本公开通常可以指“用信令通知(signaling)”某些信息,例如语法元素。术语“用信令通知(signaling)”通常可以指语法元素的值和/或用于对已编码视频数据进行解码的其他数据的通信。即,视频编码器200可以用信令通知比特流中的语法元素的值。通常,信令是指在比特流中生成值。如上所述,源设备102可以基本上实时地将比特流传送到目标设备116,也可以不是实时的,诸如在将语法元素存储到存储设备112以用于稍后目标设备116的检索时可能发生的情况。

图2a和图2b是示出一种示例四叉树-二叉树(qtbt)结构130和对应的编码树单元(ctu)132的示意图。实线表示四叉树分割,而虚线表示二叉树分割。在二叉树的每个分割(即非叶)节点中,用信令通知一个标志以指示使用了哪种分割类型(即,水平或垂直),其中,在本示例中0指示水平分割,而1指示垂直分割。对于四叉树分割,不需要指示分割类型,这是因为四叉树节点将块水平地和垂直地分割为尺寸相等的4个子块。因此,视频编码器200可以对qtbt结构130的区域树级(例如,实线)的语法元素(例如分割信息)和qtbt结构130的预测树级(例如,虚线)的语法元素(例如分割信息)进行编码,而视频解码器300可以对qtbt结构130的区域树级(例如,实线)的语法元素(例如,分割信息)和qtbt结构130的预测树级(例如,虚线)的语法元素(例如分割信息)进行解码。针对由qtbt结构130的终端叶节点表示的cu,视频编码器200可以对例如预测和变换数据的视频数据进行编码,而视频解码器300可以对例如预测和变换数据的视频数据进行解码。

通常,图2b的ctu132可以与定义了与qtbt结构130在第一级和第二级的节点相对应的块的尺寸的参数相关联。这些参数可以包括ctu尺寸(表示样本中ctu132的尺寸)、最小四叉树尺寸(minqtsize,表示最小允许的四叉树叶节点尺寸)、最大二叉树尺寸(maxbtsize,表示最大允许的二叉树根节点尺寸)、最大二叉树深度(maxbtdepth,表示最大允许的二叉树深度)和最小二叉树尺寸(minbtsize,表示最小允许的二叉树叶节点尺寸)。

对应于ctu的qtbt结构的根节点可以在qtbt结构的第一级具有四个子节点,可以根据四叉树划分对每个子节点进行划分。即,该第一级的节点是叶节点(没有子节点)或具有四个子节点。qtbt结构130的示例将这样的节点表示为包括父节点和以实线作为分支的子节点。如果该第一级的节点不大于最大允许的二叉树根节点尺寸(maxbtsize),则这些节点可以被相应的二叉树进一步划分。可以迭代进行一个节点的二叉树划分,直到由该划分产生的节点达到最小允许的二叉树叶节点尺寸(minbtsize)或最大允许的二叉树深度(maxbtdepth)。qtbt结构130的示例以虚线作为分支的方式来表示这样的节点。二叉树叶节点被称为编码单元(cu),其用于预测(例如,帧内预测或帧间预测)和变换,而不需要任何进一步的划分。如上面所讨论的,cu也可以被称为“视频块”或“块”。

在qtbt划分结构的一个示例中,将ctu的尺寸设置为128×128(亮度样本和两个对应的64×64的色度样本),minqtsize设置为16×16,maxbtsize设置为64×64,minbtsize(针对宽度和高度两者)设置为4,以及maxbtdepth设置为4。首先对ctu应用四叉树划分以生成四叉树叶节点。四叉树叶节点的尺寸可以从16×16(即minqtsize)到128×128(即ctu尺寸)。如果四叉树叶节点为128×128的,则其不会再被二叉树进一步划分,因为该尺寸超过了maxbtsize(即,此示例中为64×64)。否则,四叉树叶节点还会被二叉树进一步划分。因此,四叉树叶节点也是二叉树的根节点并具有为0的二叉树深度。当二叉树的深度达到maxbtdepth(此示例中为4)时,不允许进一步分割。当二叉树节点的宽度等于minbtsize(此示例中为4)时,表明不允许进一步的水平分割。类似地,二叉树节点的高度等于minbtsize表明不允许对该二叉树节点再进行垂直分割。如上所述,二叉树的叶节点被称为cu,并且根据预测和变换被进一步处理而无需再进行划分。

图3a-3e是示出视频数据的块的示例划分的示意图。如上所述,vvc中使用的树结构是四叉树加二叉树和三叉树(quad-treeplusbinaryandtripletree,qt-btt)的概括。该结构的基本结构可以包括两种类型的树节点:区域树(regiontree,rt)和预测树(predictiontree,pt),支持五种类型的划分,如图3a至3e所示。具体地,图3a示出了四叉树划分,图3b示出了垂直二叉树划分,图3c示出了水平二叉树划分,图3d示出了垂直三叉树划分,而图3e示出了水平三叉树划分。区域树可以将ctu递归地分割为缩小至4×4尺寸的区域树叶节点的正方形块。在区域树中的每个节点上,可以根据三种树类型之一来形成预测树以形成编码单元(cu):二叉树、三叉树。在pt分割中,禁止在预测树的分支中进行四叉树划分。

ctu可以包括亮度编码树块(ctb)和两个色度编码树块。在cu级别,cu可以与亮度编码块(cb)和两个色度编码块相关联。如在jem(vvc的参考软件)中一样,亮度树和色度树在切片间共享时被分离为内部切片。ctu的尺寸可以是128×128(亮度分量),而编码单元的尺寸可以在从4×4至ctu的尺寸的范围内。在这种场景下,色度块的尺寸可以是2×2,其颜色格式为4:2:0。

与hevc类似,vcc支持变换跳过模式。当视频译码器对cu的残差应用变换跳过模式时,该视频译码器可以不执行变换,而对该残余执行量化。为了给cu的tu选择最佳变换模式,视频编码器会对变换模式和变换跳过模式两者进行测试。视频编码器可将语法元素(例如,transform_skip_flag)编码(例如,在比特流中用信令通知)到解码器以指示tu的变换模式。在图片级别中,视频编码器可以通过在图片参数集(pps)中用信令通知语法元素(例如,标志)来指示变换跳过模式的使用。

在vvc中,视频编码器可以通过使用其中使用块匹配算法获得块的预测值的帧间预测模式来对切片间的块进行编码。视频编码器可以在以运动向量预测器(由amvp过程得出)为中心的窗口内搜索参考帧,以找到该块的最佳匹配。例如,作为运动估计过程的一部分,视频编码器可以以整数精度等级估算多个运动向量。一旦获得整数级的最佳匹配,视频编码器就可以通过内插过程(例如,在半像素和四分之一像素中)对该最佳匹配进行进一步细化。

在jem中,引入了局部自适应运动向量分辨率(loccallyadaptivemotionvectorresolution,lamvr)。lamvr使得以四分之一亮度样本,整数亮度样本或四个亮度样本为单位对运动向量差(motionvectordifference,mvd)进行译码。可以在cu级别上对运动向量差(mvd)分辨率进行控制,并且可以为具有至少一个非零mvd分量的每个cu有条件地用信令通知mvd分辨率标志。

对于具有至少一个非零mvd分量(例如,x分量或y分量为非零)的cu,视频编码器可以用信令通知第一标志以指示是否在该cu中使用了四分之一亮度样本mv精度。当第一标志指示未使用四分之一亮度样本mv精度时(例如,第一标志等于1),视频译码器会用信令通知另一标志以指示使用了整数亮度样本mv精度还是四亮度样本mv精度。

当cu的第一mvd分辨率标志为零或者并未为cu译码该标志时(意味着cu中的所有mvd均为零),视频译码器可以对该cu使用四分之一亮度样本mv分辨率。当cu使用整数亮度样本mv精度或四亮度样本mv精度时,视频译码器可以将该cu的amvp候选者列表中的mvp舍入到对应的精度。

视频译码器可执行先进时间运动向量预测(advancedtemporalmotionvectorprediction,atmvp)模式(例如,在vvc中)的子块运动补偿。在atmvp模式下,视频译码器可以将cu分割为子块,称为预测单元(pu)。视频译码器可使用先前已编码的帧中的时间共位块的运动向量来独立地估算这些pu。这些pu的运动向量可以不同,也可以相同。在某些示例中,pu的块尺寸可以固定为4×4。在这样的示例中,视频解码器会访问存储器(例如,存储器120)中尺寸为11×11((4+4+3)×(4+4+3))的块,以在解码器侧重建每个pu。

视频译码器可利用仿射译码模式(例如,在vvc中)来对cu进行译码。仿射cu(例如,使用仿射模式进行译码的cu)可以被分割为独立进行估算的子pu。与其中使用时间共位块的运动向量获得pu的运动向量的atmvp相反,视频译码器可以使用cu的空间相邻cu的运动向量来得出每个仿射pu的运动向量。

仿射运动模型可以被描述为:

(vx,vy)是坐标(x,y)处的运动向量,并且a,b,c,d,e和f是六个参数。用于块的仿射运动模型还可以由块600的三个角处的三个运动向量来描述,如图6所示。这三个运动向量可以被称为控制点运动向量(controlpointmotionvector,cpmv)。于是运动区被描述为:

其中w和h是块的宽度和高度。本公开将该仿射运动模型称为6-参数仿射运动模型。

简化的4-参数仿射模型描述为:

类似地,可以通过块的两个角处的两个cpmv来描述该块的简化的4-参数仿射模型。于是运动区被描述为:

目前,vvc支持仿射类型预测。在某些示例中,vvc中的仿射类型预测可以利用6-参数仿射模型和简化的4-参数仿射模型中的一个或两个。

然而,在某些示例中,将色度分量分割为尺寸为2×2的块会产生大量的小块。对大量的小块进行变换(例如,需要转置,乘法和加法)会增加计算所用的周期和/或增加处理时间。

如上所述,希望减少存储器带宽要求(例如,同时保持带宽减少和译码性能之间良好的折衷)。由于运动补偿内插,将cu划分为小块(例如4×4的块)会大大增加存储器带宽访问。该运动补偿内插需要待获取(例如,从存储器获得)的参考4×4的块的相邻样本,因为它们用于该内插。

为了以下讨论的目的,将存储器带宽计算为内插所需的参考像素(例如,参考样本)的数量。在现实的硬件实现中,实际带宽还可以取决于硬件架构,并且可以大于已访问的像素的数量。

针对帧间模式(合并和amvp模式)的最坏情况(出于存储器带宽目的)是4×4的双向预测块,其中两个方向都有分数像素运动向量(mv)。对于这种情况,可能需要从存储器访问两个11×11(121个像素)的亮度块以执行内插,并且必须获取尺寸为5×5的、u颜色分量和v颜色分量的两个对应的色度块。在该计算中,假设8-抽头滤波器用于亮度分量内插,而6-抽头滤波器用于色度分量内插。另一种导致带宽恶化的情况是在atmvp和仿射模式下,其中与cu关联的子pu的运动向量会引起从存储器中获取非重叠区域。

图7是示出根据本公开的一个或更多个方面的用于重建当前块的非重叠参考区域的示意图。如图7所示,为了重建当前帧702的当前cu706,视频译码器会访问参考帧704的若干区域(例如,参考帧704的存储在参考图片缓存器中的区域,上述参考图片缓存器为例如图4的已解码图片缓存器218或图5的已解码图片缓存器213)。具体地,当前cu706可以被划分为子块708a-708d(统称为“子块708”),分别与子块运动向量mva-mvd中的子块运动向量相关联。子块708中的每一个都可以是预测单元pu(例如,尺寸为4×4)。如图7所示,子块运动向量mva-mvd中的每一个标识参考帧704中的参考区域710a-710d(统称为“参考区域710”)中的各个参考区域。应该注意的是,参考区域710中的每一个包括直接由子块运动向量标识的块以及在该块周围的包括滤波器抽头访问的样本的区域。为了重建当前cu706,视频译码器需要从存储器中获取,访问,或者获得参考区域710中的每一个的样本。如在图7的示例中所示,参考区域710可以完全不重叠(例如,意思是参考区域710中的某个参考区域的任一样本都不包括在参考区域710中的任何其他参考区域中)。对于上面提到的这些最差的带宽情况,下面的表1汇总了对于2d内插的针对每像素要获取的像素的数量。

表1-jem中对于2d内插的像素的数量

如上所述,在某些示例中,被访问的以重建编码单元的参考区域可以是不重叠的。在其他示例中,被访问以重建编码单元的参考区域可以是重叠的。重叠参考区域可以为视频译码器提供某些效率。例如,视频译码器只需要访问一次重叠参考区域的样本,从而节省了存储器带宽。

图8是示出根据本公开的一个或更多个方面的用于重建当前块的重叠参考区域的示意图。如图8所示,为了重建当前帧802的当前块806(例如,当前cu),视频译码器可以访问参考帧804的若干区域(例如,存储在参考图片缓存器中的区域,该参考图片缓存器为例如图4的已解码图片缓存器218或图5的已解码图片缓存器213)。具体地,当前块806可以被划分为子块708a-708d,分别与子块运动向量mva-mvd中的子块运动向量相关联。如图8所示,子块运动向量mva-mvd中的每一个标识参考帧804中的参考区域810a-810d(统称为“参考区域810”)中的各个参考区域。应该注意的是,参考区域810中的每一个包括直接由子块运动向量标识的块(虚线)以及在该块周围的包括滤波器抽头访问的样本的区域(实线)。为了重建当前块806,视频译码器需要从存储器中获取,访问,或者获得参考区域810中的每一个的样本。如在图8的示例中所示,参考区域810可以是部分重叠的(例如,意味着从参考区域810中的第一参考区域采样的某些样本还位于参考区域810的第二参考区域中)。

与每个4×4的pu的单独获取相比,较大的重叠区域可以产生更高的带宽节省。带宽节省bs可以被计算为:

其中k,n和f分别是针对4×4的pu的已获取的点的数量、与cu相关联的pu的数量、以及需要用于以仿射模式对cu进行编码的已获取的点的数量。

本公开描述了解决前述问题的几种技术,包括简化2×2的块的变换以及减少用于存储器访问的带宽使用。本公开的技术可以被独立地使用,也可以被组合。

根据第一种技术,视频译码器(例如,视频编码器200和/或视频解码器300)可以对2×2的块进行变换。作为一个示例,视频译码器可以强制以变换跳过模式对2×2的色度块进行译码。这种情况下,可以直接在像素域对2×2的色度块的残差进行量化。因为针对2×2的色度块的变换跳过始终被应用,所以不再在那些块的比特流中用信令通知变换跳过标志。通过使用该技术,由于不应用变换而是通过移位操作简单地执行变换跳过,因此可以缩短处理时间。此外,删除了transform_skip_flag语法可以提高压缩效率。举例来说,响应于确定将视频数据划分为至少一个2×2的色度块,视频译码器可以使用变换跳过模式对2×2的色度块进行译码。

作为另一个示例,对于2×2的色度块,可以始终强制残差为零。在这种情况下,也会绕过变换,可以省略为这种色度块用信令通知的、指示残差是否为零的已译码块图案(codedblockpattern,cbp)标志,以减少开销。在一个示例中,在帧间模式下,可以使用总是具有零残差的跳过模式来指示它(例如,残差是否为零)。举例来说,响应于确定将视频数据划分为至少一个2×2的色度块,视频译码器可以将该2×2的色度块译码为具有零残差值(例如,选择至少在量化之后完全匹配2×2的色度块的预测器块)。

如果应用分离的树译码,则意味着亮度分量和色度分量可以具有不同的划分结构,可以禁止将划分分割为2×2的色度块。在这种情况下,不存在2×2的色度块。是否禁止3×3的色度块可以取决于预测模式。例如,对于帧内模式,可以禁止3×3的色度块,但对于帧间模式,则可以允许3x3的色度块。帧内模式具有额外的依赖性,这是因为该预测是通过使用相邻样本完成的。与帧间模式相比,这增加了额外的负担。

所描述的技术可以以任何组合应用于以下情况中之一:应用于i-切片中的内部2×2的色度块,或者可以应用于以帧内模式译码的2×2的色度块而不考虑切片类型,或者可以应用于以帧间模式译码的2×2的色度块。

如上所述,并且根据本公开的一种或更多种技术,视频译码器(例如,视频编码器200和/或视频解码器300)可以施加一种或更多种约束以减少用于预测视频数据的样本的存储器带宽的量。例如,视频译码器可确定当前块所需的存储器带宽,并且基于所确定的当前块的存储器带宽是否满足带宽阈值来对用于预测当前块的样本的运动补偿方法进行选择性地修改。以这种方式,视频译码器可以减少功耗的量和/或缩短预测当前块的样本所需的处理时间。

如上所述,在某些示例中,视频译码器可以确定当前块所需的存储器带宽。视频译码器可以基于块的仿射运动模型参数的值(例如,基于块的控制点运动向量(cpmv))来确定使用仿射模式编码的该块所需的存储器带宽。如上面参考等式(1)和(2)所讨论的,仿射运动模型可以包括四个或六个参数。4-参数仿射运动模型可以隐含地表示为两个cpmv(例如,),而6-参数仿射运动模型可以隐含地表示为三个cpmv())。这种情况下,基于cpmv的确定可以被认为是基于仿射模型参数的确定,反之亦然。

仿射模型参数a,b,c,d确定子块运动向量在pu中彼此可以分开多远。在最坏的情况下,子块向量可以相距很远,以致用于运动补偿的参考区域之间有零个重叠(例如,如图7的示例所示)。如上所讨论的,减少的参考区域之间的重叠导致存储器带宽要求增大。参考区域之间存在零个重叠的场景可以被称为存储器带宽的“最坏情况”场景,因为需要从存储器(例如,存储器106,存储器120)访问最大数量的参考样本。这种情况下,本发明提出一种技术,其中视频译码器基于对使用仿射模式进行译码的当前块的参考样本进行访问所需的存储器带宽来对用于预测当前块的样本的运动补偿方法进行选择性地调整。

在某些示例中,视频译码器可以确定当前块所需的存储器带宽是否基于当前块的cpmv的值之间的差。cpmv的值之间的差可以指示参考区域810彼此之间相距多远。如上面所讨论的,参考区域810彼此之间相距越远,当前块就需要更多的带宽。视频译码器可以通过确定最大cpmv和最小cpmv(在水平和垂直方向上)之间的差来确定cpmv的值之间的差。例如,视频译码器可以识别cpmv的最大水平分量、cpmv的最大垂直分量、cpmv的最小垂直分量以及cpmv的最小水平分量。视频译码器可以用所识别的最大水平分量减去所识别的最小水平分量以确定水平差,并用所识别的最大垂直分量减去所识别的最小垂直分量以确定垂直差。视频译码器可确定当前块所需的存储器带宽是否基于该水平差和该垂直差。

如上所述,视频译码器可以基于所确定的当前块的存储器带宽是否满足带宽阈值来对用于预测当前块的样本的运动补偿方法进行选择性地修改。视频译码器可以将所确定的存储器带宽与预定带宽阈值进行比较。带宽阈值可以在配置文件中预定义,也可以作为参数传递给视频译码器。

为了选择性地修改运动补偿方法,视频译码器可以响应于确定存储器带宽不满足带宽阈值来修改(例如,改变,修改或者调整)该运动补偿方法。相似地,视频译码器可以响应于确定存储器带宽不满足带宽阈值而不对该运动补偿方法进行修改。在某些示例中,视频译码器可以在所确定的存储器带宽小于或等于(例如,<或=)带宽阈值的情况下,确定该存储器带宽满足该带宽阈值。在某些示例中,视频译码器可以在所确定的存储器带宽小于(例如,<)带宽阈值的情况下,确定该存储器带宽满足该带宽阈值。在某些示例中,视频译码器可以在所确定的存储器带宽大于(例如,>)带宽阈值的情况下,确定该存储器带宽不满足该带宽阈值。在某些示例中,视频译码器可以在所确定的存储器带宽大于或等于(例如,>或=)带宽阈值的情况下,确定该存储器带宽不满足该带宽阈值。

视频译码器可以以任何数量的方式对运动补偿方法进行修改。例如,视频译码器可以以下述方式来修改用于预测当前块的样本的运动补偿方法,所述方式将减少预测当前块的样本所需的存储器带宽(例如,相对于未修改的运动补偿方法)。运动补偿方法的某些示例修改包括但不限于:修改子块尺寸、修改用于内插的滤波器抽头的数量、使用简单模式对当前块进行译码,或任何其他减少预测当前块的样本所需的存储器带宽的修改。以这种方式,视频译码器可以基于所确定的存储器带宽是否满足带宽阈值来对用于预测视频数据的当前块的样本的运动补偿方法进行选择性地修改。

为了修改子块尺寸,视频译码器可以将一个或更多个子块组合在一起,以减少当前块的子块的数量。举例来说,视频译码器可以从使用4×4的子块变为使用8×8的子块。视频译码器可以使用运动向量来预测该组合块,该运动向量是通过使用对应子块(例如,包括在组合块中)的运动向量得到的。在某些示例中,视频译码器可以通过对对应子块的运动向量求平均来得出上述运动向量。作为一个示例,如果组合块是正方形(宽度和高度相同),则视频编码器可以将所有对应子块的平均运动向量用作组合块的运动向量。作为另一示例,视频译码器可以将对应子块的运动向量的子集的平均值用作组合块的运动向量。举例来说,视频译码器可以将对角集子块(例如,左上方和右下方或右上方和左下方)的运动向量的平均值用作组合块的运动向量。在某些示例中,视频译码器可以将对应子块中的特定子块的运动向量用作得到的运动向量。修改子块尺寸可以减少内存带宽,因为更少的参考区域会被需要。

为了修改滤波器抽头的数量,视频编码器可以减少用于内插的滤波器抽头的数量。在一个示例中,4-抽头色度内插滤波器可以代替原始的8-抽头亮度内插滤波器被用于对亮度分量进行内插。通过减少滤波器抽头的数量,视频译码器可以减小参考区域的尺寸(例如,由于等式(6)/(8)中的内插和/或等式(7)/(9)中的内插y将被减小)。

视频译码器可以根据多个参考块的样本、使用经选择性地修改的运动补偿方法来预测视频数据的当前块的样本。举例来说,视频译码器可以(例如,从存储器中)获得多个参考块的样本,并将所获得的样本加上残余数据以重建当前块的样本。

图4是示出可以进行本公开的技术的一种示例视频编码器200的框图。出于阐述的目的提供图4,而不应该将其视为限制本公开中广泛例示和描述的技术。为了说明的目的,本公开基于诸如hevc视频译码标准和开发中的h.266视频译码标准的视频译码标准描述了视频编码器200。然而,本公开的技术不限于这些视频译码标准,并且通常适用于视频编码和解码。

在图4的示例中,视频编码器200包括视频数据存储器230、模式选择单元202、残差生成单元204、变换处理单元206、量化单元208、逆量化单元210、逆变换处理单元212、重建单元214、滤波器单元216、已解码图片缓存器(dpb)218和熵编码单元220。视频数据存储器230、模式选择单元202、残差生成单元204、变换处理单元206、量化单元208、逆量化单元210、逆变换处理单元212、重建单元214、滤波器单元216、dpb218和熵编码单元220中的任一个或全部可以在一个或更多个处理器中或在处理电路中实现。此外,视频编码器200可以包括另外的或可替换的处理器或处理电路以实现这些或其他功能。

视频数据存储器230可以存储待由视频编码器200的组件进行编码的视频数据。视频编码器200可以接收存储于视频数据存储器230中的视频数据(例如,来自视频源104(图1)的视频数据)。dpb218可以充当参考图片存储器,该参考图片存储器存储在通过视频编码器200预测后续视频数据中使用的参考视频数据。视频数据存储器230和dpb218可以由多种存储设备中的任一种形成,例如动态随机访问存储器(dram)。所述多种存储设备包括同步dram(sdram)、磁阻ram(mram)、电阻性ram(rram)或其他类型的存储设备。视频数据存储器230和dpb218可以被提供为相同的存储设备或分离的存储设备。在多个示例中,视频数据存储器230可以与视频编码器200的其他组件一起在芯片上(on-chip),如上所示,或者相对于那些组件在芯片外(off-chip)。

在本公开中,对视频数据存储器230的描述不应该被解释为受限于视频编码器200内部的存储器,除非如此具体地描述,或者受限于视频编码器200外部的存储器,除非如此具体地描述。准确的说,对视频数据存储器230的描述应该被理解为参考存储器,参考存储器存储视频编码器200接收的、用于编码的视频数据(例如,用于待被编码的当前块的视频数据)。图1的存储器106还可以为来自视频编码器200的各个单元的输出提供临时存储。

对图4的各个单元进行说明,以帮助理解由视频编码器200进行的操作。这些单元可以实现为固定功能电路,可编程电路或两者的组合。固定功能电路是指提供特定功能并为可以进行的操作进行预设的电路。可编程电路是指可以被编程以进行各种任务并且在可以进行的操作中提供灵活功能的电路。例如,可编程电路可以执行软件或固件,以使得可编程电路以软件或固件的指令所定义的方式来运行。固定功能电路可以执行软件指令(例如,对参数进行接收或输出),但是固定功能电路执行的操作的类型通常是不可变的。在某些示例中,上述单元中的一个或更多个可以是不同的电路块(固定功能或可编程),而在某些示例中,上述一个或更多个单元可以是集成电路。

视频编码器200可以包括算术逻辑单元(alu)、基本功能单元(efu)、数字电路、模拟电路和/或由可编程电路形成的可编程核。在使用由可编程电路执行的软件来进行视频编码器200的操作的示例中,存储器106(图1)可以对视频编码器200接收并执行的软件的目标代码进行存储,或者在视频编码器200中的另一存储器(未显示)对这些指令进行存储。

视频数据存储器230被配置为存储接收到的视频数据。视频编码器200可以从视频数据存储器230中检索视频数据的图片,并将上述视频数据提供给残差生成单元204和模式选择单元202。视频数据存储器230中的视频数据可以是待被编码的原始视频数据。

模式选择单元202包括运动估计单元222、运动补偿单元224和帧内预测单元226。模式选择单元202可以包括根据其他预测模式进行视频预测的另外的功能单元。作为示例,模式选择单元202可以包括调色板单元、块内复制单元(可以是运动估计单元222和/或运动补偿单元224中的一部分)、仿射单元、线性模型(lm)单元等。

模式选择单元202通常协调多个编码通路,以测试编码参数的组合和该组合的结果速率失真值。这些编码参数可以包括从ctu到cu的划分、用于cu的预测模式、用于cu的残差数据的变换类型、用于cu的残差数据的量化参数等。模式选择单元202可以最终选择具有比其他经测试的组合更好的速率失真值的编码参数的组合。

视频编码器200可以将从视频数据存储器230检索到的图片划分为一系列ctu,并将一个或更多个ctu封装在切片内。模式选择单元202可以根据树结构,例如上述的qtbt结构或hevc的四叉树结构,来对图片的ctu进行划分。如上所述,视频编码器200可以根据树结构通过划分ctu来形成一个或更多个cu。这种cu通常还可以被称为“视频块”或“块”。

通常,模式选择单元202还控制其组件(例如,运动估计单元222、运动补偿单元224和帧内预测单元226)以生成针对当前块(例如,当前cu,或hevc中pu和tu的重叠部分)的预测块。对于当前块的帧间预测,运动估计单元222可以进行运动搜索以识别一个或更多个参考图片(例如,存储在dpb218中的一个或更多个预先已译码图片)中的一个或更多个紧密匹配的参考块。具体地,运动估计单元222可以例如根据绝对差值和(sad)、平方差值和(ssd)、平均绝对差(mad)、均方差(msd)等来计算表示潜在参考块与该当前块有多相似的值。运动估计单元222通常可以使用当前块与所考虑的参考块之间的逐样本差值来进行这些计算。运动估计单元222可以识别出具有这些计算所得的最小值的参考块,来指示与当前块最紧密匹配的参考块。

运动估计单元222可以形成一个或更多个运动向量(mv)。所述运动向量定义参考块在参考图片中的位置相对于当前块在当前图片中的位置。之后,运动估计单元222可以将运动向量提供给运动补偿单元224。例如,对于单向帧间预测,运动估计单元222可以提供单个运动向量,而对于双向帧间预测,运动估计单元222可以提供两个运动向量。运动补偿单元224之后可以使用运动向量来生成预测块。例如,运动补偿单元224可以使用运动向量来检索参考块的数据。作为另一示例,如果运动向量具有分数样本精度,则运动补偿单元224可以根据一个或更多个内插滤波器来插入用于预测块的值。此外,对于双向帧间预测,运动补偿单元224可以检索针对相应的运动向量所标识的两个参考块的数据并且例如通过逐样本平均或加权平均来对检索到的数据进行组合。

作为另一个示例,对于帧内预测或帧内预测译码,帧内预测单元226可以根据与当前块相邻的样本来生成预测块。例如,对于方向模式(directionalmode),帧内预测单元226通常可以对相邻样本的值进行数学组合,并在定义的方向上跨越当前块填充这些计算出的值以产生预测块。作为另一示例,对于dc模式,帧内预测单元226可以计算相邻样本到当前块的平均值并且生成预测块,以包括针对该预测块的每个样本的结果平均值。

模式选择单元202将预测块提供给残差生成单元204。残差生成单元204从视频数据存储器230接收当前块的原始的未编码的版本,并从模式选择单元202接收预测块。残差生成单元204计算当前块和预测块之间的逐样本差值。所得逐样本差值定义了针对该当前块的残差块。在某些示例中,残差生成单元204还可以确定残差块中的样本值之间的差值以使用残差差分脉冲代码调制(residualdifferentialpulsecodemodulation,rdpcm)来生成残差块。在某些示例中,可以使用进行二进制减法的一个或更多个减法器电路来形成残差生成单元204。

在某些示例中,模式选择单元202将cu划分为pu,每个pu可以与亮度预测单元和对应的色度预测单元相关联。视频编码器200和视频解码器300可以支持具有多种尺寸的pu。如上所示,cu的尺寸指cu的亮度译码块的尺寸,pu的尺寸指pu的亮度预测单元的尺寸。假设特定cu的尺寸为2n×2n,则视频编码器200可以支持用于帧内预测的pu尺寸为2n×2n或n×n,用于帧间预测的对称pu的尺寸为2n×2n、2n×n、n×2n、n×n或类似的尺寸。视频编码器200和视频解码器300还可以支持用于帧间预测的不对称划分的pu的尺寸为2n×nu、2n×nd、nl×2n以及nr×2n。

在某些示例中,模式选择单元不再将cu划分为pu,每个cu可以与亮度译码块和对应的色度译码块相关联。如上所述,cu的尺寸是指cu的亮度译码块的尺寸。视频编码器200和视频解码器300可以支持cu的尺寸为2n×2n,2n×n或n×2n。

对于其他视频译码技术(诸如,块内复制模式译码、仿射模式译码以及线性模型(lm)模式译码),作为少数示例,模式选择单元202经由与译码技术相关联的相应单元生成针对正在被编码的当前块的预测块。在某些示例中,例如调色板模式译码,模式选择单元202不会生成预测块,并且而是生成指示基于选择的调色板重建块的方式的语法元素。在该模式中,模式选择单元202可以将这些语法元素提供给熵编码单元220以进行编码。

如上所述,残差生成单元204接收当前块的视频数据和对应的预测块的视频数据。残差生成单元204之后生成当前块的残差块。残差生成单元204计算预测块和当前块之间的逐样本差值以生成残差块。

变换处理单元206对残差块应用一种或更多种变换以生成变换系数的块(在本文中称为“变换系数块”)。变换处理单元206可以对残差块应用多种变换以形成变换系数块。例如,变换处理单元206可以对残差块应用离散余弦变换(dct)、方向变换、karhunen-loeve变换(klt)或概念上类似的变换。在某些示例中,变换处理单元206对残差块进行多种变换,例如初级变换和次级变换,诸如旋转变换。在某些示例中,变换处理单元206不对残差块进行变换。

量化单元208可以对变换系数块中的变换系数进行量化,以生成已量化变换系数块。量化单元208可以根据与当前块相关联的量化参数(qp)值来对变换系数块的变换系数进行量化。视频编码器200(例如,经由模式选择单元202)可以通过调整与cu相关联的qp值来调整应用于与当前块相关联的变换系数块的量化程度。量化会引起信息丢失,因此,已量化变换系数的精度会比变换处理单元206生成的原始变换系数的精度低。

逆量化单元2l0和逆变换处理单元212可以分别对已量化变换系数块进行逆量化和逆变换,以基于变换系数块重建残差块。重建单元214基于重建残差块和由模式选择单元202生成的预测块来生成与当前块相对应的重建块(尽管可能具有某种程度的失真)。例如,重建单元214可以将重建残差块的样本加到模式选择单元202所生成的预测块的对应样本来生成重建块。

滤波器单元216可以对重建块进行一种或更多种滤波器操作。例如,滤波器单元216可以进行解块操作以减少沿着cu的边界的块状伪影。在某些示例中,可以跳过滤波器单元216的操作。

视频编码器200将重建块存储于dpb218中。例如,在不需要滤波器单元216的操作的示例中,重建单元214可以将重建块存储到dpb218中。在需要滤波器单元216的操作的示例中,滤波器单元216可以将经滤波的重建块存储到dpb218中。运动估计单元222和运动补偿单元224可以从dpb218中检索参考图片,该参考图片由重建(且可能经滤波的)块形成,以对后续已编码图像的块进行帧间预测。另外,帧内预测单元226可以使用当前图片在dpb218中的重建块来对该当前图片中的其他块进行帧内预测。

通常,熵编码单元220可以对从视频编码器200的其他功能组件接收到的语法元素进行熵编码。例如,熵编码单元220可以对来自量化单元208的已量化变换系数块进行熵编码。作为另一示例,熵编码单元220可以对来自模式选择单元202的预测语法元素(例如,用于帧间预测的运动信息或用于帧内预测的模式内信息)进行熵编码。熵编码单元220可以对作为视频数据的另一个示例的语法元素进行一种或更多种熵编码操作以生成经熵编码的数据。例如,熵编码单元220可以进行上下文自适应可变长度译码(cavlc)操作、cabac操作、可变至可变(v2v)长度译码操作、基于语法的上下文自适应二进制算术译码(sbac)操作、概率区间划分熵(pipe)译码操作、指数-golomb编码操作或对数据进行的另一种熵编码操作。在某些示例中,熵编码单元220可以在语法元素未被熵编码的旁路模式下运行。

视频编码器200可以输出包括重建切片或图片的块所需的经熵编码的语法元素的比特流。具体地,熵编码单元220可以输出比特流。

以上所述的操作是相对于块来描述的。这种描述应当被理解为用于亮度译码块和/或色度译码块的操作。如上所述,在某些示例中,亮度译码块和色度译码块分别是cu的亮度分量和色度分量。在某些示例中,亮度译码块和色度译码块是pu的亮度分量和色度分量。

在某些示例中,不必对色度译码块重复进行对亮度译码块进行过的操作。作为一个示例,不需要将用于识别亮度译码块的运动向量(mv)和参考图片的操作重复用于识别色度块的mv和参考图片。准确地说,可以对亮度译码块的mv进行缩放来确定色度块的mv,并且参考图片可以是相同的。作为另一示例,对于亮度译码块和色度译码块,帧内预测过程可以是相同的。

如上面所讨论的,并且根据本公开的一种或更多种技术,视频译码器(例如,视频编码器200和/或视频解码器300)可以减少用于预测视频数据的样本的存储器带宽的量。在某些示例中,可以通过限制为内插而访问的像素的数量来实现带宽减少。

作为一种带宽减少技术的示例,视频译码器可以将用于4×4的cu的合并及amvp模式的运动向量(mv)进行舍入。视频译码器可以在合并候选列表和amvp运动向量候选列表中对mv候选进行舍入。在某些示例中,视频译码器可以不用信令通知(例如,在比特流中)是否指示四分之一亮度样本mv精度的第一运动向量差(mvd)分辨率标志。对该舍入进行扩展,对于对应的已舍入的mv分量,可以使得mvd为整数,因此视频译码器可以用信令通知mvd>>2。视频解码器(例如视频解码器300)可以根据以下公式来重建运动向量:

mv=[mvp]+(mvd<<2)(18)

其中括号表示舍入操作,mv是运动向量的值,mvp是运动向量预测的值,mvd是运动向量差的值。mvd解析不受此移位的影响,并且可以在重建阶段调整mv。以下表2汇总了访问的参考像素的数量以及该最坏情况下带宽的减少。

作为一种示例性带宽减少技术,视频译码器可以将atmvp模式下的子pu尺寸固定为8×8。当该尺寸设置为4×4时,视频译码器可以访问(例如,从存储器中)11×11的块(121个像素)以执行运动补偿。8×8的区域包含四个4×4的pu。因此,存储器会被访问四次,总访问点为484个(4x121)。然而,当pu的尺寸设置为8×8时,视频译码器可能仅需要访问(从存储器中)用于亮度分量的具有(7+8)×(7+8)=225个点的块以及2个7×7的色度块。此存储器访问只需要执行一次。以下表2汇总了访问的参考像素的数量以及该最坏情况下的带宽的减少。如表2所示,通过将atmvp的子pu尺寸固定为8×8,带宽比pu的尺寸设置为4×4时访问的点的数量减少了53.3%。

表2-所提出的最坏情况下的带宽减少

在某些示例中,视频译码器可以施加一个或更多个约束以减少用以以仿射模式预测视频数据的样本的存储器带宽的量。作为一个示例,视频译码器可以通过限制仿射控制点之间的运动向量差(也称为控制点差)来减少仿射模式下的存储器带宽。举例来说,视频译码器可以(例如,基于当前块的控制点)确定当前块所需的存储器带宽。视频译码器可以将所确定的存储器带宽与预定的带宽阈值进行比较(例如,以确保存储器带宽节省不会小于预定义存储器带宽节省量)。带宽阈值可以在配置文件中预定义,也可以作为参数传递给视频译码器。视频译码器可以基于当前块的所确定的存储器带宽是否满足带宽阈值来对用于预测当前块的样本的运动补偿方法进行选择性地修改。

视频译码器可以以任何数量的方式对运动补偿方法进行修改。作为一个示例,如果所确定的带宽(例如,控制点差)小于带宽阈值,则视频译码器可以通过使用4×4的子块(即4×4仿射模式)对cu进行仿射测试以修改运动补偿。否则,视频译码器可以使用8×8的子块(8×8仿射模式)或使用sbwidth×sbheight的子块(其中sbwidth和sbheight均大于4),而不是4×4仿射模式,来对cu进行仿射测试,或者,直接不修改以满足目标带宽减少。

视频译码器可以将约束分离地应用于运动方向l0或l1。这种情况下,可以在一个运动方向上具有4×4的子块,或者在另一运动方向上具有sbwidth×sbheight。可替换地,视频译码器可以对两个运动列表都应用约束以确定子块尺寸,这意味着l0和l1二者取决于两个方向是否都满足约束而具有相同的子块尺寸。

视频译码器可以执行运动向量差的归一化。例如,由于每个仿射子块的运动向量都是基于cu的尺寸计算的,视频译码器可以基于cu的尺寸来对运动向量差进行归一化。在某些示例中,归一化可以简化预测,因为对每个尺寸的限制可以最大化仿射运动中4×4的子块的利用率。

以下是对6-参数仿射模型和4-参数仿射模型(例如,如vtm中使用的)的限制进行归一化的示例:

运动向量差的归一化:

基于cu的尺寸(w×h)的运动向量差的归一化的实例可以表示为:

norm(v1x-v0x)=(v1x-v0x)*s/w

norm(v1y-v0y)=(v1y-v0y)*s/w

norm(v2x-v0x)=(v2x-v0x)*s/h

norm(v2y-v0y)=(v2y-v0y)*s/h(19)

其中s是为达到固定点实现的缩放因子,而norm(.)基于全像素比例。也可以应用其他像素分辨率。

用于6-参数模型的限制:

如果满足以下条件,则对6-参数模型进行4×4仿射模式测试:

|norm(v1x-v0x)+norm(v2x-v0x)+x|+|norm(v1y-v0y)+norm(v2y-v0y)+r|+|norm(v1x-v0x)-norm(v2x-v0x)|+|norm(v1y-v0y)-norm(v2y-v0y)|<n(20)

带宽节省可以是对称的。然而,带宽节省在(20)中会被x和y的值移位。同样在(20)中,n表示限制的范围。可以调整该值以得到最小的带宽节省。例如,为确保带宽节省不小于50%,如果将操作应用于全像素比例,则分别将x,y和n设置为s,s和s*7/2。对于分数像素比例,应该相应地调整x,y和n的值。n也可以取决于块尺寸。块尺寸越大,可以使用越大的n(例如,因为越大的块尺寸具有更多的4×4的子块,因此会得到更多的重叠区域)。

用于4-参数模型的限制:

4-参数仿射模型是6-参数模型的一种具体情况,其中仅考虑两个控制点来获取子仿射块的运动向量。在该模型中,(v2x-v0x)和(v2y-v0y)设置如下:

(v2x-v0x)=-(v1y-v0y)

(v2y-r0y)={{}}(v1x-v0x)

(21)

在这种情况下,(v2x-v0x)和(v2y-r0y)的归一化为:

norm(v2x-v0x)=-norm(v1y-v0y)

norm(v2y-r0y)=norm(v1x-v0x)

(22)

通过将(22)应用于(19),可以得到4-参数仿射模型的限制为:

|norm(v1x-v0x)-norm(v1y-v0y)+x|+|norm(v1y-v0y)+norm(v1x-v0x)+y|+|norm(v1x-v0x)+norm(v1y-v0y)|+|norm(v1y-v0y)-norm(v1x-v0x)|<n(23)

在某些示例中,视频译码器可以将其它限制(例如,约束)应用于4-参数仿射模式。作为一个示例,视频译码器可以应用以下限制:

|(v1x-v0x)+w|+|(v1y-v0y)|≤(n+log2(h/8))(w/8)(24)

其中,条件左侧的(+w)指示带宽减少是对称的,但被因子w移位了。log2(h/8)项是偏差归一化因子,表示h对带宽节省的影响。w/8是块尺寸的归一化。n表示带宽节省级别。条件(24)可以通过以w为8和多个h针对块计算出的带宽节省(%)的示例来确认。

用于4-参数仿射模型的另外的或可替换的限制可以给出如下:

|norm(v1x-v0x)+x|+|norm(v1y-v0y)+y|<n(25)

其中x,y和n对应于带宽节省级别。

用于4-参数仿射模型的另外的或可替换的限制可以定义为:

c1=|(v1x-v0x)+4*log2(w/8)+2|+|(v1y-v0y)+8*log2(w/8)+2*w/8|<n+4+w(26)

c2=|(v1x-v0x)+w-4*log2(w/8)-2|+|(v1y-v0y)-8*log2(w/8)-2*w/8|<n+4+w(27)

如果同时满足c1和c2,则可以测试4×4仿射模式。否则(例如,如果不满足c1和c2中一个或两个都没有满足),仿射模式将更大。

在另一种另外的或可替换的限制方法中:变量blkw指定块的宽度,变量blkh指定块的高度。变量subblkw指定用于仿射运动补偿的子块的默认宽度。变量subblkh指定用于仿射运动补偿的子块的默认高度。在该示例中,如果限制条件被满足,则用于仿射运动补偿的子块的尺寸为(subblkw,subblkh);否则,用于仿射运动补偿的子块的尺寸为(subblkw*2,subblkh*2)。通常,subblkw=4且subblkh=4,但它们可以具有其他整数值。

用于6-参数仿射模型的某些示例限制包括:

在一个示例中,

当归一化被应用时,上述限制变为:

-subblkw*s≤norm(v1x-v0x)*subblkw<s(34)

-s<norm(v1y-v0y)*subblkw<s(35)

-s<norm(v2x-v0x)*subblkh<s(36)

-s≤norm(v2x-v0x)*subblkh<s(37)

-blkw*s≤norm(v1xv0x)*subblkw+norm(v2xv0x)*subblkh<s(38)

-blkh*s≤norm(v1yv0y)*subblkw+norm(v2yv0y)*subblkh<s(39)

在另一示例中,“小于或等于”运算“≤”可以由“小于”运算“<”代替。举例来说:

等式(28)可以被替换为:

等式(31)-(33)被替换为:

视频译码器可以类似地应用上述归一化技术。其中,运动向量分辨率是子像素级的,且vix,viy以子像素为单位,视频译码器可以相应地将对应的等式进行缩放。例如,如果归一化被应用,则视频译码器可以对s进行缩放。

在4-参数仿射模型中,视频译码器可以对(v2x-v0x)和(v2y-v0y)进行如下设置:

(v2x-v0x)=-(v1y-v0y)

(v2y-v0y)=-(v1x-v0x)

在这种情况下,(v2x-v0x)和(v2y-v0y)的归一化为:

norm(v2x-v0x)=-norm(v1y-v0y)

norm(v2y-v0y)=norm(v1x-v0x)

然后,可以相应地建立4-参数仿射模型的限制。

下面对用于单向预测的另外的或可替换的限制进行描述。单向预测的限制可以与上述的限制相同。该限制也可以是其他可替换的限制。

在一个示例中,限制包括等式(28)和(29)。如果限制条件被满足,则用于仿射运动补偿的子块的尺寸为(subblkw,subblkh)。否则,用于仿射运动补偿的子块的尺寸为(subblkw*2,subblkh)。

在又一示例中,限制包括等式(40)和(29)。如果限制条件被满足,则用于仿射运动补偿的子块的尺寸为(subblkw,subblkh)。否则,用于仿射运动补偿的子块的尺寸为(subblkw*2,subblkh)。

在又一示例中,限制包括等式(30)和(31)。如果限制条件被满足,则用于仿射运动补偿的子块的尺寸为(subblkw,subblkh)。否则,用于仿射运动补偿的子块的尺寸为(subblkw,subblkh*2)。

在又一示例中,限制包括等式(30)和(41)。如果限制条件被满足,则用于仿射运动补偿的子块的尺寸为(subblkw,subblkh)。否则,用于仿射运动补偿的子块的尺寸为(subblkw,subblkh*2)。另外,可以对上述示例进行归一化。

视频编码器200表示被配置为对视频数据进行编码的设备的示例。该设备包括配置为存储视频数据的存储器和在电路中实现的一个或更多个处理器。所述一个或更多个处理器被配置为:获得针对视频数据的当前块的cpmv的值;确定对基于cpmv的值所得到的多个参考块的样本进行访问所需的存储器带宽是否满足带宽阈值;基于所确定的存储器带宽是否满足带宽阈值来对用于预测视频数据的当前块的样本的运动补偿方法进行选择性地修改;以及使用经选择性地修改的运动补偿方法来从多个参考块的样本中预测视频数据的当前块的样本。

图5是示出可以进行本公开的技术的一种示例视频解码器300的框图。出于阐述的目的提供图5,而不应该将其视为限制本公开中广泛例示和描述的技术。为了说明的目的,本公开基于jem、vvc和hevc的技术描述了视频解码器300。然而,本公开的技术可以由配置为根据其他视频译码标准运行的视频译码设备来进行。

在图5的示例中,视频解码器300包括已译码图片缓存器(cpb)存储器320、熵解码单元302、预测处理单元304、逆量化单元306、逆变换处理单元308、重建单元310、滤波器单元312以及已解码图片缓存器(dpb)314。cpb存储器320、熵解码单元302、预测处理单元304、逆量化单元306、逆变换处理单元308、重建单元310、滤波器单元312以及dpb314中的任一个或全部可以在一个或更多个处理器中或处理电路中实现。此外,视频解码器300可以包括另外的或可替换的处理器或处理电路以执行这些或其他功能。

预测处理单元304包括运动补偿单元316和帧内预测单元318。预测处理单元304可以包括加法单元以根据其他预测模式进行预测。作为示例,预测处理单元304可以包括调色板单元、块内复制单元(可以形成运动补偿单元316的一部分)、仿射单元、线性模型(lm)单元等。在其他示例中,视频解码器300可以包括更多,更少或不同的功能组件。

cpb存储器320可以存储待由视频解码器300的组件进行解码的视频数据,例如已编码视频比特流。存储在cpb存储器320中的视频数据可以例如从计算机可读介质110(图1)获得。cpb存储器320可以包括对基于已编码视频比特流的已编码视频数据(例如,语法元素)进行存储的cpb。而且,cpb存储器320可以存储除了已译码图片的语法元素之外的视频数据,例如表示来自视频解码器300的多个单元的输出的临时数据。dpb314通常存储已解码图片。视频解码器300在对已编码视频比特流的后续数据和图片进行解码时,可以输出和/或使用上述已解码图片以作为参考视频数据。cpb存储器320和dpb314可以由多种存储器设备中的任一种形成,诸如dram。上述多种存储器设备包括sdram、mram、rram或其他类型的存储器设备。cpb存储器320和dpb314可以由相同的存储器设备或分离的存储器设备提供。在多个示例中,cpb存储器320可以与视频解码器300的其他组件在芯片上,或者相对于那些组件在芯片外。

另外地或可替换地,在某些示例中,视频解码器300可以从存储器120(图1)中检索已译码视频数据。也就是说,存储器120可以如上文所述与cpb存储器320一起存储数据。同样地,当视频解码器300的某些或全部功能由待由视频解码器300的处理电路执行的软件实现时,存储器120可以存储待由视频解码器300执行的指令。

对图5中所示的多个单元进行说明以帮助理解由视频解码器300执行的操作。这些单元可以实现为固定功能电路,可编程电路或两者的组合。与图4相似的是,固定功能电路是指提供特定功能并为可以执行的操作进行预设的电路。可编程电路是指可以被编程以执行多种任务并且在可以执行的操作中提供灵活功能的电路。举例来说,可编程电路可以执行软件或固件,以使得可编程电路以软件或固件的指令所定义的方式来运行。固定功能电路可以执行软件指令(例如,接收参数或输出参数),但是固定功能电路执行的操作类型通常是不可变的。在某些示例中,所述单元中的一个或更多个可以是不同的电路块(固定功能或可编程的),而在某些示例中,该一个或更多个单元可以是集成电路。

视频解码器300可以包括alu、efu、数字电路、模拟电路和/或由可编程电路形成的可编程核。在视频解码器300的操作由在可编程电路上执行的软件执行的示例中,片上或片外存储器可以存储视频解码器300接收并执行的软件的指令(例如,目标代码)。

熵解码单元302可以从cpb接收已编码视频数据,并对该视频数据进行熵解码以重现语法元素。预测处理单元304、逆量化单元306、逆变换处理单元308、重建单元310以及滤波器单元312可以基于从比特流中提取的语法元素来生成已解码视频数据。

通常,视频解码器300在逐块的基础上重建图片。视频解码器300可以单独地对每个块执行重建操作(其中当前正在被重建,即,被解码,的块可以被称为“当前块”)。

熵解码单元302可以对定义已量化变换系数块的已量化变换系数的语法元素和变换信息进行熵解码,变换信息例如量化参数(qp)和/或变换模式指示。逆量化单元306可以使用与已量化变换系数块相关联的qp来确定量化的程度,并且同样地,确定逆量化的程度以供逆量化单元306应用。逆量化单元306可以例如进行按位左移的运算来对已量化变换系数进行逆量化。逆量化单元306从而可以形成包括变换系数的变换系数块。

在逆量化单元306形成变换系数块之后,逆变换处理单元308可以将一种或更多种逆变换应用于变换系数块以生成与当前块相关联的残差块。例如,逆变换处理单元308可以对系数块应用逆dct、逆整数变换、逆karhunen-loeve变换(klt)、逆旋转变换、逆方向变换或另一种逆变换。

此外,预测处理单元304根据由熵解码单元302进行熵解码所得到的预测信息语法元素来生成预测块。例如,如果预测信息语法元素指示当前块是帧间预测的,则运动补偿单元316可以生成预测块。在这种情况下,预测信息语法元素可以指示dpb314中的从其检索参考块的参考图片以及标识参考图片中的参考块相对于当前图片中的当前块的位置的运动向量。运动补偿单元316通常可以以针对运动补偿单元224(图4)所描述的方式基本相似的方式来进行帧间预测过程。

作为另一示例,如果预测信息语法元素指示当前块是帧内预测的,则帧内预测单元318可以根据预测信息语法元素指示的帧内预测模式来生成预测块。同样地,帧内预测单元318通常可以以与针对帧内预测单元226(图4)所描述的方式基本相似的方式来执行帧内预测过程。帧内预测单元318可以从dpb314检索当前块的相邻样本的数据。

重建单元310可以使用预测块和残差块来重建当前块。例如,重建单元310可以将残差块的样本加到预测块的对应样本上以重建当前块。

滤波器单元312可以对重建块进行一种或更多种滤波器操作。例如,滤波器单元312可以进行解块操作以减少沿着重建块的边缘的块状伪像。过滤器单元312的操作不必要在所有示例中都执行。

视频解码器300可以将重建块存储在dpb314中。如上所述,dpb314可以向预测处理单元304提供参考信息,例如用于帧内预测的当前图片的样本以及用于后续运动补偿的预先解码的图片。同时,视频解码器300可以输出来自dpb314的已解码图片,以用于后续在例如图1的显示设备118的显示设备上呈现。

以这种方式,视频解码器300表示视频解码设备的示例。该视频解码设备包括配置为存储视频数据的存储器以及在电路中实现的一个或更多个处理单元。所述一个或更多个处理单元被配置为:获得针对视频数据的当前块的cpmv的值;确定对基于cpmv的值所得到的多个参考块的样本进行访问所需的存储器带宽是否满足带宽阈值;基于所确定的存储器带宽是否满足带宽阈值来对用于预测视频数据的当前块的样本的运动补偿方法进行选择性地修改;以及使用经选择性地修改的运动补偿方法来从多个参考块的样本中预测视频数据的当前块的样本。

图9是示出用于对当前块进行编码的一种示例方法的流程图。当前块可以包括当前cu。尽管参考视频编码器200(图1和图4)进行了描述,但是应当理解的是,其他设备可以被配置为执行与图9的方法类似的方法。

在本示例中,视频编码器200最初对当前块(950)进行预测。例如,视频编码器200可以形成针对当前块的预测块。如上所讨论的,在某些示例中,视频编码器200可以使用仿射模式来预测当前块。根据本公开的一种或更多种技术,视频编码器200可以执行多种技术以对用于预测视频数据的当前块的存储器带宽进行管理。以下将参考图11对这种存储器带宽管理技术的一个示例进行讨论。

接着,视频编码器200可以计算针对当前块的残差块(952)。为了计算残差块,视频编码器200可以计算原始的未编码的块与针对当前块的预测块之间的差。之后,视频编码器200可以对该残差块的系数进行变换和量化(954)。接下来,视频编码器200可以对残差块的已量化的变换系数进行扫描(956)。在扫描期间或在扫描之后,视频编码器200可以对系数进行熵编码(958)。例如,视频编码器200可以使用cavlc或cabac来对系数进行编码。然后,视频编码器200可以输出块的经熵编码数据(960)。

图10是示出用于对视频数据的当前块进行解码的一种示例方法的流程图。当前块可以包括当前cu。尽管参考视频解码器300(图1和图5)进行了描述,但是应当理解的是,其他设备可以被配置为执行与图10类似的方法。

视频解码器300可以接收用于当前块的经熵编码的数据,例如经熵编码的预测信息和针对对应于当前块的残差块的系数的经熵编码数据(1070)。视频解码器300可以对经熵编码的数据进行熵解码,以确定针对当前块的预测信息并且重现残差块的系数(1072)。视频解码器300可以例如,使用由针对当前块的预测信息所指示的帧内或帧间预测模式来预测当前块(1074),以计算针对当前块的预测块。如上所讨论的,在某些示例中,视频解码器300可以使用仿射模式来预测当前块。根据本公开的一种或更多种技术,视频解码器300可以执行多种技术以对用于预测视频数据的当前块的存储器带宽进行管理。以下将参考图11对这种存储器带宽管理技术的一个示例进行讨论。

然后,视频解码器300可以对重现的系数进行逆扫描(1076),以创建已量化变换系数的块。接着,视频解码器300可以对系数进行逆量化和逆变换以产生残差块(1078)。视频解码器300最终可以通过将预测块和残差块进行组合来对当前块进行解码(1080)。

图11是示出根据本公开的一种或更多种技术的一种用于管理用于预测视频数据的存储器带宽的示例方法的流程图。图11的技术可以由视频译码器(例如,图1和4的视频编码器200和/或图1和5的视频解码器300)来执行。为了简化说明,图11的技术被描述为由图1和5的视频解码器300来执行。

视频解码器300可以获得用于视频数据的当前块的控制点运动向量(controlpointmotionvector,cpmv)的值(1102)。例如,视频解码器300可以获得图6的框600的的值。视频解码器300可以基于当前块的空间相邻块的运动向量(可以是也可以不是cpmv)的值来获得cpmv的值。

视频解码器300可以确定对基于cpmv的值所得到的参考块的样本进行访问所需的存储器带宽(1104)。举例来说,在当前块是图8的块806的情况下,视频解码器300可以确定对参考区域810(包括参考块和用于内插的额外样本)的样本进行访问所需的存储器带宽。如上述所讨论的,参考区域810由从块806的cpmv得到的子块运动向量mva-mvd来标识。

视频解码器300可以确定所确定的存储器带宽是否满足带宽阈值(1106)。如上述所讨论的,带宽阈值可以是预定的带宽阈值。在某些示例中,视频解码器300可以在所确定的存储器带宽小于或等于(例如,<或=)带宽阈值的情况下确定存储器带宽满足带宽阈值。在某些示例中,视频解码器300可以在所确定的存储器带宽小于(例如,<)带宽阈值的情况下确定存储器带宽满足带宽阈值。在某些示例中,视频解码器300可以在所确定的存储器带宽大于(例如,>)带宽阈值的情况下确定存储器带宽不满足带宽阈值。在某些示例中,视频解码器300可以在所确定的存储器带宽大于或等于(例如,>或=)带宽阈值的情况下确定存储器带宽不满足带宽阈值。

视频解码器300可以基于所确定的存储器带宽是否满足带宽阈值来对用于预测视频数据的当前块的样本的运动补偿方法进行选择性地修改。作为一个示例,视频解码器300可以响应于确定存储器带宽不满足带宽阈值(1106的“否”分支,1108)而对该运动补偿方法进行修改。作为另一示例,视频解码器300可以响应于确定存储器带宽确实满足带宽阈值(1106的“是”分支,1110)而保持(例如,不修改)该运动补偿方法。在视频解码器300确定要修改该运动补偿方法的情况下,视频解码器300可以以任何个数的方式来修改该运动补偿方法。通常,通过修改运动补偿方法,视频解码器300会减少预测当前块的样本所需的存储器带宽(即,访问当前块的预测器块的样本所需的存储器带宽)。

视频解码器300可以使用经选择性地修改的运动补偿方法来预测视频数据的当前块的样本(1112)。举例来说,视频解码器300的预测处理单元304可以从存储器(例如,视频解码器300的已解码图片缓存器314)访问基于cpmv的值所得到的多个参考块的样本。视频解码器300可以基于参考块的样本和残差数据来确定当前块的样本的值。

如上述所讨论的,在某些示例中,视频解码器300可以将带宽减少技术分离地应用于各预测方向(例如,分离地应用于l0或l1运动)。例如,在当前块被双向预测的情况下,视频解码器300可以获得当前块针对第一预测方向的cpmv的值(例如,l0),并获得当前块针对第二预测方向的cpmv的值(例如l1)。视频解码器300可以独立地测试每个预测方向的带宽要求。举例来说,视频解码器300可以确定对基于第一预测方向的cpmv的值所得到的多个参考块的样本进行访问所需的存储器带宽是否满足带宽阈值;并且确定对基于第二预测方向的cpmv的值所得到的多个参考块的样本进行访问所需的存储器带宽是否满足带宽阈值。基于该测试,视频解码器300可以独立地对用于每个预测方向的运动补偿方法进行选择性地修改。举例来说,视频解码器300可以基于所确定的针对第一预测方向的存储器带宽是否满足带宽阈值来对运动补偿方法进行选择性地修改,该运动补偿方法用于预测视频数据的当前块在第一预测方向上的样本;并且基于所确定的针对第二预测方向的存储器带宽是否满足带宽阈值来对运动补偿方法进行选择性地修改,该运动补偿方法用于预测视频数据的当前块在第二预测方向上的样本。结果,视频解码器300可以分离地且独立地对用于两个预测方向的运动补偿方法进行修改(例如,改变一个而不改变另一个、改变两个、都不改变)。

在某些示例中,视频解码器300基于相应块的存储器带宽要求对用于预测每个相应块的运动补偿方法进行独立地选择性地调整。举例来说,在编码单元(cu)包括多个8×8的子块的情况下,针对多个子块中的每个相应子块,视频解码器300可以分离地确定对该相应子块的相应多个参考块的样本进行访问所需的相应存储器带宽是否满足带宽阈值。视频解码器300可以基于该特定子块的相应存储器带宽是否满足带宽阈值来对用于预测该相应子块的样本的运动补偿方法进行选择性地修改。换句话说,视频解码器300可以对用于每个子块的运动补偿方法进行独立于其他子块地、选择性地调整。这种情况下,取决于每个子块的存储器带宽要求,视频解码器300可以对用于cu的某些子块的运动补偿方法进行调整,而不对用于同一cu的其他子块的运动补偿方法进行调整。

然而,在某些示例中,并不希望视频解码器300基于相应块的存储器带宽要求来对用于预测每个相应块的运动补偿方法进行独立地选择性地调整。举例来说,估算和测试每个子块的存储器带宽会导致计算密集,从而会减慢解码过程。

根据本公开的一种或更多种技术,视频解码器300可以基于多个子块中的特定子块的存储器带宽要求来对用于预测多个子块的运动补偿方法进行选择性地调整。举例来说,在cu包括多个8×8的子块的情况下,针对多个子块中的特定子块,视频解码器300可以确定预测该特定子块所需的相应存储器带宽是否满足带宽阈值。基于该特定子块的存储器带宽是否满足带宽阈值,视频解码器300可以对用于预测多个子块中的全部子块的样本的运动补偿方法进行修改。换句话说,视频解码器300可以基于单个子块的估算来对用于每个子块的运动补偿方法进行选择性地调整。以此方式,视频解码器300可以避免必须分离地确定每个子块的存储器带宽要求。

图12是示出根据本公开的一个或更多个方面的简化的存储器带宽测试的示意图。如图12所示,编码单元(cu)1204包括四个子块:1206a-1206d(统称为“子块1206”)。举例来说,cu1204可以是16×16的cu,并且子块1206中的每个子块可以是8×8的编码块。如图12所示,子块1206中的每个子块可以包括它们自己的子块。举例来说,子块1206可以被分成四个子块,这类似于图8的子块808。

如上所讨论的,视频译码器(例如,视频编码器200和/或视频解码器300)可以独立地或依赖地对cu的子块的运动补偿进行选择性地调整。为了独立地对运动补偿进行选择性地调整,视频译码器可以分离地确定子块1206中的每一个的存储器带宽要求。举例来说,视频译码器可以确定用于子块1206a的第一存储器带宽、用于子块1206b的第二存储器带宽、用于子块1206c的第三存储器带宽以及用于子块1206d的第四存储器带宽。视频译码器可以基于子块1206中的每个相应子块的存储器带宽来分离地确定是否要对用于该相应子块的运动补偿方法进行调整。举例来说,视频译码器可以基于第一存储器带宽来确定是否要对用于子块1206a的运动补偿方法进行调整,基于第二存储器带宽来确定是否要对用于子块1206b的运动补偿方法进行调整,基于第三存储器带宽来确定是否要对用于子块1206c的运动补偿方法进行调整,并基于第四存储器带宽来确定是否要对用于子块1206d的运动补偿方法进行调整。

为了对运动补偿进行依赖地调整,视频译码器可以确定子块1206中的单个子块的存储器带宽要求,并基于该单个子块的存储器带宽要求来对用于子块1206中的全部子块的运动补偿方法进行选择性地调整。举例来说,视频译码器可以确定子块1206a的存储器带宽,并且基于子块1206a的存储器带宽要求来对用于子块1206中的全部子块的运动补偿方法进行选择性地调整。在某些示例中,视频译码器可以基于位置来选择要测试哪个子块。举例来说,视频译码器可以选择左上子块来测试(例如,图12中的子块1206a)。以此方式,视频译码器可以避免必须确定子块1206b、1206c和1206d的存储器带宽要求。

应该认识到,根据示例,可以以不同的顺序执行,也可以添加,合并或完全省略(例如,并非所有描述的动作或事件是实践这些技术所必要的)本文描述的技术中的任一种的某些动作或事件。此外,在某些示例中,可以例如通过多线程处理、中断处理或多个处理器并发地执行动作或事件,而不是顺序地执行动作或事件。

在一个或更多个示例中,可以以硬件,软件,固件或其任意组合来实现所述功能。如果以软件实现,则所述功能可以作为一个或更多个指令或代码存储在计算机可读介质上或通过计算机可读介质进行传输,并由基于硬件的处理单元执行。计算机可读介质可以包括计算机可读存储介质或者通信介质。计算机可读存储介质对应于诸如数据存储介质的有形介质。通信介质包括有助于,例如根据通信协议,将计算机程序从一处传送到另一处的任何介质。以这种方式,计算机可读介质通常可以对应于(1)非暂时性的有形计算机可读存储介质,或者(2)诸如信号或载波的通信介质。数据存储介质可以是满足下述条件的任何可用的介质。所述条件为一台或更多台计算机或一个或更多个处理器可以访问该数据存储介质以检索指令、代码和/或数据结构,从而实现本公开中描述的技术。计算机程序产品可以包括计算机可读介质。

作为示例而非限制,上述计算机可读存储介质可以包括:ram、rom、eeprom、cd-rom或其他光盘存储、磁盘存储、或其他磁性存储设备、闪存存储器或任何其他可以用于以指令或数据结构形式存储所需程序代码且可由计算机访问的介质。而且,任何连接都适当地称为计算机可读介质。例如,如果使用同轴电缆、光纤电缆、双绞线、数字用户线(dsl)或诸如红外,无线电和微波的无线技术从网站、服务器或其他远程源发送指令,则上述同轴电缆、光纤电缆、双绞线、dsl或诸如红外、无线电和微波的无线技术都包含于介质的定义。然而,应当理解,计算机可读存储介质和数据存储介质并不包括连接、载波、信号或其他瞬时介质,而是指非瞬时的有形存储介质。本文使用的磁盘和光盘包括压缩光盘(cd)、激光光碟、光盘、数字多功能光盘(dvd)、软盘和blu-ray光盘,其中磁盘通常以磁性方式复制数据,而光盘则通过激光光学方式复制数据。上述的组合也应包括在计算机可读介质的范围内。

可以由一个或更多个处理器来执行指令,该一个或更多个处理器例如一个或更多个信号处理器(dsp)、通用微处理器、专用集成电路(asic)、现场可编程门阵列(fpga)或其他等效的集成或离散逻辑电路。因此,如本文所使用的术语“处理器”可以指任何前述结构或适合于实现本文所述的技术的任何其他结构。另外,在某些方面,本文所述的功能可以在被配置用于进行编码和解码的专用硬件和/或软件模块内提供,或结合在组合译码器中。同样,所述技术可以在一个或更多个电路或逻辑元件中充分实现。

本公开的技术可以在各种各样的设备或装置中实现,包括无线手机,集成电路(ic)或一组ic(例如,芯片组)。在本公开中描述了多个组件,模块或单元以强调被配置为执行所公开的技术的设备的功能方面,但不一定需要由不同硬件单元来实现。准确地说,如上所述,结合适当的软件和/或固件,多个单元可以组合在译码器硬件单元中,或者由互操作硬件单元集来提供,包括如上所述的一个或更多个处理器。

已经对多种示例进行了描述。这些和其他示例均在所附权利要求的范围内。

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