一种视频码流编解码方法和装置与流程

文档序号:15729611发布日期:2018-10-23 17:00阅读:186来源:国知局
一种视频码流编解码方法和装置与流程

本发明涉及视频编解码领域,具体涉及一种视频码流的编解码方法和装置。



背景技术:

语法结构是由若干个语法元素按照视频编解码标准所描述的顺序进行组织,生成指定的视频码流(syntax structure:Zero or more syntax elements present together in the bitstream in a specified order),其中语法元素表示码流中的各种编码信息(syntax element:An element of data represented in the bitstream)。片(Slice)是编码图像的一种划分,它包含了按编码单元(该编码单元可以是H.264等标准中的MB(MacroBlock)或者HEVC(High efficiency video coding,高效率视频编码)标准中的CU(Coding Unit)或LCU(Large Coding Unit))扫描顺序的若干个编码单元。片的语法结构是视频编解码标准中最基本的语法结构,分为两大部分,分别为片头(Slice Header)和片数据(Slice Data)。片头的语法结构规定了片内所有编码单元编解码过程中所需使用的公共信息,如标志位(flags)、片类型、片地址等语法元素的位置和解析方法。片数据的语法结构规定了片中所有的编码单元编码信息的组织与解析方法。

编码单元的语法结构规定视频编解码标准中各个功能模块所产生的编码信息的组织与编码的方法。同时,编码单元的语法结构也影响到视频算法专用集成电路(ASIC,Application Specific Integrated Circuit)的设计,从而对视频算法ASIC的性能产生很大的影响。

专用集成电路(ASIC)实现视频编码器,一般都是编码器中不同的功能模块对多个编码单元进行并行的流水线操作,按编码单元进行实时编解码。功能模块划分到哪一级的流水线中,一般与功能模块之间的依赖关系以及复杂度相关,一般情况下各级流水线处理编码单元数据的时间相当。如图1所示一个H.264编码器的结构图,该编码器由4个功能模块组成被划分为3级(stage)流水线结构。图中包括预测(Prediction)模块、残差重建模块(包括残差计算Diff、变换、量化和重建(Recon))、滤波模块(如去块效应滤波(DF,Deblock Filter))、熵编码模块(CABAC)、残差重建模块将残差信息(mb infos)输入熵编码模块,将重建信息(rcn)输入去块效应滤波模块。

传统熵编码功能模块处于编码器的最后一级流水线中,接收前面功能模块传递过来的待编码的编码单元的信息(例如图1中的mb infos),并进行编码。在有的标准里面,由于某个功能模块与熵编码功能模块没有数据依赖关系(例如H.264中的DF模块),所以可以与熵编码模块同处流水线最后一级,两者可以并行的进行。但是在有的视频标准中,熵编码功能模块的输入不仅有从其前一级功能模块传递下来待编码的信息,同时也有从与其同级的流水线功能模块传递过来待编码的信息,这时熵编码模块的处理顺序决定了这个功能模块能否与熵编码功能模块处在流水线的同一级。

当有多级滤波处理时,例如滤波模块包括:DF子模块、SAO(Sample Adaptive Offset,样本点自适应滤波)子模块和ALF(Adaptive loop filter,自适应环路滤波)子模块,如图2所示,在HEVC标准的熵编码功能模块CABAC需要编码几个功能模块的信息,包括变换量化后的coding_tree infos、SAO滤波后的sao info,可能还包括ALF滤波后的alf info等。假如熵编码功能模块需要首先编码滤波后的信息,那么熵编码功能模块与滤波模块就只能是串行的,熵编码功能模块需要等待滤波模块处理完成后,熵编码功能模块才能工作。此时只能将熵编码功能模块单独的放在最后一级,熵编码功能模块之前就要增加相应的缓冲,以缓冲前一级需要编码的编码单元信息,如图3所示。因此在这种情况下,如何设计一种合理的语法结构,以提高编码器的性能,并降低其片上内存的开销就是要解决的问题。



技术实现要素:

本发明所要解决的技术问题是提供一种视频码流编解码方法和装置,能提高编解码器的性能。

为解决上述技术问题,本发明提供了一种视频码流编码方法,包括:

熵编码功能模块按照编码器中其他功能模块处理编码单元的先后顺序,对其他功能模块处理编码单元产生的需要熵编码的信息进行熵编码,在进行熵编码的过程中,每熵编码完成一个编码单元的信息后,判断如果达到预设单位的限制,则对当前编码单元所在最大编码单元对应的滤波信息进行熵编码后,重置本熵编码功能模块。

