解码方法、编码方法、装置、设备及机器可读存储介质转让专利

申请号 : CN202111146250.2

文献号 : CN113794877B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 曹小强陈方栋王莉

申请人 : 杭州海康威视数字技术股份有限公司

摘要 :

本申请提供一种解码方法、编码方法、装置、设备及机器可读存储介质,该解码方法包括:接收码流,解析当前编码单元的跳过模式或直接模式的运动信息索引值;构建跳过或直接模式的候选列表;确定当前编码单元的预测模式;根据当前编码单元的预测模式获取当前编码单元的运动信息,对当前编码单元进行运动补偿;其中,解析当前编码单元的跳过模式或直接模式的运动信息索引值,包括:获取运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数;根据运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,确定当前编码单元的跳过模式或直接模式的运动信息索引值。该方法可以提升编解码性能。

权利要求 :

1.一种解码方法,其特征在于,包括:

接收码流,解析当前编码单元的跳过模式或直接模式的运动信息索引值;

构建跳过或直接模式的候选列表;

根据当前编码单元的跳过模式或直接模式的运动信息索引值和候选列表确定当前编码单元的预测模式;

根据当前编码单元的预测模式获取当前编码单元的运动信息,对当前编码单元进行运动补偿;

其中,所述解析当前编码单元的跳过模式或直接模式的运动信息索引值,包括:获取运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数;

根据所述运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,以及当前图像的帧类型,确定所述当前编码单元的跳过模式或直接模式的运动信息索引值。

2.根据权利要求1所述的方法,其特征在于,所述获取运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,包括:解析序列级高层语法,获取所述运动矢量角度预测候选运动信息个数和所述帧间预测候选历史运动信息个数;

其中,所述解析序列级高层语法,获取所述运动矢量角度预测候选运动信息个数和所述帧间预测候选历史运动信息个数,包括:解析增强时域运动矢量预测和运动矢量角度预测允许标志,根据所述增强时域运动矢量预测和运动矢量角度预测允许标志的取值,确定所述运动矢量角度预测候选运动信息个数;以及,解析帧间预测候选历史运动信息个数索引,根据所述帧间预测候选历史运动信息个数索引的取值,确定所述帧间预测候选历史运动信息个数;

其中,所述增强时域运动矢量预测和运动矢量角度预测允许标志用于指示同时开启增强时域运动矢量预测模式和运动矢量角度预测模式,或,同时关闭增强时域运动矢量预测模式和运动矢量角度预测模式。

3.根据权利要求1所述的方法,其特征在于,所述根据所述运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,以及当前图像的帧类型,确定所述当前编码单元的跳过模式或直接模式的运动信息索引值,包括:根据所述运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,以及当前图像的帧类型,确定最大索引值;

根据所述最大索引值,采用截断一元码的反二值化方式解析当前编码单元的跳过模式或直接模式的运动信息索引值。

4.根据权利要求3所述的方法,其特征在于,所述根据所述运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,以及当前图像的帧类型,确定最大索引值,包括:确定所述运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数中的最大值;

若所述当前图像的帧类型为P图像,则将该最大值与1二者之和,确定为最大索引值;

若所述当前图像的帧类型为B图像,则将该最大值与3二者之和,确定为最大索引值。

5.根据权利要求2所述的方法,其特征在于,所述根据所述增强时域运动矢量预测和运动矢量角度预测允许标志的取值,确定所述运动矢量角度预测候选运动信息个数,包括:当所述增强时域运动矢量预测和运动矢量角度预测允许标志的取值为1时,确定所述运动矢量角度预测候选运动信息个数为5;其中,所述增强时域运动矢量预测和运动矢量角度预测允许标志的取值为1,表示当前编码单元可使用增强时域运动矢量预测和运动矢量角度预测;

当所述增强时域运动矢量预测和运动矢量角度预测允许标志的取值为0,或,码流中不存在所述增强时域运动矢量预测和运动矢量角度预测允许标志时,确定所述运动矢量角度预测候选运动信息个数为0;其中,所述增强时域运动矢量预测和运动矢量角度预测允许标志的取值为0,或,码流中不存在所述增强时域运动矢量预测和运动矢量角度预测允许标志,表示当前编码单元不应使用增强时域运动矢量预测和运动矢量角度预测。

6.一种编码方法,其特征在于,包括:

构建跳过或直接模式的候选列表:按顺序遍历预测模式候选列表中的每一种预测模式,对于每一种预测模式,获取当前编码单元的运动信息和当前编码单元的跳过模式或直接模式的运动信息索引值;

根据当前编码单元的运动信息,对当前编码单元进行运动补偿;

计算该预测模式对应的率失真代价值,并将该率失真代价值与其他候选预测模式的代价值进行比较,选择最小的率失真代价值所对应的预测模式;

将率失真代价值最小的预测模式对应的当前编码单元的跳过模式或直接模式的运动信息索引值携带进码流,传送给解码端;

其中,所述将率失真代价值最小的预测模式对应的当前编码单元的跳过模式或直接模式的运动信息索引值携带进码流,包括:获取运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数;

根据所述运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,以及当前图像的帧类型,对所述当前编码单元的跳过模式或直接模式的运动信息索引值进行编码,并携带进码流。

7.根据权利要求6所述的方法,其特征在于,所述根据所述运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,以及当前图像的帧类型,对所述当前编码单元的跳过模式或直接模式的运动信息索引值进行编码,包括:根据所述运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,以及当前图像的帧类型,确定最大索引值;

根据所述最大索引值,采用截断一元码的二值化方式编码所述当前编码单元的跳过模式或直接模式的运动信息索引值。

8.根据权利要求7所述的方法,其特征在于,所述根据所述运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,以及当前图像的帧类型,确定最大索引值,包括:确定所述运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数中的最大值;

若所述当前图像的帧类型为P图像,则将该最大值与1二者之和,确定为最大索引值;

若所述当前图像的帧类型为B图像,则将该最大值与3二者之和,确定为最大索引值。

9.一种解码装置,其特征在于,包括:

解码模块,用于接收码流,解析当前编码单元的跳过模式或直接模式的运动信息索引值;

构建模块,用于构建跳过或直接模式的候选列表;

确定模块,用于根据当前编码单元的跳过模式或直接模式的运动信息索引值和候选列表确定当前编码单元的预测模式;

补偿模块,用于根据当前编码单元的预测模式获取当前编码单元的运动信息,对当前编码单元进行运动补偿;

其中,所述解码模块,具体用于获取运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数;

根据所述运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,以及当前图像的帧类型,确定所述当前编码单元的跳过模式或直接模式的运动信息索引值。

10.一种编码装置,其特征在于,包括:

构建模块,用于构建跳过或直接模式的候选列表:按顺序遍历预测模式候选列表中的每一种预测模式,对于每一种预测模式,获取当前编码单元的运动信息和当前编码单元的跳过模式或直接模式的运动信息索引值;

补偿模块,用于根据当前编码单元的运动信息,对当前编码单元进行运动补偿;

确定模块,用于计算该预测模式对应的率失真代价值,并将该率失真代价值与其他候选预测模式的代价值进行比较,选择最小的率失真代价值所对应的预测模式;

编码模块,用于将率失真代价值最小的预测模式对应的当前编码单元的跳过模式或直接模式的运动信息索引值携带进码流,传送给解码端;

其中,所述编码模块,具体用于获取运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数;

根据所述运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,以及当前图像的帧类型,对所述当前编码单元的跳过模式或直接模式的运动信息索引值进行编码,并携带进码流。

11.一种解码端设备,其特征在于,包括处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令,所述处理器用于执行机器可执行指令,以实现如权利要求1‑5任一项所述的方法。

12.一种编码端设备,其特征在于,包括处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令,所述处理器用于执行机器可执行指令,以实现如权利要求6‑8任一项所述的方法。

13.一种机器可读存储介质,其特征在于,所述机器可读存储介质内存储有机器可执行指令,所述机器可执行指令被处理器执行时实现如权利要求1‑5或6‑8任一项所述的方法。

说明书 :

解码方法、编码方法、装置、设备及机器可读存储介质

技术领域

[0001] 本申请涉及视频编解码技术,尤其涉及一种解码方法、编码方法、装置、设备及机器可读存储介质。

背景技术

[0002] 完整的视频编码一般包括预测、变换、量化、熵编码、滤波等操作。预测可以分为帧内预测和帧间预测,帧内预测是利用周围已编码单元作为参考对当前未编码单元进行预测,有效去除空域上的冗余。帧间预测是使用邻近已编码图像对当前图像进行预测,有效去除时域上的冗余。

发明内容

