具体实施方式
一般来讲,本公开描述了用于对视频数据进行编码的各种技术。具体而言,本公开描述了用于视频编码中的运动矢量预测的技术。具体地讲,本公开描述了用于改变用于生成运动矢量预测的运动信息的存储精度的技术。根据本文所述的技术来改变运动信息的精度对于优化视频编码性能和运动矢量预测的存储器成本可能特别有用。应当指出的是,尽管本公开的技术是相对于ITU-T H264、ITU-T H.265、JVET-J1001、JVET-K1001和JVET-L1001描述的,但本公开的技术通常适用于视频编码。例如,本文所述的编码技术可结合到视频编码系统(包括基于未来视频编码标准的视频编码系统)中,这些技术包括块结构、帧内预测技术、帧间预测技术、变换技术、滤波技术和/或熵编码技术,不同于ITU-T H.265中包括的那些技术。因此,参考ITU-T H.264、ITU-T H.265、JVET-J1001、JVET-K1001和JVET-L1001是出于描述性目的,并且不应被解释为限制本文所述技术的范围。此外,应当指出的是,将文献以引用方式并入本文不应被解释为限制或产生相对于本文所用术语的歧义。例如,在某个并入的参考文献中提供的对某个术语的定义不同于另一个并入的参考文献和/或如本文所用的该术语的情况下,则该术语应以广泛地包括每个相应定义的方式和/或以包括替代方案中每个特定定义的方式来解释。
在一个示例中,一种用于重构视频数据的设备包括一个或多个处理器,所述一个或多个处理器被配置为:确定全精度运动矢量以用于生成对第一图片中的视频块的预测,以小于所述全精度存储所述运动矢量,以及从所存储的运动矢量生成用于第二图片中的视频块的预测运动矢量候选。
在一个示例中,一种非暂态计算机可读存储介质包括存储在其上的指令,所述指令在被执行时,使得设备的一个或多个处理器:确定全精度运动矢量以用于生成对第一图片中的视频块的预测,以小于所述全精度存储所述运动矢量,以及从所存储的运动矢量生成用于第二图片中的视频块的预测运动矢量候选。
在一个示例中,一种装置包括:用于确定全精度运动矢量以用于生成对第一图片中的视频块的预测的构件;用于以小于所述全精度存储所述运动矢量的构件;和用于从所存储的运动矢量生成用于第二图片中的视频块的预测运动矢量候选的构件。
在以下附图和描述中阐述了一个或多个示例的细节。其他特征、对象和优点将从描述和附图以及权利要求书中显而易见。
视频内容通常包括由一系列帧(或图片)组成的视频序列。一系列帧也可以被称为一组图片(GOP)。每个视频帧或图片可被分成一个或多个区域。可根据基本单元(例如,视频块)和定义区域的规则集(例如,区域必须是布置成矩形的整数个视频块)来定义区域。如本文所用,术语“视频块”通常可以指图片的区域,或者可以更具体地指可以被预测性地编码的样本值的最大阵列、其子分区和/或对应结构。此外,术语“当前视频块”可以指图片的正被编码或解码的区域。视频块可被定义为可被预测性地编码的样本值的阵列。应当指出的是,在一些情况下,像素值可被描述为包括视频数据的相应分量的样本值,其也可被称为颜色分量(例如,亮度(Y)和色度(Cb和Cr)分量或红色、绿色和蓝色分量)。应当指出的是,在一些情况下,术语“像素值”和“样本值”可互换使用。此外,在一些情况下,像素或样本可被称为pel。视频采样格式(也可以被称为色度格式)可以相对于视频块中包括的亮度样本的数量来定义视频块中包括的色度样本的数量。例如,对于4:2:0采样格式,亮度分量的采样率是水平和垂直两个方向的色度分量的采样率的两倍。因此,对于根据4:2:0格式格式化的视频块,用于亮度分量的样本阵列的宽度和高度是用于色度分量的每个样本阵列的宽度和高度的两倍。对于根据4:2:2格式格式化的视频块,亮度分量的样本阵列的宽度是每个色度分量的样本阵列的宽度的两倍,但是亮度分量的样本阵列的高度等于每个色度分量的样本阵列的高度。此外,对于根据4:4:4格式格式化的视频块,亮度分量的样本阵列具有与每个色度分量的样本阵列相同的宽度和高度。
视频块可以根据扫描模式(例如,光栅扫描)在图片和/或区域内排序。视频编码器可对视频块和其子分区执行预测编码。视频块和其子分区可以被称为节点。ITU-T H.264规定了包括16×16亮度样本的宏块。即,在ITU-T H.264中,图片被分割成宏块。ITU-T H.265指定了类似的编码树单元(CTU)结构(也称为最大编码单元(LCU))。在ITU-T H.265中,图片被分割成CTU。在ITU-T H.265中,对于图片,CTU大小可被设定为包括16×16、32×32或64×64亮度样本。在ITU-T H.265中,CTU由视频数据的每个分量(例如,亮度(Y)和色度(Cb和Cr))的相应编码树块(CTB)组成。此外,在ITU-T H.265中,可根据四叉树(QT)划分结构来划分CTU,这使得CTU的CTB被划分为编码块(CB)。即,在ITU-T H.265中,CTU可被划分为四叉树叶节点。根据ITU-T H.265,一个亮度CB连同两个对应的色度CB和相关联的语法元素被称为编码单元(CU)。在ITU-T H.265中,可以用信号发送CB的最小允许尺寸。在ITU-T H.265中,亮度CB的最小允许尺寸是8×8亮度样本。也就是说,在ITU-T H.265中,使用帧内预测或帧间预测对图片区域进行编码的决定在CU级作出。
在ITU-T H.265中,CU与在CU处具有其根的预测单元(PU)结构相关联。在ITU-TH.265中,PU结构允许分割亮度CB和色度CB以生成对应的参考样本。即,在ITU-T H.265中,可将亮度CB和色度CB分割成相应的亮度预测块和色度预测块(PB),其中PB包括对其应用相同预测的样本值的块。在ITU-T H.265中,可将CB划分为1个、2个或4个PB。ITU-T H.265支持从64×64样本向下至4×4样本的PB大小。在ITU-T H.265中,支持正方形PB来进行帧内预测,其中CB可形成PB,或者CB可被分割成四个正方形PB(即,帧内预测PB类型包括M×M或M/2×M/2,其中M为正方形CB的高度和宽度)。在ITU-T H.265中,除了正方形PB之外,还支持矩形PB来进行帧间预测,其中CB可垂直地或水平地减半以形成PB(即,帧间预测PB类型包括M×M、M/2×M/2、M/2×M或M×M/2)。此外,应当指出的是,在ITU-T H.265中,对于帧间预测,支持四个非对称PB划分,其中CB在CB的高度(顶部或底部)或宽度(左侧或右侧)的四分之一处被划分为两个PB(即,非对称划分包括M/4×M左、M/4×M右、M×M/4顶部和M×M/4底部)。对应于PB的帧内预测数据(例如,帧内预测模式语法元素)或帧间预测数据(例如,运动数据语法元素)用于生成PB的参考和/或预测样本值。
如上所述,每个视频帧或图片可被分成一个或多个区域。例如,根据ITU-T H.265,每个视频帧或图片可被划分为包括一个或多个切片,并且进一步被划分为包括一个或多个图块,其中每个切片包括CTU序列(例如,以光栅扫描顺序排列),并且其中图块是对应于图片的矩形区域的CTU序列。应当指出的是,在ITU-T H.265中,切片是从独立切片片段开始并且包含在同一访问单元内的下一个独立切片片段(如果有的话)之前的所有后续从属切片片段(如果有的话)的一个或多个切片片段的序列。切片片段(如切片)是CTU序列。因此,在一些情况下,术语“切片”和“切片片段”可互换使用以指示CTU序列。此外,应当指出的是,在ITU-T H.265中,图块可由包含在多于一个切片中的CTU组成,并且切片可由包含在多于一个图块中的CTU组成。然而,ITU-T H.265规定了应满足以下一个或两个条件:(1)片段中的所有CTU属于同一个图块;以及(2)图块中的所有CTU属于同一个切片。相对于JVET-L1001,已经提出切片需要由整数个完整图块组成,而不是只需要由整数个完整CTU组成。因此,在一些视频编码技术中,可支持或可不支持包括不形成图片的矩形区域的一组CTU的切片。此外,需要由整数个完整图块组成的切片被称为图块组。本文所述的技术可适用于切片、图块和/或图块组。图1是示出包括图块组的一组图片的示例的概念图。在图1所示的示例中,Pic4被示出为包括两个图块组(即,图块组1和图块组2)。应当指出的是,在一些情况下,图块组1和图块组2可被分类为切片和/或图块。
JEM规定了具有256×256亮度样本的最大尺寸的CTU。JEM指定了四叉树加二叉树(QTBT)块结构。在JEM中,QTBT结构允许由二叉树(BT)结构进一步划分四叉树叶节点。也就是说,在JEM中,二叉树结构允许将四叉树叶节点垂直或水平递归划分。在JVET-L1001中,根据四叉树加多类型树(QTMT)结构来划分CTU。JVET-L1001中的QTMT类似于JEM中的QTBT。然而,在JVET-L1001中,除了指示二进制分割之外,多类型树还可以指示所谓的三元(或三叉树(TT))分割。三元分割将一个块垂直地或水平地分成三个块。在垂直TT分割的情况下,块从左边缘起在其宽度的四分之一处以及从右边缘起在其宽度的四分之一处分割,并且在水平TT分割的情况下,块从顶部边缘起在其高度的四分之一处以及从底部边缘起在其高度的四分之一处分割。再次参考图1,图1示出了CTU被划分为四叉树叶节点并且四叉树叶节点根据BT分割或TT分割被进一步划分的示例。即,在图1中,虚线指示四叉树中的附加二元和三元分割。
如上所述,帧内预测数据或帧间预测数据用于产生当前视频块的参考样本值。从参考样本值和当前视频块生成的预测中包括的样本值之间的差异可被称为残差数据。残差数据可以包括对应于视频数据的每个分量的相应差值阵列。残差数据可能在像素域中。可对差值阵列应用变换诸如离散余弦变换(DCT)、离散正弦变换(DST)、整数变换、小波变换或概念上类似的变换,以生成变换系数。应当指出的是,在ITU-T H.265和JVET-L1001中,CU与在CU级具有其根的变换单元(TU)结构相关联。即,为了生成变换系数,可以对差值的阵列进行划分(例如,可以将四个8×8变换应用于16×16残差值阵列)。对于视频数据的每个分量,差值的此类再分可被称为变换块(TB)。应当指出的是,在一些情况下,可以(在视频编码器中)应用核心变换和后续二次变换来生成变换系数。对于视频解码器,变换的顺序是相反的。
可以对变换系数执行量化处理。量化实质上对变换系数进行缩放以便改变表示一组变换系数所需的数据量。量化可包括将变换系数除以量化缩放因子和任何相关联的舍入函数(例如,舍入到最接近的整数)。量化的变换系数可以被称为系数位阶值。逆量化(或“去量化”)可以包括将系数位阶值与量化缩放因子相乘。应当指出的是,如本文所用,术语量化过程在一些情况下可指除以缩放因子以生成位阶值,并且在一些情况下可指乘以缩放因子以恢复变换系数。也就是说,量化过程在一些情况下可以指量化,而在一些情况下可以指逆量化。
图2A至图2B是示出对视频数据块进行编码的示例的概念图。如图2A所示,通过从当前视频数据块中减去一组预测值生成残差、对残差执行变换并且将变换系数量化来生成位阶值,对视频数据的当前块进行编码。如图2B所示,通过对位阶值执行逆量化、执行逆变换并且将一组预测值加到所得的残差来对当前视频数据块进行解码。应当指出的是,在图2A至图2B的示例中,重构块的样本值不同于被编码的当前视频块的样本值。这样,编码可被认为是有损的。然而,本值的差值可被认为是重构视频的观看者可接受的或不可察觉的。另外,如图2A至图2B所示,使用缩放因子阵列执行缩放。
如图2A所示,量化的变换系数被编码成比特流。可根据熵编码技术对量化的变换系数和语法元素(例如,指示视频块的编码结构的语法元素)进行熵编码。熵编码技术的示例包括内容自适应可变长度编码(CAVLC)、上下文自适应二进制算术编码(CABAC)、概率区间划分熵编码(PIPE)等。熵编码的量化变换系数和对应的熵编码的语法元素可形成可用于在视频解码器处再现视频数据的合规比特流。熵编码过程可包括对语法元素进行二值化。二值化是指将语法值的值转换为一个或多个位的序列的过程。这些位可以被称为“bin”。二值化是一个无损过程,并且可以包括以下编码技术中的一种或组合:固定长度编码、一元编码、截断一元编码、截断Rice编码、Golomb编码、k阶指数Golomb编码和Golomb-Rice编码。例如,二值化可包括使用8位固定长度二值化技术将语法元素的整数值5表示为00000101,或者使用一元编码二值化技术将整数值5表示为11110。如本文所用,术语固定长度编码、一元编码、截断一元编码、截断Rice编码、Golomb编码、k阶指数Golomb编码和Golomb-Rice编码中的每一个可以指这些技术的一般实现和/或这些编码技术的更具体实现。例如,可以根据视频编码标准(例如,ITU-T H.265)具体地定义Golomb-Rice编码实施方式。
熵编码过程还包括使用无损数据压缩算法对bin值进行编码。在CABAC的示例中,对于特定bin,可从与该bin相关联的一组可用上下文模型中选择一个上下文模型。在一些示例中,可以基于先前的bin和/或先前语法元素的值来选择上下文模型。上下文模型可以识别某个bin具有特定值的概率。例如,上下文模型可指示对0值bin进行编码的概率为0.7。在选择可用的上下文模型之后,CABAC熵编码器可以基于所识别的上下文模型对bin进行算术编码。可以基于已编码的bin的值来更新上下文模型。可基于与上下文一起存储的相关联的变量例如适应窗口大小、使用上下文的已编码的bin的数量,来更新上下文模型。应当指出的是,可以实现CABAC熵编码器,使得可以使用算术编码对一些语法元素进行熵编码而不使用明确指定的上下文模型,此类编码可以被称为旁路编码。
如上所述,帧内预测数据或帧间预测数据指示如何为当前视频块生成预测。对于帧内预测编码,帧内预测模式可指定图片内的用于生成预测的参考样本的位置。在ITU-TH.265中,定义的可能的帧内预测模式包括平面(即表面拟合)预测模式(predMode:0)、DC(即平坦整体平均)预测模式(predMode:1)和33个角预测模式(predMode:2-34)。在JVET-L1001中,用于亮度的已定义的可能的帧内预测模式包括平面预测模式(predMode:0)、DC预测模式(predMode:1)以及65个角预测模式(predMode:2-66)。应当指出的是,平面预测模式和DC预测模式可以被称为无方向预测模式,并且角预测模式可以被称为方向预测模式。此外,可存在可基于用于亮度分量的帧内预测模式导出用于色度分量的帧内预测模式的各种方法。应当指出的是,无论已定义的可能预测模式的数量如何,本文描述的技术可以是普遍适用的。
对于帧间预测编码,确定一个或多个先前解码的图片,即,确定参考图片,并且运动矢量(MV)识别该参考图片中用于生成对当前视频块的预测的样本。例如,可使用位于一个或多个先前编码的图片中的参考样本值来预测当前视频块,并且运动矢量用于指示参考块相对于当前视频块的位置。运动矢量可描述例如运动矢量的水平位移分量(即MVx)、运动矢量的垂直位移分量(即MVy)和运动矢量的分辨率(例如,四分之一像素精度、二分之一像素精度、一像素精度、二像素精度、四像素精度)。先前解码的图片(其可包括在当前图片之前或之后输出的图片)可被组织成一个或多个参考图片列表,并且使用参考图片索引值来识别。此外,在帧间预测编码中,单预测是指使用来自单个参考图片的样本值生成预测,双预测是指使用来自两个参考图片的相应样本值生成预测。也就是说,在单预测中,单个参考图片和对应的运动矢量用于生成对当前视频块的预测,而在双预测中,第一参考图片和对应的第一运动矢量以及第二参考图片和对应的第二运动矢量用于生成对当前视频块的预测。在双预测中,将相应的样本值组合(例如,相加、舍入和裁剪,或根据权重进行平均)以生成预测。图片及其区域可基于哪些类型的预测模式可用于对其视频块进行编码而被分类。也就是说,对于具有B类型的区域(例如,B切片),可利用双预测、单预测和帧内预测模式,对于具有P类型的区域(例如,P切片),可利用单预测和帧内预测模式,对于具有I类型的区域(例如,I切片),只能利用帧内预测模式。如上所述,通过参考索引来识别参考图片。在ITU-TH.265中,对于P切片,存在单个参考图片列表RefPicList0,对于B切片,除了RefPicList0之外,还存在第二独立参考图片列表RefPicList1。应当指出的是,对于B切片中的单预测,可使用RefPicList0或RefPicList1中的一者来生成预测。此外,应当指出的是,在ITU-TH.265中,在解码过程期间,在开始对图片进行解码时,从存储在解码图片缓冲器(DPB)中的先前解码的图片生成一个或多个参考图片列表。
此外,编码标准可支持各种运动矢量预测模式。运动矢量预测使能够基于另一运动矢量来导出该运动矢量的值。运动矢量预测的示例包括高级运动矢量预测(AMVP)、时间运动矢量预测(TMVP)、所谓的“合并”模式,以及“跳过”和“直接”运动推理。此外,运动矢量预测的其他示例包括高级时间运动矢量预测(ATMVP)和空间-时间运动矢量预测(STMVP)。ITU-T H.265支持用于运动矢量预测的两种模式:合并模式和所谓的高级运动矢量预测(AMVP)。在ITU-T H.265中,对于当前PB的合并模式和AMVP两者,导出一组候选块。视频编码器和视频解码器两者执行相同的过程以导出一组候选。因此,对于当前视频块,在编码和解码期间生成相同的一组候选。候选块包括具有相关联的运动信息的视频块,从该相关联的运动信息可导出用于生成当前视频块的预测的运动信息。对于ITU-T H.265中的合并模式,与所选择的候选相关联的所有运动信息(即运动矢量位移值、参考图片索引和参考图片列表)被继承作为当前PB的运动信息。也就是说,在视频编码器处,从所导出的一组候选中选择候选块,并且包括在比特流中的索引值指示所选择的候选,并因此指示当前PB的运动信息。对于ITU-T H.265中的AMVP,用于所选择的候选的运动矢量信息被用作当前PB的运动矢量的预测运动矢量(MVP)。也就是说,在视频编码器处,从所导出的一组候选中选择候选块,并且指示所选择的候选的索引值和指示预测运动矢量与当前PB的运动矢量之间的差值的增量值(即,运动矢量增量(MVD))包括在比特流中。此外,对于ITU-T H.265中的AMVP,识别参考图片的语法元素包括在比特流中。
在ITU-T H.265中,可从空间相邻块和时间块导出一组候选块。此外,所生成的(或默认的)运动信息可用于运动矢量预测。在ITU-T H.265中,用于当前PB的运动矢量预测的运动信息是否包括与空间相邻块相关联的运动信息、与时间块相关联的运动信息,或者所生成的运动信息取决于要包括在组中的候选的数量、是否启用时间运动矢量预测、块的可用性和/或与块相关联的运动信息是否冗余。
对于ITU-T H.265中的合并模式,可包括在一组候选块中的候选的最大数量可由视频编码器设置并用信号发送,并且最多可以是五个。此外,视频编码器可禁用时间运动矢量候选的使用(例如,以便减少在视频解码器处存储运动信息所需的存储器资源的量),并且用信号发送是对图片启用还是禁用时间运动矢量候选的使用。图3示出了可包括在ITU-TH.265中的合并模式的一组候选块中的空间相邻块和时间块的位置。ITU-T H.265中用于合并模式的一组候选的导出包括确定A1、B1、B0、A0和B2的可用性。应当指出的是,如果块是帧内预测的(即不具有对应的运动信息)或不包括在当前片段(或图块)中,则该块被认为是不可用的。在确定A1、B1、B0、A0和B2的可用性之后,执行一组比较(如图3中的虚线箭头所示)以从该组候选中移除冗余条目。例如,将B2与B1进行比较,并且如果B1具有与B2相等的相关联运动信息,则将其从该组候选中移除。从一组候选中移除条目可称为修剪过程。应当指出的是,在图3中,为了降低复杂性,不执行对候选的完整比较(例如,不将A0与B0进行比较),并且因此冗余条目可能包括在该组候选中。
再次参考图3,标记为“时间”的虚线块是指可包括在该组候选中的时间候选。在用于合并模式的ITU-T H.265中,对于时间候选,定义了包括在参考图片中的空间并置PU,并且该时间候选包括具有恰好位于并置PU(如果可用)的右下角外部的位置的块,或者位于并置PU的中心位置的块。如上所述,设置可包括在一组候选块中的候选的最大数量。如果候选的最大数量设置为N,则在可用空间候选(修剪后)和时间候选的数量大于或等于N的情况下,将N-1个空间候选和时间候选包括在该组中。在可用空间候选(修剪后)和时间候选的数量小于N的情况下,所生成的运动信息包括在该组中以填充该组。
对于ITU-T H.265中的AMVP,参考图4,该组候选的导出包括基于A0、A1、B0、B1、B2的可用性将A0或A1(即左候选)中的一者和B0、
B1或B2(上候选)中的一者添加到该组中。也就是说,将第一可用左候选和第一可用上候选添加到该组中。当左候选和上候选具有冗余的运动矢量分量时,从该组中移除一个冗余的候选。如果包括在该组中的候选的数量小于两个,并且启用时间运动矢量预测,则时间候选(时间)包括在该组中。在该组中包括的可用空间候选(修剪后)和时间候选的数量小于两个的情况下,该组中包括零值运动矢量以便填充该组。
关于本文所用的公式,可以使用以下算术运算符:
+ 加法
- 减法
* 乘法,包括矩阵乘法
xy 求幂。表示求x的y次幂。在其他上下文中,此类符号用于上标而非旨在用于解释为求幂。
/ 将结果向着零截断的整数除法。例如,将7/4和-7/-4截断为1,将-7/4和7/-4截断为1。
÷ 在数学公式中用于表示不旨在进行截断或舍入的除法。
x/y 在数学公式中用于表示不旨在进行截断或舍入的除法。
x%y 求模。x除以y所得到的余数,仅针对x≥0且y>0的整数x和y定义。
此外,可使用以下数学函数:
Log2(x),x的以2为底的对数;
Ceil(x),大于或等于x的最小整数。
Floor(x),小于或等于x的最大整数。
此外,可以使用以下逻辑运算符:
x&&y,x和y的布尔逻辑“与”
x||y,x和y的布尔逻辑“或”
!,布尔逻辑“非”
x?y:z,如果x为TRUE或不等于0,则求值为y;否则,求值为z。此外,可以使用以下关系运算符:
> 大于
>= 大于或等于
< 小于
<= 小于或等于
== 等于
!= 不等于
此外,可以使用以下逐位运算符:
& 逐位“与”。当对整型变量进行运算时,对整数值的二进制补码表示进行运算。当对包含比另一变量更少位的二进制变量进行运算时,通过添加等于0的更多有效位来扩展较短变量。
| 逐位“或”。当对整型变量进行运算时,对整数值的二进制补码表示进行运算。当对包含比另一变量更少位的二进制变量进行运算时,通过添加等于0的更多有效位来扩展较短变量。
^ 逐位“异或”。当对整型变量进行运算时,对整数值的二进制补码表示进行运算。当对包含比另一变量更少位的二进制变量进行运算时,通过添加等于0的更多有效位来扩展较短变量。
x>>y x乘y二进制数字的二进制补码整数表示的算术右移。该函数仅针对y的非负整数值来定义。由于右移而移位到最高有效位(MSB)中的位具有等于移位操作之前的x的MSB的值。
x<<y x乘y二进制数字的二进制补码整数表示的算术左移。该函数仅针对y的非负整数值来定义。由于左移而移位到最低有效位(LSB)中的位具有等于0的值。
JVET-L1001包括基于ITU-T H.265中定义的合并模式的合并模式,和基于ITU-TH.256中定义的AMVP的AMVP模式。应当指出的是,JVET-L1001另外包括仿射运动矢量预测技术。如上所述,运动矢量可包括该运动矢量的水平位移分量、该运动矢量的垂直位移分量和该运动矢量的分辨率。JVET-L1001规定了以1/16分数采样准确度导出亮度运动矢量并且以1/32分数采样准确度导出色度运动矢量的情况。具体地讲,JVET-L1001规定,对于亮度运动矢量预测,亮度运动矢量mvLX如下导出:
uLX[0]=(mvpLX[0]+mvdLX[0]+218)%218
mvLX[0][0][0]=(uLX[0]>=217)?(uLX[0]-218):uLX[0]
uLX[1]=(mvpLX[1]+mvdLX[1]+218)%218
mvLX[0][0][1]=(uLX[1]>=217)?(uLX[1]-218):uLX[1]
其中,
根据对应的运动预测方向,X被替换为0或1;
mvpLX是预测运动矢量;并且
mvdLX是运动矢量增量。
应当指出的是,基于上述公式,如上指定的mvLX[0](其指示水平位移方向(左或右)和量值)和mvLX[1](其指示垂直位移方向(上或下)和量值)的所得值将始终在-217至217-1的范围内(包括端值在内)。
JVET-L1001规定,对于仿射运动矢量,以1/16分数采样准确度导出亮度子块运动矢量阵列,并且以1/32分数采样准确度导出色度子块运动矢量阵列矢量。具体地讲,JVET-L1001规定,对于亮度仿射控制点预测运动矢量,具有在0至NumCpMv-1范围内的cpIdx的亮度运动矢量cpMvLX[cpIdx]如下导出:
uLX[cpIdx][0]=(mvpCpLX[cpIdx][0]+mvdCpLX[cpIdx][0]+218)%218
cpMvLX[cpIdx][0]=(uLX[cpIdx][0]>=217)?(uLX[cpIdx][0]-218):uLX[cpIdx][0]
uLX[cpIdx][1]=(mvpCpLX[cpIdx][1]+mvdCpLX[cpIdx][1]+218)%218
cpMvLX[cpIdx][1]=(uLX[cpIdx][1]>=217)?(uLX[cpIdx][1]-218):uLX[cpIdx][1]
其中,
根据对应的运动预测方向,X被替换为0或1;
mvpCpLX是控制点预测运动矢量;并且
mvdCpLX是控制点运动矢量增量。
应当指出的是,基于上述公式,如上指定的cpmvLX[0]和cpmvLX[1]的所得值将始终在-217至217-1的范围内(包括端值在内)。
如上所述,运动矢量候选可包括时间候选,其中时间候选可包括与参考图片中包括的并置块相关联的运动信息。具体地讲,JVET-L1001对于并置运动矢量的导出进行了以下规定:
该过程的输入为:
-变量currCb,其指定当前编码块,
-变量colCb,其指定由ColPic指定的并置图片内的并置编码块,
-亮度位置(xColCb,yColCb),其指定由colCb指定的并置亮度编码块相对于由ColPic指定的并置图片左上亮度样本的左上样本,
-参考索引refIdxLX,其中X为0或1,
-指示子块时间合并候选的标记sbFlag。
该过程的输出为:
-1/16分数采样准确度的预测运动矢量mvLXCol,
-可用性标记availableFlagLXCol。
变量currPic指定当前图片。
将阵列predFlagL0Col[x][y]、mvL0Col[x][y]和refIdxL0Col[x][y]设置为分别等于由ColPic指定的并置图片的PredFlagL0[x][y]、MvL0[x][y]和RefIdxL0[x][y],并且将阵列predFlagL1Col[x][y]、mvL1Col[x][y]和refIdxL1Col[x][y]分别设置为等于由ColPic指定的并置图片的PredFlagL1[x][y]、MvL1[x][y]和RefIdxL1[x][y]。
变量mvLXCol和availableFlagLXCol如下导出:
-如果以帧内预测模式对colCb进行编码,则将mvLXCol的两个分量设置为等于0,并且将availableFlagLXCol设置为等于0。
-否则,运动矢量mvCol、参考索引refIdxCol和参考列表标识符listCol如下导出:
-如果sbFlag等于0,则将availableFlagLXCol设置为1,并且以下适用:
-如果predFlagL0Col[xColCb][yColCb]等于0,则将mvCol、refIdxCol和listCol设置为分别等于mvL1Col[xColCb][yColCb]、refIdxL1Col[xColCb][yColCb]和L1。
-否则,如果predFlagL0Col[xColCb][yColCb]等于1并且predFlagL1Col[xColCb][yColCb]等于0,则将mvCol、refIdxCol和listCol设置为分别等于mvL0Col[xColCb][yColCb]、refIdxL0Col[xColCb][yColCb]和L0。
-否则(predFlagL0Col[xColCb][yColCb]等于1,并且predFlagL1Col[xColCb][yColCb]等于1),进行以下指定:
-如果NoBackwardPredFlag等于1,则将mvCol、refIdxCol和listCol设置为分别等于mvLXCol[xColCb][yColCb]、refIdxcLXCol[xColCb][yColCb]和LX。
-否则,将mvCol、refIdxCol和listCol设置为分别等于mvLNCol[xColCb][yColCb]、refIdxLNCol[xColCb][yColCb]和LN,其中N是collocated_from_10_flag的值。
-否则(sbFlag等于1),以下适用:
-如果PredFlagLXCol[xColCb][yColCb]等于1,则将mvCol、refIdxCol和listCol设置为分别等于mvLXCol[xColCb][yColCb]、refIdxLXCol[xColCb][yColCb]和LX,并且将availableFlagLXCol设置为1。
-否则(PredFlagLXCol[xColCb][yColCb]等于0),以下适用:
-如果对于当前切片的每个参考图片列表中的每个图片,DiffPicOrderCnt(aPic,currPic)小于或等于0,并且PredFlagLYCol[xColCb][yColCb]等于1,则将mvCol、refIdxCol和listCol分别设置为mvLYCol[xColCb][yColCb]、refIdxLYCol[xColCb][yColCb]和LY,其中Y等于!X,其中X为调用该过程的X的值。将availableFlagLXCol设置为1。
-将mvLXCol的两个分量设置为0,并且将availableFlagLXCol设置为等于0。
-当availableFlagLXCol等于TRUE时,mvLXCol和availableFlagLXCol如下导出:
-如果LongTermRefPic(currPic,currCb,refIdxLX,LX)不等于LongTermRefPic(ColPic,colCb,refIdxCol,listCol),则将mvLXCol的两个分量设置为等于0,并且将availableFlagLXCol设置为等于0。
-否则,将变量availableFlagLXCol设置为等于1,将refPicListCol[refIdxCol]设置为在包含由ColPic指定的并置图片中的编码块colCb的切片的参考图片列表listCol中具有参考索引refIdxCol的图片,并且以下适用:
colPocDiff=DiffPicOrderCnt(ColPic,refPicListCol[refIdxCol])
currPocDiff=DiffPicOrderCnt(currPic,RefPicListX[refIdxLX])
-如果RefPicListX[refIdxLX]是长期参考图片,或者colPocDiff等于currPocDiff,则mvLXCol如下导出:
mvLXCol=mvCol
-否则,将mvLXCol作为运动矢量mvCol的缩放版本如下导出:
tx=(16384+(Abs(td)>>1))/td
distScaleFactor=Clip3(-4096,4095,(tb*tx+32)>>6)
mvLXCol=Clip3(-32768,32767,Sign(distScaleFactor*mvCol)*((Abs(distScaleFactor*mvCol)+127)>>8))
其中td和tb如下导出:
td=Clip3(-128,127,colPocDiff)
tb=Clip3(-128,127,currPocDiff)
其中,
函数LongTermRefPic(aPic,aPb,refIdx,LX),其中X为0或1可如下定义:
-如果具有来自图片aPic中包含预测块aPb的切片的参考图片列表LX的索引refIdx的图片在aPic是当前图片时被标记为“用于长期参考”,则LongTermRefPic(aPic,aPb,refIdx,LX)等于1。
-否则,LongTermRefPic(aPic,aPb,refIdx,LX)等于0。
并且
函数DiffPicOrderCnt(picA,picB)如下指定:
DiffPicOrderCnt(picA,picB)=PicOrderCnt(picA)-PicOrderCnt(picB)
因此,为了支持时间运动矢量预测,存储来自先前编码的图片的运动信息。通常,此类信息存储在时间运动缓冲器中。即,时间运动缓冲器可包括在先前编码的图片中确定的运动矢量,该运动矢量可用于预测当前图片中的当前块的运动矢量。例如,如上所述,为了导出mvLXCol,需要来自并置的图片的18位MvLX[x][y]值。应当指出的是,通常使用有限的一组精度(即,以与所导出的运动矢量相同的精度)来将运动矢量存储到时间运动缓冲器。此外,可为样本块存储对应于每个参考图片列表的一个运动矢量。可存储对应于由该运动矢量参考的图片的一个参考索引。对于先前图片的每个块,可将预测模式存储在时间缓冲器中(例如,帧间预测或非帧间预测)。此外,可为样本块存储帧间预测子模式(例如,亮度照明补偿模式标记)。
因此,使用典型的时间运动缓冲器启用时间运动矢量预测可能需要大量的存储成本。根据本文所述的技术,可改变运动信息的分辨率以优化由时间运动矢量预测产生的编码效率改善,同时降低实现时间运动缓冲器的存储成本。应当指出的是,可存在两种方法来降低实现时间运动缓冲器的存储成本。这些方法可组合使用或单独使用。一种方法是利用运动信息的无损压缩技术的时间运动缓冲器的专用实现。例如,参考上述的mvLXCol的导出,可将一组18位MvLX[x][y]值存储在使用无损压缩技术的时间运动缓冲器实现中。另一种方法是使得能够以需要小于时间运动信息的全精度的方式来导出时间运动矢量。例如,根据本文的技术,如下文进一步所述,可修改对当前图片的上述mvLXCol的导出,使得可从并置图片的16位值的MvLX[x][y]导出mvLXCol。
图5是示出根据本公开的一种或多种技术的可以被配置为对视频数据进行编码(例如,编码和/或解码)的系统的示例的框图。系统100表示可根据本公开的一个或多个示例使用运动矢量预测技术执行视频编码的系统的示例。如图5所示,系统100包括源设备102、通信介质110和目标设备120。在图5所示的示例中,源设备102可以包括被配置为对视频数据进行编码并将编码的视频数据传输到通信介质110的任何设备。目标设备120可以包括被配置为经由通信介质110接收编码的视频数据并且对编码的视频数据进行解码的任何设备。源设备102和/或目标设备120可以包括配备用于进行有线和/或无线通信的计算设备,并且可以包括机顶盒、数字视频录像机、电视机、台式电脑、膝上型电脑或平板电脑、游戏控制台、移动设备,包括例如“智能”电话、蜂窝电话、个人游戏设备和医学成像设备。
通信介质110可以包括无线和有线通信介质和/或存储设备的任意组合。通信介质110可以包括同轴电缆、光纤电缆、双绞线电缆、无线发射器和接收器、路由器、交换机、中继器、基站或可用于促进各种设备与站点之间的通信的任何其他设备。通信介质110可以包括一个或多个网络。例如,通信介质110可以包括被配置为允许访问万维网例如互联网的网络。网络可以根据一个或多个电信协议的组合操作。电信协议可以包括专有方面并且/或者可以包括标准化电信协议。标准化电信协议的示例包括数字视频广播(DVB)标准、高级电视系统委员会(ATSC)标准、综合服务数字广播(ISDB)标准、有线数据业务接口规范(DOCSIS)标准、全球移动通信系统(GSM)标准、码分多址(CDMA)标准、第三代合作伙伴计划(3GPP)标准、欧洲电信标准协会(ETSI)标准、互联网协议(IP)标准、无线应用协议(WAP)标准以及电气与电子工程师协会(IEEE)标准。
存储设备可以包括能够存储数据的任何类型的设备或存储介质。存储介质可以包括有形或非暂态计算机可读介质。计算机可读介质可以包括光盘、闪存存储器、磁存储器或任何其他合适的数字存储介质。在一些示例中,存储器设备或其部分可以被描述为非易失性存储器,并且在其他示例中,存储器设备的部分可以被描述为易失性存储器。易失性存储器的示例可以包括随机存取存储器(RAM)、动态随机存取存储器(DRAM)和静态随机存取存储器(SRAM)。非易失性存储器的示例可以包括磁性硬盘、光盘、软盘、闪存或电可编程存储器(EPROM)或电可擦除和可编程(EEPROM)存储器的形式。一个或多个存储设备可以包括存储卡(例如,安全数字(SD)存储卡)、内部/外部硬盘驱动器和/或内部/外部固态驱动器。数据可以根据定义的文件格式存储在存储设备上。
再次参考图5,源设备102包括视频源104、视频编码器106和接口108。视频源104可以包括被配置为捕获和/或存储视频数据的任何设备。例如,视频源104可以包括摄像机和可操作地与其耦接的存储设备。视频编码器106可以包括被配置为接收视频数据并生成表示视频数据的合规比特流的任何设备。合规比特流可以指视频解码器可以从其接收和再现视频数据的比特流。合规比特流的各方面可根据视频编码标准来定义。当生成合规比特流时,视频编码器106可压缩视频数据。压缩可能是有损的(可觉察的或不可觉察的)或无损的。接口108可以包括被配置为接收合规视频比特流并且将该合规视频比特流传送和/或存储到通信介质的任何设备。接口108可以包括网络接口卡诸如以太网卡,并且可以包括光收发器、射频收发器或者可以发送和/或接收信息的任何其他类型的设备。此外,接口108可以包括计算机系统接口,其可以使得合规视频比特流能够存储在存储设备上。例如,接口108可以包括支持外围部件互连(PCI)和高速外围部件互连(PCIe)总线协议、专用总线协议、通用串行总线(USB)协议、I2C的芯片集或可用于互连对等设备的任何其他逻辑和物理结构。
再次参考图5,目标设备120包括接口122、视频解码器124和显示器126。接口122可以包括被配置为从通信介质接收合规视频比特流的任何设备。接口108可以包括网络接口卡诸如以太网卡,并且可以包括光收发器、射频收发器或者可接收和/或发送信息的任何其他类型的设备。此外,接口122可以包括使能够从存储设备处检索合规视频比特流的计算机系统接口。例如,接口122可以包括支持PCI和PCIe总线协议、专用总线协议、USB协议、I2C的芯片集或可用于互连对等设备的任何其他逻辑和物理结构。视频解码器124可以包括被配置为接收合规比特流和/或其可接受变体且从其中再现视频数据的任何设备。显示器126可以包括被配置为显示视频数据的任何设备。显示器126可以包括各种显示设备诸如液晶显示器(LCD)、等离子显示器、有机发光二极管(OLED)显示器或另一种类型的显示器中的一者。显示器126可以包括高清显示器或超高清显示器。应当指出的是,尽管在图5所示的示例中,视频解码器124被描述为将数据输出到显示器126,但视频解码器124可以被配置为将视频数据输出到各种类型的设备和/或其子部件。例如,视频解码器124可以被配置为将视频数据输出到任何通信介质,如本文所述。
图6是示出可实现本文所述的用于对视频数据进行编码的技术的视频编码器200的示例的框图。应当指出的是,尽管示例性视频编码器200被示出为具有不同的功能块,但此类图示旨在用于描述目的,并且不将视频编码器200和/或其子部件限制为特定的硬件或软件架构。可使用硬件、固件和/或软件具体实施的任何组合来实现视频编码器200的功能。在一个示例中,视频编码器200可以被配置为根据本文所述的技术对视频数据进行编码。视频编码器200可以执行图片区域的帧内预测编码和帧间预测编码,并且因此可以被称为混合视频编码器。在图6所示的示例中,视频编码器200接收源视频块。在一些示例中,源视频块可以包括已经根据编码结构划分的图片区域。例如,源视频数据可以包括宏块、CTU、CB、其子分区和/或另外的等效编码单元。在一些示例中,视频编码器200可被配置为执行源视频块的额外再分。应当指出的是,无论在编码之前和/或期间如何划分源视频数据,本文所述的一些技术都可普遍适用于视频编码。在图6所示的示例中,视频编码器200包括求和器202、变换系数生成器204、系数量化单元206、逆量化/变换处理单元208、求和器210、帧内预测处理单元212、帧间预测处理单元214、滤波器单元216和熵编码单元218。
如图6所示,视频编码器200接收源视频块并输出比特流。视频编码器200可通过从源视频块中减去预测视频块来生成残差数据。求和器202表示被配置为执行该减法运算的部件。在一个示例中,视频块的减法在像素域中发生。变换系数生成器204对残差块或其子分区应用变换诸如离散余弦变换(DCT)、离散正弦变换(DST)或概念上类似的变换(例如,可以将四个8×8变换应用于16×16残差值阵列)以产生残差变换系数集合。变换系数生成器204可以被配置为执行离散三角变换系列中包括的变换的任意组合和全部组合。变换系数生成器204可以将变换系数输出到系数量化单元206。系数量化单元206可以被配置为执行变换系数的量化。如上所述,可以通过调整量化参数来修改量化程度。系数量化单元206可进一步被配置为确定量化参数(QP)并且输出QP数据(例如,用于确定量化组尺寸和/或增量QP值的数据),视频解码器可使用该QP数据来重构量化参数以在视频解码期间执行逆量化。应当指出的是,在其他示例中,可以使用一个或多个附加或另选的参数来确定量化位阶(例如,缩放因子)。本文所述的技术通常可应用于基于对应于视频数据的某一分量的变换系数的量化位阶,确定对应于视频数据的另一分量的变换系数的量化位阶。
如图6所示,量化的变换系数被输出到逆量化/变换处理单元208。逆量化/变换处理单元208可以被配置为应用逆量化和/或逆变换来生成重构的残差数据。如图6所示,在求和器210处,重构的残差数据可以被添加到预测视频块。这样,可以重构编码的视频块,并且可以使用所得重构的视频块来评估给定的预测、变换和/或量化的编码质量。视频编码器200可被配置为执行多个编码回合(例如,在改变预测、变换参数和量化参数中的一个或多个的同时执行编码)。比特流的率失真或其他系统参数可以基于重构的视频块的评估来优化。此外,重构的视频块可被存储并用作预测后续块的参考。
如上所述,可使用帧内预测模式对视频块进行编码。帧内预测处理单元212可被配置为针对当前视频块选择帧内预测模式。帧内预测处理单元212可以被配置为评估帧和/或其区域,并且确定用于对当前块进行编码的帧内预测模式。如图6所示,帧内预测处理单元212将帧内预测数据(例如,语法元素)输出到熵编码单元218和变换系数生成器204。如上所述,可能的帧内预测模式可以包括平面预测模式、DC预测模式和角预测模式。帧间预测处理单元214可以被配置为针对当前视频块执行帧间预测编码。帧间预测处理单元214可被配置为接收源视频块并且计算视频块的PU的运动信息。运动矢量可以指示当前视频帧内的视频块的PU(或类似的编码结构)相对于参考帧内的预测块的位移。帧间预测编码可以使用一个或多个参考图片。例如,帧间预测处理单元214可以定位帧缓冲器内的预测视频块(图6中未示出)。应当指出的是,帧间预测处理单元214可以被进一步被配置为将一个或多个内插滤波器应用于重构的残差块,以计算用于运动估计的亚整数像素值。此外,运动预测可以是单向预测(使用一个运动矢量)或双向预测(使用两个运动矢量)。帧间预测处理单元214可以被配置为通过计算由例如绝对差之和(SAD)、平方差之和(SSD)或其他差值度量确定的像素差来选择预测块。帧间预测处理单元214可将所计算的运动矢量的运动预测数据输出到熵编码单元218。
如上所述,可根据运动矢量预测技术来确定和指定运动信息。帧间预测处理单元214可被配置为执行包括例如上述的那些的运动矢量预测技术。此外,帧间预测处理单元214可被配置为根据上述技术执行运动矢量预测。具体地讲,帧间预测处理单元214可被配置为执行时间运动矢量预测。如上所述,使用典型的时间运动缓冲器启用时间运动矢量预测可能需要大量的存储成本。
在一个示例中,根据本文的技术,帧间预测处理单元214可被配置为使用与所导出的运动矢量(即,用于生成预测块的运动矢量)的位数相比减少的位数来存储表示运动矢量的值。应当指出的是,除了上文提供的用于指定运动矢量的方式和/或作为上文提供的用于指定运动矢量的方式的替代,可存在若干方式来指定运动矢量(例如,极坐标等)。无论如何指定运动矢量,本文所述的技术通常都适用。
如上所述,使用典型的时间运动缓冲器启用时间运动矢量预测可能需要大量的存储成本。在一个示例中,时间运动缓冲器可对于每个块(例如,ITU-T H.265中的PU)或子块包含以下字段:
-指示该块是否使用帧间预测来编码的1位标记,例如字段isInter;
-指示帧间预测方向的2位标记,例如字段interDir(例如,列表0、列表1或双向预测);
-用于图块集的无符号16位成员身份标识符,例如字段tileSetIdx;
-无符号16位切片索引值,例如,字段sliceIdx:
-对于每个运动矢量分量,有符号18位整数。例如,字段mv[MAX_RPL_COUNT][2],其中[2]表示水平位移方向和竖直位移方向,max_RPL_COUNT为2并且对应于list0和list1。
-指示参考图片索引的无符号4位整数阵列,例如referenceIdx[MAX_RPL_COUNT]。
应当指出的是,无符号4位值可以表示参考图片索引,因为JVET-L1001中的参考图片列表(RPL)中的最大图片数量是16。此外,应当指出的是,在一些情况下,例如,如果支持附加的参考图片列表,则max_RPL_COUNT可增大。
如上所述,在JVET-L1001中,mvLX[0]和mvLX[1]各自作为18位值导出。此外,在JVET-L1001中,cpmvLX[0]和cpmvLX[1]各自被导出为18位值。在一个示例中,根据本文的技术,mvLX[0]、mvLX[1]、cpmvLX[0]和cpmvLX[1]可作为N位值存储到时间运动缓冲器,其中N小于18,或更一般地讲,其中N小于运动矢量分量的导出值的位数。在一个示例中,表示运动矢量分量的值可被裁剪到一定范围,使得该值在被存储在时间运动缓冲器中之前用N位来表示。例如,MVx可被存储为Clip3(-2^15,2^15-1,MVx),MVy可被存储为Clip3(-2^15,2^15-1,MVy)。相对于上文提供的JVET-L1001中的并置运动矢量的导出,在表示运动矢量分量的值被裁剪的情况下,在一个示例中,mvCol的存储值可如下:
mvCol=Clip3(-(1<<(N-1)),(1<<(N-1))-1,mvCol)
在另一个示例中,可仅将导出的运动矢量分量的N个MSB位的子集存储到时间运动缓冲器。例如,对于MVx和MVy,可将以下值存储到时间运动缓冲器:
MVDDx=MVx/4;和
MVDDy=MVy/4
在该示例中,在从时间运动缓冲器读取期间,可如下导出MVx和MVy、MVxR和MVyR的重构值:
MVxR=4*MVDDx:并且
MVyR=4*MVDDy
相对于上文提供的JVET-L1001中的并置运动矢量的导出,在导出的运动矢量分量的N个MSB位中只有一个子组被存储到时间运动缓冲器的情况下,在一个示例中,mvCol的存储值可以如下:
mvCol=(mvCol>>4)
并且mvCol的导出值可如下:
mvCol=(mvCol<<4)
应当指出的是,在一些情况下,MVxR和/或MVyR可等于MVx和MVy,并且在其他情况下,MVxR和/或MVyR不等于MVX和MVy。因此,在一些示例中,可为MVxR和/或MVyR有条件地提供增量值,使得在MVxR和/或MVyR不等于MVx和MVy的情况下可导出MVx和/或MVy。例如,在一个示例中,时间运动缓冲器可为每个MVxR和MVyR条目包括一个标记,该标记指示时间运动缓冲器中是否存在对应的增量值。在这种情况下,相对于上文提供的JVET-L1001中的并置运动矢量的导出,在一个示例中,mvCol的存储值可如下:
mvCol=(mvCol>>4)
并且mvCol的导出值可如下:
mvCol=(mvCol<<4)+增量值,
其中增量值基于标志的值有条件地存在,并且在不存在时被推断为零。
在另一个示例中,可仅存储导出的运动矢量分量的N个LSB位的子集。例如,作为X'位导出的运动矢量分量可被存储为N位,其中(N-X)个MSB位未被存储。在一个示例中,(N-X)个MSB位可使用相邻空间运动矢量来获得(例如,通过对相邻空间运动矢量求平均值,或者例如,使用预先确定的优先级的预先确定的位置处的运动矢量来导出(N-X)个MSB位)。例如,在一个示例中,时间运动缓冲器可包括用于从相邻空间运动矢量导出(N-X)个MSB位的增量值。在这种情况下,相对于上文提供的JVET-L1001中的并置运动矢量的导出,在一个示例中,mvCol的存储值可如下:
mvCol=(mvCol&LSBMask),其中LSBMask=0x000000FF
并且mvCol的导出值可如下:
mvCol=mvCol|(mvAdjacent&MSBMask),其中MSBMask=0xFFFFFF00,并且mvAdjacent从空间上相邻的运动矢量导出,例如在当前块的左侧导出。
此外,在另一个示例中,上述技术可被组合,使得对于A位运动矢量分量,存储不包括B个MSB位而且不包括C个LSB的位的子组(即,存储中间位)。
在另一个示例中,较高分辨率可用于存储小运动矢量分量。例如,如果导出的运动矢量分量在特定范围内(例如,-2^15至(2^15-1),包括端值在内),则运动矢量分量可被确定为小运动矢量分量。在一个示例中,该范围可为空(即,不发信号通知小运动矢量标记并将其推断为0)。在一个示例中,可将指示运动矢量是否为小运动矢量的标记存储到时间运动缓冲器或从时间运动缓冲器读取该标记。在这种情况下,在一个示例中,当运动矢量分量是小运动矢量分量时,将小运动矢量标记设置为1并且存储该小运动矢量值(例如,以1/16-pel分辨率存储),并且当运动矢量分量不是小运动矢量分量时,将小运动矢量标记设置为0,并且对运动矢量分量进行缩放(例如,通过除以4来缩放(右移2,具有/不具有1的舍入偏移))并且存储(例如,以1/4-pel分辨率存储)。此外,在这种情况下,当从时间运动缓冲器读取小运动矢量分量时,当小运动矢量标记为1(这可基于从运动缓冲器读取的值的范围来推断)时,采用与小运动矢量相关联的分辨率从时间运动缓冲器读取运动矢量分量值,并且当小运动矢量标记为0时,采用另一个确定的分辨率(例如,1/4-pel分辨率)从时间运动缓冲器读取运动矢量值并且将其缩放(例如,乘以4-左移2)到小运动矢量分辨率(例如,1/16-pel分辨率)。在这种情况下,相对于上文提供的JVET-L1OOl中的并置运动矢量的导出,在一个示例中,mvCol的存储值可如下:
mvCol=(smallMotionVectorFlag)?mvCol:(mvCol>>2)
并且mvCol的导出值可如下:
mvCol=(smallMotionVectorFlag)?mvCol:(mvCol<<2)
在另一个示例中,如果所存储的值在N位的包裹边缘附近(例如,对于LSB和>229的LSB值或<25的LSB值为8位),则可将自动减法/加法(例如,自动减/加128)应用于所存储的值。在一个示例中,可使用当前图片的空间候选的平均值来预测该减法/加法。在一个示例中,可将运动矢量裁剪到8位,并且如果值为+/-128,则其不作为候选被包括在内。在一个示例中,可发信号通知偏移因子,然后可在裁剪之前应用该偏移因子。在该示例中,如果结果在裁剪点处,则在一些情况下,其可不作为运动矢量候选被包括在内。例如,如果所导出的运动矢量为0x0F,则4个LSB位为0xF。如果空间候选的平均值是0x10,则简单地将0x10级联至0x0F提供0x1F,这可能是不期望的。因此,在一个示例中,当接近包裹边缘时,可执行将LSB位远离包裹边缘移动的操作(例如,加上0x7)。然后可在级联之后反转该操作。因此,对于上述情况,在一个示例中,可执行0x0F+0x07=0x16,并且可存储0x6。在这种情况下,空间平均值将变为0x10+0x07=0x17。级联将得到0x16,并且最终移除该加法的结果是:0x16-0x07=0x0F。在一个示例中,是否接近包裹边缘可通过与阈值(例如,229和25)进行比较来确定。
在一个示例中,根据本文的技术,帧间预测处理单元214可被配置为使用对应于运动矢量计算的精度的裁剪范围来存储表示运动矢量分量的值。如上所述,在JVET-L1001中,运动时间/空间/导出的预测运动矢量的缩放基于图片顺序计数(POC)距离,其中POC距离对应于图片之间的时间距离。可基于参考运动矢量的预测图片和参考图片之间的POC距离与当前预测图片和参考图片之间的POC距离的比率,将参考运动矢量缩放到目标图片。所缩放的运动矢量可用作预测。时间/空间/导出的运动矢量缩放操作之后可以是针对所缩放的运动矢量位移方向中的每个位移方向的裁剪操作(例如,Clip3(-2^15,2^15-1,scaledMv),其中scaledMv是具有缩放运动矢量位移方向的运动矢量分量)。在这种情况下,当在解码过程中使用1/16-pel运动矢量时,期望裁剪边界不会成为不必要的限制,因为这可导致对大运动矢量的裁剪。在一个示例中,根据本文的技术,帧间预测处理单元214可被配置为允许裁剪边界需要增加的缩放运动矢量位移方向的更大位深度(例如,18位)(例如,Clip3(-2^17,2^17-1,scaledMv))。在这种情况下,相对于上文提供的JVET-L1001中的并置运动矢量的导出,在一个示例中,mvCol和mvLXCol可如下导出:
mvCol=Clip3(-131072,131071,Sign(distScaleFactor*mvCol)*((Abs(distScaleFactor*mvCol)+127)>>8))
mvLXCol=Clip3(-131072,131071,Sign(distScaleFactor*mvCol)*((Abs(distScaleFactor*mvCol)+127)>>8))
此外,在这种情况下,可采用类似的方式裁剪其他运动矢量预测候选。
在一个示例中,根据本文的技术,帧间预测处理单元214可被配置为使用位的子集来进行修剪过程比较。如上所述,修剪过程可用于从一组运动矢量候选中移除冗余条目。在一个示例中,根据本文的技术,修剪过程可使用位的子集来确定运动候选是否是冗余的,并且因此确定是否将运动候选添加到候选列表。此外,在一个示例中,根据本文的技术,修剪过程可用于确定是否将关于块的运动信息存储到时间运动缓冲器。在一个示例中,出于比较的目的,修剪过程可仅使用运动矢量分量的位的子集。例如,运动矢量分量只有x个LSB位用于比较,或者运动矢量分量只有x个MSB位用于比较。
在一个示例中,根据本文的技术,帧间预测处理单元214可被配置为使用归一化来减小存储到时间运动缓冲器的运动矢量的位深度。例如,时间运动缓冲器的示例性架构的每个16×16块可包含以下82位(或90位):
4MV分量,每个16位(或18位)
2个增量POC值,每个8位
2个LTRP(长期参考图片)标记,每个1位
在一个示例中,根据本文的技术,为了减少存储器带宽,可能期望将存储要求降低到64位。在一个示例中,可通过以下方式来降低存储要求:(1)存储归一化运动矢量(例如,相对于增量POC归一化,然后该增量POC不一定要存储);(2)使用归一化运动矢量的浮点型表示(据推测,1/16的精度对于大运动矢量不是非常有用);以及/或者裁剪到缩小的范围(即,归一化MV不应那么大)。在一个示例中,相对于增量POC归一化可包括确定表示当前图片和参考当前图片的POC值之差的初始POC差值。为了减少存储,可将POC差值缩放到恒定值(例如,1、2、4),并且可考虑原始POC差值和新POC差值的比率来适当地缩放对应的运动矢量。可在运动矢量缩放之后执行裁剪操作(即,在存储期间)。除了减少存储之外,选择恒定POC差值还简化了时间缩放操作,该时间缩放操作通常包括取两个POC差值的比率,一个POC差值对应于当前图片的POC和参考图片POC之间的差值,而另一个POC差值对应于时间图片的POC和时间图片的参考图片POC之间的差值。在存储期间,可将后者设置为常数,从而降低两个POC差值的比率的计算复杂度。例如,如果分母为1,则可跳过除法运算,或者如果分母为2的幂,则除法运算变为移位运算。归一化操作还可基于运动矢量是否参考长期参考图片。例如,可不将参考长期参考图片的运动矢量归一化。在这种情况下,相对于上文提供的JVET-L1001中的并置运动矢量的导出,在一个示例中,mvCol可如下导出:
当对应于refPicListCol[refIdxCol]的图片不是长期参考图片时,执行以下顺序步骤:
colPocDiff=DiffPicOrderCnt[ColPic,refPicListCol[refIdxCol])
newColPocDiff=CONSTANT
tx=(16384+(Abs(td)>>1))/td
distScaleFactor=Clip3(-4096,4095,(tb*tx+32)>>6)
mvCol=Clip3(-131072,131071,Sign(distScaleFactor*mvCol)*((Abs(distScaleFactor*mvCol)+127)>>8))
其中td和tb如下导出:
td=Clip3(-128,127,colPocDiff)
tb=Clip3(-128,127,newColPocDiff)
-当availableFlagLXCol等于TRUE时,mvLXCol和availableFlagLXCol如下导出:
-如果LongTermRefPic(currPic,currCb,refIdxLX,LX)不等于LongTermRefPic(ColPic,colCb,refIdxCol,listCol),则将mvLXCol的两个分量设置为等于0,并且将availableFlagLXCol设置为等于0。
-否则,将变量availableFlagLXCol设置为等于1,将refPicListCol[refIdxCol]设置为在包含由ColPic指定的并置图片中的编码块colCb的切片的参考图片列表listCol中具有参考索引refIdxCol的图片,并且以下适用:
colPocDiff=newColPocDiff
currPocDiff=DiffPicOrderCnt(currPic,RefPicListX[refIdxLX])
-如果RefPicListX[refIdxLX]是长期参考图片,或者colPocDiff等于currPocDiff,则mvLXCol如下导出:
mvLXCol=mvCol
-否则,将mvLXCol作为运动矢量mvCol的缩放版本如下导出:
tx=(16384+(Abs(td)>>1))/td
distScaleFactor=Clip3(-4096,4095,(tb*tx+32)>>6)
mvLXCol=Clip3(-131072,131071,Sign(distScaleFactor*mvCol)*((Abs(distScaleFactor*mvCol)+127)>>8))
其中td和tb如下导出:
td=Clip3(-128,127,colPocDiff)
tb=Clip3(-128,127,currPocDiff)
如上所述,在一个示例中,可通过以下操作来降低时间运动缓冲器的存储要求:存储归一化运动矢量;使用归一化运动矢量的浮点型表示;以及/或者裁剪到缩小的范围。此外,在一个示例中,可通过在存储之前将运动矢量位移转换为尾数-指数表示来降低时间运动缓冲器的存储要求。在一个示例中,如果该表示的范围大于阈值(例如,18位),则不需要裁剪运动矢量位移。在一个示例中,尾数可采用6位并且在-32至31的范围内(包括端值在内),指数可采用4位并且在0至15的范围内(包括端值在内)。此外,在一个示例中,参考长期图片的运动矢量也可在存储之前被缩放和/或转换为浮点表示。
在一个示例中,数字的尾数-指数(Mantissa-Exponent)表示可如下计算:
其中,
static const int MV_EXPONENT_BITCOUNT=4;
static const int MV_MANTISSA_BITCOUNT=6;
static const int MV_MANTISSA_LOWER_LIMIT=-(1<<(MV_MANTISSA_BITCOUNT-1));
static const int MV_MANTISSA_UPPER_LIMIT=((1<<(MV_MANTISSA_BITCOUNT-1))-1);
static const int MV_MANTISSA_LIMIT=(1<<(MV_MANTISSA_BITCOUNT-1));并且
static const int MV_EXPONENT_MASK=((1<<MV_EXPONENT_BITCOUNT)-1);
此外,从尾数-指数表示到数字的转换可如下进行:
因此,在一个示例中,根据本文的技术,并置运动矢量的导出可如下进行:
该过程的输入为:
-变量currCb,其指定当前编码块,
-变量colCb,其指定由ColPic指定的并置图片内的并置编码块,
-亮度位置(xColCb,yColCb),其指定由colCb指定的并置亮度编码块相对于由ColPic指定的并置图片左上亮度样本的左上样本,
-参考索引refIdxLX,其中X为0或1,
-指示子块时间合并候选的标记sbFlag。
该过程的输出为:
-1/16分数采样准确度的预测运动矢量mvLXCol,
-可用性标记availableFlagLXCol。
变量currPic指定当前图片。
将阵列predFlagL0Col[x][y]、mvL0Col[x][y]和refIdxL0Col[x][y]设置为分别等于由ColPic指定的并置图片的PredFlagL0[x][y]、MvL0[x][y]和RefIdxL0[x][y],并且将阵列predFlagL1Col[x][y]、mvL1Col[x][y]和refIdxL1Col[x][y]分别设置为等于由ColPic指定的并置图片的PredFlagL1[x][y]、MvL1[x][y]和RefIdxL1[x][y]。
变量mvLXCol和availableFlagLXCol如下导出:
-如果以帧内预测模式对colCb进行编码,则将mvLXCol的两个分量设置为等于0,并且将availableFlagLXCol设置为等于0。
-否则,运动矢量mvCol、参考索引refIdxCol和参考列表标识符listCol如下导出:
-如果sbFlag等于0,则将availableFlagLXCol设置为1,并且以下适用:
-如果predFlagL0Col[xColCb][yColCb]等于0,则将mvCol、refIdxCol和listCol设置为分别等于mvL1Col[xColCb][yColCb]、refIdxL1Col[xColCb][yColCb]和L1。
-否则,如果predFlagL0Col[xColCb][yColCb]等于1并且predFlagL1Col[xColCb][yColCb]等于0,则将mvCol、refIdxCol和listCol设置为分别等于mvL0Col[xColCb][yColCb]、refIdxL0Col[xColCb][yColCb]和L0。
-否则(predFlagL0Col[xColCb][yColCb]等于1,并且predFlagL1Col[xColCb][yColCb]等于1),进行以下指定:
-如果NoBackwardPredFlag等于1,则将mvCol、refIdxCol和listCol设置为分别等于mvLXCol[xColCb][yColCb]、refIdxLXCol[xColCb][yColCb]和LX。
-否则,将mvCol、refIdxCol和listCol设置为分别等于mvLNCol[xColCb][yColCb]、refIdxLNCol[xColCb][yColCb]和LN,其中N是collocated_from_10_flag的值。
-否则(sbFlag等于1),以下适用:
-如果PredFlagLXCol[xColCb][yColCb]等于1,则将mvCol、refIdxCol和listCol设置为分别等于mvLXCol[xColCb][yColCb]、refIdxLXCol[xColCb][yColCb]和LX,并且将availableFlagLXCol设置为1。
-否则(PredFlagLXCol[xColCb][yColCb]等于0),以下适用:
-如果对于当前切片的每个参考图片列表中的每个图片,DiffPicOrderCnt(aPic,currPic)小于或等于0,并且PredFlagLYCol[xColCb][yColCb]等于1,则将mvCol、refIdxCol和listCol分别设置为mvLYCol[xColCb][yColCb]、refIdxLYCol[xColCb][yColCb]和LY,其中Y等于!X,其中X为调用该过程的X的值。将availableFlagLXCol设置为1。
-将mvLXCol的两个分量设置为0,并且将availableFlagLXCol设置为等于0。
-当availableFlagLXCol等于TRUE时,mvLXCol和availableFlagLXCol如下导出:
-如果LongTermRefPic(currPic,currCb,refIdxLX,LX)不等于LongTermRefPic(ColPic,colCb,refIdxCol,listCol),则将mvLXCol的两个分量设置为等于0,并且将availableFlagLXCol设置为等于0。
-否则,将变量availableFlagLXCol设置为等于1,将refPicListCol[refIdxCol]设置为在包含由ColPic指定的并置图片中的编码块colCb的切片的参考图片列表listCol中具有参考索引refIdxCol的图片,并且以下适用:
colPocDiff=DiffPicOrderCnt(ColPic,refPicListCol[refIdxCol])
currPocDiff=DiffPicOrderCnt(currPic,RefPicListX[refIdxLX])
-将mvColScaled作为运动矢量mvCol的缩放版本如下导出:
txScaled=(16384+(Abs(tdScaled)>>1))/4
distScaleFactor=Clip3(-4096,4095,(4*txScaled+32)>>6)
mvColScaled=Clip3(-32768,32767,Sign(distScaleFactor*mvCol)*((Abs(distScaleFactor*mvCol)+127)>>8))
其中tdScaled如下导出:
tdScaled=Clip3(-128,127,colPocDiff)
-利用mvColScaled作为输入调用如A项(下文)中指定的将运动矢量位移转换为尾数和指数表示的导出过程,并且将输出分配给mvColScaledME。
-利用mvColScaledME作为输入调用如B项(下文)中指定的用于从尾数和指数表示导出运动矢量位移的过程,并且将输出分配给mvColScaledQ。
-如果RefPicListX[refIdxLX]是长期参考图片,或者colPocDiff等于currPocDiff,则mvLXCol如下导出:
mvLXCol=mvColScaledQ
-否则,将mvLXCol作为运动矢量mvColScaledQ的缩放版本如下导出:
tx=4096
distScaleFactor=Clip3(-4096,4095,(tb*tx+32)>>6)
mvLXCol=Clip3(-32768,32767,Sign(distScaleFactor*mvColScaledQ)*((Abs(distScaleFactor*mvColScaledQ)+127)>>8))
其中tb如下导出:
tb=Clip3(-128,127,currPocDiff)
A项将运动矢量位移转换为尾数和指数表示的导出过程
该过程的输入为:
-指定所缩放的时间运动矢量的变量mvColScale,
该过程的输出为:
-指定所缩放的时间运动矢量的尾数指数表示的变量mvColScaledME
变量mantissa和exponent如下导出:
变量mvColScaledME如下导出:
mvColScaledME=exponent|(mantissa<<4)
B项用于从尾数和指数表示导出运动矢量位移的过程
该过程的输入为:
-指定采用尾数指数表示的所缩放的时间运动矢量的变量mvColScaledME,
该过程的输出为:
-指定从其尾数指数表示导出的所缩放的时间运动矢量的变量mvColScaledQ
变量mantissa和exponent如下导出:
exponent=mvColScaledME&15
mantissa=mvColScaledME>>4
变量mvColScaledQ如下导出:
在一个示例中,根据本文的技术,达到用于指示时间运动矢量位移的预先确定的值(例如,分别为-32和15)的尾数和指数不可用于运动预测。例如,当使用帧内模式时,所有四个运动矢量位移方向值均被分配有-32的尾数和15的指数。类似地,当两个运动矢量中只有一个有效时(例如inter_pred_idc[][]为PRED_L0或PRED_L1),则为不具有有效运动信息的运动矢量的两个位移方向都分配-32和15的尾数和指数。这种指示可用性的方法也可应用于对应于当前图片参考的时间运动信息。
在一个示例中,计算数字的尾数-指数表示可包括两步过程。第一步确定量化间隔,第二步添加量化间隔的一半,然后量化。尾数-指数表示可如下计算:
其中,
static const int MV_EXPONENT_BITCOUNT=4;
static const int MV_MANTISSA_BITCOUNT=6;
static const int MV_MANTISSA_LOWER_LIMIT=-(1<<(MV_MANTISSA_BITCOUNT-1));
static const int MV_MANTISSA_UPPER_LIMIT=((1<<(MV_MANTISSA_BITCOUNT-1))-1);
static const int MV_MANTISSA_LIMIT=(1<<(MV_MANTISSA_BITCOUNT-1));并且
static const int MV_EXPONENT_MASK=((1<<MV_EXPONENT_BITCOUNT)-1);
此外,在尾数-指数表示计算的一个示例中,针对具有舍入偏移的输入数的尾数和指数的计算(量化)可如下进行:
int numberWithOffset=number+(((1<<(exponent-1))-((number<0)?0:1))>>1);
此外,在尾数-指数表示计算的一个示例中,针对具有舍入偏移的输入数的尾数和指数的计算(量化)可如下进行:
int numberWithOffset=number+(((1<<(exponent-1))-((number<0)?1:0))>>1);
因此,在一个示例中,根据本文的技术,并置运动矢量的导出可如下进行:
A项的调用,用于时间亮度运动信息的存储过程:
A项应作为对当前图片的解码过程的一部分被调用。A项应在对当前图片的所有运动信息(运动矢量、参考索引、预测利用标记、长期参考图片的标记)进行解码并确定其值之后被调用。A项(以及在A项内调用的项)应是访问当前图片的解码过程中的运动信息的最后一项。
函数LongTermRefPic(aPic,aCb,refIdx,LX),其中X为0或1如下定义:
-如果具有来自图片aPic中包含编码块aCb的切片的参考图片列表LX的索引refIdx的图片在aPic是当前图片时被标记为“用于长期参考”,则LongTermRefPic(aPic,aCb,refIdx,LX)等于1。
-否则,LongTermRefPic(aPic,aCb,refIdx,LX)等于0。
A项.用于时间亮度运动信息的存储过程
该过程的输入为:
-预测列表使用标记PredFlagL0和PredFlagL1的阵列
-亮度运动矢量MvL0和MvL1的阵列
-参考索引RefIdxL0和RefIdxL1的阵列
该过程的输出为:
-以尾数和指数表示存储的亮度运动矢量的阵列MvL0Mantissa、MvL0Exponent、MvL1Mantissa和MvL1MExponent
-指示长期参考图片的使用的标记的阵列LtrpFlagL0和LtrpFlagL1
变量currPic指定当前图片
以下适用于从0到(pic_width_in_luma_samples>>3)的xL:
-以下适用于从0到(pic_height_in_luma_samples>>3)的yL:
-变量x和y分别被指定值(xL<<3)和(yL<<3)
-变量currCb指定亮度位置(x,y)处的编码块
-当PredFlagL0[x][y]等于0时,将-32分配给MvL0Mantissa[x][y][0]和MvL0Mantissa[x][y][1],并且将15分配给MvL0Exponent[x][y][0]和MvL0Exponent[x][y][1]。否则,以MvL0[x][y]作为输入调用如B项中指定的用于缩放和转换运动矢量位移的导出过程,并且将输出分配给MvL0Mantissa[x][y]和MvL0Exponent[x][y]
-将LongTermRefPic(currPic,currCb,RefIdxL0[x][y],L0)的输出分配给LtrpFlagL0[x][y]
-当PredFlagL1[x][y]等于0时,将-32分配给MvL1Mantissa[x][y][0]和MvL1Mantissa[x][y][1],并且将15分配给MvL1Exponent[x][y][0]和MvL1Exponent[x][y][1]。否则,以MvL1[x][y]作为输入调用如B项中指定的用于缩放转换运动矢量位移的导出过程,并且将输出分配给MvL1Mantissa[x][y]和MvL1Exponent[x][y]
-将LongTermRefPic(currPic,currCb,RefIdxL1[x][y],L1)的输出分配给LtrpFlagL1[x][y]
用于并置运动矢量的导出过程
该过程的输入为:
-变量currCb,其指定当前编码块,
-变量colCb,其指定由ColPic指定的并置图片内的并置编码块,
-亮度位置(xColCb,yColCb),其指定由colCb指定的并置亮度编码块相对于由ColPic指定的并置图片左上亮度样本的左上样本,
-参考索引refIdxLX,其中X为0或1,
-指示子块时间合并候选的标记sbFlag。
该过程的输出为:
-1/16分数采样准确度的预测运动矢量mvLXCol,
-可用性标记availableFlagLXCol。
变量currPic指定当前图片。
将阵列mvL0MantissaCol[x][y]、mvL0ExponentCol[x][y]、ltrpL0FlagCol[x][y]、mvL1MantissaCol[x][y]、mvL1ExponentCol[x][y]和ItrpL1FlagCol[x][y]设置为分别等于由ColPic指定的并置图片的MvL0Mantissa[x][y]、MvL0Exponent[x][y]、LtrpL0Flagt[x][y]、MvL1Manitssa[x][y]、MvL1Exponent[x][y]和LtrpL1Flag[x][y]。
当mvL0MantissaCol[x][y][0]、mvL0ExponentCol[x][y][0]分别等于-32和15时,将predFlagL0Col[x][y]设置为等于0,否则将predFlagL0Col[x][y]设置为等于1。
当mvL1MantissaCol[x][y][0]、mvL1ExponentCol[x][y][0]分别等于-32和15时,将predFlagL1Col[x][y]设置为等于0,否则将predFlagL1Col[x][y]设置为等于1。
变量mvLXCol和availableFlagLXCol如下导出:
-如果以帧内预测模式对colCb进行编码,则将mvLXCol的两个分量设置为等于0,并且将availableFlagLXCol设置为等于0。
-否则,运动矢量mvCol、参考索引refIdxCol和参考列表标识符listCol如下导出:
-如果sbFlag等于0,则将availableFlagLXCol设置为1,并且以下适用:
-如果predFlagL0Col[xColCb][yColCb]等于0,则将mvCol和listCol设置为分别等于mvL1Col[xColCb][yColCb]和L1。
-否则,如果predFlagL0Col[xColCb][yColCb]等于1并且predFlagL1Col[xColCb][yColCb]等于0,则将mvCol和listCol设置为分别等于mvL0Col[xColCb][yColCb]和L0。
-否则(predFlagL0Col[xColCb][yColCb]等于1,并且predFlagL1Col[xColCb][yColCb]等于1),进行以下指定:
-如果NoBackwardPredFlag等于1,则将mvCol和listCol设置为分别等于mvLXCol[xColCb][yColCb]和LX。
-否则,将mvCol和listCol设置为分别等于mvLNCol[xColCb][yColCb]和LN,其中N是collocated_from_10_flag的值。
-否则(sbFlag等于1),以下适用:
-如果PredFlagLXCol[xColCb][yColCb]等于1,则将mvCol和listCol设置为分别等于mvLXCol[xColCb][yColCb]和LX,并且将availableFlagLXCol设置为1。
-否则(PredFlagLXCol[xColCb][yColCb]等于0),以下适用:
-如果对于当前切片的每个参考图片列表中的每个图片,DiffPicOrderCnt(aPic,currPic)小于或等于0,并且PredFlagLYCol[xColCb][yColCb]等于1,则将mvCol和listCol分别设置为mvLYCol[xColCb][yColCb]和LY,其中Y等于!X,其中X为调用该过程的X的值。将availableFlagLXCol设置为1。
-将mvLXCol的两个分量设置为0,并且将availableFlagLXCol设置为等于0。
-当availableFlagLXCol等于TRUE时,mvLXCol和availableFlagLXCol如下导出:
-如果LongTermRefPic(currPic,currCb,refIdxLX,LX)不等于ltrpLXFlagCol[xColCb][yColCb],则将mvLXCol的两个分量设置为等于0,并且将availableFlagLXCol设置为等于0。
-否则,将变量availableFlagLXCol设置为等于1,将refPicListCol[refIdxCol]设置为在包含由ColPic指定的并置图片中的编码块colCb的切片的参考图片列表listCol中具有参考索引refIdxCol的图片,并且以下适用:
colPocDiff=DiffPicOrderCnt(ColPic,refPicListCol[refIdxCol])
currPocDiff=DiffPicOrderCnt(currPic,RefPicListX[refIdxLX])
-利用mvL0MantissaCol[xColCb][yColCb]、mvL0ExponentCol[xColCb][yColCb]作为输入调用如C项中指定的用于从尾数和指数表示导出运动矢量位移的过程,并且将输出分配给mvColScaledQ。
-如果RefPicListX[refIdxLX]是长期参考图片,或者colPocDiff等于currPocDiff,则mvLXCol如下导出:
mvLXCol=mvColScaledQ
-否则,将mvLXCol作为运动矢量mvColScaledQ的缩放版本如下导出:
tx=4096
distScaleFactor=Clip3(-4096,4095,(tb*tx+32)>>6)
mvLXCol=Clip3(-32768,32767,Sign(distScaleFactor*mvColScaledQ)*((Abs(distScaleFactor*mvColScaledQ)+127)>>8))
其中td如下导出:
tb=Clip3(-128,127,currPocDiff)
B项.将运动矢量位移缩放并转换为尾数和指数表示的导出过程
该过程的输入为:
-指定输入运动矢量的阵列mvCol,
该过程的输出为:
-指定所缩放的时间运动矢量的尾数和指数表示的阵列mvColScaledMantissa、mvColScaledExponent
变量mvColScaled如下导出:
txScaled=(16384+(Abs(tdScaled)>>1))/tdScaled
distColScaleFactor=(4*txScaled+32)>>6
mvColScaled=Clip3(-32768,32767,Sign(distColScaleFactor*mvCol)*((Abs(distColScaleFactor*mvCol)+127)>>8))
其中tdScaled如下导出:
tdScaled=Clip3(-128,127,colPocDiff)
阵列mvColScaledMantissa、mvColScaledExponent如下导出:
另选地,在一个示例中,阵列mvColScaledMantissa、mvColScaledExponent可如下导出:
另选地,在一个示例中,阵列mvColScaledMantissa、mvColScaledExponent可如下导出:
C项.用于从尾数和指数表示导出运动矢量位移的过程
该过程的输入为:
-指定采用尾数和指数表示的所缩放的时间运动矢量的阵列mvColScaledMantissa、mvColScaledExponent,
该过程的输出为:
-指定从其尾数和指数表示导出的所缩放的时间运动矢量的阵列mvColScaledQ
阵列mvColScaledQ如下导出:
其中,
dir表示位移方向,例如0表示水平并且1表示垂直
在一个示例中,根据本文的技术,将用于运动矢量值的裁剪范围修改为18位。在一个示例中,将Clip3(-32768,32767,…)修改为Clip3(-131072,131071,…)。
在一个示例中,从尾数-指数表示转换到所导出的整数可基于指数是否是预先确定的数字。例如,当指数等于0时,所导出的整数等于尾数。
在一个示例中,根据本文的技术,从尾数-指数表示到整数的转换可引入偏差。这可能是因为尾数-指数表示不是完全对称的(例如,当尾数为6位有符号整数时)。可能期望不具有基于符号的偏差。在一个示例中,为了避免符号偏置,尾数可包括5位无符号整数和1位符号。对于非零指数,重构将是(MV_MANTISSA_LIMIT+mantissa)*(1-2*sign)<<(exponent-1)而不是(mantissa^MV_MANTISSA_LIMIT)<<(exponent-1)。另选地,如果需要对称,则可如下从6位有符号尾数重构:((mantissa^MV_MANTISSA_LIMIT)+(mantissa<0?1:0)<<(exponent-1)。在一个示例中,MV_MANTISSA_LIMIT可为32。
在一个示例中,根据本文的技术,在应用XOR运算之前,应首先将尾数进行符号扩展。例如,在应用XOR运算之前,应首先将6位有符号尾数扩展到18位有符号值。
在一个示例中,根据本文的技术,尾数和数字之间的XOR运算被替换为尾数加上该数字以获得针对尾数的正(即,大于或等于0)值以及尾数减去该数字以获得针对尾数的负值。
在一个示例中,根据本文的技术,并置运动矢量的导出可如下进行:
A项的调用,用于时间亮度运动信息的存储过程:
A项应作为对当前图片的解码过程的一部分被调用。A项应在对当前图片的所有运动信息(运动矢量、参考索引、预测利用标记、长期参考图片的标记)进行解码并确定其值之后被调用。A项(以及在A项内调用的项)应是访问当前图片的解码过程中的运动信息的最后一项。
A项.用于时间亮度运动信息的存储过程
该过程的输入为:
-预测列表使用标记PredFlagL0和PredFlagL1的阵列
-亮度运动矢量MvL0和MvL1的阵列
-参考索引RefIdxL0和RefIdxL1的阵列
该过程的输出为:
-以尾数和指数表示存储的亮度运动矢量的阵列MvL0Mantissa、MvL0Exponent、MvL1Mantissa和MvL1MExponent
变量currPic指定当前图片
以下适用于从0到(pic_width_in_luma_samples>>3)的xL:
-以下适用于从0到(pic_height_in_luma_samples>>3)的yL:
-变量x和y分别被指定值(xL<<3)和(yL<<3)
-变量currCb指定亮度位置(x,y)处的编码块
-利用MvL0[x][y]作为输入调用如B项中指定的将运动矢量位移转换为尾数和指数表示的导出过程,并且将输出分配给MvL0Mantissa[x][y]和MvL0Exponent[x][y]
-利用MvL1[x][y]作为输入调用如B项中指定的将运动矢量位移转换为尾数和指数表示的导出过程,并且将输出分配给MvL1Mantissa[x][y]和MvL1Exponent[x][y]
用于并置运动矢量的导出过程
该过程的输入为:
-变量currCb,其指定当前编码块,
-变量colCb,其指定由ColPic指定的并置图片内的并置编码块,
-亮度位置(xColCb,yColCb),其指定由colCb指定的并置亮度编码块相对于由ColPic指定的并置图片左上亮度样本的左上样本,
-参考索引refIdxLX,其中X为0或1,
-指示子块时间合并候选的标记sbFlag。
该过程的输出为:
-1/16分数采样准确度的预测运动矢量mvLXCol,
-可用性标记availableFlagLXCol。
变量currPic指定当前图片。
将阵列predFlagL0Col[x][y]和refIdxL0Col[x][y]设置为分别等于由ColPic指定的并置图片的PredFlagL0[x][y]和RefIdxL0[x][y],并且将阵列predFlagL1Col[x][y]和refIdxL1Col[x][y]分别设置为等于由ColPic指定的并置图片的PredFlagL1[x][y]和RefIdxL1[x][y]。
将阵列mvL0MantissaCol[x][y]、mvL0ExponentCol[x][y]、mvL1MantissaCol[x][y]和mvL1ExponentCol[x][y]设置为分别等于由ColPic指定的并置图片的MvL0Mantissa[x][y]、MvL0Exponent[x][y]、MvL1Manitssa[x][y]和MvL1Exponent[x][y]。
变量mvLXCol和availableFlagLXCol如下导出:
-如果以帧内预测模式对colCb进行编码,则将mvLXCol的两个分量设置为等于0,并且将availableFlagLXCol设置为等于0。
-否则,运动矢量mvCol、参考索引refIdxCol和参考列表标识符listCol如下导出:
-如果sbFlag等于0,则将availableFlagLXCol设置为1,并且以下适用:
-如果predFlagL0Col[xColCb][yColCb]等于0,则将mvCol、refIdxCol和listCol设置为分别等于mvL1Col[xColCb][yColCb]、refIdxL1Col[xColCb][yColCb]和L1。
-否则,如果predFlagL0Col[xColCb][yColCb]等于1并且predFlagL1Col[xColCb][yColCb]等于0,则将mvCol、refIdxCol和listCol设置为分别等于mvL0Col[xColCb][yColCb]、refIdxL0Col[xColCb][yColCb]和L0。
-否则(predFlagL0Col[xColCb][yColCb]等于1,并且predFlagL1Col[xColCb][yColCb]等于1),进行以下指定:
-如果NoBackwardPredFlag等于1,则将mvCol、refIdxCol和listCol设置为分别等于mvLXCol[xColCb][yColCb]、refIdxLXCol[xColCb][yColCb]和LX。
-否则,将mvCol、refIdxCol和listCol设置为分别等于mvLNCol[xColCb][yColCb]、refIdxLNCol[xColCb][yColCb]和LN,其中N是collocated_from_10_flag的值。
-否则(sbFlag等于1),以下适用:
-如果PredFlagLXCol[xColCb][yColCb]等于1,则将mvCol、refIdxCol和listCol设置为分别等于mvLXCol[xColCb][yColCb]、refIdxLXCol[xColCb][yColCb]和LX,并且将availableFlagLXCol设置为1。
-否则(PredFlagLXCol[xColCb][yColCb]等于0),以下适用:
-如果对于当前切片的每个参考图片列表中的每个图片,DiffPicOrderCnt(aPic,currPic)小于或等于0,并且PredFlagLYCol[xColCb][yColCb]等于1,则将mvCol、refIdxCol和listCol分别设置为mvLYCol[xColCb][yColCb]、refIdxLYCol[xColCb][yColCb]和LY,其中Y等于!X,其中X为调用该过程的X的值。将availableFlagLXCol设置为1。
-将mvLXCol的两个分量设置为0,并且将availableFlagLXCol设置为等于0。
-当availableFlagLXCol等于TRUE时,mvLXCol和availableFlagLXCol如下导出:
-如果LongTermRefPic(currPic,currCb,refIdxLX,LX)不等于LongTermRefPic(ColPic,colCb,refIdxCol,listCol),则将mvLXCol的两个分量设置为等于0,并且将availableFlagLXCol设置为等于0。
-否则,将变量availableFlagLXCol设置为等于1,将refPicListCol[refIdxCol]设置为在包含由ColPic指定的并置图片中的编码块colCb的切片的参考图片列表listCol中具有参考索引refIdxCol的图片,并且以下适用:
colPocDiff=DiffPicOrderCnt(ColPic,refPicListCol[refIdxCol])
currPocDiff=DiffPicOrderCnt(currPic,RefPicListX[refIdxLX])
-利用mvL0MantissaCol[xColCb][yColCb]、mvL0ExponentCol[xColCb][yColCb]作为输入调用如C项中指定的用于从尾数和指数表示导出运动矢量位移的过程,并且将输出分配给mvColQ。
-如果RefPicListX[refIdxLX]是长期参考图片,或者colPocDiff等于currPocDiff,则mvLXCol如下导出:
mvLXCol=mvColQ
-否则,将mvLXCol作为运动矢量mvColQ的缩放版本如下导出:
tx=(16384+(Abs(td)>>1))/td
distScaleFactor=Clip3(-4096,4095,(tb*tx+32)>>6)
mvLXCol=Clip3(-32768,32767,Sign(distScaleFactor*
mvColQ)*((Abs(distScaleFactor*mvColQ)+127)>>8))
其中td和tb如下导出:
td=Clip3(-128,127,colPocDiff)
tb=Clip3(-128,127,currPocDiff)
B项.将运动矢量位移转换为尾数和指数表示的导出过程
该过程的输入为:
-指定输入运动矢量的阵列mvCol,该过程的输出为:
-指定时间运动矢量的尾数和指数表示的阵列mvColMantissa、mvColExponent
阵列mvColMantissa、mvColExponent如下导出:
C项.用于从尾数和指数表示导出运动矢量位移的过程
该过程的输入为:
-指定采用尾数和指数表示的时间运动矢量的阵列mvColMantissa、mvColExponent,
该过程的输出为:
-指定从其尾数和指数表示导出的时间运动矢量的阵列mvColQ
阵列mvColQ如下导出:
在一个示例中,跳过运动矢量的缩放,在这种情况下,mvColScaled等于B项中的mvCol。
在一个示例中,根据本文的技术,并置运动矢量的导出可如下进行:
该过程的输入为:
-变量currCb,其指定当前编码块,
-变量colCb,其指定由ColPic指定的并置图片内的并置编码块,
-亮度位置(xColCb,yColCb),其指定由colCb指定的并置亮度编码块相对于由ColPic指定的并置图片左上亮度样本的左上样本,
-参考索引refIdxLX,其中X为0或1,
-指示子块时间合并候选的标记sbFlag。
该过程的输出为:
-1/16分数采样准确度的预测运动矢量mvLXCol,
-可用性标记availableFlagLXCoL
变量currPic指定当前图片。
将阵列predFlagL0Col[x][y]、mvL0Col[x][y]和refIdxL0Col[x][y]设置为分别等于由ColPic指定的并置图片的PredFlagL0[x][y]、MvL0[x][y]和RefIdxL0[x][y],并且将阵列predFlagL1Col[x][y]、mvL1Col[x][y]和refIdxL1Col[x][y]分别设置为等于由ColPic指定的并置图片的PredFlagL1[x][y]、MvL1[x][y]和RefIdxL1[x][y]。
变量mvLXCol和availableFlagLXCol如下导出:
-如果以帧内预测模式对colCb进行编码或者其参考图片为ColPic,则将mvLXCol的两个分量设置为等于0,并且将availableFlagLXCol设置为等于0。
-否则,运动矢量mvCol、参考索引refIdxCol和参考列表标识符listCol如下导出:
-如果sbFlag等于0,则将availableFlagLXCol设置为1,并且以下适用:
-如果predFlagL0Col[xColCb][yColCb]等于0,则将mvCol、refIdxCol和listCol设置为分别等于mvL1Col[xColCb][yColCb]、refIdxL1Col[xColCb][yColCb]和L1。
-否则,如果predFlagL0Col[xColCb][yColCb]等于1并且predFlagL1Col[xColCb][yColCb]等于0,则将mvCol、refIdxCol和listCol设置为分别等于mvL0Col[xColCb][yColCb]、refIdxL0Col[xColCb][yColCb]和L0。
-否则(predFlagL0Col[xColCb][yColCb]等于1,并且predFlagL1Col[xColCb][yColCb]等于1),进行以下指定:
-如果NoBackwardPredFlag等于1,则将mvCol、refIdxCol和listCol设置为分别等于mvLXCol[xColCb][yColCb]、refIdxLXCol[xColCb][yColCb]和LX。
-否则,将mvCol、refIdxCol和listCol设置为分别等于mvLNCol[xColCb][yColCb]、refIdxLNCol[xColCb][yColCb]和LN,其中N是collocated_from_10_flag的值。
-否则(sbFlag等于1),以下适用:
-如果PredFlagLXCol[xColCb][yColCb]等于1,则将mvCol、refIdxCol和listCol设置为分别等于mvLXCol[xColCb][yColCb]、refIdxLXCol[xColCb][yColCb]和LX,并且将availableFlagLXCol设置为1。
-否则(PredFlagLXCol[xColCb][yColCb]等于0),以下适用:
-如果对于当前图块组的每个参考图片列表中的每个图片,DiffPicOrderCnt(aPic,currPic)小于或等于0,并且PredFlagLYCol[xColCb][yColCb]等于1,则将mvCol、refIdxCol和listCol分别设置为mvLYCol[xColCb][yColCb]、refIdxLYCol[xColCb][yColCb]和LY,其中Y等于!X,其中X为调用该过程的X的值。将availableFlagLXCol设置为1。
-将mvLXCol的两个分量设置为0,并且将availableFlagLXCol设置为等于0。
-当availableFlagLXCol等于TRUE时,mvLXCol和availableFlagLXCol如下导出:
-如果LongTermRefPic(currPic,currCb,refIdxLX,LX)不等于LongTermRefPic(ColPic,colCb,refIdxCol,listCol),则将mvLXCol的两个分量设置为等于0,并且将availableFlagLXCol设置为等于0。
-否则,将变量availableFlagLXCol设置为等于1,将refPicListCol[refIdxCol]设置为在包含由ColPic指定的并置图片中的编码块colCb的图块组的参考图片列表listCol中具有参考索引refIdxCol的图片,并且以下适用:
colPocDiff=DiffPicOrderCnt(ColPic,refPicListCol[refIdxCol])
currPocDiff=DiffPicOrderCnt(currPic,RefPicListX[refIdxLX])
-利用mvCol作为输入调用用于并置运动矢量的时间运动缓冲器压缩过程,并且将输出分配给mvCol。
-如果RefPicListX[refIdxLX]是长期参考图片,或者colPocDiff等于currPocDiff,则mvLXCol如下导出:
mvLXCol=mvCol
-否则,将mvLXCol作为运动矢量mvCol的缩放版本如下导出:
tx=(16384+(Abs(td)>>1))/td
distScaleFactor=Clip3(-4096,4095,(tb*tx+32)>>6)
mvLXCol=Clip3(-32768,32767,Sign(distScaleFactor*mvCol)*((Abs(distScaleFactor*mvCol)+127)>>8))
其中td和tb如下导出:
td=Clip3(-128,127,colPocDiff)
tb=Clip3(-128,127,currPocDiff)
用于并置运动矢量的时间运动缓冲器压缩过程
该过程的输入为:
-运动矢量mv,
该过程的输出为:
-舍入运动矢量rmv
对于每个运动矢量分量compIdx,从mv[compIdx]如下导出rmv[compIdx]:
s=mv[compIdx]>>17
f=Floor(Log2((mv[compIdx]^s)|31))-4
mask=(-1<<f)>>1
round=(1<<f)>>2
rmv[compIdx]=(mv[compIdx]+round)&mask
应当指出的是,该过程使得能够使用位精简表示法来存储并置运动矢量。每个有符号18位运动矢量分量可利用具有6位有符号尾数和4位指数的尾数和指数格式来表示。
在另一个示例中,用于并置运动矢量的时间运动缓冲器压缩过程具有关于0的对称性。即,如果输入-mv[compIdx]而不是mv[compIdx],则输出为-rmv[compIdx]而不是rmv[compIdx]。因此,用于并置运动矢量的时间运动缓冲器压缩过程可如下进行:
用于并置运动矢量的时间运动缓冲器压缩过程
该过程的输入为:
-运动矢量mv,
该过程的输出为:
-舍入运动矢量rmv
对于每个运动矢量分量compIdx,从mv[compIdx]如下导出rmv[compIdx]:
S=mv[compIdx]>>17
F=Floor(Log2((mv[compIdx]^s)|31))-4
Mask=(-1<<f)>>1
round=((1<<f)+s)>>2
rmv[compIdx]=(mv[compIdx]+round)&mask
在另一个示例中,用于并置运动矢量的时间运动缓冲器压缩过程可如下进行:
该过程的输入为:
-运动矢量mv,
该过程的输出为:
-舍入运动矢量rmv
对于每个运动矢量分量compIdx,从mv[compIdx]如下导出rmv[compIdx]:
s=mv[compIdx]>>17
f=Floor(Log2((mv[compIdx]^s)|31))-4
mask=(-1<<f)>>1
round=((1<<f)-1-s)>>2
rmv[compIdx]=(mv[compIdx]+round)&mask
在另一个示例中,用于并置运动矢量的时间运动缓冲器压缩过程可如下进行:
该过程的输入为:
-运动矢量mv,
该过程的输出为:
-舍入运动矢量rmv
对于每个运动矢量分量compIdx,从mv[compIdx]如下导出rmv[compIdx]:
s=mv[compIdx]>>17
f=Floor(Log2((mv[compIdx]^s)|31))-4
mask=(-1<<f)>>1
round=((1<<f)+s)>>2
rmv[compIdx]=Clip3(-(1<<17),(1<<17)-1,(mv[compIdx]+round)&mask)
在另一个示例中,用于并置运动矢量的时间运动缓冲器压缩过程可如下进行:
该过程的输入为:
-运动矢量mv,
该过程的输出为:
-舍入运动矢量rmv
对于每个运动矢量分量compIdx,从mv[compIdx]如下导出rmv[compIdx]:
s=mv[compIdx]>>17
f=Floor(Log2((mv[compIdx]^s)|31))-4
mask=(-1<<f)>>1
round=((1<<f)+s)>>2
rmv[compIdx]=Clip3(-(64<<11),(63<<11),(mv[compIdx]+round)&mask)
应当指出的是,在上面的情况下,其中rmv[compIdx]=Clip3(-(64<<11),(63<<11),(mv[compIdx]+round)&mask),以下一组操作:
s=mv[compIdx]>>17
f=Floor(Log2((mv[compIdx]^s)|31))-4
mask=(-1<<f)>>1
round=((1<<f)+s)>>2
rmv[compIdx]=Clip3(-(64<<11),(63<<11),(mv[compIdx]+round)&mask)
等同于:
cmv[compIdx]=Clip3(-(64<<11),(63<<11),mv[compIdx])
s=mv[compIdx]>>17
f=Floor(Log2((cmv[compIdx]^s)|31))-4
mask=(-1<<f)>>1
round=((1<<f)+s)>>2
rmv[compIdx]=(cmv[compIdx]+round)&mask
因此,在rmv[compIdx]=Clip3(-(64<<11),(63<<11),(mv[compIdx]+round)&mask)的情况下,如果需要,可在导出过程中更早地执行裁剪操作(例如,为了改善计算吞吐量)。
此外,应当指出的是,在一个示例中,可如下在并置运动矢量过程的导出中裁剪mvLXCol:
-如果RefPicListX[refIdxLX]是长期参考图片,或者colPocDiff等于currPocDiff,则mvLXCol如下导出:
mvLXCol=Clip3(-(1<<17),(1<<17)-1,mvCol)
-否则,将mvLXCol作为运动矢量mvCol的缩放版本如下导出:
tx=(16384+(Abs(td)>>1))/td
distScaleFactor=Clip3(-4096,4095,(tb*tx+32)>>6)
mvLXCol=Clip3(-(1<<17),(1<<17)-1,Sign(distScaleFactor*mvCol)*((Abs(distScaleFactor*mvCol)+127)>>8))
其中td和tb如下导出:
td=Clip3(-128,127,colPocDiff)
tb=Clip3(-128,127,currPocDiff)
再次参考图6,如图6所示,帧间预测处理单元214可经由滤波器单元216接收重构的视频块,该滤波器单元可以是环路内滤波过程的一部分。滤波器单元216可以被配置为执行解块和/或样本自适应偏移(SAO)滤波。解块是指平滑化重构视频块边界的过程(例如,使观察者不易察觉到边界)。SAO滤波是一种可用于通过向重构的视频数据添加偏移以改善重构的非线性振幅映射。熵编码单元218接收量化的变换系数和预测语法数据(即帧内预测数据、运动预测数据和QP数据等)。熵编码单元218可以被配置为根据本文所述的技术中的一种或多种执行熵编码。熵编码单元218可以被配置为输出合规比特流(即视频解码器可从其接收和再现视频数据的比特流)。这样,视频编码器200表示一种设备的示例,该设备被配置为:确定全精度运动矢量以用于生成对第一图片中的视频块的预测,以小于所述全精度存储所述运动矢量,以及从所存储的运动矢量生成用于第二图片中的视频块的预测运动矢量候选。
图7是示出根据本公开的一种或多种技术的可被配置为对视频数据进行解码的视频解码器的示例的框图。在一个示例中,视频解码器300可被配置为基于上文所述的技术中的一种或多种技术来重构视频数据。即,视频解码器300可以与上述视频编码器200互逆的方式操作。视频解码器300可被配置为执行帧内预测解码和帧间预测解码,并且因此可被称为混合解码器。在图7所示的示例中,视频解码器300包括熵解码单元302、逆量化单元304、逆变换处理单元306、帧内预测处理单元308、帧间预测处理单元310、求和器312、滤波器单元314和参考缓冲器316。视频解码器300可被配置为以与视频编码系统一致的方式对视频数据进行解码,该视频编码系统可以实现视频编码标准的一个或多个方面。应当指出的是,尽管示例性视频解码器300被示出为具有不同的功能块,但此类图示旨在用于描述目的,并且不将视频解码器300和/或其子部件限制为特定的硬件或软件架构。可使用硬件、固件和/或软件具体实施的任何组合来实现视频解码器300的功能。
如图7所示,熵解码单元302接收熵编码的比特流。熵解码单元302可被配置为根据与熵编码过程互逆的过程对来自比特流的量化语法元素和量化系数进行解码。熵解码单元302可被配置为根据上文所述的任何熵编码技术来执行熵解码。熵解码单元302可以与视频编码标准一致的方式解析编码的比特流。视频解码器300可被配置为解析编码的比特流,其中该编码的比特流基于上述技术生成。逆量化单元304从熵解码单元302接收量化变换系数(即,位阶值)和量化参数数据。量化参数数据可以包括上述增量QP值和/或量化组大小值等的任意组合和全部组合。视频解码器300和/或逆量化单元304可被配置为基于由视频编码器用信号发送的值和/或通过视频属性和/或编码参数来确定用于逆量化的QP值。即,逆量化单元304可以与上述系数量化单元206互逆的方式操作。逆量化单元304可被配置为应用逆量化。逆变换处理单元306可被配置为执行逆变换以生成重构的残差数据。由逆量化单元304和逆变换处理单元306分别执行的技术可类似于由上述逆量化/变换处理单元208执行的技术。逆变换处理单元306可以被配置为应用逆DCT、逆DST、逆整数变换、不可分二次变换(NSST)或概念上类似的逆变换过程来变换系数,以便产生像素域中的残差块。此外,如上所述,是否执行特定变换(或特定变换的类型)可以取决于帧内预测模式。如图7所示,可将重构的残差数据提供给求和器312。求和器312可将重构的残差数据加到预测视频块并且生成重构的视频数据。
如上所述,可根据预测视频技术(即帧内预测和帧间预测)确定预测视频块。帧内预测处理单元308可被配置为接收帧内预测语法元素并且从参考缓冲器316检索预测视频块。参考缓冲器316可包括被配置为存储一个或多个视频数据帧的存储器设备。帧内预测语法元素可识别帧内预测模式,诸如上述的帧内预测模式。在一个示例中,帧内预测处理单元308可使用根据本文所述的帧内预测编码技术中的一种或多种来重构视频块。帧间预测处理单元310可接收帧间预测语法元素并生成运动矢量,以识别存储在参考缓冲器316中的一个或多个参考帧中的预测块。帧间预测处理单元310可生成运动补偿块,可能基于内插滤波器来执行内插。用于具有子像素精度的运动估计的内插滤波器的标识符可以被包括在语法元素中。帧间预测处理单元310可使用内插滤波器来计算用于参考块的亚整数像素的内插值。
如上所述,视频解码器300可解析编码的比特流,其中该编码的比特流基于上述技术而生成,并且如上所述,视频编码器200可根据上述运动矢量预测技术生成比特流。因此,视频解码器300可被配置为根据上述技术执行运动矢量预测。这样,视频解码器300表示一种设备的示例,该设备被配置为:确定全精度运动矢量以用于生成对第一图片中的视频块的预测,以小于所述全精度存储所述运动矢量,以及从所存储的运动矢量生成用于第二图片中的视频块的预测运动矢量候选。
再次参考图7,滤波器单元314可被配置为对重构的视频数据执行滤波。例如,滤波器单元314可被配置为执行解块和/或SAO滤波,如上面关于滤波器单元216所描述的。此外,应当指出的是,在一些示例中,滤波器单元314可被配置为执行专用的任意滤波(例如,视觉增强)。如图7所示,可由视频解码器300输出重构的视频块。
在一个或多个示例中,所述功能可以通过硬件、软件、固件或其任何组合来实现。如果以软件实现,则可将功能作为一个或多个指令或代码存储在计算机可读介质上或经由计算机可读介质上传输,并且由基于硬件的处理单元执行。计算机可读介质可以包括对应于有形介质诸如数据存储介质的计算机可读存储介质,或者包括例如根据通信协议促进计算机程序从一个地方传输到另一个地方的任何介质的传播介质。这样,计算机可读介质通常可对应于:(1)非暂态的有形计算机可读存储介质,或者(2)通信介质诸如信号或载波。数据存储介质可以是可以由一个或多个计算机或一个或多个处理器访问以检索用于实现本公开中所述的技术的指令、代码和/或数据结构的任何可用介质。计算机程序产品可以包括计算机可读介质。
以举例而非限制的方式,此类计算机可读存储介质可以包括RAM、ROM、EEPROM、CD-ROM或其他光盘存储设备、磁盘存储设备或其他磁存储设备、闪存存储器,或者可用于存储指令或数据结构形式的所需程序代码并且可由计算机访问的任何其他介质。而且,任何连接都被适当地称为计算机可读介质。例如,如果使用同轴电缆、光纤电缆、双绞线、数字用户线路(DSL)或无线技术诸如红外线、无线电和微波从网站、服务器或其他远程源传输指令,则同轴电缆、光纤电缆、双绞线、DSL或无线技术诸如红外线、无线电和微波都包含在介质的定义中。然而,应当理解,计算机可读存储介质和数据存储介质不包括连接、载波、信号或其他暂态介质,而是针对非暂态有形存储介质。如本文所用,磁盘和光盘包括压缩光盘(CD)、激光盘、光学光盘、数字通用光盘(DVD)、软磁盘及Blu-ray光盘,其中磁盘通常以磁性方式复制数据,而光盘则利用激光以光学方式复制数据。上述的组合也应该包括在计算机可读介质的范围内。
可以由一个或多个处理器诸如一个或多个数字信号处理器(DSP)、通用微处理器、专用集成电路(ASIC)、现场可编程逻辑阵列(FPGA)或其他等效集成或离散逻辑电路执行指令。因此,如本文所用的术语“处理器”可以指任何前述结构或适用于实现本文所描述的技术的任何其他结构。此外,在一些方面中,可以在被配置用于编码和解码的专用硬件和/或软件模块内提供本文所述的功能,或者将其结合到组合编解码器中。而且,这些技术可以完全在一个或多个电路或逻辑元件中实现。
本公开的技术可以在各种设备或装置包括无线手机、集成电路(IC)或一组IC(例如,芯片组)中实现。在本公开中描述了各种部件、模块或单元,以强调被配置为执行所公开的技术的设备的功能方面,但是不一定需要通过不同的硬件单元来实现。相反,如上所述,可以将各种单元组合在编解码器硬件单元中,或者通过互操作硬件单元包括如上所述的一个或多个处理器的集合,结合合适的软件和/或固件来提供各种单元。
此外,每个上述实施方案中所使用的基站设备和终端设备的每个功能块或各种特征可通过电路(通常为一个集成电路或多个集成电路)实施或执行。被设计为执行本说明书中所述的功能的电路可以包括通用处理器、数字信号处理器(DSP)、专用或通用集成电路(ASIC)、现场可编程门阵列(FPGA),或其他可编程逻辑设备、分立栅极或晶体管逻辑器、或分立硬件部件、或它们的组合。通用处理器可为微处理器,或另选地,该处理器可为常规处理器、控制器、微控制器或状态机。通用处理器或上述每种电路可由数字电路进行配置,或可由模拟电路进行配置。此外,当由于半导体技术的进步而出现制成取代当前集成电路的集成电路的技术时,也能够使用通过该技术生产的集成电路。
已经描述了各种示例。这些示例和其他示例在以下权利要求的范围内。
<交叉引用>
本非临时申请依照美国法典第35卷第119条要求以下临时申请的优先权:2018年11月16日的62/768,772、2019年1月2日的62/787,695、2019年1月15日的62/792,872、2019年1月16日的62/793,080、2019年1月16日的62/793,311、2019年3月7日的62/815,109;这些申请的全部内容据此以引用方式并入。