进一步地,所述方法还包括,每熵编码完成一个编码单元的信息后,判断如果未达到预设单位的限制,则根据当前编码单元所在最大编码单元是否熵编码完毕确定是否熵编码所述最大编码单元对应的滤波信息,继续熵编码下一编码单元的信息。

进一步地,所述判断如果达到预设单位的限制,则对当前编码单元所在最大编码单元对应的滤波信息进行熵编码后,重置本熵编码功能模块,包括:

判断当前编码单元如果为预设单位中的最后一个,则在码流中写入第一状态标记,对当前编码单元所在最大编码单元对应的滤波信息进行熵编码后,基于所述状态标记重置熵编码功能模块。

进一步地,所述判断如果未达到预设单位的限制,则根据当前编码单元所在最大编码单元是否熵编码完毕确定是否熵编码所述最大编码单元对应的滤波信息,继续熵编码下一编码单元的信息,包括:

判断当前编码单元如果不为预设单位中的最后一个,则判断当前编码单元所在最大编码单元是否熵编码完毕,如果熵编码完毕,则对所述最大编码单元对应的滤波信息进行熵编码后,进行下一最大编码单元内各编码单元的信息的熵编码,如果熵编码未完毕,则继续熵编码当前最大编码单元中其他编码单元的信息。

进一步地,采用以下方式判断是否达到预设单位的限制:判断已经熵编码的编码单元数量或尺寸是否达到一个预设单位。

进一步地,所述预设单位为片。

为解决上述技术问题,本发明还提供了一种视频码流解码方法,包括:

在进行熵解码的过程中,每熵解码完成一个编码单元的信息后,判断如果达到预设单位的限制,则对当前编码单元所在最大编码单元对应的滤波信息进行熵解码后,重置本熵解码功能模块。

进一步地,所述方法还包括,每熵解码完成一个编码单元的信息后,判断如果未达到预设单位的限制,则根据当前编码单元所在最大编码单元是否熵解码完毕确定是否熵解码所述最大编码单元对应的滤波信息,继续熵解码下一编码单元的信息。

进一步地,所述判断如果达到预设单位的限制,则对当前编码单元所在最大编码单元对应的滤波信息进行熵解码后,重置本熵解码功能模块,包括:

根据码流中的第一状态标记判断当前编码单元为预设单位中的最后一个,对当前编码单元所在最大编码单元对应的滤波信息进行熵解码后,基于所述状态标记重置熵解码功能模块。

进一步地,所述判断如果未达到预设单位的限制,则根据当前编码单元所在最大编码单元是否熵解码完毕确定是否熵解码所述最大编码单元对应的滤波信息,继续熵解码下一编码单元的信息,包括:

根据码流中的第一状态标记判断当前编码单元如果不为预设单位中的最后一个,则判断当前编码单元所在最大编码单元是否熵解码完毕,如果熵解码完毕,则对所述最大编码单元对应的滤波信息进行熵解码后,进行下一最大编码单元内各编码单元的信息的熵解码,如果熵解码未完毕,则继续熵解码当前最大编码单元中其他编码单元的信息。

进一步地,所述预设单位为片。

为解决上述技术问题,本发明还提供了一种视频码流编码器,包括熵编码功能模块,其特征在于,所述熵编码功能模块包括第一熵编码单元、判断单元、第二熵编码单元、重置单元,其中:

所述第一熵编码单元,用于按照编码器中其他功能模块处理编码单元的先后顺序,对其他功能模块处理编码单元产生的需要熵编码的信息进行熵编码;

所述判断单元,用于在所述第一熵编码单元进行熵编码的过程中,在第一熵编码单元每熵编码完成一个编码单元的信息后,判断是否达到预设单位的限制;

所述第二熵编码单元,用于在所述判断单元判断达到预设单元的限制时,对当前编码单元所在最大编码单元对应的滤波信息进行熵编码;

所述重置单元,用于在所述第二熵编码单元对所述滤波信息进行熵编码后,重置所述熵编码功能模块。

进一步地,所述第二熵编码单元还用于在所述判断单元判断未达到预设单位的限制时,根据当前编码单元所在最大编码单元是否熵编码完毕确定是否熵编码所述最大编码单元对应的滤波信息。

进一步地,所述判断单元是用于采用以下方式判断是否达到预设单位的限制:判断当前编码单元是否为预设单位中的最后一个,如果是,则在码流中写入第一状态标记;

所述重置单元是用于基于所述第一状态标记重置熵编码功能模块。

