一种编解码方法、装置及其设备与流程

文档序号:25992788发布日期:2021-07-23 21:05阅读:54来源:国知局
一种编解码方法、装置及其设备与流程

本申请涉及编解码技术领域,尤其是涉及一种编解码方法、装置及其设备。



背景技术:

为了达到节约空间的目的,视频图像都是经过编码后才传输的,完整的视频编码方法可以包括预测、变换、量化、熵编码、滤波等过程。其中,预测编码可以包括帧内编码和帧间编码。进一步的,帧间编码是利用视频时间域的相关性,使用邻近已编码图像的像素预测当前像素,以达到有效去除视频时域冗余的目的。帧内编码是指利用视频空间域的相关性,使用当前帧图像的已经编码块的像素预测当前像素,以达到去除视频空域冗余的目的。

在帧间编码中,可以使用运动矢量表示当前帧图像的当前块与参考帧图像的参考块之间的相对位移。例如,当前帧图像a与参考帧图像b存在很强的时域相关性,在需要传输图像a的当前块a1时,可以在图像b中进行运动搜索,找到与当前块a1最匹配的参考块b1,并确定当前块a1与参考块b1之间的相对位移,该相对位移也就是当前块a1的运动矢量。

现有技术中,当前块为矩形,而实际物体的边缘往往不是矩形,对于物体边缘的某个当前块来说,往往存在两个不同对象(如存在前景的物体和背景)。这种情况下,仅采用单一的预测模式为矩形的当前块进行预测,存在预测效果不佳,编码残差大,编码性能差等问题。



技术实现要素:

本申请提供了一种编解码方法及其设备,可以提高编码性能。

本申请提供一种编解码方法,所述方法包括:

若当前块的特征信息满足特定条件,将所述当前块划分为第一三角子块和第二三角子块;

为所述当前块构建运动信息列表,所述运动信息列表包括多个候选运动信息;

从所述运动信息列表中获取所述第一三角子块的第一目标运动信息以及所述第二三角子块的第二目标运动信息;所述第一目标运动信息与所述第二目标运动信息不同;根据所述第一目标运动信息对所述第一三角子块进行运动补偿,得到所述第一三角子块的预测值;根据所述第二目标运动信息对所述第二三角子块进行运动补偿,得到所述第二三角子块的预测值。

本申请提供一种编解码装置,所述装置包括:划分模块,用于若当前块的特征信息满足特定条件,则将所述当前块划分为第一三角子块和第二三角子块;构建模块,用于为所述当前块构建运动信息列表,所述运动信息列表包括多个候选运动信息;获取模块,用于从所述运动信息列表中获取所述第一三角子块的第一目标运动信息以及所述第二三角子块的第二目标运动信息;所述第一目标运动信息与所述第二目标运动信息不同;编解码模块,用于根据所述第一目标运动信息对所述第一三角子块进行运动补偿,得到第一三角子块的预测值;根据所述第二目标运动信息对所述第二三角子块进行运动补偿,得到第二三角子块的预测值。

本申请提供一种编码端设备,包括:处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令;所述处理器用于执行机器可执行指令,以实现如下步骤:若当前块的特征信息满足特定条件,将所述当前块划分为第一三角子块和第二三角子块;为所述当前块构建运动信息列表,所述运动信息列表包括多个候选运动信息;从所述运动信息列表中获取所述第一三角子块的第一目标运动信息以及所述第二三角子块的第二目标运动信息;所述第一目标运动信息与所述第二目标运动信息不同;根据所述第一目标运动信息对所述第一三角子块进行运动补偿,得到所述第一三角子块的预测值;根据所述第二目标运动信息对所述第二三角子块进行运动补偿,得到所述第二三角子块的预测值。

本申请提供一种解码端设备,包括:处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令;所述处理器用于执行机器可执行指令,以实现如下步骤:若当前块的特征信息满足特定条件,将所述当前块划分为第一三角子块和第二三角子块;为所述当前块构建运动信息列表,所述运动信息列表包括多个候选运动信息;从所述运动信息列表中获取所述第一三角子块的第一目标运动信息以及所述第二三角子块的第二目标运动信息;所述第一目标运动信息与所述第二目标运动信息不同;根据所述第一目标运动信息对所述第一三角子块进行运动补偿,得到所述第一三角子块的预测值;根据所述第二目标运动信息对所述第二三角子块进行运动补偿,得到所述第二三角子块的预测值。

由以上方案可见,本申请实施例中,若当前块的特征信息满足特定条件,可以将当前块划分为第一三角子块和第二三角子块,获取第一三角子块的第一目标运动信息和第二三角子块的第二目标运动信息,根据第一目标运动信息对第一三角子块进行运动补偿,得到第一三角子块的预测值,根据第二目标运动信息对第二三角子块进行运动补偿,得到第二三角子块的预测值。上述方式可以提高预测准确性,提高预测性能,提高编码性能,降低编码残差。

附图说明

为了更加清楚地说明本申请实施例中的技术方案,下面将对本申请实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据本申请实施例的这些附图获得其他的附图。

图1是本申请一种实施方式中的视频编码框架的示意图;

图2是本申请一种实施方式中的编解码方法的流程图;

图3是本申请一种实施方式中的编码方法的流程图;

图4是本申请一种实施方式中的解码方法的流程图;

图5a-图5b是本申请一种实施方式中的候选块的示意图;

图6a-图6b是本申请一种实施方式中的当前块的划分示意图;

图7a是本申请一种实施方式中的索引值与单向运动信息的对应示意图;

图7b-图7c是本申请一种实施方式中的三角子块划分示意图;

图7d是本申请一种实施方式中的运动补偿的示意图;

图7e-图7f是本申请一种实施方式中的运动信息存储的示意图;

图8是本申请一种实施方式中的编解码装置的结构图;

图9a是本申请一种实施方式中的解码端设备的硬件结构图;

图9b是本申请一种实施方式中的编码端设备的硬件结构图。

具体实施方式

在本申请实施例使用的术语仅仅是出于描述特定实施例的目的,而非限制本申请的各个实施例。本申请和权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其它含义。还应当理解,本文中使用的术语“和/或”是指包含一个或多个相关联的列出项目的任何或所有可能组合。应当理解,尽管在本申请实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,此外,所使用的词语“如果”可以被解释成为“在……时”、或者“当……时”、或者“响应于确定”。

本申请实施例中提出一种编解码方法、装置及其设备,可以涉及如下概念:

帧内预测与帧间预测(intrapredictionandinterprediction)技术:帧内预测是指,利用视频空间域的相关性,使用当前图像已经编码块的像素预测当前像素,以达到去除视频空域冗余的目的。帧间预测是指,利用视频时域的相关性,由于视频序列包含有较强的时域相关性,使用邻近已编码图像像素预测当前图像的像素,达到有效去除视频时域冗余的目的。主要视频编码标准帧间预测部分都采用了基于块的运动补偿技术,主要原理是为当前图像的每一像素块在之前的已编码图像中寻找最佳匹配块,该过程称为运动估计(motionestimation,me)。

运动矢量(motionvector,mv):在帧间编码中,可以使用运动矢量表示当前编码块与其参考图像中的最佳匹配块之间的相对位移。每个划分的块都有相应的运动矢量需要传输到解码端,如果对每个块的运动矢量进行独立编码和传输,特别是划分成小尺寸的块时,则需要消耗相当多的比特。为了降低用于编码运动矢量的比特数,则可以利用相邻图像块之间的空间相关性,根据相邻已编码块的运动矢量对当前待编码块的运动矢量进行预测,然后,对预测差进行编码。这样,可以有效地降低表示运动矢量的比特数。在对当前块的运动矢量编码过程中,首先,使用相邻已编码块的运动矢量预测当前块的运动矢量,然后,可以对运动矢量的预测值(mvp,motionvectorprediction)与运动矢量的真正估值之间的差值(mvd,motionvectordifference)进行编码,从而有效降低mv的编码比特数。

运动信息(motioninformation):由于运动矢量表示当前图像块与某个参考图像块的位置偏移,为了准确的获取指向图像块的信息,除了运动矢量,还需要参考帧图像的索引信息来表示使用哪个参考帧图像。在视频编码技术中,对于当前帧图像,通常可以建立一个参考帧图像列表,参考帧图像索引信息则表示当前图像块采用了参考帧图像列表中的第几个参考帧图像。此外,很多编码技术还支持多个参考图像列表,因此,还可以使用一个索引值来表示使用了哪一个参考图像列表,这个索引值可以称为参考方向。在视频编码技术中,可以将运动矢量、参考帧索引、参考方向等与运动相关的信息统称为运动信息。

率失真原则(rate-distortionoptimized):评价编码效率的有两大指标:码率和psnr(peaksignaltonoiseratio,峰值信噪比),比特流越小,则压缩率越大,psnr越大,则重建图像质量越好,在模式选择时,判别公式实质上也就是对二者的综合评价。例如,模式对应的代价:j(mode)=d+λ*r,其中,d表示distortion(失真),通常可以使用sse指标来进行衡量,sse是指重建图像块与源图像的差值的均方和;λ是拉格朗日乘子,r就是该模式下图像块编码所需的实际比特数,包括编码模式信息、运动信息、残差等所需的比特总和。

视频编码框架:参见图1所示,可以使用视频编码框架实现本申请实施例的编码端处理流程,此外,视频解码框架的示意图与图1类似,在此不再重复赘述,可以使用视频解码框架实现本申请实施例的解码端处理流程。具体的,在视频编码框架和视频解码框架中,可以包括帧内预测、运动估计/运动补偿、参考图像缓冲器、环内滤波、重建、变换、量化、反变换、反量化、熵编码器等模块。在编码端,通过这些模块之间的配合,可以实现编码端处理流程,在解码端,通过这些模块之间的配合,可以实现解码端处理流程。

标记位编码(flagcoding):在视频编码中,存在很多模式,如merge模式(融合模式)、三角预测模式等。对于某个块来说,可能采用某种模式。为了表示采用何种模式,每个块需要编码对应标记位来进行标记。也就是说,在编码端,可以确定标记位的值,然后对标记位进行编码传递到解码端。在解码端,通过解析标记位,确定对应模式是否启用。

融合模式(mergemode):融合模式可以包括但不限于普通融合模式(normalmerge模式)、用于三角预测的融合模式(tpm模式)、编码运动差的融合模式(mmvd模式)、采用子块运动信息的融合模式(sbmerge模式)、用于与帧内联合生成新预测值的融合模式(ciip模式)。若当前块采用融合模式,则可以采用上述5种融合模式中的一种。

跳过模式(skipmode):跳过模式是特殊的融合模式,与融合模式不同的是,跳过模式不需要编码残差。若当前块为跳过模式时,ciip模式默认关闭,而普通融合模式、用于三角预测的融合模式、编码运动差的融合模式、采用子块运动信息的融合模式仍然可以适用。

需要说明的是,可以基于normalmerge模式、tpm模式、mmvd模式、sbmerge模式、ciip模式等,确定如何生成预测值。在生成预测值后,对于merge模式,可以利用预测值和残差值来获取重建值;对于skip模式,不存在残差值,直接利用预测值来获取重建值。

帧类型(frametype):若当前帧不可参考其它帧的信息进行编码,则当前帧可以为i帧;若当前帧允许参考其它某1帧(但不能超过1帧)的信息进行编码,则当前帧可以为p帧;若当前帧允许参考其它某1帧或某2帧的信息进行编码,则当前帧可以为b帧。

序列参数集(sps,sequenceparameterset):在序列参数集中,存在确定整个序列中是否允许某些工具开关的标记位。若该标记位为1,则该视频序列中,允许启用该标记位对应的工具;若该标记位为0,则该视频序列中,不允许启用该标记位对应的工具。

基于上下文的自适应二进制算术编码(cabac,context-basedadaptivebinaryarithmeticcoding):cabac是常用的熵编码/解码方法,存在两个模式,需要保存和更新至少1个上下文模型的cabac模式、不需要存储和更新上下文模型的bypass(旁路)cabac模式。

目前,当前块为矩形,而实际物体的边缘往往不是横平竖直,对于物体边缘的某个当前块来说,往往存在两个不同对象(如同时存在前景的物体和背景)。这种情况下,仅采用单一的预测模式为当前块进行预测,存在预测效果不佳,编码残差大,编码性能差等问题。

针对上述发现,本申请实施例中提出一种三角预测模式,可以将当前块划分成两个三角子块,这两个三角子块具有不同的目标运动信息,从而提高硬件实现友好性,带来编码性能的提高。以下结合几个具体实施例,对本申请实施例中的编解码方法进行详细说明。

实施例1:参见图2所示,为本申请实施例中的编解码方法的流程示意图,该编解码方法可以应用于解码端或者编码端,该编解码方法可以包括以下步骤:

步骤201,若当前块的特征信息满足特定条件,则将当前块划分为第一三角子块和第二三角子块,也就是说,解码端/编码端可以将当前块划分为两个三角子块。

示例性的,特征信息可以包括但不限于以下一种或者多种:运动信息模式、尺寸信息、帧类型、序列级开关控制信息。当然,上述只是几个示例,对此不做限制。

若特征信息包括运动信息模式,且运动信息模式满足如下情况的一种或者同时满足至少两种时,则确定运动信息模式满足特定条件;当前块的运动信息模式为融合模式或者跳过模式;当前块的运动信息模式为融合模式或者跳过模式,且当前块的运动信息模式不为除三角预测子模式之外的其它类型的融合子模式或跳过子模式;当前块的运动信息模式为融合模式,且当前块的运动信息模式不为普通融合子模式(即normalmerge模式,也称为regularmerge模式)、mmvd子模式(编码运动差的融合模式)、sb融合子模式(采用子块运动信息的融合模式)、ciip(用于与帧内联合生成新预测值的融合模式)子模式中的任意一种子模式;当前块的运动信息模式为跳过模式,且当前块的运动信息模式不为普通融合子模式、mmvd子模式、sb融合子模式中的任意一种子模式。当然,上述只是几个示例,对此不做限制。

若特征信息包括帧类型,且帧类型满足如下情况的一种或者两种时,则确定帧类型满足特定条件;帧类型为当前块所在当前帧为b帧;帧类型为当前块所在当前帧允许帧内块拷贝。

若特征信息包括序列级开关控制信息,且该序列级开关控制信息为允许当前块采用三角预测模式,则可以确定所述序列级开关控制信息满足特定条件。

若特征信息包括尺寸信息,且该尺寸信息包括宽度值、高度值和面积值中的至少一个,当尺寸信息中的宽度值、高度值和面积值中的至少一个满足相应的阈值条件时,尺寸信息满足特定条件。示例性的,当该尺寸信息满足如下情况的一种或同时满足至少两种时,则确定尺寸信息满足特定条件;1、当前块的宽度值大于或等于第一阈值,当前块的宽度值小于或等于第二阈值;2、当前块的高度值大于或等于第三阈值,当前块的高度值小于或等于第四阈值;3、当前块的面积值大于或等于第五阈值,当前块的面积值小于或等于第六阈值;4、当前块的面积值大于或者等于第七阈值;5、当前块的面积值小于或者等于第八阈值;6、当前块的宽度值小于或等于第九阈值,当前块的高度值小于或等于第十阈值。当然,上述只是几个示例,对此不做限制。示例性的,上述各阈值条件均可以根据经验配置,对此不做限制。

示例性的,特征信息包括运动信息模式、尺寸信息、帧类型、序列级开关控制信息中的一种或者几种。当特征信息包括运动信息模式、且运动信息模式满足特定条件时,可以表明特征信息满足特定条件;当特征信息包括帧类型、且帧类型满足特定条件时,可以表明特征信息满足特定条件,以此类推。当特征信息包括运动信息模式、尺寸信息、帧类型、序列级开关控制信息中的至少两种时,以运动信息模式和帧类型为例,则运动信息模式满足特定条件、且帧类型满足特定条件时,可以表明特征信息满足特定条件,以此类推。

示例性的,每一种类型的特征信息(如运动信息模式、尺寸信息、帧类型、序列级开关控制信息等)的至少一个特定条件,可以与另一种类型的特征信息的至少一个特定条件进行任意组合,从而构成当前块的特定条件,对此组合方式不做限制,可以任意设定。