[0003] 有鉴于此,本申请提供一种解码方法、编码方法、装置、设备及机器可读存储介质。
[0004] 具体地,本申请是通过如下技术方案实现的:
[0005] 根据本申请实施例的第一方面,提供一种解码方法,包括:
[0006] 接收码流,解析当前编码单元的跳过模式或直接模式的运动信息索引值;
[0007] 构建跳过或直接模式的候选列表;
[0008] 根据当前编码单元的跳过模式或直接模式的运动信息索引值和候选列表确定当前编码单元的预测模式;
[0009] 根据当前编码单元的预测模式获取当前编码单元的运动信息,对当前编码单元进行运动补偿;
[0010] 其中,所述解析当前编码单元的跳过模式或直接模式的运动信息索引值,包括:
[0011] 获取运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数;
[0012] 根据所述运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,确定所述当前编码单元的跳过模式或直接模式的运动信息索引值。
[0013] 根据本申请实施例的第二方面,提供一种编码方法,包括:
[0014] 构建跳过或直接模式的候选列表:按顺序遍历预测模式候选列表中的每一种预测模式,对于每一种预测模式,获取当前编码单元的运动信息和当前编码单元的跳过模式或直接模式的运动信息索引值;
[0015] 根据当前编码单元的运动信息,对当前编码单元进行运动补偿;
[0016] 计算该预测模式对应的率失真代价值,并将该率失真代价值与其他候选预测模式的代价值进行比较,选择最小的率失真代价值所对应的预测模式;
[0017] 将率失真代价值最小的预测模式对应的当前编码单元的跳过模式或直接模式的运动信息索引值携带进码流,传送给解码端;
[0018] 其中,所述将率失真代价值最小的预测模式对应的当前编码单元的跳过模式或直接模式的运动信息索引值携带进码流,包括:
[0019] 获取运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数;
[0020] 根据所述运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,对所述当前编码单元的跳过模式或直接模式的运动信息索引值进行编码,并携带进码流。
[0021] 根据本申请实施例的第三方面,提供一种解码装置,包括:
[0022] 解码模块,用于接收码流,解析当前编码单元的跳过模式或直接模式的运动信息索引值;
[0023] 构建模块,用于构建跳过或直接模式的候选列表;
[0024] 确定模块,用于根据当前编码单元的跳过模式或直接模式的运动信息索引值和候选列表确定当前编码单元的预测模式;
[0025] 补偿模块,用于根据当前编码单元的预测模式获取当前编码单元的运动信息,对当前编码单元进行运动补偿;
[0026] 其中,所述解码模块,具体用于获取运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数;
[0027] 根据所述运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,确定所述当前编码单元的跳过模式或直接模式的运动信息索引值。
[0028] 根据本申请实施例的第四方面,提供一种编码装置,包括:
[0029] 构建模块,用于构建跳过或直接模式的候选列表:按顺序遍历预测模式候选列表中的每一种预测模式,对于每一种预测模式,获取当前编码单元的运动信息和当前编码单元的跳过模式或直接模式的运动信息索引值;
[0030] 补偿模块,用于根据当前编码单元的运动信息,对当前编码单元进行运动补偿;
[0031] 确定模块,用于计算该预测模式对应的率失真代价值,并将该率失真代价值与其他候选预测模式的代价值进行比较,选择最小的率失真代价值所对应的预测模式;
[0032] 编码模块,用于将率失真代价值最小的预测模式对应的当前编码单元的跳过模式或直接模式的运动信息索引值携带进码流,传送给解码端;
[0033] 其中,所述编码模块,具体用于获取运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数;
[0034] 根据所述运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,对所述当前编码单元的跳过模式或直接模式的运动信息索引值进行编码,并携带进码流。
[0035] 根据本申请实施例的第五方面,提供一种解码端设备,包括处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令,所述处理器用于执行机器可执行指令,以实现第一方面提供的解码方法。
[0036] 根据本申请实施例的第六方面,提供一种编码端设备,包括处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令,所述处理器用于执行机器可执行指令,以实现第二方面提供的编码方法。
[0037] 本申请实施例的编码方法,通过接收码流,解析当前编码单元的跳过模式或直接模式的运动信息索引值,构建跳过或直接模式的候选列表,根据当前编码单元的跳过模式或直接模式的运动信息索引值和候选列表确定当前编码单元的预测模式,并根据当前编码单元的预测模式获取当前编码单元的运动信息,对当前编码单元进行运动补偿,在解析当前编码单元的跳过模式或直接模式的运动信息索引值时,通过获取运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,并根据运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,确定当前编码单元的跳过模式或直接模式的运动信息索引值,提高了跳过模式或直接模式的运动信息索引值确定的灵活性,提升了编解码性能。

附图说明

[0038] 图1是本申请一示例性实施例示出的一种编解码方法的示意图;
[0039] 图2是本申请一示例性实施例示出的一种SBTMVP模式的块划分示意图;
[0040] 图3是本申请一示例性实施例示出的一种Skip和Direct模式的空域相邻块位置示意图;
[0041] 图4是本申请一示例性实施例示出的一种MVAP模式下的模式索引与模式的对应关系示意图;
[0042] 图5是本申请一示例性实施例示出的一种运动矢量角度预测样本的位置示意图;
[0043] 图6是本申请一示例性实施例示出的一种HMVP方法的解码流程图;
[0044] 图7是本申请一示例性实施例示出的一种解码方法的流程示意图;
[0045] 图8是本申请一示例性实施例示出的另一种解码方法的流程示意图;
[0046] 图9是本申请一示例性实施例示出的一种编码方法的流程示意图;
[0047] 图10是本申请一示例性实施例示出的另一种编码方法的流程示意图;
[0048] 图11是本申请一示例性实施例示出的一种解码装置的结构示意图;
[0049] 图12是本申请一示例性实施例示出的一种编码装置的结构示意图;
[0050] 图13是本申请一示例性实施例示出的一种解码端设备的硬件结构示意图;
[0051] 图14是本申请一示例性实施例示出的一种编码端设备的硬件结构示意图。

具体实施方式