进一步地,所述第二熵编码单元是用于采用以下方式根据当前编码单元所在最大编码单元是否熵编码完毕确定是否熵编码所述最大编码单元对应的滤波信息:所述第二熵编码单元在当前编码单元所在最大编码单元熵编码完毕后,对所述最大编码单元对应的滤波信息进行熵编码。

进一步地,所述判断单元是用于采用以下方式判断是否达到预设单位的限制:判断已经熵编码的编码单元数量或尺寸是否达到一个预设单位。

进一步地,所述预设单位为片。

为解决上述技术问题,本发明还提供了一种视频码流熵解码器,包括熵解码功能模块,其特征在于,所述熵解码功能模块包括第一熵解码单元、判断单元、第二熵解码单元和重置单元,其中:

所述第一熵解码单元,用于熵解码编码单元的信息;

所述判断单元,用于在所述第一熵解码单元每熵解码完一个编码单元的信息后,判断是否达到预设单位的限制;

所述第二熵解码单元,用于在所述判断单元判断达到预设单位的限制时,对当前编码单元所在最大编码单元对应的滤波信息进行熵解码;

所述重置单元,用于对当前编码单元所在最大编码单元对应的滤波信息进行熵解码后,重置本熵解码功能模块。

进一步地,所述第二熵解码单元还用于在所述判断单元判断未达到预设单位的限制时,根据当前编码单元所在最大编码单元是否熵解码完毕确定是否熵解码所述最大编码单元对应的滤波信息。

进一步地,所述判断单元是用于采用以下方式判断是否达到预设单位的限制:根据码流中的第一状态标记判断当前编码单元是否为预设单位中的最后一个;

所述第二熵解码单元用于,在所述判断单元判断当前编码单元为预设单位中的最后一个时,对当前编码单元所在最大编码单元对应的滤波信息进行熵解码;

所述重置单元是用于基于所述第一状态标记重置熵解码功能模块。

进一步地,所述第二熵解码单元是用于采用以下方式根据当前编码单元所在最大编码单元是否熵解码完毕确定是否熵解码所述最大编码单元对应的滤波信息:

所述第二熵解码单元在当前编码单元所在最大编码单元熵解码完毕后,对所述最大编码单元对应的滤波信息进行熵解码。

采用本发明实施例提出的视频流编解码方法和装置,通过先熵编码残差信息再编码滤波信息,有利于编码器功能模块并行,减少流水线级数,减少缓冲,从而减少芯片面积,另外还可以降低延时,提高编解码器的性能,降低硬件的开销。

附图说明

图1是一种H.264编码器功能模块划分的示意图;

图2是一种HEVC编码器功能模块划分的示意图;

图3是先编码滤波信息引起流水线级数及缓冲增加的示意图;

图4是本发明实施例3编码装置结构示意图;

图5是本发明实施例4解码装置结构示意图;

图6是应用示例1中编码方法流程图;

图7是应用示例2中解码方法流程图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。

实施例1

本实施例说明一种编码方法,包括:

熵编码功能模块按照编码器中其他功能模块处理编码单元的先后顺序,对其他功能模块处理编码单元产生的需要熵编码的信息进行熵编码,在进行熵编码的过程中,每熵编码完成一个编码单元的信息后,判断如果达到预设单位的限制,则对当前编码单元所在最大编码单元对应的滤波信息进行熵编码后,重置本熵编码功能模块。

在每熵编码完成一个编码单元的信息后,判断如果未达到预设单位的限制时,则根据当前编码单元所在最大编码单元是否熵编码完毕确定是否熵编码所述最大编码单元对应的滤波信息,继续熵编码下一编码单元的信息。

具体地,在判断达到预设单位的限制时上述流程可采用以下方式实现:判断当前编码单元如果为预设单位中的最后一个,则在码流中写入第一状态标记,对当前编码单元所在最大编码单元对应的滤波信息进行熵编码后,基于该状态标记重置熵编码功能模块。基于该状态标记重置熵编码功能单元是指,如果判断该第一状态标记表示当前编码单元为预设单位中的最后一个,则重置熵编码功能模块。

具体地,在判断未达到预设单位的限制时上述流程可采用以下方式实现:根据码流中的第一状态标记判断当前编码单元如果不为预设单位中的最后一个,则进一步判断当前编码单元所在最大编码单元是否熵编码完毕,如果熵编码完毕,则对所述最大编码单元对应的滤波信息进行熵编码后,进行下一最大编码单元内各编码单元的信息的熵编码,如果熵编码未完毕,则继续熵编码当前最大编码单元中其他编码单元的信息。