示例性的,若编解码方法应用于解码端,解码端将当前块划分为第一三角子块和第二三角子块,可以包括但不限于:从编码比特流获取第一指示信息,第一指示信息用于指示三角子块的划分信息;若三角子块的划分信息为主对角线划分方式,则按照当前块的主对角线将当前块划分为第一三角子块和第二三角子块;若三角子块的划分信息为副对角线划分方式,则按照当前块的副对角线将当前块划分为第一三角子块和第二三角子块。

示例性的,第一指示信息,可以是基于旁路的二进制算术解码得到;或者,第一指示信息,可以是基于上下文模型进行基于上下文的自适应二进制算术解码得到。

示例性的,cabac存在两个模式,需要保存和更新至少1个上下文模型的cabac模式(即上下文的自适应二进制算术编码)和不需要存储和更新上下文模型的旁路cabac模式(即旁路的二进制算术编码)。因此,基于旁路的二进制算术是一种类型的cabac模式,而基于上下文模型进行基于上下文的自适应二进制算术是另一种类型的cabac模式。

步骤202,为当前块构建运动信息列表,所述运动信息列表包括多个候选运动信息。

示例性的,可以复用常规融合模式的运动信息列表构建方式,为当前块构建运动信息列表。例如,先确定常规融合模式的运动信息列表构建方式,然后,基于常规融合模式的运动信息列表构建方式,为当前块构建运动信息列表,运动信息列表包括多个候选运动信息。

步骤203,从运动信息列表中获取第一三角子块的第一目标运动信息以及第二三角子块的第二目标运动信息;示例性的,第一目标运动信息与第二目标运动信息可以不同。

若编解码方法应用于解码端,解码端从运动信息列表中获取第一三角子块的第一目标运动信息以及第二三角子块的第二目标运动信息,可以包括但不限于:解码端从编码比特流获取第二指示信息,第二指示信息用于指示第一目标运动信息在运动信息列表中的第一索引值、第二目标运动信息在运动信息列表中的第二索引值。基于第二指示信息,解码端从运动信息列表中获取与第一索引值对应的候选运动信息,并将获取的候选运动信息确定为第一三角子块的第一目标运动信息;基于第二指示信息,解码端从运动信息列表中获取与第二索引值对应的候选运动信息,并将获取的候选运动信息确定为第二三角子块的第二目标运动信息。

示例性的,第一索引值基于旁路的二进制算术解码得到,或者,第一索引值基于上下文模型进行基于上下文的自适应二进制算术解码得到。第二索引值基于旁路的二进制算术解码得到,或者,第二索引值基于上下文模型进行基于上下文的自适应二进制算术解码得到。

示例性的,第一索引值包括m1个二进制位,m1个二进制位中的n1个二进制位,基于上下文模型进行基于上下文的自适应二进制算术解码得到,m1个二进制位中的剩余(m1-n1)个二进制位,基于旁路的二进制算术解码得到;m1为大于或者等于1的正整数,n1为大于或者等于1的正整数,m1大于或者等于n1。例如,第一索引值包括4个二进制位,第1个二进制位,基于上下文模型进行基于上下文的自适应二进制算术解码得到,第2、3、4个二进制位,基于旁路的二进制算术解码得到。又例如,第一索引值包括2个二进制位,第1个二进制位,基于上下文模型进行基于上下文的自适应二进制算术解码得到。

示例性的,第二索引值包括m2个二进制位,m2个二进制位中的n2个二进制位,基于上下文模型进行基于上下文的自适应二进制算术解码得到,m2个二进制位中的剩余(m2-n2)个二进制位,基于旁路的二进制算术解码得到;m2为大于或者等于1的正整数,n2为大于或者等于1的正整数,m2大于或者等于n2。例如,第二索引值包括4个二进制位,第1个二进制位,基于上下文模型进行基于上下文的自适应二进制算术解码得到,第2、3、4个二进制位,基于旁路的二进制算术解码得到。又例如,第二索引值包括1个二进制位,第1个二进制位,基于上下文模型进行基于上下文的自适应二进制算术解码得到。

示例性的,第一索引值对应的上下文模型与第二索引值对应的上下文模型相同。或者,第一索引值对应的上下文模型与第二索引值对应的上下文模型不同。或者,第一索引值和第一划分信息对应的上下文模型、以及第二索引值和第一划分信息对应的上下文模型相同;第一索引值和第二划分信息对应的上下文模型、以及第二索引值和第二划分信息对应的上下文模型相同;第一索引值和第一划分信息对应的上下文模型、以及第一索引值和第二划分信息对应的上下文模型不同。或者,第一索引值和第一划分信息对应的上下文模型、第二索引值和第一划分信息对应的上下文模型、第一索引值和第二划分信息对应的上下文模型、以及第二索引值和第二划分信息对应的上下文模型各不相同。第一划分信息表示三角子块的划分信息为主对角线划分方式;第二划分信息表示三角子块的划分信息为副对角线划分方式。

示例性的,从运动信息列表中获取与第一索引值对应的候选运动信息,并将获取的候选运动信息确定为第一三角子块的第一目标运动信息,可以包括但不限于:若第一索引值为偶数,与第一索引值对应的候选运动信息包括list0中的单向运动信息,则将list0中的单向运动信息确定为第一三角子块的第一目标运动信息。若第一索引值为偶数,与第一索引值对应的候选运动信息不包括list0中的单向运动信息,则将list1中的单向运动信息确定为第一三角子块的第一目标运动信息。若第一索引值为奇数,与第一索引值对应的候选运动信息包括list1中的单向运动信息,则将list1中的单向运动信息确定为第一三角子块的第一目标运动信息。若第一索引值为奇数,与第一索引值对应的候选运动信息不包括list1中的单向运动信息,则将list0中的单向运动信息确定为第一三角子块的第一目标运动信息。

示例性的,从运动信息列表中获取与第二索引值对应的候选运动信息,并将获取的候选运动信息确定为第二三角子块的第二目标运动信息,可以包括但不限于:若第二索引值为偶数,与第二索引值对应的候选运动信息包括list0中的单向运动信息,则将list0中的单向运动信息确定为第二三角子块的第二目标运动信息。若第二索引值为偶数,与第二索引值对应的候选运动信息不包括list0中的单向运动信息,则将list1中的单向运动信息确定为第二三角子块的第二目标运动信息。若第二索引值为奇数,与第二索引值对应的候选运动信息包括list1中的单向运动信息,则将list1中的单向运动信息确定为第二三角子块的第二目标运动信息。若第二索引值为奇数,与第二索引值对应的候选运动信息不包括list1中的单向运动信息,则将list0中的单向运动信息确定为第二三角子块的第二目标运动信息。

示例性的,从运动信息列表中获取与第一索引值对应的候选运动信息,并将获取的候选运动信息确定为第一三角子块的第一目标运动信息,可以包括但不限于:若第一索引值为奇数,与第一索引值对应的候选运动信息包括list0中的单向运动信息,则将list0中的单向运动信息确定为第一三角子块的第一目标运动信息。若第一索引值为奇数,与第一索引值对应的候选运动信息不包括list0中的单向运动信息,则将list1中的单向运动信息确定为第一三角子块的第一目标运动信息。若第一索引值为偶数,与第一索引值对应的候选运动信息包括list1中的单向运动信息,则将list1中的单向运动信息确定为第一三角子块的第一目标运动信息。若第一索引值为偶数,与第一索引值对应的候选运动信息不包括list1中的单向运动信息,则将list0中的单向运动信息确定为第一三角子块的第一目标运动信息。

示例性的,从运动信息列表中获取与第二索引值对应的候选运动信息,并将获取的候选运动信息确定为第二三角子块的第二目标运动信息,可以包括但不限于:若第二索引值为奇数,与第二索引值对应的候选运动信息包括list0中的单向运动信息,则将list0中的单向运动信息确定为第二三角子块的第二目标运动信息。若第二索引值为奇数,与第二索引值对应的候选运动信息不包括list0中的单向运动信息,则将list1中的单向运动信息确定为第二三角子块的第二目标运动信息。若第二索引值为偶数,与第二索引值对应的候选运动信息包括list1中的单向运动信息,则将list1中的单向运动信息确定为第二三角子块的第二目标运动信息。若第二索引值为偶数,与第二索引值对应的候选运动信息不包括list1中的单向运动信息,则将list0中的单向运动信息确定为第二三角子块的第二目标运动信息。

在上述实施例中,当前块所处当前帧的帧类型为b帧时,b帧允许同时存在指向多个list(参考帧列表)的帧间块,如指向list0的帧间预测块和指向list1的帧间预测块,因此,在当前块所处当前帧为b帧时,当前块所在当前帧的参考帧配置可以包括两个参考帧列表,这两个参考帧列表可以为list0和list1。候选运动信息可以为单向运动信息,且所述单向运动信息为list0中的单向运动信息或者list1中的单向运动信息;或者,候选运动信息可以为双向运动信息,且所述双向运动信息包括list0中的单向运动信息和list1中的单向运动信息。

示例性的,解码端还可以获取第一候选集合和第二候选集合,第一候选集合包括运动信息列表中的部分候选运动信息,第二候选集合包括运动信息列表中的部分候选运动信息,第一候选集合中的候选运动信息与第二候选集合中的候选运动信息不完全相同。然后,解码端从第一候选集合中获取与第一索引值对应的候选运动信息,并将获取的候选运动信息确定为第一三角子块的第一目标运动信息。解码端从第二候选集合中获取与第二索引值对应的候选运动信息,并将获取的候选运动信息确定为第二三角子块的第二目标运动信息。

步骤204,根据第一目标运动信息对第一三角子块进行运动补偿,得到第一三角子块的预测值;根据第二目标运动信息对第二三角子块进行运动补偿,得到第二三角子块的预测值。

示例性的,得到第一三角子块的第一目标运动信息、第二三角子块的第二目标运动信息后,针对第一三角子块中采用非加权预测补偿的子块,为子块存储第一目标运动信息;针对第二三角子块中采用非加权预测补偿的子块,为子块存储第二目标运动信息;针对采用加权预测补偿的子块,为子块存储第一目标运动信息、第二目标运动信息或者双向运动信息。

针对采用加权预测补偿的子块,为子块存储第一目标运动信息、第二目标运动信息或者双向运动信息,可以包括但不限于:为子块存储第一目标运动信息。或者,为子块存储第二目标运动信息。或者,根据子块的位置为子块存储第一目标运动信息或第二目标运动信息。或者,根据当前块的划分方向为子块存储第一目标运动信息或第二目标运动信息。或者,根据子块的位置和当前块的划分方向,为子块存储第一目标运动信息或第二目标运动信息。

针对采用加权预测补偿的子块,为子块存储第一目标运动信息、第二目标运动信息或者双向运动信息,可以包括但不限于:若第一目标运动信息和第二目标运动信息来自不同的list,则将所述第一目标运动信息和所述第二目标运动信息合并为双向运动信息,并为子块存储所述双向运动信息。或者,若第一目标运动信息和第二目标运动信息来自相同的list,则为子块存储第一目标运动信息,或者,为子块存储第二目标运动信息。

示例性的,若第一目标运动信息和第二目标运动信息来自相同的list,则为子块存储第一目标运动信息,或者,为子块存储第二目标运动信息,可以包括但不限于:为子块存储第一目标运动信息。或者,为子块存储第二目标运动信息。或者,根据子块的位置为子块存储第一目标运动信息或第二目标运动信息。或者,根据当前块的划分方向为子块存储第一目标运动信息或第二目标运动信息。或者,根据子块的位置和当前块的划分方向,为子块存储第一目标运动信息或第二目标运动信息。或者,为子块存储第一目标运动信息与第二目标运动信息均值。或者,根据当前块的尺寸信息,为子块存储第一目标运动信息或第二目标运动信息。

由以上方案可见,本申请实施例中,若当前块的特征信息满足特定条件,可以将当前块划分为第一三角子块和第二三角子块,获取第一三角子块的第一目标运动信息和第二三角子块的第二目标运动信息,根据第一目标运动信息对第一三角子块进行运动补偿,得到第一三角子块的预测值,根据第二目标运动信息对第二三角子块进行运动补偿,得到第二三角子块的预测值。上述方式可以提高预测准确性,提高预测性能,提高编码性能,降低编码残差。

实施例2:基于与上述方法同样的申请构思,本申请实施例中还提出一种编码方法,该方法可以应用于编码端,参见图3所示,为该方法的流程示意图,该方法可以包括:

步骤301,编码端判断当前块的特征信息是否满足特定条件。如果是,则启用三角预测模式,执行步骤302,如果否,则不启用三角预测模式,不再采用本实施例的技术方案。

步骤302,编码端为当前块构建运动信息列表,运动信息列表包括多个候选运动信息。

步骤303,编码端将当前块划分为第一三角子块和第二三角子块。例如,按照主对角线(与水平向右方向呈45度夹角)将当前块划分为第一三角子块和第二三角子块;或者,按照副对角线(与水平向右方向呈135度夹角)将当前块划分为第一三角子块和第二三角子块。

步骤304,编码端从运动信息列表中获取第一三角子块的第一目标运动信息以及第二三角子块的第二目标运动信息;第一目标运动信息与第二目标运动信息可以不同。

步骤305,编码端根据第一目标运动信息对第一三角子块进行运动补偿,得到第一三角子块的预测值;根据第二目标运动信息对第二三角子块进行运动补偿,得到第二三角子块的预测值。第一三角子块的预测值和第二三角子块的预测值,就是当前块的预测值。

步骤306,编码端保存当前块的运动信息,用于后续块的编码参考。

实施例3:基于与上述方法同样的申请构思,本申请实施例中还提出一种解码方法,该方法可以应用于解码端,参见图4所示,为该方法的流程示意图,该方法可以包括:

步骤401,解码端判断当前块的特征信息是否满足特定条件。如果是,则启用三角预测模式,执行步骤402,如果否,则不启用三角预测模式,不再采用本实施例的技术方案。

步骤402,解码端为当前块构建运动信息列表,运动信息列表包括多个候选运动信息。

步骤403,解码端将当前块划分为第一三角子块和第二三角子块。例如,按照主对角线(与水平向右方向呈45度夹角)将当前块划分为第一三角子块和第二三角子块;或者,按照副对角线(与水平向右方向呈135度夹角)将当前块划分为第一三角子块和第二三角子块。

步骤404,解码端从运动信息列表中获取第一三角子块的第一目标运动信息以及第二三角子块的第二目标运动信息;第一目标运动信息与第二目标运动信息可以不同。

步骤405,解码端根据第一目标运动信息对第一三角子块进行运动补偿,得到第一三角子块的预测值;根据第二目标运动信息对第二三角子块进行运动补偿,得到第二三角子块的预测值。第一三角子块的预测值和第二三角子块的预测值,就是当前块的预测值。

步骤406,解码端保存当前块的运动信息,用于后续块的编码参考。

实施例4:在步骤301和步骤401中,编码端/解码端需要判断当前块的特征信息是否满足特定条件,如果是,则可以启用三角预测模式,即将当前块划分为第一三角子块和第二三角子块;如果否,则可以不启用三角预测模式。示例性的,该特征信息可以包括但不限于以下一种或者多种:运动信息模式、尺寸信息、帧类型、序列级开关控制信息。

以下结合几个具体应用场景,对当前块的特征信息满足特定条件进行说明。

应用场景1:特征信息满足下面条件时,确定当前块的特征信息满足特定条件。

当前块的运动信息模式为融合模式或者跳过模式,且当前块的运动信息模式不为除三角预测子模式之外的其它类型的融合子模式或跳过子模式。

应用场景2:特征信息至少同时满足下面条件时,确定当前块的特征信息满足特定条件。

序列级开关控制信息为允许当前块采用三角预测模式,也就是说,序列级控制允许三角预测模式启用,即序列级控制开关为开,表示允许当前块采用三角预测模式。

当前块所在当前帧为b帧,即当前帧允许存在两个参考帧列表。

当前块的面积(宽度*高度)大于或者等于n*n,n的优选值可以为8。