[0052] 这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
[0053] 在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。
[0054] 为了使本领域技术人员更好地理解本申请实施例提供的技术方案,下面先对本申请实施例涉及的部分技术术语以及现有视频编解码的主要流程进行简单说明。
[0055] 为了使本领域技术人员更好地理解本申请实施例提供的技术方案,下面先对本申请实施例涉及的部分技术术语进行简单说明。
[0056] 一、技术术语:
[0057] 1、帧间预测(Inter Prediction):帧间预测是指利用视频时域的相关性,由于视频序列通常包含有较强的时域相关性,使用邻近已编码图像像素预测当前图像的像素,可以达到有效去除视频时域冗余的目的。
[0058] 2、预测像素(Prediction Signal):指从已经编解码的像素中导出的像素值,通过原始像素与预测像素之差获得残差,进而进行残差变换量化以及系数编码。
[0059] 示例性的,帧间的预测像素指的是当前图像块从参考帧(重建像素帧)导出的像素值,由于像素位置离散,需要通过插值运算来获取最终的预测像素。预测像素与原始像素越接近,两者相减得到的残差能量越小,编码压缩性能越高。
[0060] 3、运动矢量(Motion Vector,简称MV):在帧间编码中,用MV表示当前编码块与其参考图像中的最佳匹配块之间的相对位移。每个划分的块(可以称为子块)都有相应的运动矢量需要传送到解码端。若对每个子块的MV进行独立编码和传输,特别是划分成小尺寸的子块,需要消耗相当多的比特。为了降低用于编码MV的比特数,视频编码中会利用相邻图像块之间的空间相关性,根据相邻已编码块的MV对当前待编码块的MV进行预测,然后对预测差进行编码。这样可以有效地降低表示MV的比特数。基于此,在对当前图像块的MV编码过程中,一般首先使用相邻已编码块的MV预测当前图像块的MV,然后对MV的预测值(Motion Vector Prediction,简称MVP)与运动矢量的真正估值之间的差值,即运动矢量残差(MotionVector Difference,简称MVD)进行编码,从而有效降低MV的编码比特数。
[0061] 4、运动信息(Motion Information):由于MV表示当前图像块与某个参考图像中的最佳匹配块之间的相对位移,为了准确获取指向图像块的信息,除了MV信息,还需要通过参考图像的索引信息来表示使用了哪个参考图像。视频编码技术中,对于当前图像,通常会基于一定的原则,建立一个参考图像列表,参考图像索引信息则表示当前图像块采用了参考图像列表中的第几个参考图像。此外,很多编码技术还支持多个参考图像列表,因此还需要一个索引值表示使用了哪一个参考图像列表,该索引值可以称为参考方向。视频编码中,MV、参考帧索引、参考方向等与运动相关的编码信息统称为运动信息。
[0062] 5、跳过(Skip)模式:Skip模式是一种帧间预测中的跳过模式,它不需要传输残差信息,也不需要传输MVD,只需要传输运动信息的索引即可,解码端通过解析索引即可推导编码单元的运动信息,获取运动信息后将预测值直接作为重建值即可。
[0063] 6、直接(Direct)模式:Direct模式是一种帧间预测中的直接模式,它需要传输残差信息,但不需要传输MVD,只需要传输运动信息的索引即可,解码端通过解析索引即可推导编码单元的运动信息,获取运动信息后将预测值加上残差值得到重建值。
[0064] 7、截断一元码的二值化与反二值化方法:表1synElVal与二元符号串的关系可以如表1所示:
[0065] 表1、synElVal与二元符号串的关系(截断一元码)
[0066]
[0067] 编码端可以由maxVal和需要编码的数值synElVal查表1得到需要编码的二元符号串,解码端可以由二元符号串和maxVal根据表1唯一得到synElVal的值。
[0068] 8、率失真原则(Rate‑Distortion Optimized,简称RDO):评价编码效率的指标包括:码率和峰值信噪比(Peak Signal to Noise Ratio,简称PSNR)。码率越小,则压缩率越大;PSNR越大,重建图像质量越好。在模式选择的时候,判别公式实质上也就是对二者的综合评价。
[0069] 模式对应的代价:J(mode)=D+λ*R。其中,D表示失真(Distortion),通常使用SSE(差值均方和)指标来衡量,SSE是指重建块与源图像块的差值均方和;λ是拉格朗日乘子;R就是该模式下图像块编码所需的实际比特数,包括编码模式信息、运动信息、残差等所需的比特总和。
[0070] 在模式选择时,若使用RDO原则去对编码模式做比较决策,通常可以保证编码性能最佳。
[0071] 二、下面再对视频编解码的主要流程进行简单说明。
[0072] 请参考图1中的(a),以视频编码为例,视频编码一般包括预测、变换、量化、熵编码等过程,进一步地,编码过程还可以按照图1中的(b)的框架来实现。
[0073] 其中,预测可以分为帧内预测和帧间预测,帧内预测是利用周围已编码块作为参考对当前未编码块进行预测,有效去除空域上的冗余。帧间预测是使用邻近已编码图像对当前图像进行预测,有效去除时域上的冗余。
[0074] 变换是指将图像从空间域转换至变换域,利用变换系数对图像加以表示。绝大多数图像都含有较多平坦区域和缓慢变化的区域,适当的变换可以使图像由在空间域的分散分布转换为在变换域的相对集中分布,去除信号之间的频域相关性,配合量化过程,可以有效压缩码流。
[0075] 熵编码是一种无损编码方式,可以把一系列元素符号转变为一个用来传输或存储的二进制码流,输入的符号可能包括量化后的变换系数、运动矢量信息、预测模式信息,变换量化相关语法等。熵编码可以有效地去除视频元素符号的冗余。
[0076] 上述是以编码为例进行介绍,视频解码与视频编码的过程是相对的,即视频解码通常包括熵解码、预测、反量化、反变换、滤波等过程,各个过程的实现原理与熵编码相同或相似。
[0077] 三、下面再分别对时域运动矢量预测模式(Temporal  Motion  Vector Prediction,简称TMVP)/子块时域运动信息预测(Sub‑Block Temporal Motion Vector Prediction,简称SBTMVP)、MHBSKIP、运动矢量角度预测(Motion Vector Angle Prediction,简称MVAP)、基于历史信息的运动矢量预测(History‑based Motion Vector Prediction,简称HMVP),以及增强时域运动矢量预测(Enhanced Temporal Motion Vector Prediction,ETMVP)技术的实现进行简单说明。
[0078] 3.1、TMVP/SBTMVP
[0079] 在AVS3中,TMVP和SBTMVP技术目前已经采纳到标准中。若当前块的宽度和高度均大于等于16,则当前块的时域运动信息为SBTMVP产生的运动信息,否则当前块的时域运动信息为TMVP产生的运动信息。
[0080] TMVP:首先找到时域参考帧中与当前编码单元预设位置相同位置的运动信息,然后经过缩放后作为当前块的时域运动信息,其中对于P图像,时域参考帧为list0的第一帧,对于B图像,时域参考帧为list1的第一帧。
[0081] SBTMVP:设当前块的尺寸为2Mx2N,示意图可以如图2所示,首先找到时域参考帧中与当前编码单元位置相同的区域,然后将该区域划分成4个大小为MxN的子块,获取每个子块在时域参考帧对应位置的运动信息,经过缩放后作为当前块对应位置子块的运动信息,最后每个子块的运动信息进行运动补偿得到预测值。
[0082] 3.2、MHBSKIP
[0083] MHBSKIP是AVS中Skip和Direct模式下的一种预测模式,其利用当前编码单元的空域相邻块的运动信息来预测当前编码单元的运动信息。
[0084] MHBSKIP模式通过当前编码单元空域相邻块构建双向、后向和前向三个运动信息来给当前编码单元进行预测。
[0085] 示例性的,Skip和Direct模式的空域相邻块位置可以如图3所示。
[0086] 3.3、MVAP
[0087] 在AVS3中,MVAP技术目前已经采纳到标准中,MVAP技术是将当前编码单元分成子块,然后利用最多5种预测角度,将每个子块按照预先设置的角度从周围空域相邻块拷贝运动信息。这样,就可以达到不用划分编码单元,即可为当前编码单元内部提供更多运动信息,从而提升编码性能。
[0088] 示例性的,MVAP技术中,模式索引与模式的对应关系可以分别参见表2和图4。
[0089] 表2
[0090]模式索引 模式描述
0 Horizontal(水平)
1 Vertical(垂直)
2 Horizontal_Up(水平偏上)
3 Horizontal_Down(水平偏下)
4 Vertical_Right(垂直偏右)
[0091] 具体步骤为:
[0092] 3.3.1、导出有效运动矢量角度预测模式数(ValidMvapModeNum)。
[0093] 令W和H是当前解码单元的宽度和高度,m和n的分别是W/4和H/4,(x,y)是当前解码单元左上角的像素坐标。A0,A1,…,Am‑1是当前块左下角位置的4×4块,Am,Am+1,…,Am+n‑1是当前块左侧位置所在的4×4块,Am+n是当前块左上角位置所在的4×4块,Am+n+1,Am+n+2,…,A2m+n是当前块上边位置所在的4×4块,A2m+n+1,A2m+n+1,…,A2m+2n是当前块右上角位置所在的4×4块。
[0094] 示例性的,运动矢量角度预测样本的位置示意图可以如图5所示。
[0095] 示例性的,若i的取值范围是0~m+n,则Ai的坐标分别是(x‑1,y+H+W‑4×i‑1);如果i的取值范围是m+n+1~2m+2n,则Ai的坐标分别为(x+4×i‑W‑H‑1,y‑1)。
[0096] 按以下步骤导出ValidMvapModeNum和ValidMvapModeFlag[s](s=0~4):
[0097] 3.3.1.1、将ValidMvapModeNum初始化为0,ValidMvapModeFlag[s]初始化为0(s=0~4);
[0098] 3.3.1.2、若满足以下条件之一,则ValidMvapModeNum等于0,ValidMvapModeFlag[s]等于0(s=0~4):
[0099] 3.3.1.2.1、EtmvpMvapEnableFlag的值为0。
[0100] 3.3.1.2.2、W小于8,或H小于8,或W和H均等于8。
[0101] 3.3.1.3、否则,按下列步骤更新ValidMvapModeNum和ValidMvapModeFlag[s]的值:
[0102] 3.3.1.3.1、若Am‑1+H/8与Am+n‑1块均采用帧间预测模式且运动信息不同,则ValidMvapModeFlag[0]等于1,并将ValidMvapModeNum的值加1;
[0103] 3.3.1.3.2、若Am+n+1+W/8与Am+n+1块均采用帧间预测模式且运动信息不同,则ValidMvapModeFlag[1]等于1,并将ValidMvapModeNum的值加1;
[0104] 3.3.1.3.3、若A m+n‑1与A m+n块均采用帧间预测模式且运动信息不同,或Am+n和Am+n+1块均采用帧间预测模式且运动信息不同,则ValidMvapModeFlag[2]等于1,并将ValidMvapModeNum的值加1;
[0105] 3.3.1.3.4、若AW/8‑1与Am‑1块均采用帧间预测模式且运动信息不同,或Am‑1与Am‑1+H/8块均采用帧间预测模式且运动信息不同,则ValidMvapModeFlag[3]等于1,并将ValidMvapModeNum的值加1;
[0106] 3.3.1.3.5、若Am+n+1+W/8与A2m+n+1块均采用帧间预测模式且运动信息不同,或A2m+n+1与A2m+n+1+H/8块均采用帧间预测模式且运动信息不同,则ValidMvapModeFlag[4]等于1,并将ValidMvapModeNum的值加1。
[0107] 3.3.2、填充参考运动信息列表neighborMotions[i](i=0~2m+2n)。
[0108] 令neighborMotions[i]是参考运动信息列表中的第i个运动信息(interPredRefMode,mvE0,mvE1,refIndexL0,refIndexL1),其中i的取值范围是0~2m+2n。
[0109] 若Ai位置空域存储单元的运动信息“可用”,则Ai位置存储单元的运动信息记为motionInfoAi(i=0~2m+2n)。
[0110] 3.3.2.1、填充neighborMotions[0]
[0111] 3.3.2.1.1、若A0位置空域存储单元的运动信息“不可用”,neighborMotions[0]的预测参考模式interPredRefMode设为“PRED_List0”,neighborMotions[0]的mvE0设为零矢量,neighborMotions[0]的refIndexL0设为0;
[0112] 3.3.2.1.2、否则,neighborMotions[0]设为motionInfoA0。
[0113] 3.3.2.2、按以下步骤从小到大依次遍历Ai,填充neighborMotions[i]。
[0114] 3.3.2.2.1、如果Ai位置空域存储单元的运动信息“可用”,neighborMotions[i]为motionInfoAi;
[0115] 3.3.2.2.2、否则,neighborMotions[i]等于neighborMotions[i‑1]。
[0116] 3.3.3、导出运动信息阵列MotionArray。
[0117] 根据curMvapMode和neighborMotions确定当前编码单元内部子块的运动信息阵列MotionArray[i][j](interPredRefMode,MvE0,MvE1,fIndexL0,RefIndexL1),其中i=0~(W>>3)‑1,j=0~(H>>3)‑1,(i,j)为当前编码单元内的8×8子块的索引,i为子块的水平索引值,j为子块的垂直索引值。对每个子块进行遍历,导出运动矢量角度预测的子块运动信息阵列MotionArray,并将BgcFlag和BgcIndex置零。
[0118]
[0119]
[0120] 3.4、HMVP
[0121] 基于历史信息的运动矢量预测方法是新一代视频编码标准AVS3中采纳的技术,其原理是利用先前的编码块的运动信息来预测当前编码单元的运动信息。通过建立一个HMVP的Table来保存先前编码单元的运动信息,当解码一个块后,去更新该HMVP的Table。因此,对于当前编码单元,始终有HMVP的Table中的运动信息可以利用,提高了预测精度。
[0122] 示例性的,HMVP方法的解码流程图可以如图6所示。
[0123] 3.5、ETMVP
[0124] 在AVS3中,ETMVP技术目前已经采纳到标准中,首先找到时域参考帧中与当前编码单元位置相同的区域,然后该区域内的每个8x8块所在的时域运动信息存储单元中运动矢量缩放值作为第一个候选;然后对该区域进行左右上下偏移8个亮度样本作为后续的候选,在得到各个候选之后,需要对候选进行查重,然后放入候选运动矢量列表,其中对于P图像,时域参考帧为list0的第一帧,对于B图像,时域参考帧为list1的第一帧。最后对列表中的每个候选获取8x8子块的运动信息进行运动补偿得到预测值。
[0125] 相关技术中,skip/direct模式的列表构建顺序为:时域+MHBSKIP+MVAP+HMVP,即按照时域、MHBSKIP、MVAP和HMVP的顺序构建skip/direct模式的候选列表。
[0126] 若当前图像为P图像,时域会产生1个候选运动信息,MHBSKIP会产生1个候选的运动信息,MVAP和HMVP一共会产生8个候选的运动信息,列表的长度为1+1+8=10。
[0127] 若当前图像为B图像,时域会产生1个候选运动信息,MHBSKIP会产生3个候选的运动信息,MVAP和HMVP一共会产生8个候选的运动信息,列表的长度为1+3+8=12。
[0128] 其中,MVAP和HMVP一共产生8个候选的运动信息,例如MVAP产生ValidMvapModeNum个候选的运动信息,HMVP产生剩下的8‑ValidMvapModeNum个候选的运动信息,ValidMvapModeNum取值范围为0~5。
[0129] 为了表示每个不同的候选运动信息,需要使用当前编码单元的skip模式或direct模式的运动信息索引值cu_subtype_index来进行标识。
[0130] 目前cu_subtype_index的取值范围为0~11,采用截断一元码进行二值化编码,maxVal等于11。
[0131] 然而实际上,由于P图像和B图像会产生不同长度的候选列表,并且HMVP和MVAP允许产生的最大候选运动信息的个数也不固定,cu_subtype_index的取值范围也不固定,若固定使用maxVal等于11来编码cu_subtype_index会造成比特开销的冗余。
[0132] 为了提高索引值确定的灵活性,减少编码冗余从而提升编解码性能,本申请实施例的优化方案可以包括以下部分或全部:
[0133] 首先,获取高层语法,得到运动矢量角度预测候选运动信息个数(NumOfMvapCand)和帧间预测候选历史运动信息个数(NumOfHmvpCand),获取当前图像的帧类型。
[0134] 然后,根据当前图像的帧类型和NumOfMvapCand以及NumOfHmvpCand来解析当前编码单元的跳过模式或直接模式的运动信息索引值cu_subtype_index。
[0135] 最后,获取ValidMvapModeNum,根据cu_subtype_index和ValidMvapModeNum来确定当前编码单元类型是MVAP模式还是HMVP模式。
[0136] 为了使本申请实施例的上述目的、特征和优点能够更加明显易懂,下面结合附图对本申请实施例中技术方案作进一步详细的说明。
[0137] 请参见图7,为本申请实施例提供的一种解码方法的流程示意图,其中,该解码方法可以应用于解码端设备,如图7所示,该解码方法可以包括以下步骤:
[0138] 步骤S700、接收码流,解析当前编码单元的跳过模式或直接模式的运动信息索引值。
[0139] 步骤S710、构建跳过或直接模式的候选列表。
[0140] 步骤S720、根据当前编码单元的跳过模式或直接模式的运动信息索引值和候选列表确定当前编码单元的预测模式。
[0141] 步骤S730、根据当前编码单元的预测模式获取当前编码单元的运动信息,对当前编码单元进行运动补偿。
[0142] 如图8所示,步骤S700中,解析当前编码单元的跳过模式或直接模式的运动信息索引值,可以通过以下步骤实现:
[0143] 步骤S701、获取运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数。
[0144] 步骤S702、根据运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,确定当前编码单元的跳过模式或直接模式的运动信息索引值。
[0145] 本申请实施例中,考虑到HMVP和MVAP允许产生的最大候选运动信息的个数并不固定,跳过模式或直接模式的运动信息索引值的取值范围也并不固定,因而,为了提高跳过模式或直接模式的运动信息索引值确定的灵活性,最大索引值(即maxVal)不再固定为11,而是可以根据运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数确定。
[0146] 示例性的,当解码端设备接收到码流时,可以获取运动矢量角度预测候选运动信息个数(即NumOfMvapCand)和帧间预测候选历史运动信息个数(即NumOfHmvpCand)。
[0147] 在一些实施例中,解码端设备可以通过解析序列级高层语法,获取运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数。
[0148] 本申请实施例中,解码端设备获取到运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数时,可以根据获取到的运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数确定当前编码单元的跳过模式或直接模式的运动信息索引值。
[0149] 在一个示例中,上述解析序列级高层语法,获取所述运动矢量角度预测候选运动信息个数和所述帧间预测候选历史运动信息个数,可以包括:
[0150] 解析增强时域运动矢量预测和运动矢量角度预测允许标志,根据增强时域运动矢量预测和运动矢量角度预测允许标志的取值,确定运动矢量角度预测候选运动信息个数;以及,
[0151] 解析帧间预测候选历史运动信息个数索引,根据所述帧间预测候选历史运动信息个数索引的取值,确定帧间预测候选历史运动信息个数。
[0152] 示例性的,可以通过序列级高层语法,分别使用增强时域运动矢量预测和运动矢量角度预测允许标志(etmvp_mvap_enable_flag)和帧间预测候选历史运动信息个数索引(num_of_hmvp_cand)来确定运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数。
[0153] 示例性的,增强时域运动矢量预测和运动矢量角度预测允许标志用于指示同时开启增强时域运动矢量预测模式和运动矢量角度预测模式,或,同时关闭增强时域运动矢量预测模式和运动矢量角度预测模式。
[0154] 示例性的,etmvp_mvap_enable_flag的取值范围为0~1,num_of_hmvp_cand的取值范围为0~8。
[0155] 示例性的,解码端设备可以分别通过解析etmvp_mvap_enable_flag的取值,确定NumOfMvapCand;以及,通过解析num_of_hmvp_cand的取值,确定NumOfHmvpCand。
[0156] 例如,解码端设备可以依据etmvp_mvap_enable_flag的取值,按照以下方式确定NumOfMvapCand:
[0157] NumOfMvapCand的取值为etmvp_mvap_enable_flag==1?5:0
[0158] 其中,当etmvp_mvap_enable_flag取值为1时,NumOfMvapCand的取值为5;当etmvp_mvap_enable_flag取值不为1时,NumOfMvapCand的取值为0。
[0159] 即当增强时域运动矢量预测和运动矢量角度预测允许标志的取值为1时,确定所述运动矢量角度预测候选运动信息个数为5;其中,增强时域运动矢量预测和运动矢量角度预测允许标志的取值为1,表示当前编码单元可使用增强时域运动矢量预测和运动矢量角度预测,即当前编码单元同时使能增强时域运动矢量预测和运动矢量角度预测;
[0160] 当增强时域运动矢量预测和运动矢量角度预测允许标志的取值为0,确定运动矢量角度预测候选运动信息个数为0;其中,增强时域运动矢量预测和运动矢量角度预测允许标志的取值为0,或,码流中不存在所述增强时域运动矢量预测和运动矢量角度预测允许标志,表示当前编码单元不应使用增强时域运动矢量预测和运动矢量角度预测,即当前编码单元同时不使能增强时域运动矢量预测和运动矢量角度预测。
[0161] 示例性的,解码端设备可以将num_of_hmvp_cand的取值作为NumOfHmvpCand。
[0162] 在一个示例中,上述根据运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,确定当前编码单元的跳过模式或直接模式的运动信息索引值,可以包括:
[0163] 根据运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,确定最大索引值;
[0164] 根据最大索引值,采用截断一元码的反二值化方式解析当前编码单元的跳过模式或直接模式的运动信息索引值。
[0165] 示例性的,当按照上述方式确定了NumOfMvapCand和NumOfHmvpCand时,解码端设备可以根据所确定的NumOfMvapCand和NumOfHmvpCand,确定最大索引值(即maxVal),并根据该maxVal,采用截断一元码的反二值化方式解析当前编码单元的跳过模式或直接模式的运动信息索引值。
[0166] 示例性的,根据所确定的NumOfMvapCand和NumOfHmvpCand确定的maxVal小于等于11。
[0167] 作为一种示例,根据运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,确定最大索引值,可以包括:
[0168] 确定运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数中的最大值;
[0169] 将该最大值与3二者之和,确定为最大索引值。
[0170] 示例性的,考虑到时域候选运动信息和MHBSKIP的候选运动信息的最大数量为4,而maxVal的取值为列表长度‑1,因而,可以依据NumOfMvapCand和NumOfHmvpCand中的最大值,与3二者之和,确定maxVal。
[0171] 示例性的,解码端设备可以依据以下方式确定maxVal:
[0172] maxVal=(3+Max(NumOfMvapCand,NumOfHmvpCand))
[0173] 其中,由于Max(NumOfMvapCand,NumOfHmvpCand)≤8,因此,按照上述方式确定的maxVal≤11,根据该maxVal,采用截断一元码的二值化方式编码跳过模式或直接模式的运动信息索引值时,需要的比特数会小于或等于maxVal=11的情况下需要的比特数,从而,利用本申请实施例提供的方式可以较大概率地减少编码跳过模式或直接模式的运动信息索引值所需比特数,减少编解码开销,提高编解码性能。
[0174] 在一些实施例中,步骤S702中、根据运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,确定当前编码单元的跳过模式或直接模式的运动信息索引值,可以包括:
[0175] 根据运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,以及当前图像的帧类型,确定当前编码单元的跳过模式或直接模式的运动信息索引值。
[0176] 示例性的,考虑到不同帧类型对应的MHBSKIP的候选运动信息的数量可以不同,例如,对于P图像,MHBSKIP的候选运动信息的数量为1个;对于B图像,MHBSKIP的候选运动信息的数量为3个。
[0177] 因而,为了提高跳过模式或直接模式的运动信息索引值确定的灵活性,在确定跳过模式或直接模式的运动信息索引值时,还可以考虑帧类型,即解码端设备可以根据运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,以及当前图像的帧类型,确定当前编码单元的跳过模式或直接模式的运动信息索引值。
[0178] 在一个示例中,上述根据运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,以及当前图像的帧类型,确定当前编码单元的跳过模式或直接模式的运动信息索引值,可以包括:
[0179] 根据运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,以及当前图像的帧类型,确定最大索引值;
[0180] 根据最大索引值,采用截断一元码的反二值化方式解析当前编码单元的跳过模式或直接模式的运动信息索引值。
[0181] 示例性的,解码端设备除了可以按照上述实施例中描述的方式获取NumOfMvapCand和NumOfHmvpCand之外,还可以获取当前编码单元所属视频图像(本文中称为当前图像)的帧类型。
[0182] 示例性的,帧类型可以包括但不限于B图像或P图像。
[0183] 示例性的,解码端设备可以根据运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,以及当前图像的帧类型,确定最大索引值。
[0184] 作为一种示例,上述根据运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,以及当前图像的帧类型,确定最大索引值,可以包括:
[0185] 确定运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数中的最大值;
[0186] 若当前图像的帧类型为P图像,则将该最大值与1二者之和,确定为最大索引值;
[0187] 若当前图像的帧类型为B图像,则将该最大值与3二者之和,确定为最大索引值。
[0188] 示例性的,考虑到对于P图像,MHBSKIP的候选运动信息的数量为1个;对于B图像,MHBSKIP的候选运动信息的数量为3个。
[0189] 因而,在当前图像的帧类型为P图像的情况下,可以将NumOfMvapCand和NumOfHmvpCand中的最大值,与1二者之和,确定为maxVal。
[0190] 在当前图像的帧类型为B图像的情况下,可以将NumOfMvapCand和NumOfHmvpCand中的最大值,与3二者之和,确定为maxVal。
[0191] 由于对于帧类型为P图像的情况,MHBSKIP的候选运动信息的数量取值为1,与不考虑帧类型,而直接将MHBSKIP的候选运动信息的数量设置为3的实现方案相比,所确定的maxVal的取值会降低,从而,可以节省采用截断一元码的二值化方式对跳过模式或直接模式的运动信息索引值进行编码时的比特开销,提高编解码性能。
[0192] 示例性的,当解码端设备按照上述方式确定了maxVal时,可以根据所确定的maxVal,采用截断一元码的反二值化方式解析当前编码单元的跳过模式或直接模式的运动信息索引值。
[0193] 示例性的,maxVal与跳过模式或直接模式的运动信息索引值的对应关系可以参见表1所记载的相关信息。
[0194] 在一些实施例中,步骤S720中,根据当前编码单元的跳过模式或直接模式的运动信息索引值和候选列表确定当前编码单元的预测模式,可以包括:
[0195] 根据有效角度预测模式数,以及跳过模式或直接模式的运动信息索引值,确定当前编码单元的预测模式。
[0196] 示例性的,当解码端设备按照上述方式确定了当前编码单元的跳过模式或直接模式的运动信息索引值时,可以根据有效角度预测模式数(ValidMvapModeNum),以及跳过模式或直接模式的运动信息索引值,确定当前编码单元的预测模式。
[0197] 在一个示例中,根据有效角度预测模式数,以及跳过模式或直接模式的运动信息索引值,确定当前编码单元的预测模式,可以包括:
[0198] 若跳过模式或直接模式的运动信息索引值大于或等于N,则:
[0199] 当有效角度预测模式数大于0,且跳过模式或直接模式的运动信息索引值小于N与有效角度预测模式数二者之和时,确定当前编码单元的预测模式为运动矢量角度预测模式;
[0200] 当有效角度预测模式数等于0,或,跳过模式或直接模式的运动信息索引值大于或等于N与有效角度预测模式数二者之和时,确定当前编码单元的预测模式为基于历史信息的运动矢量预测模式。
[0201] 示例性的,解码端设备按照上述方式确定了跳过模式或直接模式的运动信息索引值时,可以确定跳过模式或直接模式的运动信息索引值是否大于N。
[0202] 示例性的,N为正整数。
[0203] 示例性的,N可以为候选列表中时域候选运动信息与MHBSKIP产生的候选运动信息的总和。
[0204] 示例性的,N的取值可以根据当前图像的帧类型确定。
[0205] 作为一种示例,若当前图像的帧类型为P图像,则N=2;若当前图像的帧类型为B图像,则N=4。
[0206] 示例性的,当解码端设备确定了跳过模式或直接模式的运动信息索引值大于或等于N时,解码端设备还可以确定ValidMvapModeNum是否大于0,以及跳过模式或直接模式的运动信息索引值是否小于N与ValidMvapModeNum二者之和。
[0207] 当ValidMvapModeNum大于0,且跳过模式或直接模式的运动信息索引值小于N与ValidMvapModeNum二者之和,即运动矢量角度预测模式产生了候选运动信息,且跳过模式或直接模式的运动信息索引值对应的候选运动信息指向运动矢量角度预测模式产生的候选运动信息时,解码端设备可以确定当前编码单元的预测模式为运动矢量角度预测模式。
[0208] 当ValidMvapModeNum等于0,或,跳过模式或直接模式的运动信息索引值大于或等于N与有效角度预测模式数二者之和,即运动矢量角度预测模式未产生候选运动信息,且跳过模式或直接模式的运动信息索引值对应的候选运动信息指向基于历史信息的运动矢量预测模式产生的候选运动信息时,解码端设备可以确定当前编码单元的预测模式为基于历史信息的运动矢量预测模式。
[0209] 在一些实施例中,上述确定当前编码单元的预测模式之后,还可以包括:
[0210] 当当前编码单元的预测模式为基于历史信息的运动矢量预测模式时,若当前编码单元为帧间预测单元且不是仿射预测单元且不是角度加权预测单元且不是增强时域运动矢量预测单元且不是运动矢量角度预测单元且不是子块时域运动信息预测单元,以及,帧间预测候选历史运动信息个数大于0,则更新历史运动信息表;否则,不更新所述历史运动信息表。
[0211] 示例性的,当解码端设备按照上述实施例中描述的方式确定当前编码单元的预测模式为基于历史信息的运动矢量预测模式时,解码端设备可以确定当前编码单元是否满足以下条件:
[0212] 当前编码单元为帧间预测单元、当前编码单元不是仿射预测单元、当前编码单元不是角度加权预测单元、当前编码单元不是增强时域运动矢量预测单元、当前编码单元不是运动矢量角度预测单元、当前编码单元不是子块时域运动信息预测单元、以及,帧间预测候选历史运动信息个数(即NumOfHmvpCand)大于0。
[0213] 当解码端设备确定当前编码单元满足上述全部条件时,解码端设备可以对历史运动信息表(HmvpCandList)进行更新。
[0214] 示例性的,解码端设备可以根据当前预测块的运动信息、BgcFlag和BgcIndex更新历史运动信息表。
[0215] 当解码端设备确定当前编码单元不满足上述至少一个条件时,解码端设备可以不更新历史运动信息表。
[0216] 在一些实施例中,上述根据增强时域运动矢量预测和运动矢量角度预测允许标志的取值,确定运动矢量角度预测候选运动信息个数,可以包括:
[0217] 当增强时域运动矢量预测和运动矢量角度预测允许标志的取值为1时,确定运动矢量角度预测候选运动信息个数为5;其中,增强时域运动矢量预测和运动矢量角度预测允许标志的取值为1,表示可使用增强时域运动矢量预测和运动矢量角度预测;
[0218] 当增强时域运动矢量预测和运动矢量角度预测允许标志的取值为0,或,码流中不存在所述增强时域运动矢量预测和运动矢量角度预测允许标志时,确定运动矢量角度预测候选运动信息个数为0;其中,增强时域运动矢量预测和运动矢量角度预测允许标志的取值为0,或,码流中不存在增强时域运动矢量预测和运动矢量角度预测允许标志,表示不应使用增强时域运动矢量预测和运动矢量角度预测。
[0219] 示例性的,可以通过增强时域运动矢量预测和运动矢量角度预测允许标志来指示是否可以使用增强时域运动矢量预测和运动矢量角度预测。
[0220] 示例性的,增强时域运动矢量预测和运动矢量角度预测允许标志的取值为1,表示可使用增强时域运动矢量预测和运动矢量角度预测;增强时域运动矢量预测和运动矢量角度预测允许标志的取值为0,表示不应使用增强时域运动矢量预测和运动矢量角度预测。
[0221] 示例性的,解码端设备接收到码流时,可以解析增强时域运动矢量预测和运动矢量角度预测允许标志的取值。
[0222] 当增强时域运动矢量预测和运动矢量角度预测允许标志的取值为1,即可使用增强时域运动矢量预测和运动矢量角度预测时,解码端设备可以确定NumOfMvapCand为5。
[0223] 当增强时域运动矢量预测和运动矢量角度预测允许标志的取值为0,即不可使用增强时域运动矢量预测和运动矢量角度预测时,解码端设备可以确定NumOfMvapCand为0。
[0224] 示例性的,当解码端设备未从码流中解析到增强时域运动矢量预测和运动矢量角度预测允许标志时,可以确定增强时域运动矢量预测和运动矢量角度预测允许标志取值为0,即不可使用增强时域运动矢量预测和运动矢量角度预测,此时,解码端设备可以确定NumOfMvapCand为0。
[0225] 请参见图9,为本申请实施例提供的一种编码方法的流程示意图,其中,该编码方法可以应用于编码端设备,如图9所示,该编码方法可以包括以下步骤:
[0226] 步骤S900、构建跳过或直接模式的候选列表:按顺序遍历预测模式候选列表中的每一种预测模式,对于每一种预测模式,获取当前编码单元的运动信息和当前编码单元的跳过模式或直接模式的运动信息索引值。
[0227] 步骤S910、根据当前编码单元的运动信息,对当前编码单元进行运动补偿。
[0228] 步骤S920、计算该预测模式对应的率失真代价值,并将该率失真代价值与其他候选预测模式的代价值进行比较,选择最小的率失真代价值所对应的预测模式。
[0229] 步骤S930、将率失真代价值最小的预测模式对应的当前编码单元的跳过模式或直接模式的运动信息索引值携带进码流,传送给解码端。
[0230] 如图10所示,步骤S930中,将率失真代价值最小的预测模式对应的当前编码单元的跳过模式或直接模式的运动信息索引值携带进码流,可以通过以下步骤实现:
[0231] 步骤S931、获取运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数。
[0232] 步骤S932、根据运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,对当前编码单元的跳过模式或直接模式的运动信息索引值进行编码,并携带进码流。
[0233] 本申请实施例中,考虑到HMVP和MVAP允许产生的最大候选运动信息的个数并不固定,跳过模式或直接模式的运动信息索引值的取值范围也并不固定,因而,为了提高跳过模式或直接模式的运动信息索引值确定的灵活性,最大索引值(即maxVal)不再固定为11,而是可以根据运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数确定。
[0234] 示例性的,当编码端设备需要对运动信息索引值进行编码时,可以获取NumOfMvapCand和NumOfHmvpCand。
[0235] 示例性的,编码端设备可以通过编码序列级高层语法,确定NumOfMvapCand和NumOfHmvpCand。
[0236] 本申请实施例中,编码端设备可以根据NumOfMvapCand和NumOfHmvpCand,对当前编码单元的跳过模式或直接模式的运动信息索引值进行编码,并携带进码流。
[0237] 在一些实施例中,步骤S932中,根据运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,对当前编码单元的跳过模式或直接模式的运动信息索引值进行编码,可以包括:
[0238] 根据运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,确定最大索引值;
[0239] 根据最大索引值,采用截断一元码的二值化方式编码所述当前编码单元的跳过模式或直接模式的运动信息索引值。
[0240] 示例性的,当按照上述方式确定了NumOfMvapCand和NumOfHmvpCand时,编码端设备可以根据所确定的NumOfMvapCand和NumOfHmvpCand,确定最大索引值(即maxVal),并根据该maxVal,采用截断一元码的二值化方式编析当前编码单元的跳过模式或直接模式的运动信息索引值。
[0241] 示例性的,根据所确定的NumOfMvapCand和NumOfHmvpCand确定的maxVal小于等于11。
[0242] 示例性的,考虑到时域候选运动信息和MHBSKIP的候选运动信息的最大数量为4,而maxVal的取值为列表长度‑1,因而,可以依据NumOfMvapCand和NumOfHmvpCand中的最大值,与3二者之和,确定maxVal。
[0243] 示例性的,编码端设备可以依据以下方式确定maxVal:
[0244] maxVal=(3+Max(NumOfMvapCand,NumOfHmvpCand))
[0245] 其中,由于Max(NumOfMvapCand,NumOfHmvpCand)≤8,因此,按照上述方式确定的maxVal≤11,根据该maxVal,采用截断一元码的二值化方式编码跳过模式或直接模式的运动信息索引值时,需要的比特数会小于或等于maxVal=11的情况下需要的比特数,从而,利用本申请实施例提供的方式可以较大概率地减少编码跳过模式或直接模式的运动信息索引值所需比特数,减少编解码开销,提高编解码性能。
[0246] 在一个示例中,上述根据运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,确定最大索引值,可以包括:
[0247] 根据所述运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,以及当前图像的帧类型,确定最大索引值。
[0248] 示例性的,考虑到不同帧类型对应的MHBSKIP的候选运动信息的数量可以不同,例如,对于P图像,MHBSKIP的候选运动信息的数量为1个;对于B图像,MHBSKIP的候选运动信息的数量为3个。
[0249] 因而,为了提高跳过模式或直接模式的运动信息索引值编码的灵活性,在对跳过模式或直接模式的运动信息索引值进行编码时,还可以考虑帧类型,即编码端设备可以根据运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,以及当前图像的帧类型,确定当前编码单元的跳过模式或直接模式的运动信息索引值。
[0250] 示例性的,帧类型可以包括但不限于B图像或P图像。
[0251] 示例性的,编码端设备可以根据运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,以及当前图像的帧类型,确定最大索引值。
[0252] 示例性的,考虑到对于P图像,MHBSKIP的候选运动信息的数量为1个;对于B图像,MHBSKIP的候选运动信息的数量为3个。
[0253] 因而,在当前图像的帧类型为P图像的情况下,可以将NumOfMvapCand和NumOfHmvpCand中的最大值,与1二者之和,确定为maxVal。
[0254] 在当前图像的帧类型为B图像的情况下,可以将NumOfMvapCand和NumOfHmvpCand中的最大值,与3二者之和,确定为maxVal。
[0255] 由于对于帧类型为P图像的情况,MHBSKIP的候选运动信息的数量取值为1,与不考虑帧类型,而直接将MHBSKIP的候选运动信息的数量设置为3的实现方案相比,所确定的maxVal的取值会降低,从而,可以节省采用截断一元码的二值化方式对跳过模式或直接模式的运动信息索引值进行编码时的比特开销,提高编解码性能。
[0256] 示例性的,当编码端设备按照上述方式确定了maxVal时,可以根据所确定的maxVal,采用截断一元码的二值化方式对当前编码单元的跳过模式或直接模式的运动信息索引值进行编码。
[0257] 为了使本领域技术人员更好地理解本申请实施例提供的技术方案,下面结合具体实例对本申请实施例提供的技术方案进行说明。
[0258] 为了提高索引值确定的灵活性,减少编码冗余从而提升编解码性能,本申请实施例的优化方案可以包括以下部分或全部:
[0259] 首先,获取高层语法,得到运动矢量角度预测候选运动信息个数(NumOfMvapCand)和帧间预测候选历史运动信息个数(NumOfHmvpCand),获取当前图像的帧类型。
[0260] 然后,根据当前图像的帧类型和NumOfMvapCand以及NumOfHmvpCand来解析当前编码单元的跳过模式或直接模式的运动信息索引值cu_subtype_index。
[0261] 最后,获取ValidMvapModeNum,根据cu_subtype_index和ValidMvapModeNum来确定当前编码单元类型是MVAP模式还是HMVP模式。
[0262] 实施例一、编码方法及编码装置
[0263] 1.1、构建跳过或直接模式的候选列表:按顺序遍历预测模式候选列表中的每一种预测模式,对于每一种预测模式,获取当前编码单元的运动信息和当前编码单元的跳过模式或直接模式的运动信息索引值。
[0264] 1.2、根据当前编码单元的运动信息,对当前编码单元进行运动补偿;
[0265] 1.3、计算该预测模式对应的率失真代价值,并将该率失真代价值与其他候选预测模式的代价值进行比较,选择最小的率失真代价值所对应的预测模式;
[0266] 1.4、将率失真代价值最小的预测模式对应的当前编码单元的跳过模式或直接模式的运动信息索引值携带进码流,传送给解码端。
[0267] 实施例二、解码方法及解码装置
[0268] 2.1、接收码流,解析当前编码单元的跳过模式或直接模式的运动信息索引值;
[0269] 2.2、构建跳过或直接模式的候选列表;
[0270] 2.3、根据当前编码单元的跳过模式或直接模式的运动信息索引值和候选列表确定当前编码单元的预测模式;
[0271] 2.4、根据当前编码单元的预测模式获取当前编码单元的运动信息,对当前编码单元进行运动补偿。
[0272] 实施例三
[0273] 编码过程:
[0274] (1)、编码序列级高层语法,获取运动矢量角度预测候选运动信息个数NumOfMvapCand和帧间预测候选历史运动信息个数NumOfHmvpCand;
[0275] (2)、根据NumOfMvapCand以及NumOfHmvpCand来编码当前编码单元的跳过模式或直接模式的运动信息索引值,并携带进入码流。
[0276] 解码过程:
[0277] (1)、解析序列级高层语法,获取运动矢量角度预测候选运动信息个数NumOfMvapCand和帧间预测候选历史运动信息个数NumOfHmvpCand;
[0278] (2)、根据NumOfMvapCand以及NumOfHmvpCand来解析当前编码单元的跳过模式或直接模式的运动信息索引值cu_subtype_index。
[0279] 实施例四
[0280] 编码过程:
[0281] (1)、编码序列级高层语法etmvp_mvap_enable_flag和num_of_hmvp_cand。
[0282] 示例性的,NumOfMvapCand的取值为etmvp_mvap_enable_flag==1?5:0,其中etmvp_mvap_enable_flag取值范围是0~1;
[0283] 其中,NumOfMvapCand的取值为etmvp_mvap_enable_flag==1?5:0表明:当etmvp_mvap_enable_flag取值为1时,NumOfMvapCand的取值为5;当etmvp_mvap_enable_flag取值不为1,即etmvp_mvap_enable_flag取值为0时,NumOfMvapCand的取值为0(下同)。
[0284] 示例性的,NumOfHmvpCand的取值为num_of_hmvp_cand,其中num_of_hmvp_cand取值范围是0~8。
[0285] (2)、采用截断一元码的二值化方式编码当前编码单元的跳过模式或直接模式的运动信息索引值cu_subtype_index并携带进入码流。
[0286] 示例性的,maxVal=(3+Max(NumOfMvapCand,NumOfHmvpCand))。
[0287] 解码过程:
[0288] (1)、解析序列级高层语法etmvp_mvap_enable_flag和num_of_hmvp_cand。
[0289] 示例性的,NumOfMvapCand的取值为etmvp_mvap_enable_flag==1?5:0,其中etmvp_mvap_enable_flag取值范围是0~1;
[0290] 示例性的,NumOfHmvpCand的取值为num_of_hmvp_cand,其中num_of_hmvp_cand取值范围是0~8。
[0291] (2)、采用截断一元码的反二值化方式解析当前编码单元的跳过模式或直接模式的运动信息索引值cu_subtype_index。
[0292] 示例性的,maxVal=(3+Max(NumOfMvapCand,NumOfHmvpCand))。
[0293] 实施例五
[0294] 编码过程:
[0295] (1)、编码序列级高层语法,获取运动矢量角度预测候选运动信息个数NumOfMvapCand和帧间预测候选历史运动信息个数NumOfHmvpCand;
[0296] (2)、根据当前图像的帧类型、NumOfMvapCand以及NumOfHmvpCand来编码当前编码单元的跳过模式或直接模式的运动信息索引值,并携带进入码流。
[0297] 解码过程:
[0298] (1)、解析序列级高层语法,获取运动矢量角度预测候选运动信息个数NumOfMvapCand和帧间预测候选历史运动信息个数NumOfHmvpCand;
[0299] (2)、根据当前图像的帧类型、NumOfMvapCand以及NumOfHmvpCand来解析当前编码单元的跳过模式或直接模式的运动信息索引值cu_subtype_index。
[0300] 实施例六
[0301] 编码过程:
[0302] (1)、编码序列级高层语法etmvp_mvap_enable_flag和num_of_hmvp_cand。
[0303] 示例性的,NumOfMvapCand的取值为etmvp_mvap_enable_flag==1?5:0,其中etmvp_mvap_enable_flag取值范围是0~1。
[0304] 示例性的,NumOfHmvpCand的取值为num_of_hmvp_cand,其中num_of_hmvp_cand取值范围是0~8。
[0305] (2)、采用截断一元码的二值化方式编码当前编码单元的跳过模式或直接模式的运动信息索引值cu_subtype_index并携带进入码流。
[0306] 示例性的,maxVal=((PictureType==1)?(1:3)+Max(NumOfMvapCand,NumOfHmvpCand)),PictureType表示当前图像的帧类型,值为1表示当前图像为P图像。
[0307] 解码过程:
[0308] (1)、解析序列级高层语法etmvp_mvap_enable_flag和num_of_hmvp_cand。
[0309] 示例性的,NumOfMvapCand的取值为etmvp_mvap_enable_flag==1?5:0,其中etmvp_mvap_enable_flag取值范围是0~1。
[0310] 示例性的,NumOfHmvpCand的取值为num_of_hmvp_cand,其中num_of_hmvp_cand取值范围是0~8。
[0311] (2)、采用截断一元码的反二值化方式解析当前编码单元的跳过模式或直接模式的运动信息索引值cu_subtype_index。
[0312] 示例性的,maxVal=((PictureType==1)?(1:3)+Max(NumOfMvapCand,NumOfHmvpCand)),PictureType表示当前图像的帧类型,值为1表示当前图像为P图像。
[0313] 其中,maxVal=((PictureType==1)?(1:3)+Max(NumOfMvapCand,NumOfHmvpCand))表明:当PictureType取值为1时,maxVal=1+Max(NumOfMvapCand,NumOfHmvpCand);当PictureType取值不为1时,maxVal=3+Max(NumOfMvapCand,NumOfHmvpCand)(下同)。
[0314] 实施例七
[0315] 编码过程:
[0316] (1)、编码序列级高层语法,获取运动矢量角度预测候选运动信息个数NumOfMvapCand和帧间预测候选历史运动信息个数NumOfHmvpCand;
[0317] (2)、获取ValidMvapModeNum,根据当前编码单元的跳过模式或直接模式的运动信息索引值cu_subtype_index和ValidMvapModeNum来确定当前编码单元类型是Mvap模式还是HMVP模式。
[0318] (3)、根据NumOfMvapCand以及NumOfHmvpCand来编码cu_subtype_index,并携带进入码流。
[0319] 解码过程:
[0320] (1)、解析序列级高层语法,获取运动矢量角度预测候选运动信息个数NumOfMvapCand和帧间预测候选历史运动信息个数NumOfHmvpCand;
[0321] (2)、根据NumOfMvapCand以及NumOfHmvpCand来解析当前编码单元的跳过模式或直接模式的运动信息索引值cu_subtype_index;
[0322] (3)、获取ValidMvapModeNum,根据cu_subtype_index和ValidMvapModeNum来确定当前编码单元类型是Mvap模式还是HMVP模式。
[0323] 实施例八
[0324] 编码过程:
[0325] (1)、编码序列级高层语法etmvp_mvap_enable_flag和num_of_hmvp_cand。
[0326] 示例性的,NumOfMvapCand的取值为etmvp_mvap_enable_flag==1?5:0,其中etmvp_mvap_enable_flag取值范围是0~1。
[0327] 示例性的,NumOfHmvpCand的取值为num_of_hmvp_cand,其中num_of_hmvp_cand取值范围是0~8。
[0328] (2)、获取有效角度预测模式数ValidMvapModeNum,如果CuSubTypeIndex大于等于N,则:
[0329] 当ValidMvapModeNum大于0,且CuSubTypeIndex小于N+ValidMvapModeNum时,确定当前编码单元类型是MVAP模式;
[0330] 当ValidMvapModeNum等于0,或,CuSubTypeIndex大于或等于N+ValidMvapModeNum时,确定当前编码单元类型是HMVP模式。
[0331] 示例性的,若当前图像为P图像,则N=2,若当前图像为B图像,则N=4。
[0332] (3)、采用截断一元码的二值化方式编码当前编码单元的跳过模式或直接模式的运动信息索引值cu_subtype_index并携带进入码流。
[0333] 示例性的,maxVal=(3+Max(NumOfMvapCand,NumOfHmvpCand))。
[0334] 解码过程:
[0335] (1)、解析序列级高层语法etmvp_mvap_enable_flag和num_of_hmvp_cand。
[0336] 示例性的,NumOfMvapCand的取值为etmvp_mvap_enable_flag==1?5:0,其中etmvp_mvap_enable_flag取值范围是0~1。
[0337] 示例性的,NumOfHmvpCand的取值为num_of_hmvp_cand,其中num_of_hmvp_cand取值范围是0~8。
[0338] (2)、采用截断一元码的反二值化方式解析当前编码单元的跳过模式或直接模式的运动信息索引值cu_subtype_index;
[0339] 示例性的,maxVal=(3+Max(NumOfMvapCand,NumOfHmvpCand))。
[0340] (3)、获取有效角度预测模式数ValidMvapModeNum,若CuSubTypeIndex大于等于N,则:
[0341] 当ValidMvapModeNum大于0,且CuSubTypeIndex小于N+ValidMvapModeNum时,确定当前编码单元类型是MVAP模式;
[0342] 当ValidMvapModeNum等于0,或,CuSubTypeIndex大于或等于N+ValidMvapModeNum时,确定当前编码单元类型是HMVP模式。
[0343] 示例性的,若当前图像为P图像,则N=2;若当前图像为B图像,则N=4。
[0344] 实施例九
[0345] 编码过程:
[0346] (1)、编码序列级高层语法,获取运动矢量角度预测候选运动信息个数NumOfMvapCand和帧间预测候选历史运动信息个数NumOfHmvpCand;
[0347] (2)、获取ValidMvapModeNum,根据当前编码单元的跳过模式或直接模式的运动信息索引值cu_subtype_index和ValidMvapModeNum来确定当前编码单元类型是Mvap模式还是HMVP模式。
[0348] (3)、根据当前图像的帧类型、NumOfMvapCand以及NumOfHmvpCand来编码cu_subtype_index,并携带进入码流。
[0349] 解码过程:
[0350] (1)、解析序列级高层语法,获取运动矢量角度预测候选运动信息个数NumOfMvapCand和帧间预测候选历史运动信息个数NumOfHmvpCand;
[0351] (2)、根据当前图像的帧类型、NumOfMvapCand以及NumOfHmvpCand来解析当前编码单元的跳过模式或直接模式的运动信息索引值cu_subtype_index;
[0352] (3)、获取ValidMvapModeNum,根据cu_subtype_index和ValidMvapModeNum来确定当前编码单元类型是Mvap模式还是HMVP模式。
[0353] 实施例十
[0354] 编码过程:
[0355] (1)、编码序列级高层语法etmvp_mvap_enable_flag和num_of_hmvp_cand;
[0356] 示例性的,NumOfMvapCand的取值为etmvp_mvap_enable_flag==1?5:0,其中etmvp_mvap_enable_flag取值范围是0~1。
[0357] 示例性的,NumOfHmvpCand的取值为num_of_hmvp_cand,其中num_of_hmvp_cand取值范围是0~8。
[0358] (2)、获取有效角度预测模式数ValidMvapModeNum,若CuSubTypeIndex大于等于N,则:
[0359] 当ValidMvapModeNum大于0,且CuSubTypeIndex小于N+ValidMvapModeNum时,当前编码单元类型是Mvap模式;
[0360] 当ValidMvapModeNum等于0,或,CuSubTypeIndex大于或等于N+ValidMvapModeNum时,当前编码单元类型是Hmvp模式。
[0361] 示例性的,若当前图像为P图像,则N=2;若当前图像为B图像,则N=4。
[0362] (3)、采用截断一元码的二值化方式编码当前编码单元的跳过模式或直接模式的运动信息索引值cu_subtype_index并携带进入码流。
[0363] 示例性的,maxVal=((PictureType==1)?(1:3)+Max(NumOfMvapCand,NumOfHmvpCand)),PictureType表示当前图像的帧类型,值为1表示当前图像为P图像。
[0364] 解码过程:
[0365] (1)、解析序列级高层语法etmvp_mvap_enable_flag和num_of_hmvp_cand;
[0366] 示例性的,NumOfMvapCand的取值为etmvp_mvap_enable_flag==1?5:0,其中etmvp_mvap_enable_flag取值范围是0~1。
[0367] 示例性的,NumOfHmvpCand的取值为num_of_hmvp_cand,其中num_of_hmvp_cand取值范围是0~8。
[0368] (2)、采用截断一元码的反二值化方式解析当前编码单元的跳过模式或直接模式的运动信息索引值cu_subtype_index。
[0369] 示例性的,maxVal=((PictureType==1)?(1:3)+Max(NumOfMvapCand,NumOfHmvpCand)),PictureType表示当前图像的帧类型,值为1表示当前图像为P图像。
[0370] (3)、获取有效角度预测模式数ValidMvapModeNum,若CuSubTypeIndex大于等于N,则:
[0371] 当ValidMvapModeNum大于0,且CuSubTypeIndex小于N+ValidMvapModeNum时,当前编码单元类型是Mvap模式;
[0372] 当ValidMvapModeNum等于0,或,CuSubTypeIndex大于或等于N+ValidMvapModeNum时,当前编码单元类型是Hmvp模式。
[0373] 示例性的,若当前图像为P图像,则N=2;若当前图像为B图像,则N=4。
[0374] 实施例十一
[0375] 编码和解码序列级高层语法etmvp_mvap_enable_flag,控制ETMVP和MVAP。
[0376] 示例性的,可以通过etmvp_mvap_enable_flag标识是否启用ETMVP和MVAP。
[0377] 示例性的,语法描述可以如下表所示:
[0378] 序列头定义 描述符if(profile_id==0x30||profile_id==0x32){  
etmvp_mvap_enable_flag u(1)
}  
[0379] 语义描述:
[0380] 增强时域运动矢量预测和运动矢量角度预测允许标志(etmvp_mvap_enable_flag):
[0381] 二值变量。值为‘1’表示可使用增强时域运动矢量预测和运动矢量角度预测;值为‘0’表示不应使用增强时域运动矢量预测和运动矢量角度预测。EtmvpMvapEnableFlag的值等于etmvp_mvap_enable_flag的值。
[0382] 示例性的,若位流中不存在etmvp_mvap_enable_flag,则EtmvpMvapEnableFlag的值为0。
[0383] 若EtmvpMvapEnableFlag的值为1,NumOfMvapCand的值等于5;否则NumOfMvapCand的值等于0。
[0384] 实施例十二
[0385] 完成当前预测单元(即当前编码单元)的解码后,若当前预测单元是帧间预测单元且不是增强时域运动矢量预测单元且不是运动矢量角度预测单元且不是子块时域运动信息预测单元,以及,NumOfHmvpCand(可以更新的运动信息的数量)大于0时,根据当前预测块的运动信息、BgcFlag和BgcIndex更新历史运动信息表HmvpCandList;
[0386] 否则,即NumOfHmvpCand=0、当前预测单元不是帧间预测单元、当前预测单元是增强时域运动矢量预测单元、当前预测单元是运动矢量角度预测单元、或当前预测单元是子块时域运动信息预测单元等条件中至少一个条件成立,不更新历史运动信息表。
[0387] 实施例十三
[0388] 完成当前预测单元(即当前块)的解码后,若当前预测单元是帧间预测单元且不是仿射预测单元且不是角度加权预测单元且不是增强时域运动矢量预测单元且不是运动矢量角度预测单元且不是子块时域运动信息预测单元,以及,NumOfHmvpCand(可以更新的运动信息的数量)大于0时,根据当前预测块的运动信息、BgcFlag和BgcIndex更新历史运动信息表HmvpCandList;
[0389] 否则,即NumOfHmvpCand=0、当前预测单元不是帧间预测单元、当前预测单元是仿射预测单元、当前预测单元是角度加权预测单元、当前预测单元是增强时域运动矢量预测单元、当前预测单元是运动矢量角度预测单元、或当前预测单元是子块时域运动信息预测单元等条件中至少一个条件成立,不更新历史运动信息表。
[0390] 需要说明的是,上述实施例仅仅是本申请实施例的实现方式的具体示例,而并不是对本申请保护范围的限定,基于上述实施例,可以通过实施例之间的组合,或对实施例进行变型,得到新的实施例,其均应属于本申请的保护范围。
[0391] 此外,上述各实施例编码端和解码端的实现流程可以相互参照。
[0392] 以上对本申请提供的方法进行了描述。下面对本申请提供的装置进行描述:
[0393] 请参见图11,图11是本申请实施例提供的一种解码装置的结构示意图,其中,该解码装置可以包括:
[0394] 解码模块1110,用于接收码流,解析当前编码单元的跳过模式或直接模式的运动信息索引值;
[0395] 构建模块1120,用于构建跳过或直接模式的候选列表;
[0396] 确定模块1130,用于根据当前编码单元的跳过模式或直接模式的运动信息索引值和候选列表确定当前编码单元的预测模式;
[0397] 补偿模块1140,用于根据当前编码单元的预测模式获取当前编码单元的运动信息,对当前编码单元进行运动补偿;
[0398] 其中,所述解码模块1110,具体用于获取运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数;
[0399] 根据所述运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,确定所述当前编码单元的跳过模式或直接模式的运动信息索引值。
[0400] 在一些实施例中,所述解码模块1110,具体用于解析序列级高层语法,获取所述运动矢量角度预测候选运动信息个数和所述帧间预测候选历史运动信息个数。
[0401] 在一些实施例中,所述解码模块1110,具体用于解析增强时域运动矢量预测和运动矢量角度预测允许标志,根据所述增强时域运动矢量预测和运动矢量角度预测允许标志的取值,确定所述运动矢量角度预测候选运动信息个数;以及,
[0402] 解析帧间预测候选历史运动信息个数索引,根据所述帧间预测候选历史运动信息个数索引的取值,确定所述帧间预测候选历史运动信息个数;
[0403] 其中,所述增强时域运动矢量预测和运动矢量角度预测允许标志用于指示同时开启增强时域运动矢量预测模式和运动矢量角度预测模式,或,同时关闭增强时域运动矢量预测模式和运动矢量角度预测模式。
[0404] 在一些实施例中,所述确定模块1130,具体用于根据所述运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,以及当前图像的帧类型,确定所述当前编码单元的跳过模式或直接模式的运动信息索引值。
[0405] 在一些实施例中,所述确定模块1130,具体用于根据所述运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,以及当前图像的帧类型,确定最大索引值;
[0406] 根据所述最大索引值,采用截断一元码的反二值化方式解析当前编码单元的跳过模式或直接模式的运动信息索引值。
[0407] 在一些实施例中,所述确定模块1130,具体用于确定所述运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数中的最大值;
[0408] 若所述当前图像的帧类型为P图像,则将该最大值与1二者之和,确定为最大索引值;
[0409] 若所述当前图像的帧类型为B图像,则将该最大值与3二者之和,确定为最大索引值。
[0410] 在一些实施例中,所述确定模块1130,具体用于根据有效角度预测模式数,以及所述跳过模式或直接模式的运动信息索引值,确定当前编码单元的预测模式是运动矢量角度预测模式还是基于历史信息的运动矢量预测模式。
[0411] 在一些实施例中,所述确定模块1130,具体用于若所述跳过模式或直接模式的运动信息索引值大于或等于N,则:
[0412] 当所述有效角度预测模式数大于0,且所述跳过模式或直接模式的运动信息索引值小于N与所述有效角度预测模式数二者之和时,确定所述当前编码单元的预测模式为运动矢量角度预测模式;
[0413] 当所述有效角度预测模式数等于0,或,所述跳过模式或直接模式的运动信息索引值大于或等于N与所述有效角度预测模式数二者之和时,确定所述当前编码单元的预测模式为基于历史信息的运动矢量预测模式。
[0414] 在一些实施例中,若当前图像的帧类型为P图像,则N=2;若当前图像的帧类型为B图像,则N=4。
[0415] 在一些实施例中,所述确定模块1130,还用于当所述当前编码单元的预测模式为基于历史信息的运动矢量预测模式时,若所述当前编码单元为帧间预测单元且不是仿射预测单元且不是角度加权预测单元且不是增强时域运动矢量预测单元且不是运动矢量角度预测单元且不是子块时域运动信息预测单元,以及,所述帧间预测候选历史运动信息个数大于0,则更新历史运动信息表;否则,不更新所述历史运动信息表。
[0416] 在一些实施例中,所述解码模块1110,具体用于当所述增强时域运动矢量预测和运动矢量角度预测允许标志的取值为1时,确定所述运动矢量角度预测候选运动信息个数为5;其中,所述增强时域运动矢量预测和运动矢量角度预测允许标志的取值为1,表示当前编码单元可使用增强时域运动矢量预测和运动矢量角度预测;
[0417] 当所述增强时域运动矢量预测和运动矢量角度预测允许标志的取值为0,或,码流中不存在所述增强时域运动矢量预测和运动矢量角度预测允许标志时,确定所述运动矢量角度预测候选运动信息个数为0;其中,所述增强时域运动矢量预测和运动矢量角度预测允许标志的取值为0,或,码流中不存在所述增强时域运动矢量预测和运动矢量角度预测允许标志,表示当前编码单元不应使用增强时域运动矢量预测和运动矢量角度预测。
[0418] 请参见图12,图12是本申请实施例提供的一种编码装置的结构示意图,其中,该编码装置可以包括:
[0419] 构建模块1210,用于构建跳过或直接模式的候选列表:按顺序遍历预测模式候选列表中的每一种预测模式,对于每一种预测模式,获取当前编码单元的运动信息和当前编码单元的跳过模式或直接模式的运动信息索引值;
[0420] 补偿模块1220,用于根据当前编码单元的运动信息,对当前编码单元进行运动补偿;
[0421] 确定模块1230,用于计算该预测模式对应的率失真代价值,并将该率失真代价值与其他候选预测模式的代价值进行比较,选择最小的率失真代价值所对应的预测模式;
[0422] 编码模块1240,用于将率失真代价值最小的预测模式对应的当前编码单元的跳过模式或直接模式的运动信息索引值携带进码流,传送给解码端;
[0423] 其中,所述编码模块1240,具体用于获取运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数;
[0424] 根据所述运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,对所述当前编码单元的跳过模式或直接模式的运动信息索引值进行编码,并携带进码流。
[0425] 在一些实施例中,所述编码模块1240,具体用于根据所述运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,确定最大索引值;
[0426] 根据所述最大索引值,采用截断一元码的二值化方式编码所述当前编码单元的跳过模式或直接模式的运动信息索引值。
[0427] 在一些实施例中,所述编码模块1240,具体用于根据所述运动矢量角度预测候选运动信息个数和帧间预测候选历史运动信息个数,以及当前图像的帧类型,确定最大索引值。
[0428] 请参见图13,为本申请实施例提供的一种解码端设备的硬件结构示意图。该解码端设备可包括处理器1301、存储有机器可执行指令的机器可读存储介质1302。处理器1301与机器可读存储介质1302可经由系统总线1303通信。并且,通过读取并执行机器可读存储介质1302中与解码控制逻辑对应的机器可执行指令,处理器1301可执行上文描述的解码端设备的解码方法。
[0429] 本文中提到的机器可读存储介质1302可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据,等等。例如,机器可读存储介质可以是:RAM(Radom Access Memory,随机存取存储器)、易失存储器、非易失性存储器、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、dvd等),或者类似的存储介质,或者它们的组合。
[0430] 在一些实施例中,还提供了一种机器可读存储介质,该机器可读存储介质内存储有机器可执行指令,所述机器可执行指令被处理器执行时实现上文描述的解码端设备的解码方法。例如,所述机器可读存储介质可以是ROM、RAM、CD‑ROM、磁带、软盘和光数据存储设备等。
[0431] 请参见图14,为本申请实施例提供的一种编码端设备的硬件结构示意图。该编码端设备可包括处理器1401、存储有机器可执行指令的机器可读存储介质1402。处理器1401与机器可读存储介质1402可经由系统总线1403通信。并且,通过读取并执行机器可读存储介质1402中与编码控制逻辑对应的机器可执行指令,处理器1401可执行上文描述的编码端设备的编码方法。
[0432] 本文中提到的机器可读存储介质1402可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据,等等。例如,机器可读存储介质可以是:RAM(Radom Access Memory,随机存取存储器)、易失存储器、非易失性存储器、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、dvd等),或者类似的存储介质,或者它们的组合。
[0433] 在一些实施例中,还提供了一种机器可读存储介质,该机器可读存储介质内存储有机器可执行指令,所述机器可执行指令被处理器执行时实现上文描述的编码端设备的编码方法。例如,所述机器可读存储介质可以是ROM、RAM、CD‑ROM、磁带、软盘和光数据存储设备等。
[0434] 在一些实施例中,还提供了一种摄像机设备,包括上述任一实施例中的解码装置和/或编码装置。
[0435] 需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0436] 以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。