是否达到预设单位的限制设置:已经熵编码的编码单元数量或尺寸是否达到一个预设单位。优选地,该预设单位为片。

实施例2

本实施例说明一种解码方法,包括:

在进行熵解码的过程中,每熵解码完成一个编码单元的信息后,判断如果达到预设单位的限制,则对当前编码单元所在最大编码单元对应的滤波信息进行熵解码后,重置本熵解码功能模块。

在每熵解码完成一个编码单元的信息后,判断如果未达到预设单位的限制时,则根据当前编码单元所在最大编码单元是否熵解码完毕确定是否熵解码所述最大编码单元对应的滤波信息,然后继续熵解码下一编码单元的信息。

具体地,在判断达到预设单位的限制时上述流程可采用以下方式实现:根据码流中的第一状态标记判断当前编码单元为预设单位中的最后一个,对当前编码单元所在最大编码单元对应的滤波信息进行熵解码后,基于所述状态标记重置熵解码功能模块。

具体地,在判断没有达到预设单位的限制时上述流程可采用以下方式实现:根据码流中的第一状态标记判断当前编码单元如果不为预设单位中的最后一个,则判断当前编码单元所在最大编码单元是否熵解码完毕,如果熵解码完毕,则对所述最大编码单元对应的滤波信息进行熵解码后,进行下一最大编码单元内各编码单元的信息的熵解码,如果熵解码未完毕,则继续熵解码当前最大编码单元中其他编码单元的信息。

实施例3

本实施例介绍实现实施例1编码方法的编码装置,该编码装置包括熵编码功能模块,如图4所示,熵编码功能模块包括第一熵编码单元、第一判断单元、第二熵编码单元、第一重置单元,其中:

该第一熵编码单元,用于按照编码器中其他功能模块处理编码单元的先后顺序,对其他功能模块处理编码单元产生的需要熵编码的信息进行熵编码;

该第一判断单元,用于在所述第一熵编码单元进行熵编码的过程中,在第一熵编码单元每熵编码完成一个编码单元的信息后,判断是否达到预设单位的限制;

该第二熵编码单元,用于在所述第一判断单元判断达到预设单元的限制时,对当前编码单元所在最大编码单元对应的滤波信息进行熵编码;

该第一重置单元,用于在所述第二熵编码单元对所述滤波信息进行熵编码后,重置所述熵编码功能模块。

优选地,该第二熵编码单元还用于在所述第一判断单元判断未达到预设单位的限制时,根据当前编码单元所在最大编码单元是否熵编码完毕确定是否熵编码所述最大编码单元对应的滤波信息。具体地,第二熵编码单元在当前编码单元所在最大编码单元熵编码完毕后,才对所述最大编码单元对应的滤波信息进行熵编码。

具体地,该第一判断单元是用于采用以下方式判断是否达到预设单位的限制:判断当前编码单元是否为预设单位中的最后一个,如果是,则在码流中写入第一状态标记;该第一重置单元基于该第一状态标记重置熵编码功能模块。

实施例4

本实施例介绍实现实施例2解码方法的解码装置,该解码装置包括熵解码功能模块,如图5所示,熵解码功能模块包括第一熵解码单元、第二判断单元、第二熵解码单元和第二重置单元,其中:

该第一熵解码单元,用于熵解码编码单元的信息;

该第二判断单元,用于在所述第一熵解码单元每熵解码完一个编码单元的信息后,判断是否达到预设单位的限制;

该第二熵解码单元,用于在所述第二判断单元判断达到预设单位的限制时,对当前编码单元所在最大编码单元对应的滤波信息进行熵解码;

该第二重置单元,用于对当前编码单元所在最大编码单元对应的滤波信息进行熵解码后,重置本熵解码功能模块。

优选地,第二熵解码单元还用于在所述第二判断单元判断未达到预设单位的限制时,根据当前编码单元所在最大编码单元是否熵解码完毕确定是否熵解码所述最大编码单元对应的滤波信息。具体地,第二熵解码单元在当前编码单元所在最大编码单元熵解码完毕后,才对所述最大编码单元对应的滤波信息进行熵解码。

具体地,上述第二判断单元是用于采用以下方式判断是否达到预设单位的限制:根据码流中的第一状态标记判断当前编码单元是否为预设单位中的最后一个;所述第二熵解码单元用于,在所述判断单元判断当前编码单元为预设单位中的最后一个时,对当前编码单元所在最大编码单元对应的滤波信息进行熵解码;该第二重置单元是用于基于所述第一状态标记重置熵解码功能模块。

下面结合附图给出应用示例,对上述实施例作进一步的详细描述。