当前块的运动信息模式为融合模式(merge模式)或者跳过模式(skip模式)。

应用场景3:特征信息至少同时满足下面条件时,确定当前块的特征信息满足特定条件。

序列级开关控制信息为允许当前块采用三角预测模式,也就是说,序列级控制允许三角预测模式启用,即序列级控制开关为开,表示允许当前块采用三角预测模式。

当前块所在当前帧为b帧,即当前帧允许存在两个参考帧列表。

当前块的面积(宽度*高度)大于或者等于n*n,n的优选值可以为8。

当前块的运动信息模式为融合模式,且当前块的运动信息模式不为普通融合子模式、mmvd子模式、sb融合子模式、ciip子模式中的任意一种子模式。

当前块的运动信息模式为跳过模式,且当前块的运动信息模式不为普通融合子模式、mmvd子模式、sb融合子模式中的任意一种子模式。

应用场景4:特征信息至少同时满足下面条件时,确定当前块的特征信息满足特定条件。

序列级开关控制信息为允许当前块采用三角预测模式,也就是说,序列级控制允许三角预测模式启用,即序列级控制开关为开,表示允许当前块采用三角预测模式。

当前块所在当前帧为b帧,即当前帧允许存在两个参考帧列表。

当前块的运动信息模式为融合模式(merge模式)或者跳过模式(skip模式)。

当前块的面积(宽度*高度)大于或者等于n*n,n的优选值可以为8。

当前块的宽度小于或者等于m,当前块的高度小于或者等于m,m优选为128。

应用场景5:特征信息至少同时满足下面条件时,确定当前块的特征信息满足特定条件。

序列级开关控制信息为允许当前块采用三角预测模式,也就是说,序列级控制允许三角预测模式启用,即序列级控制开关为开,表示允许当前块采用三角预测模式。

当前块所在当前帧为b帧,即当前帧允许存在两个参考帧列表。

当前块的运动信息模式为融合模式(merge模式)或者跳过模式(skip模式)。

当前块的面积(宽度*高度)大于或者等于n*n,n的优选值可以为8。

当前块的面积(宽度*高度)小于或者等于m*m,m的优选值可以为128。

应用场景6:特征信息至少同时满足下面条件时,确定当前块的特征信息满足特定条件。

序列级开关控制信息为允许当前块采用三角预测模式,也就是说,序列级控制允许三角预测模式启用,即序列级控制开关为开,表示允许当前块采用三角预测模式。

当前块所在当前帧为b帧,即当前帧允许存在两个参考帧列表。

当前块的运动信息模式为融合模式(merge模式)或者跳过模式(skip模式)。

当前块的宽度值在[wmin,wmax]的范围内,示例性的,wmin和wmax均可以为2的n1次方,n1为大于等于1的整数,例如,wmin优选为4,wmax优选为128,

当前块的高度值在[hmin,hmax]的范围内,示例性的,hmin、hmax均可以为2的n2次方,n2为大于等于1的整数,例如,hmin优选为4,hmax优选为128。

当前块的面积值在[smin,smax]的范围内,示例性的,smin、smax均为2的n3次方,n3为大于等于1的整数;例如,smin优选为64,smax优选为128*128=16384。

在上述实施例中,[a,b]表示大于等于a,且小于等于b。

应用场景7:针对应用场景2-应用场景6中的任意一个应用场景,可以将“当前块所在当前帧为b帧”修改成:当前块所在当前帧允许帧内块拷贝,其它限制条件不变。当前块所在当前帧允许帧内块拷贝是指:当前块可通过在当前帧的已解码重建块(而不是其它帧的已解码重建块)中搜索相似块的技术,在该条件下,当前块所在当前帧不需要为b帧。

应用场景8:若当前块的高度值和宽度值均为ctu_size,则不启用三角预测模式,即特征信息不满足特定条件。若当前块的高度值小于ctu_size,或者,当前块的宽度值小于ctu_size,则采用应用场景1-应用场景7的任意一种,确定是否启用三角预测模式。

示例性的,ctu_size指当前块允许的最大尺寸,可以为128,也可是其它数值。

应用场景9:若当前块的高度值或者宽度值为ctu_size,则不启用三角预测模式,即特征信息不满足特定条件。若当前块的高度值小于ctu_size,且当前块的宽度值小于ctu_size,则采用应用场景1-应用场景7的任意一种,确定是否启用三角预测模式。

示例性的,ctu_size指当前块允许的最大尺寸,可以为128,也可是其它数值。

实施例5:在步骤302和步骤402中,编码端/解码端需要为当前块构建运动信息列表,该运动信息列表可以包括多个候选运动信息,以下对运动信息列表的构建过程进行说明:

方式一、编码端/解码端可以构建运动信息列表,该运动信息列表可以包括多个候选运动信息,如5个候选运动信息,对此数量不做限制。例如,获取当前块对应的候选块,将候选块的运动信息添加到运动信息列表,运动信息列表中的每个运动信息可以称为候选运动信息。

当前块对应的候选块,可以参见图5a所示,可以将这7个位置的块作为当前块对应的候选块。在图5a中,块1、块2、块3、块4和块5为当前帧中的候选块,而块6和块7为其它帧中的候选块(即时域对应块)。首先,收集这7个位置的可用运动信息,按照单向运动信息、双向预测的l0运动信息、双向预测的l1运动信息、双向预测的l0运动信息与l1运动信息的均值的顺序进行排序。然后,将排序靠前的5个运动信息填充到运动信息列表中。当添加到运动信息列表中的运动信息数量小于5时,可以使用零运动矢量进行填充。在上述填充过程中,还可以进行查重处理,以避免运动信息列表中存在重复的运动信息。

方式二、编码端/解码端复用常规融合模式的运动信息列表构建方式,为当前块构建运动信息列表。例如,确定常规融合模式的运动信息列表构建方式,基于常规融合模式的运动信息列表构建方式,为当前块构建运动信息列表,该运动信息列表包括多个候选运动信息。即,三角预测模式的运动信息列表构建方式,与常规融合模式的运动信息列表构建方式相同。

例如,常规融合模式的运动信息列表构建方式为:参见图5b所示,当前块对应的候选块包括块a1、块a0、块b0、块b1、块b2,收集这5个位置的可用运动信息,按照块a1、块a0、块b0、块b1、块b2的顺序,对收集的可用运动信息进行排序,将排序靠前的多个运动信息(如5个运动信息)填充到运动信息列表。三角预测模式的运动信息列表构建方式为:收集这5个位置的可用运动信息,按照块a1、块a0、块b0、块b1、块b2的顺序,对收集的可用运动信息进行排序,将排序靠前的多个运动信息(如5个运动信息)填充到运动信息列表。当然,上述方式只是常规融合模式的运动信息列表构建的示例,对此不做限制。

实施例6:在步骤303和步骤403中,编码端/解码端需要将当前块划分为第一三角子块和第二三角子块。例如,参见图6a所示,可以按照主对角线(与水平向右方向呈45度夹角)将当前块划分为第一三角子块和第二三角子块;或者,参见图6b所示,可以按照副对角线(与水平向右方向呈135度夹角)将当前块划分为第一三角子块和第二三角子块。

为了将当前块划分为第一三角子块和第二三角子块,可以采用如下方式:

方式一、编码端通过协议约定默认使用主对角线方式进行当前块划分,解码端通过协议约定默认使用主对角线方式进行当前块划分。在此基础上,参见图6a所示,编码端可以按照主对角线方式(与水平向右方向呈45度夹角)将当前块划分为第一三角子块和第二三角子块,解码端可以按照主对角线方式将当前块划分为第一三角子块和第二三角子块。

方式二、编码端通过协议约定默认使用副对角线方式进行当前块划分,解码端通过协议约定默认使用副对角线方式进行当前块划分。在此基础上,参见图6b所示,编码端可以按照副对角线方式(与水平向右方向呈135度夹角)将当前块划分为第一三角子块和第二三角子块,解码端可以按照副对角线方式将当前块划分为第一三角子块和第二三角子块。

方式三、编码端确定主对角线划分方式对应的率失真代价1、副对角线划分方式对应的率失真代价2,对率失真代价1和率失真代价2的确定方式不做限制。若率失真代价1小于率失真代价2,参见图6a所示,编码端可以按照主对角线方式将当前块划分为第一三角子块和第二三角子块。或者,若率失真代价1大于率失真代价2,参见图6b所示,编码端可以按照副对角线方式将当前块划分为第一三角子块和第二三角子块。当然,编码端还可以采用其它策略,决策按照主对角线方式或者副对角线方式进行三角子块的划分,对此不做限制。

编码端在向解码端发送编码比特流时,该编码比特流可以包括第一指示信息,该第一指示信息用于指示三角子块的划分信息,如主对角线划分方式或者副对角线划分方式。

例如,若编码端按照主对角线方式将当前块划分为第一三角子块和第二三角子块,则三角子块的划分信息可以为主对角线划分方式。若编码端按照副对角线方式将当前块划分为第一三角子块和第二三角子块,则三角子块的划分信息可以为副对角线划分方式。

解码端在接收到编码比特流后,可以从编码比特流中获取第一指示信息,该第一指示信息用于指示三角子块的划分信息,如主对角线划分方式或者副对角线划分方式。若三角子块的划分信息为主对角线划分方式,参见图6a所示,解码端按照当前块的主对角线将当前块划分为第一三角子块和第二三角子块;若三角子块的划分信息为副对角线划分方式,参见图6b所示,解码端按照当前块的副对角线将当前块划分为第一三角子块和第二三角子块。

当然,上述三种实现方式只是示例,对此三角子块的划分方式不做限制。

实施例7:在上述实施例6中,编码端向解码端发送编码比特流时,该编码比特流可以包括第一指示信息,该第一指示信息用于指示三角子块的划分信息,例如,通过一个标记位表示三角子块的划分信息,例如,当标记位为第一标识0时,表示三角子块的划分信息为主对角线划分方式。当标记位为第二标识1时,表示三角子块的划分信息为副对角线划分方式。

示例性的,针对三角子块的划分信息,编码端可以采用cabac方式对第一指示信息进行编码。当然,cabac只是示例,对此编码方式不做限制。cabac存在两个模式,需要保存和更新至少1个上下文模型的cabac模式(后续称为上下文的自适应二进制算术编码)、不需要存储和更新上下文模型的旁路cabac模式(后续称为旁路的二进制算术编码)。基于此,可以基于旁路的二进制算术编码方式对第一指示信息(如三角子块的划分信息的标记位)进行编码,或,可以基于上下文的自适应二进制算术编码方式对第一指示信息进行编码,即,根据上下文模型,基于上下文的自适应二进制算术编码方式对第一指示信息进行编码。

当编码端采用cabac方式对第一指示信息进行编码时,解码端可以采用cabac方式对第一指示信息进行解码。例如,编码端基于旁路的二进制算术编码方式对第一指示信息进行编码时,解码端基于旁路的二进制算术解码方式对第一指示信息进行解码,得到三角子块的划分信息。或者,编码端基于上下文的自适应二进制算术编码方式对第一指示信息进行编码时,解码端基于上下文的自适应二进制算术解码方式对第一指示信息进行解码,得到三角子块的划分信息,即,根据上下文模型,基于上下文的自适应二进制算术解码方式对第一指示信息进行解码,得到三角子块的划分信息。

综上所述,对第一指示信息进行解码后,可以得到三角子块的划分信息,如表示三角子块的划分信息的标记位。当标记位为第一标识0时,表示三角子块的划分信息为主对角线划分方式。当标记位为第二标识1时,表示三角子块的划分信息为副对角线划分方式。

综上所述,解码端可以解码三角子块的划分信息的标记位,如采用cabac方法进行熵解码,cabac采用旁路模式,即不需要存储和更新上下文模型。或者,解码三角子块的划分信息的标记位,如采用cabac方法进行熵解码,cabac采用含有上下文模型的模式。

实施例8:在步骤304和步骤404中,编码端/解码端从运动信息列表中获取第一三角子块的第一目标运动信息和第二三角子块的第二目标运动信息,第一目标运动信息与第二目标运动信息可以不同,以下对第一目标运动信息和第二目标运动信息的获取过程进行说明:

方式一、编码端可以通过协议约定默认第一目标运动信息,例如,编码端可以默认运动信息列表中的第一个候选运动信息为第一三角子块的第一目标运动信息。解码端可以通过协议约定默认第一目标运动信息,例如,解码端可以默认运动信息列表中的第一个候选运动信息为第一三角子块的第一目标运动信息。以及,编码端可以通过协议约定默认第二目标运动信息,例如,编码端可以默认运动信息列表中的第二个候选运动信息为第二三角子块的第二目标运动信息。解码端可以通过协议约定默认第二目标运动信息,例如,解码端可以默认运动信息列表中的第二个候选运动信息为第二三角子块的第二目标运动信息。

方式二、编码端确定运动信息列表中的每个候选运动信息对应的率失真代价,对此确定方式不做限制,将最小率失真代价对应的候选运动信息作为第一三角子块的第一目标运动信息。编码端从运动信息列表中排除第一目标运动信息(即不选择运动信息列表中的第一目标运动信息),在此基础上,确定运动信息列表中剩余的每个候选运动信息(即排除第一目标运动信息后剩余的每个候选运动信息)对应的率失真代价,将最小率失真代价对应的候选运动信息作为第二三角子块的第二目标运动信息。当然,编码端还可以采用其它策略,确定第一三角子块的第一目标运动信息和第二三角子块的第二目标运动信息,对此不做限制。

编码端在向解码端发送编码比特流时,该编码比特流可以包括第二指示信息,该第二指示信息用于指示第一目标运动信息在运动信息列表中的第一索引值(用于表示第一目标运动信息是运动信息列表中的第几个候选运动信息)、第二目标运动信息在运动信息列表中的第二索引值(用于表示第二目标运动信息是运动信息列表中的第几个候选运动信息)。

解码端在接收到编码比特流后,可以从该编码比特流中获取第二指示信息,该第二指示信息用于指示第一目标运动信息在运动信息列表中的第一索引值(用于表示第一目标运动信息是运动信息列表中的第几个候选运动信息)、第二目标运动信息在运动信息列表中的第二索引值(用于表示第二目标运动信息是运动信息列表中的第几个候选运动信息)。基于该第二指示信息指示的第一索引值,解码端可以从运动信息列表中获取与该第一索引值对应的候选运动信息,并将获取的候选运动信息确定为第一三角子块的第一目标运动信息;基于该第二指示信息指示的第二索引值,解码端从运动信息列表中获取与该第二索引值对应的候选运动信息,并将获取的候选运动信息确定为第二三角子块的第二目标运动信息。

实施例9:在上述实施例8中,编码端/解码端还可以基于第一索引值的奇偶性来确定第一三角子块的第一目标运动信息是采用哪个单向运动信息,编码端/解码端还可以基于第二索引值的奇偶性来确定第二三角子块的第二目标运动信息是采用哪个单向运动信息。

解码端从编码比特流中获取到第一索引值(用于指示第一目标运动信息在运动信息列表中的索引值)后,若第一索引值为偶数,则判断与第一索引值对应的候选运动信息是否包括list0中的单向运动信息。如果是,将list0中的单向运动信息确定为第一三角子块的第一目标运动信息。如果否,将list1中的单向运动信息确定为第一三角子块的第一目标运动信息。

示例性的,解码端可以从运动信息列表中获取与第一索引值对应的候选运动信息。若第一索引值为偶数,且与第一索引值对应的候选运动信息为双向运动信息,所述双向运动信息包括list0中的单向运动信息和list1中的单向运动信息,则可以将list0中的单向运动信息确定为第一三角子块的第一目标运动信息。若第一索引值为偶数,且与第一索引值对应的候选运动信息为单向运动信息,所述单向运动信息为list0中的单向运动信息,则可以将list0中的单向运动信息确定为第一三角子块的第一目标运动信息。若第一索引值为偶数,且与第一索引值对应的候选运动信息为单向运动信息,所述单向运动信息为list1中的单向运动信息,则可以将list1中的单向运动信息确定为第一三角子块的第一目标运动信息。

