【相关申请的交叉引用】
本发明主张申请于2014年9月30日序列号为pct/cn2014/088017的pct专利申请、申请于2015年1月26日序列号为pct/cn2015/071553的pct专利申请、申请于2015年2月3日序列号为pct/cn2015/072175的pct专利申请、申请于2015年4月29日序列号为62/154,373的美国临时专利申请、以及申请于2015年6月22日序列号为62/182,685的美国临时专利申请的优先权。将这些pct专利申请以及美国临时专利申请以参考的方式并入本文中。
【技术领域】
本发明涉及视频编码中的自适应运动向量分辨率(adaptivemotionvectorresolution)。具体地,本发明涉及基于当前运动向量分辨率、参考运动向量分辨率、或当前运动向量分辨率以及参考运动向量分辨率两者来应用运动向量预测。
背景技术:
高效视频编码(highefficiencyvideocoding,hevc)是近年来被开发出来的一种新的编码标准。于hevc系统中,h.264/avc中的固定大小的宏区块由称为编码单元(codingunit,cu)的可变块(flexibleblock)来替代。cu中的像素共用相同的编码参数以提升编码效率。cu可以从最大cu(largestcu,lcu)开始,于hevc中,其也被称为编码树单元(codedtreeunit,ctu)。除编码单元的概念以外,hevc中也引入了预测单元(predictionunit,pu)的概念。当cu分层树的分割被执行,根据预测类型以及pu分区,每个叶cu(leafcu)可以进一步被分割为一个或多个pu。多种用于屏幕内容编码的编码工具已经被开发出来。
不同于常规的直播视频内容,对应于屏幕内容的视频材料通常具有整数位移值。因此,现有的编码器通常将比特流中的运动向量解释为分数像素偏移(fractionalpixeloffset),例如1/4,这可能不必要地增加比特率。另一方面,分数运动向量值对于对应于自然场景的内容(例如照相机捕获的内容)仍然非常有用。因此,旨在解决不同视频内容的自适应运动向量分辨率的问题已经于jctvc-s0085(li,etal.,“adaptivemotionvectorresolutionforscreencontent”,jointcollaborativeteamonvideocoding(jct-vc)ofitu-tsg16wp3andiso/iecjtc1/sc29/wg1119thmeeting:strasbourg,fr,17-24oct.2014,document:jctvc-s0085)中被描述。
根据jctvc-s0085,如表1所示,自适应mb分辨率启用旗标(即,adaptive_mv_resolution_enabled_flag)被标识于序列参数集(sequenceparameterset,sps)以指示自适应运动向量分辨率是否被应用。于条带标头中,整数mv旗标(即,use_integer_mv_flag)被标识(参见表1中的注释(1-2))以指示当前条带中的运动向量(motionvector,mv)是使用整数像素分辨率(即,use_integer_mv_flag=1)或是四分之一像素分辨率(即,use_integer_mv_flag=0)。如表1所示,只有当自适应mv分辨率如sps等级语法元素adaptive_mv_resolution_enabled_flag(参见表1中的注释(1-1))所指示被启用时,语法元素use_integer_mv_flag被并入到比特流中。
表1
于解码器侧,不论当前条带中的use_integer_mv_flag为0还是为1,mv都以相同的方式被解析及解码。在内插处理之前,mv是基于根据jctvc-s1005(joshi,etal.,“highefficiencyvideocoding(hevc)screencontentcoding:draft2”,jointcollaborativeteamonvideocoding(jct-vc)ofitu-tsg16wp3andiso/iecjtc1/sc29/wg1119thmeeting:strasbourg,fr,17-24oct.2014,document:jctvc-s1005)所示的以下use_integer_mv_flag来被缩放。
如果use_integer_mv_flag==1,则mvlx<<=2,mvclx<<=2。(1)
于式子(1)中,x等于0或1,mvlx表示与列表lx(即,列表l0或l1)相关的亮度分量的运动向量,且mvclx表示与列表lx(即,列表l0或l1)相关的色度分量的运动向量。操作“mvlx<<2”表示mvlx左移2,且结果替换原始mvlx。类似地,操作“mvclx<<2”表示mvlx左移2,且结果替换原始mvclx。
当前条带等级的mv自适应分辨率方法中存在几个问题。第一,当时间域运动向量预测(temporalmotionvectorprediction,tmvp)被应用,且对应图片(collocatedpicture)中的use_integer_mv_flag与当前图片中的use_integer_mv_flag不同时,正在被预测的当前图片中的运动向量预测值(motionvectorpredictor,mvp)以及mv的mv分辨率将不匹配。于本公开中,根据所使用的上下文,缩写mvp也可对应于运动向量预测或运动向量预测值。
图1所示为一个示例。于此场景中,当前图片110中的use_integer_mv_flag为0,对应图片120中的use_integer_mv_flag为1,且用于参考块122的对应的mv124等于(4、4)。根据现有的实践,如果使用tmvp,则对应的mv(4,4)将被直接视为用于当前图片110的当前块112的当前mv114的mvp。然而,当以四分之一像素分辨率表示mv时,对应图片中的对应的mv(4,4)表示(16、16)的运动向量值。
于另一场景中,当前图片的use_integer_mv_flag为1,对应图片中的use_integer_mv_flag为0,且对应的mv仍然等于(4、4)。根据现有的实践,如果使用tmvp,则对应的mv(4,4)将被直接视为用于当前图片的mvp。然而,当以整数像素分辨率表示mv时,对应图片中的对应的mv(4,4)表示(1、1)的运动向量值。
在以上所示的两个示例中,mvp的分辨率与将被预测的当前mv的分辨率都不匹配。这将降低tmvp的效率。
由于比特宽度(bitwidth)的限制,出现了另一问题。根据jctvc-s1005,如上所述的mvl0以及mvl1的结果值将总在-215到215-1的范围内,包括-215及215-1。在此限制下,可以保证mvl0以及mvl1可以用两个字节(byte)来表示。然而,在当前图片中的use_integer_mv_flag为1的条件下,对应图片中的use_integer_mv_flag为0,且对应的mv等于(215-1、215-1),如果选择了tmvp合并候选,在mvlx<<=2以及mvclx<<=2操作之后,mvlx将超过两个字节的限制。
于当前条带的mv具有整数像素分辨率时,自适应mv分辨率还可导致解块过程(deblockingprocess)中的问题。于解块过程中,边界强度被确定以选择用于块边界的对应解块滤波器。边界强度根据各种因素被确定。于不同的因素中,一个因素与块边界的两侧的运动向量相关。具体地,|q_mvx-p_mvx|以及|q_mvy-p_mvy|与阈值4相比较以确定滤波边界强度,其中,q_mv以及p_mv表示两个邻近块的运动向量,q_mvx以及q_mvy表示q_mv的x以及y分量,且p_mvx以及p_mvy表示p_mv的x以及y分量。
阈值4被设计为假设mv总是使用四分之一像素分辨率。然而,于当前条带中的mv使用其它mv分辨率(例如:整数像素分辨率)时,阈值4可能并不适当。
帧内块复制(intrapictureblockcopy)是用于hevc屏幕内容编码(hevcscreencontentcoding,hevc-scc)扩展的另一编码工具。对于使用帧内块复制模式的cu,预测块是从当前帧的重建区域获得。接着,块向量(blockvector,bv)以及残差被编码。于2015年2月在日内瓦举行的第20次jct-vc会议上,会议同意帧内块复制与帧间编码模式相统一。即,当前图片被视为参考图片且被插入到一个或两个参考图片列表中。块向量预测及编码与帧间运动向量预测及编码相同。这种统一简化了编解码器的设计。但是还是有一些问题。例如,于当前scm中,块向量总是使用整数分辨率,而运动向量可以使用切换于条带等级的整数分辨率以及四分之一像素分辨率。这可能会导致解块阶段以及mv预测阶段的分辨率不匹配。
于hevc屏幕内容编码扩展中,采用了被称为自适应颜色空间转化(adaptivecolor-spacetransform)或循环颜色空间转化(in-loopcolor-spacetransform)的另一种编码工具。图2所示为用于循环颜色空间转化的解码流程的示例。其包括附加模块,即,逆颜色空间转化(inversecolor-spacetransform)230。图2所示的各种模块包括:熵解码器210、解量化215、逆转化220、交叉分量预测(cross-componentprediction,ccp)225、运动补偿235、帧内预测240、加法器245、解块滤波器250、样本自适应偏移(sampleadaptiveoffset,sao)滤波器255、以及解码图片缓冲器(decodedpicturebuffer,dpb)260。解码器还包括选择逆颜色空间转化(于下方位置)或旁路逆颜色空间转化(于上方位置)的第一开关s1。解码器也包括选择帧间预测(于上方位置)或帧内预测(于下方位置)的第二开关s2。除了逆颜色空间转化230之外,所有其它模块都是现有的hevc中使用的标准解码器模块。当块被编码于颜色空间转化启用的情况下,逆颜色空间转化被调用以将残差域转换回用于来自现有的逆dct/dst转化以及ccp的输出的原始域。旗标被标识以指示cu中颜色空间转化的使用。对于帧内块复制以及帧间模式,只有在当前cu中具有至少一个非零系数时,旗标才被标识。对于帧内模式,只有当第一pu(即,cu内的左上(top-left)pu)的色度模式被编码于dm模式时,旗标被标识。dm模式对应于直接模式,其中,用于色度分量的帧内模式与用于亮度分量的帧内模式相同。
根据cu是编码于无损或有损的方式,两个不同的颜色空间转化被应用。用于有损编码的正向以及逆向颜色空间转化使用ycocg转化矩阵,其定义如下:
正向:
逆向:
其中,原始颜色空间(c0,c1,c2)可对应于(r,g,b),(y,cb,cr)或(y,u,v)。
如式子(2)所示的有损编码正向颜色空间转化不归一化(normalized),这会导致当应用转化时信号减少。考虑到对于c0以及c2的正向转化的范数(norm)大致等于
于hevc-scc的规范中,qp如子条款8.6.2中所描述的被调整。量化参数qp被导出如下:
如果cidx等于0,
qp=qp′y+(cu_residual_act_flag[xtby][ytby]?-5:0)(4)
-否则,如果cidx等于1,
qp=qp′cb+(cu_residual_act_flag[xtby][ytby]?-5:0)(5)
-否则(cidx等于2),
qp=qp′cr+(cu_residual_act_flag[xtby][ytby]?-3:0)(6)
其中,如果自适应颜色空间转化被应用于具有左上位置(xtby,ytby)的块,则cu_residual_act_flag[xtby][ytby]为1。否则,cu_residual_act_flag[xtby][ytby]为0。qp′y、qp′cb、以及qp′cr分别对应于用于颜色分量y、cb、以及cr的原始量化参数。如果cu_residual_act_flag[xtby][ytby]为真或等于1,则表达(cu_residual_act_flag[xtby][ytby]?-5:0)将返回值-5,且如果cu_residual_act_flag[xtby][ytby]为假或等于0,将返回值0。上述变量cidx对应于颜色索引。
然而,由qp控制的缩放过程是根据hevc标准的子条款8.6.3来定义:
d[x][y]=clip3(coeffmin,coeffmax,
((transcoefflevel[xtby][ytby][cidx][x][y]*m[x][y]*
levelscale[qp%6]<<(qp/6))+(1<<(bdshift-1)))
>>bdshift)。(7)
对于k=0.5,将列表levelscale[]指定为levelscale[k]={40、45、51、57、64、72}。
当应用自适应颜色空间转化时,等式(4)、(5)以及(6)中的qp调整可以使得qp小于0。当qp<0时,“qp%6”将导致列表levelscale[]的负参数,并导致未定义的levelscale[]值。因此,d[x][y]在式子(7)中未定义。因此,希望能克服这个问题。
技术实现要素:
本发明揭露了一种用于具有自适应运动向量分辨率的视频编码的运动向量预测(motionvectorprediction,mvp)的方法。根据本发明,根据当前mv分辨率、参考mv分辨率、或当前mv分辨率以及参考mv分辨率将mvp编码应用于当前mv或储存当前mv。在一个实施例中,与参考图片中参考块相关联的参考mv对应于与参考图片中时间域参考块相关联的时间域mv。在另一实施例中,于当前mv分辨率对应于整数像素分辨率时,使用已修改的时间域mv作为当前mv的运动向量预测值来将tmvp编码应用于当前mv,其中,已修改的时间域mv是通过右移(right-shifting)时间域mv来产生。于时间域mv被右移以产生已修改的时间域mv之前,偏移(offset)可以被增加到时间域mv中。在另一实施例中,于当前mv分辨率对应于整数像素分辨率时,在当前mv被储存于存储器之前,当前mv被左移。已位移的当前mv(theshiftedcurrentmv)可用于后续mv的tmvp编码。已位移的当前mv在用作包含当前条带的当前图片中的另一块的运动向量预测值之前被位移回来(shiftedback)。可选地,与当前mv分辨率相关的语法元素可被储存于存储器以用于后续mv的tmvp编码。
于当前mv分辨率对应于整数像素分辨率且参考mv分辨率对应于非整数像素分辨率时,可使用已修改的时间域mv作为当前mv的运动向量预测值来将tmvp编码应用到当前mv,其中,已修改的时间域mv是通过右移时间域mv来产生。于另一情形中,于当前mv分辨率对应于非整数像素分辨率且参考mv分辨率对应于整数像素分辨率时,可使用已修改的时间域mv作为当前mv的运动向量预测值来将mvp编码应用到当前mv,其中,已修改的时间域mv是通过左移时间域mv来产生。于当前mv分辨率不同于参考mv分辨率时,也可对当前mv禁用tmvp编码,或编码器可以忽略(disregard)用于当前块的tmvp编码的参考图片。
在另一实施例中,于分别由于当前mv分辨率或参考mv分辨率将位移操作应用于当前mv或时间域mv时,已位移的当前mv或已位移的时间域mv被修剪(clip)于有效范围。可选地,对于不同的当前mv分辨率,当前mv可具有不同的范围,或对于不同的参考mv分辨率,时间域mv可具有不同的范围。
指示当前mv分辨率的第一语法元素以及指示参考mv分辨率的第二语法元素可由编码器确定,以使当前mv分辨率具有与参考mv分辨率相同的值。当前mv分辨率还可由条带标头中的mv分辨率旗标来指示,且对应条带中的所有块共享mv分辨率旗标,且对于序列中的所有条带,mv分辨率旗标具有相同的值。可选地,当前mv分辨率可由序列等级中的mv分辨率旗标来指示,且对应序列中的所有块共享此mv分辨率旗标。因此,用于当前mv以及时间域参考mv的mv分辨率将总是相同的。
本发明的另一方面解决了当自适应mv分辨率被使用时与边界强度导出相关的问题。在一个实施例中,根据mv分辨率来解块块边界。例如,当mv分辨率对应于整数分辨率时,当前mv以及相邻mv被左移2以变成已位移的当前mv以及已位移的相邻mv,且已位移的当前mv以及已位移的相邻mv被包括于用于所述解块的边界强度的确定中。于另一示例中,当mv分辨率对应于二分之一像素分辨率时,当前mv以及相邻mv被左移1。在另外的示例中,当mv分辨率对应于八分之一像素分辨率时,当前mv以及相邻mv被右移1。
在另一实施例中,当mv分辨率对应于整数分辨率时,当前mv以及相邻mv之间垂直分量的第一绝对差(absolutiondifference)以及当前mv之间的水平分量的第二绝对差是与阈值1而不是4相比较,以确定用于所述解块的边界强度。于另一示例中,当mv分辨率对应于二分之一像素分辨率时,垂直分量的第一绝对差以及水平分量的第二绝对差是与阈值2而不是4相比较。于又一示例中,当mv分辨率对应于八分之一像素分辨率时,垂直分量的第一绝对差以及水平分量的第二绝对差是与阈值8而不是4相比较。
本发明的另一方面解决了当应用颜色空间转化时与量化参数调整相关的问题,以适应信号范围的减小。在一个实施例中,如果已调整量化参数(quantizationparameters,qps)小于零,则通过将qps修改为已调整qps来从qps产生有效的已调整qps以考虑颜色空间转化,且将已调整qps设置为等于或大于零。例如,多个视频分量对应于ycrcb颜色分量,根据如果颜色空间转化旗标指示颜色空间转化被应用于当前编码块,则qpx’=max(0,qpx-nx),且如果颜色空间转化旗标指示颜色空间转化不被应用到当前编码块,则qpx’=max(0,qpx),来产生用于一个颜色分量的有效的已调整量化参数qpx’。用于y分量以及cb分量的变量nx等于5,且用于cr分量的nx等于3,且max()为最大函数。有效的已调整qps还可使用修剪函数来产生。例如,当颜色空间转化被应用,(qpx-nx)被修剪于从minqpx到maxqpx的范围内,其中,minqpx以及maxqpx分别对应于用于一个颜色分量的有效的最小量化参数以及有效的最大量化参数。对于y分量、cb分量以及cr分量,minqpx可以为0,且maxqpx可以为51。在另一实施例中,如果颜色空间转化被应用于当前编码块,则根据函数qpx从qpx产生qpx’,其中,函数qpx总是大于或等于零。
【附图说明】
图1所示为在当前mv以及tmvp之间的不同mv分辨率的条件下,用于当前mv的tmvp的示例。
图2所示为结合循环颜色空间转化的解码系统的框图。
图3所示为于当前条带的use_integer_mv_flag等于1时,缩放(scaling)tmvp的示例。
图4所示为于当前条带的use_integer_mv_flag等于1时,于储存mv之前缩放mv的示例。
图5所示为在解块过程中,于mv被用于mv比较之前,mv使用整数像素分辨率以及mv左移2的示例。
图6所示为结合本发明实施例的用于视频数据的运动向量预测(motionvectorprediction,mvp)的示范性流程图。
【具体实施方式】
下文的描述是实施本发明的最佳预期模式。这种描述是为了说明本发明的一般原理,而不应被理解成对本发明的限制。本发明的范围可通过参考所附权利要求做最好的确定。
如前所述,当自适应mv分辨率被使用,且如果当前mv以及对应tmvp具有不同的mv分辨率时,会导致两个mv之间的不匹配。因此,tmvp操作可能无法正常执行。为了在应用自适应mv分辨率时规范(regularize)mv,提出了几种方法。
在一个实施例中,于当前条带的mv具有整数像素分辨率(即,use_integer_mv_flag=1)时,在tmvp被用作当前块的mvp之前,右移tmvp。例如,当应用tmvp时,如果tmvp对应于(x,y),则于(x,y)被用作为mvp之前,执行操作(x+offx)>>2以及(y+offy)>>2。“n>>2”的操作对应于n右移“2”,其等效于“除以4”。如本领域所公知的,“位移2”的操作实现起来比“除以4”的操作更有效率。参数offx以及offy对应于位移中的偏移,且其可以是任何整数,例如:-3、-2、-1、0、1、2、3等。图3所示为于当前条带的use_integer_mv_flag等于1时,缩放tmvp的示例。于此场景中,当前图片310中的use_integer_mv_flag为1,对应图片320中的use_integer_mv_flag为0,且用于参考块322的对应的mv324被右移2且被用作tmvp以用于当前块312的当前mv314。
在另一实施例中,于当前条带的mv具有整数像素分辨率(即,use_integer_mv_flag=1)时,当前条带的已解码mv在其被储存之前被左移。当前条带的已解码mv被储存以用作后续图片的tmvp。例如,如果当前条带的块b中的mv被解码为(x,y),则(x<<2,y<<2)将被储存于mv缓冲器中以用于块b。且如果b为对应的块,(x<<2,y<<2)将被视为用于接下来的图片的tmvp。操作“n<<2”对应于n左移2。图4所示为于当前条带的use_integer_mv_flag等于1时,在储存mv之前缩放mv的示例。于此场景中,当前图片410的use_integer_mv_flag等于1,当前块412的当前mv414被左移2以产生已缩放mv424,且已缩放mv424被储存于存储器中。在一个实施例中,被储存于存储器中的已缩放mv可用作为后续图片的tmvp。在另一实施例中,被储存于存储器中的已缩放mv在被用作为包括当前条带的当前图片中的另一块的运动向量预测值(即,空间运动向量预测值)之前被右移。在又一实施例中,被储存于存储器中的已缩放mv可被用于确定边界强度,其中,边界强度是解块过程所需要的。
于本申请中,当整数运动向量分辨率被启用(即,use_integer_mv_flag等于1)时,块向量以及运动向量都解码于整数分辨率。且块向量以及运动向量都以分数像素分辨率(例如,四分之一像素分辨率)来储存。这通过将已解码的块向量或运动向量左移n来完成,其中,n为正整数(例如,n=2)。例如,已解码的运动向量或块向量将以四分之一像素分辨率左移2,经过修剪过程(所得到的值在特定值范围内,例如,-215以及215-1之间)并以四分之一像素分辨率来储存。然而,块向量预测值以及运动向量预测值是被用于整数分辨率。这通过将向量预测值右移n(正整数,例如2)来完成。另一方面,当整数运动向量分辨率被禁用(即,use_integer_mv_flag等于0)时,块向量以及运动向量都被解码于分数像素分辨率。且块向量以及运动向量被储存于分数像素分辨率(例如,四分之一像素分辨率)而不做任何位移操作。且块向量预测值以及运动向量预测值被使用于分数像素分辨率(例如,四分之一像素分辨率)。例如,已解码的运动向量或块向量将经过修剪过程(所得到的值在特定值范围内,例如,-215以及215-1之间)并以四分之一像素分辨率来储存。因为修剪是在mv(或bv)的导出中被完成,因此在运动补偿(内插)之前不需要额外的修剪操作。另外,当使用储存的向量来预测整数mv时,在预测发生之前,预测值需要被右移(例如,右移2)为整数像素分辨率。在一个实施例中,当predflaglx等于1,且来自条带的参考图片列表lx的具有索引refidx的图片不是当前图片时,亮度运动向量mvlx被推导如下:
ulx[0]=((((mvplx[0]>>(2*use_integer_mv_flag))+mvdlx[0])<<
(2*use_integer_mv_flag))+216)%216
mvlx[0]=(ulx[0]>=215)?(ulx[0]-216):ulx[0]
ulx[1]=((((mvplx[1]>>(2*use_integer_mv_flag))+mvdlx[1])<<
(2*use_integer_mv_flag))+216)%216
mvlx[1]=(ulx[1]>=215)?(ulx[1]-216):ulx[1]。
于以上式子中,mvplx[0]以及mvplx[1]对应于与运动向量预测值相关联的运动向量分量,且mvdlx[0]以及mvdlx[1]对应于列表lx中的当前运动向量以及运动向量预测值之间的运动向量差,其中,x等于0或1。
当已储存的块向量或运动向量被用作为块向量或运动向量预测的向量预测值时。如果包含待预测向量的条带使用整数运动向量(条带等级旗标“use_integer_mv_flag”为真或等于1),则在预测发生之前,向量预测值被右移n(n为整数,例如2)以使其位于整数分辨率。如果包含待预测向量的条带使用分数像素运动向量(条带等级旗标“use_integer_mv_flag”为假),则向量预测值被直接使用而不需要任何位移操作。
所储存的块向量以及运动向量被用作为内插滤波器以及解块滤波器的输入。
于可选解决方案中,use_integer_mv_flag被储存以便由接下来的图片读取,并被用于确定是否缩放已解码mv。
在又一实施例中,根据当前条带的use_integer_mv_flag以及对应图片的use_integer_mv_flag导出不同的tmvp。
例如,于当前条带的mv具有整数像素分辨率,且对应图片的mv具有四分之一像素分辨率时,tmvp可于其被用作为当前块的mvp之前被右移。当tmvp被应用时,如果tmvp对应于(x,y),则((x+offx)>>2,(y+offy)>>2)被用作为mvp。再次,offx以及offy是偏移的偏移量,且其可以是任何值,例如-3、-2、-1、0、1、2、3等。
于另一示例中,于当前条带的mv具有四分之一像素分辨率,且对应图片的mv具有整数像素分辨率时,tmvp可于其被用作为当前块的mvp之前被左移。当tmvp被应用时,如果tmvp对应于(x,y),则(x<<2,y<<2)将被用作为mvp。
在一个实施例中,当前条带的mv以及对应图片的mv被强制具有相同的分辨率。换句话说,当前条带的use_integer_mv_flag以及对应的use_integer_mv_flag必需是相同的。
在另一实施例中,如果当前条带的mv以及对应图片的mv具有不同的分辨率,则tmvp被禁用。换句话说,如果当前条带的use_integer_mv_flag以及对应图片的use_integer_mv_flag是不同的,则对于当前mv,tmvp被禁用。
在又一实施例中,如果当前条带的use_integer_mv_flag以及参考图片的use_integer_mv_flag是不同的,则参考图片将不会被用作为用于当前条带的对应图片。
在又一实施例中,序列中的所有条带被强制具有相同的mv像素分辨率。换句话说,序列中所有条带的use_integer_mv_flag是相同的。
在又一实施例中,use_integer_mv_flag被传送于序列等级(例如,sps)而不是条带等级。如果序列等级的use_integer_mv_flag的值为1,则序列中所有条带的mv分辨率均为整数像素。否则,序列中所有条带的mv分辨率均为四分之一像素。
在一个实施例中,基于mv像素分辨率对缩放后的mv进行修改。例如,列表l0以及l1的运动向量值mvl0以及mvl1在左移2后分别被修剪至[-215,215-1]。换句话说,mvl0=max(-215,min(mvl0<<2、215-1)),且mvl1=max(-215,min(mvl1<<2、215-1))。特别地,如式子(1)所示,此修剪将根据jctvc-s1005对缩放的mv进行。
在另一实施例中,根据当前条带的use_integer_mv_flag是否为0或1,已解码mv可被限制于不同的范围。use_integer_mv_flag=1的范围比use_integer_mv_flag=0的范围更窄(tigher)。例如,范围可被指定为:
如果use_integer_mv_flagis==0,-215<=mvl0,mvl1<=215-1,以及
如果use_integer_mv_flagis==1,-213<=mvl0,mvl1<=213-1。
于以上实施例中,于当前图片被用作为参考图片中的一个时,块向量以及运动向量的分辨率是统一的。即,条带中块向量的分辨率与条带中常规运动向量的分辨率相同。
如上所述,还有一个与mv分辨率相关的解块的问题。为了协调自适应mv分辨率以及解块,以下揭露了多种方法。
在一个实施例中,当不同的mv分辨率被使用时,执行不同的解块。例如,根据use_integer_mv_flag执行不同的解块。如图5所示,如果mv使用整数像素分辨率(即,use_integer_mv_flag=1),则于mv被用于解块过程的mv比较之前,mv被左移2(即,mvx=mvx<<2以及mvy=mvy<<2)。于图5中,于步骤510中,检查use_integer_mv_flag的值以确定整数mv分辨率是否被使用。如果“use_integer_mv_flag=1”为真(即,步骤510的路径为“是”),则于mv被用于解块过程中的mv比较之前(步骤530),执行步骤520,缩放mv。如果“use_integer_mv_flag=1”为假(即,步骤510的路径为“否”),则执行步骤530,mv被直接用于解块过程中的mv比较而不进行缩放。
在另一实施例中,当mv使用整数像素分辨率(即,use_integer_mv_flag=1)时,运动向量的水平或垂直分量之间的绝对差是与阈值1而不是阈值4相比较。
根据一个实施例,如果mv使用二分之一像素分辨率,则于mv被用于解块过程中的mv比较之前,mv被左移1(即,mvx=mvx<<1以及mvy=mvy<<1)。
如果mv使用第八像素分辨率,则于mv被用于解块过程中的mv比较之前,mv被右移1(即,mvx=mvx>>1以及mvy=mvy>>1,或mvx=(mvx+1)>>1以及mvy=(mvy+1)>>1)。
如果mv使用二分之一像素分辨率,则运动向量的水平或垂直分量之间的绝对差是与阈值2而不是阈值4相比较。
如果mv使用第八像素分辨率,则运动向量的水平或垂直分量之间的绝对差是与阈值8而不是阈值4相比较。
在又一实施例中,当使用整数像素分辨率(即,use_integer_mv_flag=1)时,不进行解块。
于以上实施例中,时间域运动向量预测已经被用作为根据当前mv分辨率、参考mv分辨率、或当前mv分辨率以及参考mv分辨率,来将mvp编码应用于当前mv或储存当前mv的示例。本发明也可应用于其它类型的mvp,例如,空间mvp或视图间mvp。
如上所述,当应用颜色空间转化时,颜色空间转化也可能导致解码器系统的问题。根据现有解码器的实现,通过从原始量化参数(quantizationparameters,qp)中减去5或3来调整所接收qp。因此,已调整的qp可能变为负值。当应用自适应颜色空间转化时,为了保证qp总是在有效的范围内,几种用于qp调整的方法被揭露。
在一个实施例中,根据以下运算中的一个,调整后的qp总是不小于0:
qp=max(0,qp′y+(cu_residual_act_flag[xtby][ytby]?-5:0))(8)
qp=max(0,qp′cb+(cu_residual_act_flag[xtby][ytby]?-5:0))(9)
qp=max(0,qp′cr+(cu_residual_act_flag[xtby][ytby]?-3:0))。(10)
max()对应于上述式子中的最大函数。在另一实施例中,于qp被调整以适应由于颜色空间转化引起的信号范围减小之后,调整后的qp被修剪至有效的范围。例如,以上式子可被重写如下:
qp=clip3(minqpy,maxqpy,
qp′y+(cu_residual_act_flag[xtby][ytby]?-5:0))(11)
qp=clip3(minqpcb,maxqpcb,
qp′cb+(cu_residual_act_flag[xtby][ytby]?-5:0))(12)
qp=clip3(minqpcr,maxqpcr,
qp′cr+(cu_residual_act_flag[xtby][ytby]?-3:0))。(13)
于以上式子中,clip(a,b,x)是修剪函数,其将变量x修剪于a到b的范围内。minqpy、minqpcb以及minqpcr分别对应于用于y、cr以及cr的最小修剪值。maxqpy、maxqpcb以及maxqpcr分别对应于用于y、cr以及cr的最大修剪值。例如,minqpy可被设置为0,且maxqpy可被设置为51;minqpcb可被设置为0,且maxqpcb可被设置为51;且minqpcr可被设置为0.且maxqpcr可被设置为51。
于另一示例中,minqpcb和/或maxqpcb可分别根据minqpy和/或maxqpy被设置。类似地,minqpcr和/或maxqpcr可分别根据minqpy和/或maxqpy被设置。
在又一实施例中,如果使用自适应颜色空间转化,则根据函数在有效范围内计算qp。例如,式子(4)、(5)以及(6)可被重写为:
qp=(cu_residual_act_flag[xtby][ytby]?fy(qp′y):qp′y),(14)
qp=(cu_residual_act_flag[xtby][ytby]?fcb(qp′cb):qp′cb),(15)
qp=(cu_residual_act_flag[xtby][ytby]?fcr(qp′cr):qp′cr)。(16)
fy()、fcb()以及fcr()的返回值大于或等于0。例如,函数fy(qp′y)可对应于(qp′y-5+offsety1+offsety2)%offsety1。函数fcb(qp′cb)可对应于(qp′cb-5+offsetcb1+offsetcb2)%offsetcb1。类似地,函数fcr(qp′cr)可对应于(qp′cr-3+offsetcr1+offsetcr2)%offsetcr1。例如,偏移y1、偏移cb1以及偏移cr1都可被设置为51。
在又一实施例中,可在编码器侧应用限制,以使已调整qp不会低于0。如果式子(1)、(2)以及(3)产生的一个或多个qp<0,则比特流被认为是非法的。在另一实施例中,如果式子(1)、(2)以及(3)产生的一个或多个qp<0,则需要关闭自适应颜色空间转化。
图6所示为结合本发明实施例的用于视频数据的mvp的示范性流程图。于步骤610,系统接收与当前条带中当前块的当前mv相关联的输入数据。输入数据可以从存储器(例如缓冲器(ram或dram)的计算机存储器)中获得。输入数据还可从处理器(例如处理单元或数字信号)中接收。于编码器侧,输入数据可对应于将被预测的当前mv。于解码器侧,输入数据可对应于将被解码的已编码mv数据。于步骤620中,确定用于当前mv的当前mv分辨率、用于与参考图片中参考块相关联的参考mv的参考mv分辨率、或当前mv分辨率以及参考mv分辨率。接着,于步骤630中,根据当前mv分辨率、参考mv分辨率、或当前mv分辨率以及参考mv分辨率来将mvp编码应用到当前mv或储存当前mv。
以上描述可使本领域的普通技术人员如特定应用及其要求的上下文提供的来实践本发明。对本领域技术人员来说,对所描述的实施例的各种修改是显而易见的,且本文定义的一般原理可被应用于其它实施例。因此,本发明并非意在限定于以上所示及所描述的特定实施例,而是要符合与此公开揭露的原理和新颖特征相一致的最宽范围。在以上详细描述中,各种具体细节被示出以便提供本发明的彻底理解。然而,本领域技术人员应知晓本发明是可被实践的。
如上所述,本发明的实施例可以由各种硬件,软件代码,或两者的组合来实现。例如,本发明的实施例可以是被集成到视频压缩芯片的电路,或被集成于视频压缩软件的程序代码以执行本文所描述的处理过程。本发明的实施例还可以是执行于数字信号处理器上的程序代码,以执行本文所描述的处理过程。本发明还可包含由计算机处理器,数字信号处理器,微处理器,或现场可编程门阵列执行的多个功能。根据本发明,通过执行定义本发明所体现的特定方法的机器可读软件代码或固件代码,这些处理器可被配置为执行特定任务。软件代码或固件代码可被开发为不同的编程语言以及不同的格式或风格。软件代码还可被编译以用于不同的目标平台。然而,根据本发明的不同的软件代码的代码格式、风格及语言,以及用于配置代码以执行任务的其他方式,均不会背离本发明的精神以及范围。
在不脱离其精神或本质特征的情况下,本发明可以其它特定形式来体现。所描述的示例在所考虑的所有的方面都只是说明性的而不是限制性的。因此,本发明的范围是由其所附的权利要求来指示的,而不是由上文的描述来指示的。在权利要求的等效范围及含义内的所有改变均包含于本发明范围之内。