图2是一种HEVC(High efficiency video coding)高级视频编解码标准编码器结构示意图,其中预测模块(Prediction)包括帧内预测、帧间预测等功能模块,残差重建模块(Diff/Recon)包括残差计算、变换量化及重建等功能模块,CABAC是熵编码功能模块,DF(Deblock Filter)、SAO(Sample Adaptive Offset)、ALF(Adaptive Loop Filter)分别是去块效应滤波、样本点自适应滤波和自适应环内滤波功能模块。

应用示例1

编码端的处理过程如图6所示,包括:

步骤一:编码器各功能模块按照HEVC视频编解码标准对编码单元依次进行处理,其中,熵编码功能模块按照编码器中其他功能模块处理编码单元的先后顺序,对其他功能模块处理编码单元产生的需要熵编码的信息进行熵编码;

步骤二:判断当前编码单元是否达到一个片(以预设单位为一个片为例)的限制时,如果是,执行步骤三,否则,执行步骤五;

步骤三,在码流中写入编码单元结束标志(last_CU_in_slice_flag)的使能状态(例如为1),表示当前片中包含的编码单元已经熵编码结束,当前编码单元为最后一个,执行步骤四;

步骤四,熵编码当前编码单元所在最大编码单元对应的滤波信息,如表1中的SAO和/或ALF信息,重置熵编码功能模块,结束;

具体地,在熵编码完滤波信息后,根据编码单元结束标志的值直接或间接得到片数据结束标志(end_of_slice_flag)的值,如表1所示,该(end_of_slice_flag)标志表示当前片数据结束,此时可以重置熵编码模块;

步骤五,写入编码单元结束标志(last_CU_in_slice_flag)的不使能状态(例如为0),表示当前片中包含的编码单元尚未结束;

步骤六,判断当前编码单元所在的最大编码单元是否熵编码完毕,如果完毕,执行步骤七,否则执行步骤八;

步骤七,对当前编码单元所在最大编码单元对应的滤波信息(如表1中的SAO和/或ALF信息)进行熵编码,熵编码功能模块进行下一最大编码单元中各编码单元的信息的熵编码;

步骤八,熵编码功能模块继续熵编码当前最大编码单元中其他编码单元的信息;

编码器的片数据语法结构如表1所示。

在本示例中,编码单元结束标志即状态标记在当前编码单元达到片限制时和未达到片限制时都被标记,在其他实施例中,也可仅在达到片限制时进行标记。

应用示例2

解码端处理过程如图7所示,包括:

第一步:解码器各功能模块按照HEVC视频编解码标准对编码单元依次进行解码处理;

第二步:按照表1所示的片数据语法结构进行熵解码,先熵解码当前编码单元信息coding_tree;

第三步:解码得到编码单元结束标志(last_CU_in_slice_flag);

第四步:根据结束状态的使能状态判断当前编码单元是否达到一个片,如果是执行第五步,否则执行第六步;

第五步:编码单元结束标志为使能状态(例如为1),表示当前片中包含的编码单元已经结束,当前编码单元为最后一个,则熵解码当前编码单元所在最大编码单元对应的滤波信息,如表1中的SAO和/或ALF信息,重置熵解码功能模块;

根据步骤三中解码得到的编码单元结束标志last_CU_in_slice_flag的值直接或间接得到当前片数据结束标志end_of_slice_flag的值,该end_of_slice_flag标志表示当前片数据结束,可以重置熵解码模块,之后再解码下一个编码单元或进行图像输出。

第六步,编码单元结束标志为不使能标志(例如为0),表示当前片中包含的编码单元尚未结束,如表2所示,判断当前编码单元所在的最大编码单元是否熵解码完毕,如果是执行第七步,否则执行第八步;

第七步:对当前编码单元所在最大编码单元对应的滤波信息进行熵解码,熵解码功能模块进行下一最大编码单元中各编码单元的信息的熵解码;

第八步:熵解码功能模块继续熵解码当前最大编码单元中其他编码单元的信息。

解码器中其余的语法结构按照HEVC视频编解码标准生成。

表1 片数据(Slice Data)的语法结构

表2 CU层(Coding_tree)的语法结构

本发明利用了ASIC设计中编码器内部功能模块并行处理的特点,提出了一种新的视频码流编码及解码方法,该方法能够在不影响视频编码压缩率的情况下,提高了编码器的并行度,并降低ASIC上编码器对于缓存的需求,从而提升了编码器的效率和性能。

本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现。相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本发明不限制于任何特定形式的硬件和软件的结合。

当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。

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