解码端从编码比特流中获取到第一索引值(用于指示第一目标运动信息在运动信息列表中的索引值)后,若第一索引值为奇数,则判断与第一索引值对应的候选运动信息是否包括list1中的单向运动信息。如果是,将list1中的单向运动信息确定为第一三角子块的第一目标运动信息。如果否,将list0中的单向运动信息确定为第一三角子块的第一目标运动信息。

示例性的,解码端可以从运动信息列表中获取与第一索引值对应的候选运动信息。若第一索引值为奇数,且与第一索引值对应的候选运动信息为双向运动信息,所述双向运动信息包括list0中的单向运动信息和list1中的单向运动信息,则可以将list1中的单向运动信息确定为第一三角子块的第一目标运动信息。若第一索引值为奇数,且与第一索引值对应的候选运动信息为单向运动信息,所述单向运动信息为list1中的单向运动信息,则可以将list1中的单向运动信息确定为第一三角子块的第一目标运动信息。若第一索引值为奇数,且与第一索引值对应的候选运动信息为单向运动信息,所述单向运动信息为list0中的单向运动信息,则可以将list0中的单向运动信息确定为第一三角子块的第一目标运动信息。

解码端从编码比特流中获取到第二索引值(用于指示第二目标运动信息在运动信息列表中的索引值)后,若第二索引值为偶数,则判断与第二索引值对应的候选运动信息是否包括list0中的单向运动信息。如果是,将list0中的单向运动信息确定为第二三角子块的第二目标运动信息。如果否,将list1中的单向运动信息确定为第二三角子块的第二目标运动信息。

示例性的,解码端可以从运动信息列表中获取与第二索引值对应的候选运动信息。若第二索引值为偶数,且与第二索引值对应的候选运动信息为双向运动信息,所述双向运动信息包括list0中的单向运动信息和list1中的单向运动信息,则可以将list0中的单向运动信息确定为第二三角子块的第二目标运动信息。若第二索引值为偶数,且与第二索引值对应的候选运动信息为单向运动信息,所述单向运动信息为list0中的单向运动信息,则可以将list0中的单向运动信息确定为第二三角子块的第二目标运动信息。若第二索引值为偶数,且与第二索引值对应的候选运动信息为单向运动信息,所述单向运动信息为list1中的单向运动信息,则可以将list1中的单向运动信息确定为第二三角子块的第二目标运动信息。

解码端从编码比特流中获取到第二索引值(用于指示第二目标运动信息在运动信息列表中的索引值)后,若第二索引值为奇数,则判断与第二索引值对应的候选运动信息是否包括list1中的单向运动信息。如果是,将list1中的单向运动信息确定为第二三角子块的第二目标运动信息。如果否,将list0中的单向运动信息确定为第二三角子块的第二目标运动信息。

示例性的,解码端可以从运动信息列表中获取与第二索引值对应的候选运动信息。若第二索引值为奇数,且与第二索引值对应的候选运动信息为双向运动信息,所述双向运动信息包括list0中的单向运动信息和list1中的单向运动信息,则可以将list1中的单向运动信息确定为第二三角子块的第二目标运动信息。若第二索引值为奇数,且与第二索引值对应的候选运动信息为单向运动信息,所述单向运动信息为list1中的单向运动信息,则可以将list1中的单向运动信息确定为第二三角子块的第二目标运动信息。若第二索引值为奇数,且与第二索引值对应的候选运动信息为单向运动信息,所述单向运动信息为list0中的单向运动信息,则可以将list0中的单向运动信息确定为第二三角子块的第二目标运动信息。

编码端在确定第一三角子块的第一目标运动信息时,在从运动信息列表中选取最小率失真代价对应的候选运动信息(后续记为a1)后,确定候选运动信息a1在运动信息列表中的索引值,即第一索引值,第一索引值表示候选运动信息a1在运动信息列表中的位置。

若第一索引值为偶数,则编码端判断候选运动信息a1是否包括list0中的单向运动信息。如果是,则编码端将list0中的单向运动信息确定为第一三角子块的第一目标运动信息。如果否,则编码端将list1中的单向运动信息确定为第一三角子块的第一目标运动信息。

若第一索引值为奇数,则编码端判断候选运动信息a1是否包括list1中的单向运动信息。如果是,则编码端将list1中的单向运动信息确定为第一三角子块的第一目标运动信息。如果否,则编码端将list0中的单向运动信息确定为第一三角子块的第一目标运动信息。

编码端在确定第二三角子块的第二目标运动信息时,在从运动信息列表中选取最小率失真代价对应的候选运动信息(后续记为a2)后,确定候选运动信息a2在运动信息列表中的索引值,即第二索引值,第二索引值表示候选运动信息a2在运动信息列表中的位置。

若第二索引值为偶数,则编码端判断候选运动信息a2是否包括list0中的单向运动信息。如果是,则编码端将list0中的单向运动信息确定为第二三角子块的第二目标运动信息。如果否,则编码端将list1中的单向运动信息确定为第二三角子块的第二目标运动信息。

若第二索引值为奇数,则编码端判断候选运动信息a2是否包括list1中的单向运动信息。如果是,则编码端将list1中的单向运动信息确定为第二三角子块的第二目标运动信息。如果否,则编码端将list0中的单向运动信息确定为第二三角子块的第二目标运动信息。

综上所述,参见图7a所示,当第一索引值/第二索引值为偶数时,若与第一索引值/第二索引值对应的候选运动信息中存在list0中的单向运动信息,则将list0中的单向运动信息作为目标运动信息;若与第一索引值/第二索引值对应的候选运动信息中不存在list0中的单向运动信息,则将list1中的单向运动信息作为目标运动信息。当第一索引值/第二索引值为奇数时,若与第一索引值/第二索引值对应的候选运动信息中存在list1中的单向运动信息,则将list1中的单向运动信息作为目标运动信息;若与第一索引值/第二索引值对应的候选运动信息中不存在list1中的单向运动信息,则将list0中的单向运动信息作为目标运动信息。

在上述实施例中,第一索引值可以记为candidx1,第二索引值可以记为candidx2。

示例性的,当前块所处当前帧的帧类型为b帧时,b帧允许同时存在指向多个list(参考帧列表)的帧间块,如指向list0的帧间预测块和指向list1的帧间预测块,因此,在当前块所处当前帧为b帧时,当前块所在当前帧的参考帧配置可以包括两个参考帧列表,这两个参考帧列表可以为list0和list1。综上所述,候选运动信息可以为单向运动信息,且所述单向运动信息为list0中的单向运动信息或者list1中的单向运动信息;或者,候选运动信息可以为双向运动信息,且所述双向运动信息包括list0中的单向运动信息和list1中的单向运动信息。

实施例10:在上述实施例8中,编码端/解码端还可以基于第一索引值的奇偶性来确定第一三角子块的第一目标运动信息是采用哪个单向运动信息,编码端/解码端还可以基于第二索引值的奇偶性来确定第二三角子块的第二目标运动信息是采用哪个单向运动信息。

解码端从编码比特流中获取到第一索引值(用于指示第一目标运动信息在运动信息列表中的索引值)后,若第一索引值为奇数,则判断与第一索引值对应的候选运动信息是否包括list0中的单向运动信息。如果是,将list0中的单向运动信息确定为第一三角子块的第一目标运动信息。如果否,将list1中的单向运动信息确定为第一三角子块的第一目标运动信息。

示例性的,解码端可以从运动信息列表中获取与第一索引值对应的候选运动信息。若第一索引值为奇数,且与第一索引值对应的候选运动信息为双向运动信息,所述双向运动信息包括list0中的单向运动信息和list1中的单向运动信息,则可以将list0中的单向运动信息确定为第一三角子块的第一目标运动信息。若第一索引值为奇数,且与第一索引值对应的候选运动信息为单向运动信息,所述单向运动信息为list0中的单向运动信息,则可以将list0中的单向运动信息确定为第一三角子块的第一目标运动信息。若第一索引值为奇数,且与第一索引值对应的候选运动信息为单向运动信息,所述单向运动信息为list1中的单向运动信息,则可以将list1中的单向运动信息确定为第一三角子块的第一目标运动信息。

解码端从编码比特流中获取到第一索引值(用于指示第一目标运动信息在运动信息列表中的索引值)后,若第一索引值为偶数,则判断与第一索引值对应的候选运动信息是否包括list1中的单向运动信息。如果是,将list1中的单向运动信息确定为第一三角子块的第一目标运动信息。如果否,将list0中的单向运动信息确定为第一三角子块的第一目标运动信息。

示例性的,解码端可以从运动信息列表中获取与第一索引值对应的候选运动信息。若第一索引值为偶数,且与第一索引值对应的候选运动信息为双向运动信息,所述双向运动信息包括list0中的单向运动信息和list1中的单向运动信息,则可以将list1中的单向运动信息确定为第一三角子块的第一目标运动信息。若第一索引值为偶数,且与第一索引值对应的候选运动信息为单向运动信息,所述单向运动信息为list1中的单向运动信息,则可以将list1中的单向运动信息确定为第一三角子块的第一目标运动信息。若第一索引值为偶数,且与第一索引值对应的候选运动信息为单向运动信息,所述单向运动信息为list0中的单向运动信息,则可以将list0中的单向运动信息确定为第一三角子块的第一目标运动信息。

解码端从编码比特流中获取到第二索引值(用于指示第二目标运动信息在运动信息列表中的索引值)后,若第二索引值为奇数,则判断与第二索引值对应的候选运动信息是否包括list0中的单向运动信息。如果是,将list0中的单向运动信息确定为第二三角子块的第二目标运动信息。如果否,将list1中的单向运动信息确定为第二三角子块的第二目标运动信息。

示例性的,解码端可以从运动信息列表中获取与第二索引值对应的候选运动信息。若第二索引值为奇数,且与第二索引值对应的候选运动信息为双向运动信息,所述双向运动信息包括list0中的单向运动信息和list1中的单向运动信息,则可以将list0中的单向运动信息确定为第二三角子块的第二目标运动信息。若第二索引值为奇数,且与第二索引值对应的候选运动信息为单向运动信息,所述单向运动信息为list0中的单向运动信息,则可以将list0中的单向运动信息确定为第二三角子块的第二目标运动信息。若第二索引值为奇数,且与第二索引值对应的候选运动信息为单向运动信息,所述单向运动信息为list1中的单向运动信息,则可以将list1中的单向运动信息确定为第二三角子块的第二目标运动信息。

解码端从编码比特流中获取到第二索引值(用于指示第二目标运动信息在运动信息列表中的索引值)后,若第二索引值为偶数,则判断与第二索引值对应的候选运动信息是否包括list1中的单向运动信息。如果是,将list1中的单向运动信息确定为第二三角子块的第二目标运动信息。如果否,将list0中的单向运动信息确定为第二三角子块的第二目标运动信息。

示例性的,解码端可以从运动信息列表中获取与第二索引值对应的候选运动信息。若第二索引值为偶数,且与第二索引值对应的候选运动信息为双向运动信息,所述双向运动信息包括list0中的单向运动信息和list1中的单向运动信息,则可以将list1中的单向运动信息确定为第二三角子块的第二目标运动信息。若第二索引值为偶数,且与第二索引值对应的候选运动信息为单向运动信息,所述单向运动信息为list1中的单向运动信息,则可以将list1中的单向运动信息确定为第二三角子块的第二目标运动信息。若第二索引值为偶数,且与第二索引值对应的候选运动信息为单向运动信息,所述单向运动信息为list0中的单向运动信息,则可以将list0中的单向运动信息确定为第二三角子块的第二目标运动信息。

编码端在确定第一三角子块的第一目标运动信息时,在从运动信息列表中选取最小率失真代价对应的候选运动信息(后续记为a1)后,确定候选运动信息a1在运动信息列表中的索引值,即第一索引值,第一索引值表示候选运动信息a1在运动信息列表中的位置。

若第一索引值为奇数,则编码端判断候选运动信息a1是否包括list0中的单向运动信息。如果是,则编码端将list0中的单向运动信息确定为第一三角子块的第一目标运动信息。如果否,则编码端将list1中的单向运动信息确定为第一三角子块的第一目标运动信息。

若第一索引值为偶数,则编码端判断候选运动信息a1是否包括list1中的单向运动信息。如果是,则编码端将list1中的单向运动信息确定为第一三角子块的第一目标运动信息。如果否,则编码端将list0中的单向运动信息确定为第一三角子块的第一目标运动信息。

编码端在确定第二三角子块的第二目标运动信息时,在从运动信息列表中选取最小率失真代价对应的候选运动信息(后续记为a2)后,确定候选运动信息a2在运动信息列表中的索引值,即第二索引值,第二索引值表示候选运动信息a2在运动信息列表中的位置。

若第二索引值为奇数,则编码端判断候选运动信息a2是否包括list0中的单向运动信息。如果是,则编码端将list0中的单向运动信息确定为第二三角子块的第二目标运动信息。如果否,则编码端将list1中的单向运动信息确定为第二三角子块的第二目标运动信息。

若第二索引值为偶数,则编码端判断候选运动信息a2是否包括list1中的单向运动信息。如果是,则编码端将list1中的单向运动信息确定为第二三角子块的第二目标运动信息。如果否,则编码端将list0中的单向运动信息确定为第二三角子块的第二目标运动信息。

实施例11:在上述实施例8中,编码端/解码端还可以根据运动信息列表获取第一候选集合和第二候选集合。示例性的,该第一候选集合可以包括该运动信息列表中的部分候选运动信息,该第二候选集合可以包括该运动信息列表中的部分候选运动信息,且该第一候选集合中的候选运动信息与该第二候选集合中的候选运动信息不完全相同。

针对编码端来说,编码端确定第一候选集合中的每个候选运动信息对应的率失真代价,并将最小率失真代价对应的候选运动信息作为第一三角子块的第一目标运动信息。然后,编码端从第二候选集合中排除第一目标运动信息,并确定第二候选集合中剩余的每个候选运动信息(即排除第一目标运动信息后剩余的每个候选运动信息)对应的率失真代价,并将最小率失真代价对应的候选运动信息作为第二三角子块的第二目标运动信息。

编码端在向解码端发送编码比特流时,该编码比特流可以包括第二指示信息,该第二指示信息用于指示第一目标运动信息在第一候选集合中的第一索引值(用于表示第一目标运动信息是第一候选集合中的第几个候选运动信息)、第二目标运动信息在第二候选集合中的第二索引值(用于表示第二目标运动信息是第二候选集合中的第几个候选运动信息)。

针对解码端来说,解码端在接收到编码比特流之后,解码端还可以从该编码比特流中获取第二指示信息,该第二指示信息可以用于指示第一目标运动信息在第一候选集合中的第一索引值、第二目标运动信息在第二候选集合中的第二索引值。基于该第二指示信息指示的该第一索引值,解码端可以从第一候选集合中获取与该第一索引值对应的候选运动信息,并将获取的候选运动信息确定为第一三角子块的第一目标运动信息。以及,基于该第二指示信息指示的该第二索引值,解码端可以从第二候选集合中获取与该第二索引值对应的候选运动信息,并将获取的候选运动信息确定为第二三角子块的第二目标运动信息。

实施例12:参见图7b所示,为splitdir=0时的三角子块划分示意图,splitdir为划分方向的标记位,表示三角子块的划分信息,splitdir=0表示按照主对角线(与水平向右方向呈45度夹角)将当前块划分为第一三角子块和第二三角子块,运动信息列表包括块a1的运动信息、块b1的运动信息、块b0的运动信息、块a0的运动信息、块b2的运动信息。

示例性的,运动信息列表中的运动信息的排列顺序可以为:块a1的运动信息、块b1的运动信息、块b0的运动信息、块a0的运动信息、块b2的运动信息。若块a1的运动信息可用,则按照上述顺序将块a1的运动信息添加到运动信息列表;若块a1的运动信息不可用,则不将块a1的运动信息添加到运动信息列表;若块b1的运动信息可用,则按照上述顺序将块b1的运动信息添加到运动信息列表;若块b1的运动信息不可用,则不将块b1的运动信息添加到运动信息列表,以此类推。在实际应用中,在块b0的运动信息与块a0的运动信息之间,还可能插入一些其它类型的运动信息,如时域运动信息等,对此不做限制。

针对上面的第一三角子块,大概率不会选择块a1的运动信息和块a0的运动信息,假设在运动信息列表中,块a1的运动信息的索引值为0,块b0的运动信息的索引值为1,块b1的运动信息的索引值为2,块a0的运动信息的索引值为3,块b2的运动信息的索引值为4,第一候选集合包括块b0的运动信息、块b1的运动信息、块b2的运动信息。

编码端通过第一索引值“0”编码块b0的运动信息,表示第一候选集合中第一个候选运动信息,也是运动信息列表中第二个候选运动信息,也就是说,第一索引值“0”可以对应运动信息列表的索引值1。编码端通过第一索引值“10”编码块b1的运动信息,表示第一候选集合中第二个候选运动信息,也是运动信息列表中第三个候选运动信息,也就是说,第一索引值“10”可以对应运动信息列表的索引值2。编码端通过第一索引值“11”编码块b2的运动信息,表示第一候选集合中第三个候选运动信息,也是运动信息列表中第五个候选运动信息,也就是说,第一索引值“11”可以对应运动信息列表的索引值4。

解码端从编码比特流中获取到第一索引值后,若第一索引值为“0”,则解码端可以将第一候选集合中的第一个候选运动信息(即运动信息列表中第二个候选运动信息)作为第一三角子块的第一目标运动信息。若第一索引值为“10”,则解码端可以将第一候选集合中的第二个候选运动信息(即运动信息列表中第三个候选运动信息)作为第一三角子块的第一目标运动信息。若第一索引值为“11”,则解码端可以将第一候选集合中的第三个候选运动信息(即运动信息列表中第五个候选运动信息)作为第一三角子块的第一目标运动信息。

针对下面的第二三角子块,大概率不会选择块b1的运动信息和块b0的运动信息,假设在运动信息列表中,块a1的运动信息的索引值为0,块b0的运动信息的索引值为1,块b1的运动信息的索引值为2,块a0的运动信息的索引值为3,块b2的运动信息的索引值为4,第二候选集合可以包括块a0的运动信息、块a1的运动信息、块b2的运动信息。

编码端通过第二索引值“0”编码块a1的运动信息,表示第二候选集合中第一个候选运动信息,也是运动信息列表中第一个候选运动信息,也就是说,第二索引值“0”可以对应运动信息列表的索引值0。编码端通过第二索引值“10”编码块a0的运动信息,表示第二候选集合中第二个候选运动信息,也是运动信息列表中第四个候选运动信息,也就是说,第二索引值“10”可以对应运动信息列表的索引值3。编码端通过第二索引值“11”编码块b2的运动信息,表示第二候选集合中第三个候选运动信息,也是运动信息列表中第五个候选运动信息,也就是说,第二索引值“11”可以对应运动信息列表的索引值4。

解码端从编码比特流中获取到第二索引值后,若第二索引值为“0”,则解码端可以将第二候选集合中的第一个候选运动信息(即运动信息列表中第一个候选运动信息)作为第二三角子块的第二目标运动信息。若第二索引值为“10”,则解码端可以将第二候选集合中的第二个候选运动信息(即运动信息列表中第四个候选运动信息)作为第二三角子块的第二目标运动信息。若第二索引值为“11”,则解码端可以将第二候选集合中的第三个候选运动信息(即运动信息列表中第五个候选运动信息)作为第二三角子块的第二目标运动信息。

示例性的,由于第二目标运动信息与第一目标运动信息不同,即第二索引值与第一索引值不能对应运动信息列表中的同一个候选运动信息,因此,当第一目标运动信息为块b2的运动信息,即第一索引值为“11”,第二候选集合包括块a0的运动信息和块a1的运动信息。

编码端通过第二索引值“0”编码块a1的运动信息,表示第二候选集合中第一个候选运动信息,也就是,运动信息列表中第一个候选运动信息。编码端通过第二索引值“1”编码块a0的运动信息,表示第二候选集合中第二个候选运动信息,也就是,运动信息列表中第四个候选运动信息。解码端从编码比特流中获取到第二索引值后,若第二索引值为“0”,则将第二候选集合中的第一个候选运动信息(即运动信息列表中第一个候选运动信息)作为第二三角子块的第二目标运动信息。若第二索引值为“1”,则将第二候选集合中的第二个候选运动信息(即运动信息列表中第四个候选运动信息)作为第二三角子块的第二目标运动信息。

示例性的,若第一目标运动信息不为块b2的运动信息,则第二候选集合包括块a0的运动信息、块a1的运动信息和块b2的运动信息,编解码方法参见上述实施例,在此不再赘述。

综上所述,参见表1所示,若第一索引值(candidx1)为11,即对应运动信息列表的索引值4,则第二索引值(candidx2)只有索引值0和索引值3两种可能,因此,编码端通过第二索引值“0”编码索引值0对应的运动信息(即运动信息列表中的第一个候选运动信息),编码端通过第二索引值“1”编码索引值3对应的运动信息(即运动信息列表中的第四个候选运动信息)。若第一索引值(candidx1)不为11,即不对应运动信息列表的索引值4,则第二索引值(candidx2)存在索引值0、索引值3和索引值4等三种可能,因此,编码端通过第二索引值“0”编码索引值0对应的运动信息,编码端通过第二索引值“10”编码索引值3对应的运动信息,编码端通过第二索引值“11”编码索引值4对应的运动信息。

表1

示例性的,在另一个可能的实施方式中,可以将第一索引值(candidx1)限制为1和2,即第一索引值对应块b0的运动信息(索引值为1)或者块b1的运动信息(索引值为2),也就是说,第一索引值(candidx1)仅需要1个二进制位进行编码,如通过0编码索引值1,通过1编码索引值2。第二索引值(candidx2)可以为0、3、4,即第二索引值对应块a1的运动信息(索引值为0)、块a0的运动信息(索引值为3)、块b2的运动信息(索引值为4),显然,第二索引值对应的运动信息与第一索引值对应的运动信息不同。在此基础上,可以通过0、01、11编码这三个索引值,如通过0编码索引值0,通过10编码索引值3,通过11编码索引值4。上述方式不需要依赖于第一索引值进行解码过程,减少了解析依赖。

示例性的,在另一个可能的实施方式中,可以将第一索引值(candidx1)限制为1、2、4,即第一索引值对应块b0的运动信息(索引值为1)、块b1的运动信息(索引值为2)、块b2的运动信息(索引值为4),也就是说,第一索引值(candidx1)可以通过0、01、11编码进行编码,如通过0编码索引值1,通过01编码索引值2,通过11编码索引值4。第二索引值(candidx2)可以限制为0、3,即第二索引值对应块a1的运动信息(索引值为0)、块a0的运动信息(索引值为3),显然,第二索引值对应的运动信息与第一索引值对应的运动信息不同。在此基础上,可以通过0和1编码这两个索引值,如通过0编码索引值0,通过1编码索引值3。上述方式不需要依赖于第一索引值进行解码过程,减少了解析依赖。

实施例13:参见图7c所示,为splitdir=1时的三角子块划分示意图,splitdir为划分方向的标记位,表示三角子块的划分信息,splitdir=1表示按照副对角线(与水平向右方向呈135度夹角)将当前块划分为第一三角子块和第二三角子块,运动信息列表包括块a1的运动信息、块b1的运动信息、块b0的运动信息、块a0的运动信息、块b2的运动信息。

针对上面的第一三角子块,不需要为第一三角子块构建第一候选集合,编码端/解码端可以直接从运动信息列表中选择第一目标运动信息,对此选择过程不再重复赘述。

针对下面的第二三角子块,大概率不会选择块b2的运动信息,假设在运动信息列表中,块a1的运动信息的索引值为0,块b0的运动信息的索引值为1,块b1的运动信息的索引值为2,块a0的运动信息的索引值为3,块b2的运动信息的索引值为4,第二候选集合可以包括块a1的运动信息、块a0的运动信息、块b0的运动信息、块b1的运动信息。

若第一目标运动信息是运动信息列表中的第五个运动信息(块b2的运动信息),第一目标运动信息对应的索引值为4,在此情况下:编码端可以通过第二索引值“0”编码块a1的运动信息,表示第二候选集合中的第一个候选运动信息,也是运动信息列表中的第一个候选运动信息,也就是说,第二索引值“0”可以对应运动信息列表的索引值0。编码端可以通过第二索引值“10”编码块b0的运动信息,表示第二候选集合中的第二个候选运动信息,也是运动信息列表中的第二个候选运动信息,也就是说,第一索引值“10”可以对应运动信息列表的索引值1。编码端可以通过第二索引值“110”编码块b1的运动信息,表示第二候选集合中的第三个候选运动信息,也是运动信息列表中的第三个候选运动信息,也就是说,第一索引值“110”可以对应运动信息列表的索引值2。编码端可以通过第二索引值“111”编码块a0的运动信息,表示第二候选集合中的第四个候选运动信息,也是运动信息列表中的第四个候选运动信息,也就是说,第一索引值“111”可以对应运动信息列表的索引值3。

解码端从编码比特流中获取到第二索引值后,若第二索引值为“0”,则解码端可以将第二候选集合中的第一个候选运动信息(即运动信息列表中的第一个候选运动信息)作为第二三角子块的第二目标运动信息。若第二索引值为“10”,则解码端可以将第二候选集合中的第二个候选运动信息(即运动信息列表中的第二个候选运动信息)作为第二三角子块的第二目标运动信息。若第二索引值为“110”,则解码端可以将第二候选集合中的第三个候选运动信息(即运动信息列表中的第三个候选运动信息)作为第二三角子块的第二目标运动信息。若第二索引值为“111”,则解码端可以将第二候选集合中的第四个候选运动信息(即运动信息列表中的第四个候选运动信息)作为第二三角子块的第二目标运动信息。

若第一索引值不为4,后续以第一索引值为3为例进行说明,表示第一目标运动信息是运动信息列表中的第四个运动信息(即块a0的运动信息),在此情况下:编码端可以通过第二索引值“0”编码块a1的运动信息,表示第二候选集合中的第一个候选运动信息,也是运动信息列表中的第一个候选运动信息,也就是说,第二索引值“0”可以对应运动信息列表的索引值0。编码端可以通过第二索引值“10”编码块b0的运动信息,表示第二候选集合中的第二个候选运动信息,也是运动信息列表中的第二个候选运动信息,也就是说,第二索引值“10”可以对应运动信息列表的索引值1。编码端可以通过第二索引值“11”编码块b1的运动信息,表示第二候选集合中的第三个候选运动信息,也是运动信息列表中的第三个候选运动信息,也就是说,第二索引值“11”可以对应运动信息列表的索引值2。

解码端从编码比特流中获取到第二索引值后,若第二索引值为“0”,则解码端可以将第二候选集合中的第一个候选运动信息(即运动信息列表中的第一个候选运动信息)作为第二三角子块的第二目标运动信息。若第二索引值为“10”,则解码端可以将第二候选集合中的第二个候选运动信息(即运动信息列表中的第二个候选运动信息)作为第二三角子块的第二目标运动信息。若第二索引值为“11”,则解码端可以将第二候选集合中的第三个候选运动信息(即运动信息列表中的第三个候选运动信息)作为第二三角子块的第二目标运动信息。

综上所述,若第一索引值(candidx1)为11,即对应运动信息列表的索引值4,则第二索引值(candidx2)的解码过程可以参见表2所示。若第一索引值(candidx1)不为11,即不对应运动信息列表的索引值4,则第二索引值(candidx2)的解码过程可以参见表3所示。

表2

表3

示例性的,在另一个可能的实施方式中,可以先编码第二索引值(candidx2),由于第二索引值(candidx2)仅可能为索引值0、索引值1、索引值2、索引值3,因此,可以使用0、10、110、111进行编码,即最多使用3个二进制位编码第二索引值(candidx2)。例如,通过0编码索引值0,通过10编码索引值1,通过110编码索引值2,通过111编码索引值3。然后,可以编码第一索引值(candidx1),即candidx1-=candidx1<candidx2?0:1,也就是说,第一索引值(candidx1)为索引值0、索引值1、索引值2、索引值3、索引值4中去除第二索引值(candidx2)外剩余的4个,因此,也可以使用0、10、110、111进行编码,即最多使用3个二进制位编码第二索引值(candidx2)。显然,在该方式中,不需要依赖于前一个索引值的大小,来确定当前需要解码多少个二进制位,从而减少了解析依赖。

示例性的,当splitdir=1时,可以先编码第二索引值(candidx2),后编码第一索引值(candidx1)。当splitdir=0时,可以先编码第一索引值(candidx1),后编码第二索引值(candidx2);或者,可以先编码第二索引值(candidx2),后编码第一索引值(candidx1)。

示例性的,当splitdir=0时,可以采用实施例12进行处理,当splitdir=1时,可以采用实施例13进行处理,当然,上述实施例12和实施例13只是示例,对此不做限制。

示例性的,上述关于索引值编码的例子,只说明了运动信息列表包括5个候选运动信息,当运动信息列表包括其它示例的候选运动信息时,实现方式类似,在此不再重复赘述。

实施例14:在上述实施例中,编码端向解码端发送编码比特流时,该编码比特流可以包括第二指示信息,第二指示信息用于指示第一目标运动信息在运动信息列表中的第一索引值、第二目标运动信息在运动信息列表中的第二索引值。示例性的,针对第一索引值,编码端可以采用cabac方式对第一索引值进行编码,解码端采用cabac方式对第一索引值进行解码。针对第二索引值,编码端可以采用cabac方式对第二索引值进行编码,解码端采用cabac方式对第二索引值进行解码。当然,cabac只是一个示例,对此不做限制。

示例性的,假设运动信息列表包括5个候选运动信息,可以通过四个二进制位表示第一索引值(记为candidx1),并通过四个二进制位表示第二索引值(记为candidx2)。

在编码端,若candidx1表示运动信息列表中的第一个候选运动信息,则采用cabac方式编码第1个二进制位,第1个二进制位为0。若candidx1表示运动信息列表中的第二个候选运动信息,则采用cabac方式编码第1个二进制位和第2个二进制位,第1个二进制位为1、第2个二进制位为0。若candidx1表示运动信息列表中的第三个候选运动信息,则采用cabac方式编码第1个二进制位、第2个二进制位和第3个二进制位,第1个二进制位为1、第2个二进制位为1、第3个二进制位为0。若candidx1表示运动信息列表中的第四个候选运动信息,则采用cabac方式编码第1个二进制位、第2个二进制位、第3个二进制位和第4个二进制位,第1个二进制位为1、第2个二进制位为1、第3个二进制位为1、第4个二进制位为0。若candidx1表示运动信息列表中的第五个候选运动信息,则采用cabac方式编码第1个二进制位、第2个二进制位、第3个二进制位和第4个二进制位,第1个二进制位为1、第2个二进制位为1、第3个二进制位为1、第4个二进制位为1。

在解码端,先通过cabac方式解码candidx1的第1个二进制位。若第1个二进制位为0,确定candidx1为0,candidx1表示运动信息列表中的第一个候选运动信息。若第1个二进制位为1,通过cabac方式解码candidx1的第2个二进制位。若第2个二进制位为0,确定candidx1为1(通过10表示),candidx1表示运动信息列表中的第二个候选运动信息。若第2个二进制位为1,通过cabac方式解码candidx1的第3个二进制位。若第3个二进制位为0,确定candidx1为2(通过110表示),candidx1表示运动信息列表中的第三个候选运动信息。若第3个二进制位为1,通过cabac方式解码candidx1的第4个二进制位。若第4个二进制位为0,确定candidx1为3(通过1110表示),candidx1表示运动信息列表中的第四个候选运动信息。若第4个二进制位为1,由于二进制位数达到最大数量,因此,确定candidx1为4(通过1111表示),candidx1表示运动信息列表中的第五个候选运动信息。

示例性的,在解码过程中,结束条件可以为:所解出的二进制位为0,或所解出的二进制位数达到最大数量(numcandminus1),numcandminus1可以通过语法信息获得,对此不做限制,如numcandminus1为4时,则表示第一索引值candidx1的范围为0-4。

在上述实施例中,介绍了编码端对candidx1的编码过程,解码端对candidx1的解码过程,针对candidx2的编码过程和解码过程,与上述实施例类似,在此不再重复赘述。

示例性的,针对上述实施例,candidx1/candidx2对应的二进制位如表4所示:

表4

实施例15:在上述实施例中,编码端向解码端发送编码比特流时,该编码比特流可以包括第二指示信息,第二指示信息用于指示第一目标运动信息在运动信息列表中的第一索引值、第二目标运动信息在运动信息列表中的第二索引值。示例性的,针对第一索引值,编码端可以采用cabac方式对第一索引值进行编码,解码端采用cabac方式对第一索引值进行解码。针对第二索引值,编码端可以采用cabac方式对第二索引值进行编码,解码端采用cabac方式对第二索引值进行解码。当然,cabac只是一个示例,对此不做限制。

cabac包括需要保存和更新至少1个上下文模型的cabac模式(后续称为上下文的自适应二进制算术编码)、不需要存储和更新上下文模型的旁路cabac模式(后续称为旁路的二进制算术编码)。基于旁路的二进制算术编码方式对第一索引值进行编码,或,基于上下文的自适应二进制算术编码方式对第一索引值进行编码,即,根据上下文模型,基于上下文的自适应二进制算术编码方式对第一索引值进行编码。基于旁路的二进制算术编码方式对第二索引值进行编码,或,基于上下文的自适应二进制算术编码方式对第二索引值进行编码,即,根据上下文模型,基于上下文的自适应二进制算术编码方式对第二索引值进行编码。

编码端采用cabac方式对第一索引值进行编码时,解码端采用cabac方式对第一索引值进行解码。例如,编码端基于旁路的二进制算术编码方式对第一索引值进行编码时,解码端基于旁路的二进制算术解码方式对第一索引值进行解码,得到第一索引值。编码端基于上下文的自适应二进制算术编码方式对第一索引值进行编码时,解码端基于上下文的自适应二进制算术解码方式对第一索引值进行解码,得到第一索引值,即,根据上下文模型,基于上下文的自适应二进制算术解码方式对第一索引值进行解码,得到第一索引值。

编码端采用cabac方式对第二索引值进行编码时,解码端采用cabac方式对第二索引值进行解码。例如,编码端基于旁路的二进制算术编码方式对第二索引值进行编码时,解码端基于旁路的二进制算术解码方式对第二索引值进行解码,得到第二索引值。编码端基于上下文的自适应二进制算术编码方式对第二索引值进行编码时,解码端基于上下文的自适应二进制算术解码方式对第二索引值进行解码,得到第二索引值,即,根据上下文模型,基于上下文的自适应二进制算术解码方式对第二索引值进行解码,得到第二索引值。

示例性的,第一索引值可以包括m1个二进制位,m1个二进制位中的n1个二进制位,基于上下文模型进行基于上下文的自适应二进制算术解码得到,m1个二进制位中的剩余(m1-n1)个二进制位,基于旁路的二进制算术解码得到,m1大于或者等于n1。例如,第一索引值包括4个二进制位,第1个二进制位,基于上下文模型进行基于上下文的自适应二进制算术解码得到,第2、3、4个二进制位,基于旁路的二进制算术解码得到。

例如,针对第一索引值中的第1个二进制位,编码端根据上下文模型,基于上下文的自适应二进制算术编码方式对第1个二进制位进行编码。解码端根据上下文模型,基于上下文的自适应二进制算术解码方式对第1个二进制位进行解码,得到第1个二进制位。

若第一索引值中存在其它二进制位(如第2个二进制位、第3个二进制位、第4个二进制位等),编码端基于旁路的二进制算术编码方式对其它二进制位进行编码。解码端基于旁路的二进制算术解码方式对其它二进制位进行解码,得到其它二进制位。

综上所述,针对第1个二进制位,编码端/解码端可以采用更新某1个上下文模型的cabac方法进行编码/解码,针对其它二进制位,编码端/解码端可以采用不更新上下文模型的cabac方法进行编码/解码,即采用bypass模式的cabac方法。

示例性的,第二索引值可以包括m2个二进制位,m2个二进制位中的n2个二进制位,基于上下文模型进行基于上下文的自适应二进制算术解码得到,m2个二进制位中的剩余(m2-n2)个二进制位,基于旁路的二进制算术解码得到,m2大于或者等于n2。例如,第二索引值包括4个二进制位,第1个二进制位,基于上下文模型进行基于上下文的自适应二进制算术解码得到,第2、3、4个二进制位,基于旁路的二进制算术解码得到。

例如,针对第二索引值中的第1个二进制位,编码端根据上下文模型,基于上下文的自适应二进制算术编码方式对第1个二进制位进行编码。解码端根据上下文模型,基于上下文的自适应二进制算术解码方式对第1个二进制位进行解码,得到第1个二进制位。

若第二索引值中存在其它二进制位(如第2个二进制位、第3个二进制位、第4个二进制位等),编码端基于旁路的二进制算术编码方式对其它二进制位进行编码。解码端基于旁路的二进制算术解码方式对其它二进制位进行解码,得到其它二进制位。

综上所述,针对第1个二进制位,编码端/解码端可以采用更新某1个上下文模型的cabac方法进行编码/解码,针对其它二进制位,编码端/解码端可以采用不更新上下文模型的cabac方法进行编码/解码,即采用bypass模式的cabac方法。

实施例16:第一索引值对应的上下文模型与第二索引值对应的上下文模型相同。或者,第一索引值对应的上下文模型与第二索引值对应的上下文模型不同。或者,第一索引值和第一划分信息对应的上下文模型、以及第二索引值和第一划分信息对应的上下文模型相同;第一索引值和第二划分信息对应的上下文模型、以及第二索引值和第二划分信息对应的上下文模型相同;第一索引值和第一划分信息对应的上下文模型、以及第一索引值和第二划分信息对应的上下文模型不同。或者,第一索引值和第一划分信息对应的上下文模型、第二索引值和第一划分信息对应的上下文模型、第一索引值和第二划分信息对应的上下文模型、以及第二索引值和第二划分信息对应的上下文模型各不相同。或者,第一索引值和第一划分信息对应的上下文模型、以及第二索引值和第一划分信息对应的上下文模型不同;第一索引值和第二划分信息对应的上下文模型、以及第二索引值和第二划分信息对应的上下文模型相同。或者,第一索引值和第一划分信息对应的上下文模型、以及第二索引值和第一划分信息对应的上下文模型相同;第一索引值和第二划分信息对应的上下文模型、以及第二索引值和第二划分信息对应的上下文模型不同。示例性的,第一划分信息表示三角子块的划分信息为主对角线划分方式;第二划分信息表示三角子块的划分信息为副对角线划分方式。

以下结合几个具体应用场景,对上述的上下文模型进行详细说明。

应用场景1:编码端/解码端可以维护上下文模型a1,第一索引值(三角预测模式中,用于指示第一三角子块的第一目标运动信息的索引值)对应的上下文模型为上下文模型a1,第二索引值(三角预测模式中,用于指示第二三角子块的第二目标运动信息的索引值)对应的上下文模型为上下文模型a1,普通融合模式的索引值对应的上下文模型为上下文模型a1。

示例性的,若编码端/解码端需要根据上下文模型,对第一索引值进行编码或者解码,则采用上下文模型a1对第一索引值(如第一索引值的第1个二进制位)进行编码或者解码。若编码端/解码端需要根据上下文模型,对第二索引值进行编码或者解码,则采用上下文模型a1对第二索引值(如第二索引值的第1个二进制位)进行编码或者解码。若编码端/解码端需要根据上下文模型,对普通融合模式的索引值进行编码或者解码,则采用上下文模型a1对普通融合模式的索引值(如普通融合模式的索引值的第1个二进制位)进行编码或者解码。

应用场景2:编码端/解码端可以维护上下文模型b1和上下文模型b2,第一索引值对应的上下文模型为上下文模型b1,第二索引值对应的上下文模型为上下文模型b1,普通融合模式(如regularmerge模式)的索引值对应的上下文模型为上下文模型b2。

示例性的,若编码端/解码端需要根据上下文模型,对第一索引值进行编码或者解码,则采用上下文模型b1对第一索引值(如第一索引值的第1个二进制位)进行编码或者解码。若编码端/解码端需要根据上下文模型,对第二索引值进行编码或者解码,则采用上下文模型b1对第二索引值(如第二索引值的第1个二进制位)进行编码或者解码。若编码端/解码端需要根据上下文模型,对普通融合模式的索引值进行编码或者解码,则采用上下文模型b2对普通融合模式的索引值(如普通融合模式的索引值的第1个二进制位)进行编码或者解码。

应用场景3:编码端/解码端可以维护上下文模型c1、上下文模型c2和上下文模型c3,第一索引值对应的上下文模型为上下文模型c1,第二索引值对应的上下文模型为上下文模型c2,普通融合模式(如regularmerge模式)的索引值对应的上下文模型为上下文模型c3。

示例性的,若编码端/解码端需要根据上下文模型,对第一索引值进行编码或者解码,则采用上下文模型c1对第一索引值(如第一索引值的第1个二进制位)进行编码或者解码。若编码端/解码端需要根据上下文模型,对第二索引值进行编码或者解码,则采用上下文模型c2对第二索引值(如第二索引值的第1个二进制位)进行编码或者解码。若编码端/解码端需要根据上下文模型,对普通融合模式的索引值进行编码或者解码,则采用上下文模型c3对普通融合模式的索引值(如普通融合模式的索引值的第1个二进制位)进行编码或者解码。

应用场景4:编码端/解码端可以维护上下文模型d1、上下文模型d2和上下文模型d3。示例性的,第一索引值和第一划分信息对应的上下文模型为上下文模型d1;第二索引值和第一划分信息对应的上下文模型为上下文模型d1。第一索引值和第二划分信息对应的上下文模型为上下文模型d2;第二索引值和第二划分信息对应的上下文模型为上下文模型d2。普通融合模式(如regularmerge模式)的索引值对应的上下文模型为上下文模型d3。

示例性的,若编码端/解码端需要根据上下文模型,对第一索引值进行编码或者解码,则先确定三角子块的划分信息;若三角子块的划分信息为第一划分信息(表示按照主对角线(与水平向右方向呈45度夹角)将当前块划分为第一三角子块和第二三角子块),则采用上下文模型d1对第一索引值(如第一索引值的第1个二进制位)进行编码或者解码;若三角子块的划分信息为第二划分信息(表示按照副对角线(与水平向右方向呈135度夹角)将当前块划分为第一三角子块和第二三角子块),则采用上下文模型d2对第一索引值(如第一索引值的第1个二进制位)进行编码或者解码。若编码端/解码端需要根据上下文模型,对第二索引值进行编码或者解码,则先确定三角子块的划分信息;若三角子块的划分信息为第一划分信息,则采用上下文模型d1对第二索引值(如第二索引值的第1个二进制位)进行编码或者解码;若三角子块的划分信息为第二划分信息,则采用上下文模型d2对第二索引值(如第二索引值的第1个二进制位)进行编码或者解码;若编码端/解码端需要根据上下文模型,对普通融合模式的索引值进行编码或者解码,则采用上下文模型d3对普通融合模式的索引值(如普通融合模式的索引值的第1个二进制位)进行编码或者解码。

应用场景5:编码端/解码端可以维护上下文模型e1、上下文模型e2、上下文模型e3、上下文模型e4和上下文模型e5。示例性的,第一索引值和第一划分信息对应的上下文模型为上下文模型e1;第一索引值和第二划分信息对应的上下文模型为上下文模型e2;第二索引值和第一划分信息对应的上下文模型为上下文模型e3;第二索引值和第二划分信息对应的上下文模型为上下文模型e4。普通融合模式的索引值对应的上下文模型为上下文模型e5。

示例性的,若编码端/解码端根据上下文模型,对第一索引值进行编码或解码,则确定三角子块的划分信息;若三角子块的划分信息为第一划分信息,采用上下文模型e1对第一索引值(如第一索引值的第1个二进制位)进行编码或解码;若三角子块的划分信息为第二划分信息,采用上下文模型e2对第一索引值(如第一索引值的第1个二进制位)进行编码或解码。若编码端/解码端根据上下文模型,对第二索引值进行编码或解码,则确定三角子块的划分信息;若三角子块的划分信息为第一划分信息,采用上下文模型e3对第二索引值(如第二索引值的第1个二进制位)进行编码或解码;若三角子块的划分信息为第二划分信息,采用上下文模型e4对第二索引值(如第二索引值的第1个二进制位)进行编码或解码;若编码端/解码端需要根据上下文模型,对普通融合模式的索引值进行编码或解码,则采用上下文模型e5对普通融合模式的索引值(如普通融合模式的索引值的第1个二进制位)进行编码或解码。

应用场景6:编码端/解码端可以维护上下文模型f1、上下文模型f2、上下文模型f3和上下文模型f4。示例性的,第一索引值和第一划分信息对应的上下文模型可以为上下文模型f1;第二索引值和第一划分信息对应的上下文模型可以为上下文模型f2。第一索引值和第二划分信息对应的上下文模型可以为上下文模型f3;第二索引值和第二划分信息对应的上下文模型可以为上下文模型f3。普通融合模式的索引值对应的上下文模型为上下文模型f4。

示例性的,若编码端/解码端根据上下文模型,对第一索引值进行编码或解码,则确定三角子块的划分信息;若三角子块的划分信息为第一划分信息,采用上下文模型f1对第一索引值(如第一索引值的第1个二进制位)进行编码或解码;若三角子块的划分信息为第二划分信息,采用上下文模型f3对第一索引值(如第一索引值的第1个二进制位)进行编码或解码。若编码端/解码端根据上下文模型,对第二索引值进行编码或解码,则确定三角子块的划分信息;若三角子块的划分信息为第一划分信息,采用上下文模型f2对第二索引值(如第二索引值的第1个二进制位)进行编码或解码;若三角子块的划分信息为第二划分信息,采用上下文模型f3对第二索引值(如第二索引值的第1个二进制位)进行编码或解码;若编码端/解码端需要根据上下文模型,对普通融合模式的索引值进行编码或解码,则采用上下文模型f4对普通融合模式的索引值(如普通融合模式的索引值的第1个二进制位)进行编码或解码。

应用场景7:编码端/解码端可以维护上下文模型g1、上下文模型g2、上下文模型g3和上下文模型g4。示例性的,第一索引值和第一划分信息对应的上下文模型可以为上下文模型g1;第二索引值和第一划分信息对应的上下文模型可以为上下文模型g1。第一索引值和第二划分信息对应的上下文模型可以为上下文模型g2;第二索引值和第二划分信息对应的上下文模型可以为上下文模型g3。普通融合模式的索引值对应的上下文模型为上下文模型g4。

若编码端/解码端根据上下文模型,对第一索引值进行编码或解码,则确定三角子块的划分信息;若三角子块的划分信息为第一划分信息,采用上下文模型g1对第一索引值(如第一索引值的第1个二进制位)进行编码或解码;若三角子块的划分信息为第二划分信息,采用上下文模型g2对第一索引值(如第一索引值的第1个二进制位)进行编码或解码。若编码端/解码端根据上下文模型,对第二索引值进行编码或解码,则确定三角子块的划分信息;若三角子块的划分信息为第一划分信息,采用上下文模型g1对第二索引值(如第二索引值的第1个二进制位)进行编码或解码;若三角子块的划分信息为第二划分信息,采用上下文模型g3对第二索引值(如第二索引值的第1个二进制位)进行编码或解码;若编码端/解码端需要根据上下文模型,对普通融合模式的索引值进行编码或解码,则采用上下文模型g4对普通融合模式的索引值(如普通融合模式的索引值的第1个二进制位)进行编码或解码。

实施例17:针对编码端来说,可以先对三角子块的划分信息进行编码,然后,对第一索引值和第二索引值进行编码。针对解码端来说,可以先对三角子块的划分信息进行解码,然后,对第一索引值和第二索引值进行解码。或者,针对编码端来说,可以先对第一索引值和第二索引值进行编码,然后,对三角子块的划分信息进行编码。针对解码端来说,可以先对第一索引值和第二索引值进行解码,然后,对三角子块的划分信息进行解码。

实施例18:在步骤305和步骤405中,编码端/解码端需要根据第一目标运动信息对第一三角子块进行运动补偿,得到第一三角子块的预测值,根据第二目标运动信息对第二三角子块进行运动补偿,得到第二三角子块的预测值,上述过程也就是运动补偿过程。

示例性的,可以将当前块划分为多个子块,针对每个子块,若所述子块位于第一三角子块内,则根据第一目标运动信息对所述子块进行运动补偿;若所述子块位于第二三角子块内,则根据第二目标运动信息对所述子块进行运动补偿;若所述子块同时位于第一三角子块和第二三角子块内,则根据第一目标运动信息和第二目标运动信息对所述子块进行加权补偿。

示例性的,可以将当前块划分为第一区域子块、第二区域子块和第三区域子块;第一区域子块位于第一三角子块内,第二区域子块位于第二三角子块内,第三区域子块内的每个子块的中心与对角线之差小于预设阈值;根据第一目标运动信息对第一区域子块进行运动补偿;根据第二目标运动信息对第二区域子块进行运动补偿;根据第一目标运动信息和第二目标运动信息对第三区域子块进行加权补偿。例如,针对第三区域子块内的每个子块,根据第一目标运动信息确定所述子块的第一预测值;根据第二目标运动信息确定所述子块的第二预测值;根据第一预测值、第一预测值对应的第一权重系数、第二预测值、第二预测值对应的第二权重系数对所述子块进行加权补偿。例如,若所述子块位于第一三角子块内,则第一权重系数大于第二权重系数;若所述子块位于第二三角子块内,则第一权重系数小于第二权重系数;若所述子块位于对角线,则第一权重系数等于第二权重系数。

参见图7d所示,针对p1区域的子块(即第一区域子块),p1区域的子块位于第一三角子块内,利用第一三角子块的第一目标运动信息对p1区域的子块进行运动补偿,得到预测值,对此运动补偿过程不做限制。针对p2区域的子块(即第二区域子块),p2区域的子块位于第二三角子块内,利用第二三角子块的第二目标运动信息对p2区域的子块进行运动补偿,得到预测值,对此运动补偿过程不做限制。针对p1区域和p2区域之外的其它区域的子块(即第三区域子块),包括标记为1的子块(记为子块1),标记为2的子块(记为子块2),标记为3的子块(记为子块3),标记为4的子块(记为子块4),标记为5的子块(记为子块5),标记为6的子块(记为子块6),标记为7的子块(记子块7)。

针对标记为7的每个子块7,可以根据第一目标运动信息确定子块7的预测值p1,根据第二目标运动信息确定子块7的预测值p2,假设预测值p1的第一权重系数为a,预测值p2的第二权重系数为b,则对子块7进行加权补偿,加权补偿后的预测值可以为:预测值p1*a+预测值p2*b。由于子块7位于第一三角子块内,因此,第一权重系数a大于第二权重系数b,假设a为7/8,b为1/8,则加权补偿后的预测值为p1*7/8+预测值p2*1/8。

针对标记为6的每个子块6,其处理过程参见子块7,在此不再赘述。由于子块6位于第一三角子块内,因此,第一权重系数a大于第二权重系数b,又由于与子块7相比,子块6更靠近p2区域,因此,子块6的第一权重系数a可以小于子块7的第一权重系数a,如子块6的第一权重系数a为6/8,b为2/8,则加权补偿后的预测值为p1*6/8+预测值p2*2/8。

针对标记为5的每个子块5,其处理过程参见子块7,在此不再赘述。子块5的第一权重系数a为5/8,子块5的第二权重系数b为3/8,则加权补偿后的预测值为p1*5/8+预测值p2*3/8。

针对标记为4的每个子块4,其处理过程参见子块7,在此不再赘述。由于子块4位于对角线,因此,第一权重系数a可以等于第二权重系数b,如子块4的第一权重系数a为4/8,子块4的第二权重系数b为4/8,则加权补偿后的预测值为p1*4/8+预测值p2*4/8。

针对标记为3的每个子块3,其处理过程参见子块7,在此不再赘述。子块3的第一权重系数a为3/8,子块3的第二权重系数b为5/8,则加权补偿后的预测值为p1*3/8+预测值p2*5/8。

针对标记为2的每个子块2,其处理过程参见子块7,在此不再赘述。由于子块2位于第二三角子块内,因此,第一权重系数a可以小于第二权重系数b,如子块2的第一权重系数a为2/8,子块2的第二权重系数b为6/8,则加权补偿后的预测值为p1*2/8+预测值p2*6/8。

针对标记为1的每个子块1,其处理过程参见子块7,在此不再赘述。由于子块1位于第二三角子块内,因此,第一权重系数a小于第二权重系数b。又由于与子块2相比,子块2更靠近p2区域,因此,子块1的第一权重系数a可以小于子块2的第一权重系数a,如子块1的第一权重系数a为1/8,b为7/8,则加权补偿后的预测值为p1*1/8+预测值p2*7/8。

综上所述,本实施例提出一套用于亮度分量的加权系数,从p1区域到p2区域的方向,每个子块的第一权重系数a依次为{7/8,6/8,5/8,4/8,3/8,2/8,1/8}。例如,子块7的第一权重系数a为7/8,子块6的第一权重系数a为6/8,子块5的第一权重系数a为5/8,子块4的第一权重系数a为4/8,子块3的第一权重系数a为3/8,子块2的第一权重系数a为2/8,子块1的第一权重系数a为1/8。上述亮度分量是指预测值p1为亮度预测值,预测值p2为亮度预测值,且加权补偿后的预测值p1*a+预测值p2*b,也为亮度预测值。

参见图7d所示,本实施例还提出一套用于色度分量的加权系数,从p1区域到p2区域的方向,每个子块的第一权重系数a依次为{6/8,4/8,2/8}。例如,子块6的第一权重系数a为6/8,子块4的第一权重系数a为4/8,子块2的第一权重系数a为2/8。上述色度分量是指预测值p1为色度预测值,预测值p2为色度预测值,且加权补偿后的预测值也为色度预测值。

实施例19:在步骤306和步骤406中,编码端/解码端需要保存当前块的运动信息。针对第一三角子块中采用非加权预测补偿的子块,为该子块存储第一目标运动信息;针对第二三角子块中采用非加权预测补偿的子块,为该子块存储第二目标运动信息;针对采用加权预测补偿的子块,为该子块存储第一目标运动信息、第二目标运动信息或者双向运动信息。

参见图7e所示,假设块2、块3、块4、块7、块8、块12是第一三角子块中采用非加权预测补偿的子块,则可以为块2、块3、块4、块7、块8、块12存储第一目标运动信息(即第一三角子块的第一目标运动信息)。假设块5、块9、块10、块13、块14、块15是第二三角子块中采用非加权预测补偿的子块,则可以为块5、块9、块10、块13、块14、块15存储第二目标运动信息(即第二三角子块的第二目标运动信息)。假设块1、块6、块11、块16是采用加权预测补偿的子块,则可以为块1、块6、块11、块16存储第一目标运动信息、第二目标运动信息或者双向运动信息,具体存储方式可以参见后续实施例。

参见图7f所示,假设块1、块2、块3、块5、块6、块9是第一三角子块中采用非加权预测补偿的子块,则可以为块1、块2、块3、块5、块6、块9存储第一目标运动信息(即第一三角子块的第一目标运动信息)。假设块9、块11、块12、块14、块15、块16是第二三角子块中采用非加权预测补偿的子块,则可以为块9、块11、块12、块14、块15、块16存储第二目标运动信息(即第二三角子块的第二目标运动信息)。假设块4、块7、块10、块13是采用加权预测补偿的子块,则可以为块4、块7、块10、块13存储第一目标运动信息、第二目标运动信息或者双向运动信息,具体存储方式可以参见后续实施例。

示例性的,可以为每个4*4大小的子块存储运动信息,当然,对子块的大小不做限制。

实施例20:针对第一三角子块中采用非加权预测补偿的子块,为该子块存储第一目标运动信息;针对第二三角子块中采用非加权预测补偿的子块,为该子块存储第二目标运动信息;针对采用加权预测补偿的子块,为该子块存储第一目标运动信息或者第二目标运动信息。

应用场景1:针对采用加权预测补偿的子块,为子块直接存储第一目标运动信息。

应用场景2:针对采用加权预测补偿的子块,为子块直接存储第二目标运动信息。

应用场景3:针对采用加权预测补偿的子块,根据当前块的划分方向(如主对角线方向或者副对角线方向)为子块存储第一目标运动信息或者第二目标运动信息。

示例性的,若当前块的划分方向为副对角线方向(与水平向右方向呈135度夹角),则为子块存储第一目标运动信息。若当前块的划分方向为主对角线方向(与水平向右方向呈45度夹角),则为子块存储第二目标运动信息。或者,若当前块的划分方向为副对角线方向(与水平向右方向呈135度夹角),则为子块存储第二目标运动信息。若当前块的划分方向为主对角线方向(与水平向右方向呈45度夹角),则为子块存储第一目标运动信息。

应用场景4:针对采用加权预测补偿的子块,根据子块的位置(如子块在对角线上、对角线上方、对角线下方等)为子块存储第一目标运动信息或者第二目标运动信息。

示例性的,若子块在对角线上或者在对角线上方,则为子块存储第一目标运动信息;若子块在对角线下方,则为子块存储第二目标运动信息。或,若子块在对角线上或者在对角线下方,则为子块存储第二目标运动信息;若子块在对角线上方,则为子块存储第一目标运动信息。或,若子块在对角线上或者在对角线上方,则为子块存储第二目标运动信息;若子块在对角线下方,则为子块存储第一目标运动信息。或,若子块在对角线上或者在对角线下方,则为子块存储第一目标运动信息;若子块在对角线上方,则为子块存储第二目标运动信息。

应用场景5:针对采用加权预测补偿的子块,可以根据子块的位置(例如,子块在对角线上、对角线上方、对角线下方等)和当前块的划分方向(例如,主对角线方向或者副对角线方向),为所述子块存储第一目标运动信息或者第二目标运动信息。

示例性的,若子块在对角线上,则可以基于当前块的划分方向,为所述子块存储第一目标运动信息或者第二目标运动信息。例如,若当前块的划分方向为副对角线方向,则为所述子块存储第一目标运动信息。若当前块的划分方向为主对角线方向,则为所述子块存储第二目标运动信息。或者,若当前块的划分方向为副对角线方向,则为所述子块存储第二目标运动信息。若当前块的划分方向为主对角线方向,则为所述子块存储第一目标运动信息。

示例性的,若子块在对角线上方,则为所述子块存储第一目标运动信息。

示例性的,若子块在对角线下方,则为所述子块存储第二目标运动信息。

实施例21:针对第一三角子块中采用非加权预测补偿的子块,为该子块存储第一目标运动信息;针对第二三角子块中采用非加权预测补偿的子块,为该子块存储第二目标运动信息;针对采用加权预测补偿的子块,为该子块存储第一目标运动信息、第二目标运动信息或者双向运动信息(即第一目标运动信息和第二目标运动信息组成的双向运动信息)。

应用场景1:针对采用加权预测补偿的子块,若第一目标运动信息和第二目标运动信息来自不同的list,则直接将第一目标运动信息和第二目标运动信息合并为双向运动信息,为子块存储双向运动信息(即第一目标运动信息和第二目标运动信息组成的双向运动信息)。若第一目标运动信息和第二目标运动信息来自相同的list,则为子块存储第一目标运动信息。

应用场景2:针对采用加权预测补偿的子块,若第一目标运动信息和第二目标运动信息来自不同的list,则直接将第一目标运动信息和第二目标运动信息合并为双向运动信息,为子块存储双向运动信息(即第一目标运动信息和第二目标运动信息组成的双向运动信息)。若第一目标运动信息和第二目标运动信息来自相同的list,则为子块存储第二目标运动信息。

应用场景3:针对采用加权预测补偿的子块,若第一目标运动信息和第二目标运动信息来自不同的list,则直接将第一目标运动信息和第二目标运动信息合并为双向运动信息,为子块存储双向运动信息(即第一目标运动信息和第二目标运动信息组成的双向运动信息)。若第一目标运动信息和第二目标运动信息来自相同的list,则根据当前块的划分方向(如主对角线方向或者副对角线方向)为子块存储第一目标运动信息或者第二目标运动信息。

示例性的,若当前块的划分方向为副对角线方向,则可以为所述子块存储第一目标运动信息。若当前块的划分方向为主对角线方向,则可以为所述子块存储第二目标运动信息。或者,若当前块的划分方向为副对角线方向,则可以为所述子块存储第二目标运动信息。若当前块的划分方向为主对角线方向,则可以为所述子块存储第一目标运动信息。

应用场景4:针对采用加权预测补偿的子块,若第一目标运动信息和第二目标运动信息来自不同的list,则直接将第一目标运动信息和第二目标运动信息合并为双向运动信息,为子块存储双向运动信息(即第一目标运动信息和第二目标运动信息组成的双向运动信息)。若第一目标运动信息和第二目标运动信息来自相同的list,则根据子块的位置(如子块在对角线上、对角线上方、对角线下方等)为子块存储第一目标运动信息或者第二目标运动信息。

示例性的,若子块在对角线上或者在对角线上方,则为子块存储第一目标运动信息;若子块在对角线下方,则为子块存储第二目标运动信息。或,若子块在对角线上或者在对角线下方,则为子块存储第二目标运动信息;若子块在对角线上方,则为子块存储第一目标运动信息。或,若子块在对角线上或者在对角线上方,则为子块存储第二目标运动信息;若子块在对角线下方,则为子块存储第一目标运动信息。或,若子块在对角线上或者在对角线下方,则为子块存储第一目标运动信息;若子块在对角线上方,则为子块存储第二目标运动信息。

应用场景5:针对采用加权预测补偿的子块,若第一目标运动信息和第二目标运动信息来自不同的list,则直接将第一目标运动信息和第二目标运动信息合并为双向运动信息,为子块存储双向运动信息(即第一目标运动信息和第二目标运动信息组成的双向运动信息)。若第一目标运动信息和第二目标运动信息来自相同的list,则根据子块的位置(例如,子块在对角线上、对角线上方、对角线下方等)和当前块的划分方向(例如,主对角线方向或者副对角线方向),为所述子块存储第一目标运动信息或者第二目标运动信息。

示例性的,若子块在对角线上,则可以基于当前块的划分方向,为所述子块存储第一目标运动信息或者第二目标运动信息。例如,若当前块的划分方向为副对角线方向,则为所述子块存储第一目标运动信息。若当前块的划分方向为主对角线方向,则为所述子块存储第二目标运动信息。或者,若当前块的划分方向为副对角线方向,则为所述子块存储第二目标运动信息。若当前块的划分方向为主对角线方向,则为所述子块存储第一目标运动信息。

示例性的,若子块在对角线上方,则为所述子块存储第一目标运动信息。

示例性的,若子块在对角线下方,则为所述子块存储第二目标运动信息。

应用场景6:针对采用加权预测补偿的子块,若第一目标运动信息和第二目标运动信息来自不同的list,则直接将第一目标运动信息和第二目标运动信息合并为双向运动信息,为子块存储双向运动信息(即第一目标运动信息和第二目标运动信息组成的双向运动信息)。若第一目标运动信息和第二目标运动信息来自相同的list,则为子块存储第一目标运动信息与第二目标运动信息均值。例如,若第一目标运动信息对应的list的参考帧与第二目标运动信息对应的list的参考帧相同,则为子块存储第一目标运动信息与第二目标运动信息均值。

示例性的,第一目标运动信息与第二目标运动信息均值,可以包括:第一目标运动信息与第二目标运动信息平均值,例如,第一目标运动信息中的运动矢量与第二目标运动信息中的运动矢量的平均值,也就是说,二者的权重可以相同。或者,第一目标运动信息与第二目标运动信息的加权平均值,例如,第一目标运动信息中的运动矢量与第二目标运动信息中的运动矢量的加权平均值,也就是说,二者的权重可以不同。

示例性的,若第一目标运动信息对应的list的参考帧与第二目标运动信息对应的list的参考帧相同,则为子块存储第一目标运动信息与第二目标运动信息均值。若第一目标运动信息对应的list的参考帧与第二目标运动信息对应的list的参考帧不同,则根据当前块的划分方向(如主对角线方向或者副对角线方向)为子块存储第一目标运动信息或者第二目标运动信息。

例如,若当前块的划分方向为副对角线方向,则可以为所述子块存储第一目标运动信息。若当前块的划分方向为主对角线方向,则可以为所述子块存储第二目标运动信息。或者,若当前块的划分方向为副对角线方向,则可以为所述子块存储第二目标运动信息。若当前块的划分方向为主对角线方向,则可以为所述子块存储第一目标运动信息。

应用场景7:针对采用加权预测补偿的子块,若第一目标运动信息和第二目标运动信息来自不同的list,则直接将第一目标运动信息和第二目标运动信息合并为双向运动信息,为子块存储双向运动信息。若第一目标运动信息和第二目标运动信息来自相同的list,则可以根据当前块的尺寸信息,为子块存储第一目标运动信息或第二目标运动信息。

示例性的,若当前块的宽度值与当前块的高度值相等,根据当前块的划分方向为子块存储第一目标运动信息或者第二目标运动信息。例如,若划分方向为副对角线方向,则可以为所述子块存储第一目标运动信息。若划分方向为主对角线方向,则可以为所述子块存储第二目标运动信息。或者,若划分方向为副对角线方向,则可以为所述子块存储第二目标运动信息。若划分方向为主对角线方向,则可以为所述子块存储第一目标运动信息。

示例性的,若当前块的宽度值与高度值不等,则基于宽高关系为子块存储第一目标运动信息或第二目标运动信息。例如,若当前块的高度值大于当前块的宽度值,则为子块存储第一目标运动信息;若当前块的高度值小于当前块的宽度值,则为子块存储第二目标运动信息。

应用场景8:针对采用加权预测补偿的子块,可以存储双向运动信息,该双向运动信息通过如下规则推导:若第一目标运动信息和第二目标运动信息来自不同的list,则直接将第一目标运动信息和第二目标运动信息合并为双向运动信息,为子块存储双向运动信息。否则,若第一目标运动信息和第二目标运动信息均来自一个list,记为listx(x=0/1),则:

若第二目标运动信息的参考帧与list(1-x)的某个参考帧一样,则将第二目标运动信息缩放到该参考帧,利用第一目标运动信息和缩放后的第二目标运动信息合成双向运动信息。

若第一目标运动信息的参考帧与list(1-x)的某个参考帧一样,则将第一目标运动信息缩放到该参考帧,利用第二目标运动信息和缩放后的第一目标运动信息合成双向运动信息。

否则,这些采用加权预测补偿的子块块只存储第一目标运动信息。

实施例22:

基于与上述方法同样的申请构思,本申请实施例还提出一种编解码装置,应用于编码端或者解码端,如图8所示,为所述装置的结构图,所述装置可以包括:

划分模块81,用于若当前块的特征信息满足特定条件,则将所述当前块划分为第一三角子块和第二三角子块;构建模块82,用于为所述当前块构建运动信息列表,所述运动信息列表包括多个候选运动信息;获取模块83,用于从所述运动信息列表中获取所述第一三角子块的第一目标运动信息以及所述第二三角子块的第二目标运动信息;所述第一目标运动信息与所述第二目标运动信息不同;编解码模块84,用于根据所述第一目标运动信息对所述第一三角子块进行运动补偿,得到所述第一三角子块的预测值;根据所述第二目标运动信息对所述第二三角子块进行运动补偿,得到所述第二三角子块的预测值。

示例性的,所述特征信息包括以下一种或多种:运动信息模式、尺寸信息、帧类型、序列级开关控制信息。

所述划分模块81还用于:若所述特征信息包括所述运动信息模式,所述运动信息模式满足如下情况的一种或者同时满足至少两种时,则确定所述运动信息模式满足特定条件;

所述当前块的运动信息模式为融合模式或者跳过模式;

所述当前块的运动信息模式为融合模式或者跳过模式,且所述当前块的运动信息模式不为除三角预测子模式之外的其它类型的融合子模式或跳过子模式;

所述当前块的运动信息模式为融合模式,且所述当前块的运动信息模式不为普通融合子模式、mmvd子模式、sb融合子模式、ciip子模式中的任意一种子模式;

所述当前块的运动信息模式为跳过模式,且所述当前块的运动信息模式不为普通融合子模式、mmvd子模式、sb融合子模式中的任意一种子模式。

所述划分模块81还用于:若所述特征信息包括所述帧类型,所述帧类型满足如下情况的一种或者两种时,则确定所述帧类型满足特定条件;

所述帧类型为所述当前块所在当前帧为b帧;

所述帧类型为所述当前块所在当前帧允许帧内块拷贝。

所述划分模块81还用于:若所述特征信息包括所述序列级开关控制信息,所述序列级开关控制信息为允许所述当前块采用三角预测模式,则确定所述序列级开关控制信息满足特定条件。

所述划分模块81还用于:若所述特征信息包括所述尺寸信息,所述尺寸信息满足如下情况的一种或同时满足至少两种时,则确定所述尺寸信息满足特定条件;

所述当前块的宽度值大于或等于第一阈值,所述当前块的宽度值小于或等于第二阈值;

所述当前块的高度值大于或等于第三阈值,所述当前块的高度值小于或等于第四阈值;

所述当前块的面积值大于或等于第五阈值,所述当前块的面积值小于或等于第六阈值;

所述当前块的面积值大于或者等于第七阈值;

所述当前块的面积值小于或者等于第八阈值;

所述当前块的宽度值小于或等于第九阈值,所述当前块的高度值小于或等于第十阈值。

若所述编解码装置应用于解码端,所述划分模块81将所述当前块划分为第一三角子块和第二三角子块时具体用于:从编码比特流获取第一指示信息,所述第一指示信息用于指示三角子块的划分信息;若所述三角子块的划分信息为主对角线划分方式,则按照所述当前块的主对角线将所述当前块划分为第一三角子块和第二三角子块;若所述三角子块的划分信息为副对角线划分方式,则按照所述当前块的副对角线将所述当前块划分为第一三角子块和第二三角子块。

示例性的,所述第一指示信息,基于旁路的二进制算术解码得到;或者,所述第一指示信息,基于上下文模型进行基于上下文的自适应二进制算术解码得到。

所述构建模块82为所述当前块构建运动信息列表时具体用于:

复用常规融合模式的运动信息列表构建方式,为所述当前块构建运动信息列表。

若所述编解码装置应用于解码端,所述获取模块83从所述运动信息列表中获取所述第一三角子块的第一目标运动信息以及所述第二三角子块的第二目标运动信息时具体用于:

从编码比特流获取第二指示信息,所述第二指示信息用于指示第一目标运动信息在运动信息列表中的第一索引值、第二目标运动信息在运动信息列表中的第二索引值;

基于所述第二指示信息,从所述运动信息列表中获取与所述第一索引值对应的候选运动信息,并将获取的候选运动信息确定为所述第一三角子块的第一目标运动信息;

基于所述第二指示信息,从所述运动信息列表中获取与所述第二索引值对应的候选运动信息,并将获取的候选运动信息确定为所述第二三角子块的第二目标运动信息。

所述第一索引值基于旁路的二进制算术解码得到,或者,所述第一索引值基于上下文模型进行基于上下文的自适应二进制算术解码得到;所述第二索引值基于旁路的二进制算术解码得到,或者,所述第二索引值基于上下文模型进行基于上下文的自适应二进制算术解码得到。

所述第一索引值包括m1个二进制位,所述m1个二进制位中的n1个二进制位,基于上下文模型进行基于上下文的自适应二进制算术解码得到,所述m1个二进制位中的剩余(m1-n1)个二进制位,基于旁路的二进制算术解码得到;所述m1为大于或者等于1的正整数,所述n1为大于或者等于1的正整数,所述m1大于或者等于所述n1;

所述第二索引值包括m2个二进制位,所述m2个二进制位中的n2个二进制位,基于上下文模型进行基于上下文的自适应二进制算术解码得到,所述m2个二进制位中的剩余(m2-n2)个二进制位,基于旁路的二进制算术解码得到;所述m2为大于或者等于1的正整数,所述n2为大于或者等于1的正整数,所述m2大于或者等于所述n2。

所述第一索引值对应的上下文模型与所述第二索引值对应的上下文模型相同;或者,所述第一索引值对应的上下文模型与所述第二索引值对应的上下文模型不同。

所述获取模块83从所述运动信息列表中获取与所述第一索引值对应的候选运动信息,并将获取的候选运动信息确定为所述第一三角子块的第一目标运动信息时具体用于:

若所述第一索引值为偶数,与所述第一索引值对应的候选运动信息包括list0中的单向运动信息,则将list0中的单向运动信息确定为所述第一三角子块的第一目标运动信息;

若所述第一索引值为偶数,与所述第一索引值对应的候选运动信息不包括list0中的单向运动信息,则将list1中的单向运动信息确定为所述第一三角子块的第一目标运动信息;

若所述第一索引值为奇数,与所述第一索引值对应的候选运动信息包括list1中的单向运动信息,则将list1中的单向运动信息确定为所述第一三角子块的第一目标运动信息;

若所述第一索引值为奇数,与所述第一索引值对应的候选运动信息不包括list1中的单向运动信息,则将list0中的单向运动信息确定为所述第一三角子块的第一目标运动信息;

所述从所述运动信息列表中获取与所述第二索引值对应的候选运动信息,并将获取的候选运动信息确定为所述第二三角子块的第二目标运动信息,包括:

若所述第二索引值为偶数,与所述第二索引值对应的候选运动信息包括list0中的单向运动信息,则将list0中的单向运动信息确定为所述第二三角子块的第二目标运动信息;

若所述第二索引值为偶数,与所述第二索引值对应的候选运动信息不包括list0中的单向运动信息,则将list1中的单向运动信息确定为所述第二三角子块的第二目标运动信息;

若所述第二索引值为奇数,与所述第二索引值对应的候选运动信息包括list1中的单向运动信息,则将list1中的单向运动信息确定为所述第二三角子块的第二目标运动信息;

若所述第二索引值为奇数,与所述第二索引值对应的候选运动信息不包括list1中的单向运动信息,则将list0中的单向运动信息确定为所述第二三角子块的第二目标运动信息。

所述获取模块83还用于:获取第一候选集合和第二候选集合,所述第一候选集合包括所述运动信息列表中的部分候选运动信息,所述第二候选集合包括所述运动信息列表中的部分候选运动信息,所述第一候选集合中的候选运动信息与所述第二候选集合中的候选运动信息不完全相同;从所述第一候选集合中获取与所述第一索引值对应的候选运动信息,并将获取的候选运动信息确定为所述第一三角子块的第一目标运动信息;

从所述第二候选集合中获取与所述第二索引值对应的候选运动信息,并将获取的候选运动信息确定为所述第二三角子块的第二目标运动信息。

所述装置还包括:存储模块,用于针对第一三角子块中采用非加权预测补偿的子块,为所述子块存储第一目标运动信息;针对第二三角子块中采用非加权预测补偿的子块,为所述子块存储第二目标运动信息;针对采用加权预测补偿的子块,为所述子块存储第一目标运动信息、第二目标运动信息或者双向运动信息。

所述存储模块针对采用加权预测补偿的子块,为所述子块存储第一目标运动信息、第二目标运动信息或者双向运动信息时具体用于:

为所述子块存储第一目标运动信息;或者,

为所述子块存储第二目标运动信息;或者,

根据所述子块的位置为所述子块存储第一目标运动信息或第二目标运动信息;或者,

根据当前块的划分方向为所述子块存储第一目标运动信息或第二目标运动信息;或者,

根据所述子块的位置和所述当前块的划分方向,为所述子块存储第一目标运动信息或第二目标运动信息。

所述存储模块针对采用加权预测补偿的子块,为所述子块存储第一目标运动信息、第二目标运动信息或者双向运动信息时具体用于:

若所述第一目标运动信息和所述第二目标运动信息来自不同的list,则将所述第一目标运动信息和所述第二目标运动信息合并为双向运动信息,并为所述子块存储所述双向运动信息;

若所述第一目标运动信息和所述第二目标运动信息来自相同的list,则为所述子块存储所述第一目标运动信息,或者,为所述子块存储所述第二目标运动信息。

所述存储模块为所述子块存储所述第一目标运动信息,或者,为所述子块存储所述第二目标运动信息时具体用于:为所述子块存储所述第一目标运动信息;或者,

为所述子块存储所述第二目标运动信息;或者,

根据所述子块的位置为所述子块存储第一目标运动信息或第二目标运动信息;或者,

根据当前块的划分方向为所述子块存储第一目标运动信息或第二目标运动信息;或者,

根据所述子块的位置和所述当前块的划分方向,为所述子块存储第一目标运动信息或第二目标运动信息;或者,

为所述子块存储第一目标运动信息与第二目标运动信息均值;或者,

根据所述当前块的尺寸信息,为所述子块存储第一目标运动信息或第二目标运动信息。

本申请实施例提供的解码端设备,从硬件层面而言,其硬件架构示意图具体可以参见图9a所示。包括:处理器91和机器可读存储介质92,其中:所述机器可读存储介质92存储有能够被所述处理器91执行的机器可执行指令;所述处理器91用于执行机器可执行指令,以实现本申请上述示例公开的方法。例如,所述处理器91用于执行机器可执行指令,以实现如下步骤:若当前块的特征信息满足特定条件,将所述当前块划分为第一三角子块和第二三角子块;为所述当前块构建运动信息列表,所述运动信息列表包括多个候选运动信息;从所述运动信息列表中获取所述第一三角子块的第一目标运动信息以及所述第二三角子块的第二目标运动信息;所述第一目标运动信息与所述第二目标运动信息不同;根据所述第一目标运动信息对所述第一三角子块进行运动补偿,得到所述第一三角子块的预测值;根据所述第二目标运动信息对所述第二三角子块进行运动补偿,得到所述第二三角子块的预测值。

本申请实施例提供的编码端设备,从硬件层面而言,其硬件架构示意图具体可以参见图9b所示。包括:处理器93和机器可读存储介质94,其中:所述机器可读存储介质94存储有能够被所述处理器93执行的机器可执行指令;所述处理器93用于执行机器可执行指令,以实现本申请上述示例公开的方法。例如,所述处理器93用于执行机器可执行指令,以实现如下步骤:若当前块的特征信息满足特定条件,将所述当前块划分为第一三角子块和第二三角子块;为所述当前块构建运动信息列表,所述运动信息列表包括多个候选运动信息;从所述运动信息列表中获取所述第一三角子块的第一目标运动信息以及所述第二三角子块的第二目标运动信息;所述第一目标运动信息与所述第二目标运动信息不同;根据所述第一目标运动信息对所述第一三角子块进行运动补偿,得到所述第一三角子块的预测值;根据所述第二目标运动信息对所述第二三角子块进行运动补偿,得到所述第二三角子块的预测值。

基于与上述方法同样的申请构思,本申请实施例还提供一种机器可读存储介质,所述机器可读存储介质上存储有若干计算机指令,所述计算机指令被处理器执行时,能够实现本申请上述示例公开的编解码方法。其中,上述机器可读存储介质可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据,等等。例如,机器可读存储介质可以是:ram(radomaccessmemory,随机存取存储器)、易失存储器、非易失性存储器、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、dvd等),或者类似的存储介质,或者它们的组合。

上述实施例阐明的系统、装置、模块或单元,可以由计算机芯片或实体实现,或由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。

为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可以由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其它可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其它可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可以存储在能引导计算机或其它可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或者多个流程和/或方框图一个方框或者多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其它可编程数据处理设备上,使得在计算机或者其它可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其它可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

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