编码方法及编码装置与流程

文档序号:14099811阅读:147来源:国知局
本发明关于数据处理
技术领域
:,特别关于一种编码方法及编码装置。
背景技术
::传统的视频编码标准通常采用基于区块的利用空间冗余的编码技术。例如,基本的方法是将整个源帧(sourceframe)分为多个区块,对每个区块执行预测,转换每个区块的余差(residues),并执行量化以及熵编码。另外,重建帧(reconstructedframe)于编码环路(codingloop)中产生以提供用于编码接下来的区块的参考像素数据。对于某些视频编码标准,环路滤波器可用于增强重建帧的图像质量。VP9是正在开发的一个开放且免版税的的视频编码标准。VP9提供了用于并行处理的片(tile),片的概念与高效视频编码(HighEfficiencyVideoCoding,HEVC)中所提出的概念类似。然而,根据VP9编码标准,将要被编码的帧中相垂直邻近的片是有依赖关系的。其结果是,对同一片列(tilecolumn)中的这些垂直邻近片(vertically-adjacenttiles)的封包(即,熵编码)不能并行地进行。因此,需要一种新颖的编码器设计,这种编码器能够对帧中的垂直邻近片进行并行方式的封包(即,熵编码),以此获取增强的编码性能。技术实现要素:为了解决上述问题,本发明提出了一种编码方法及编码装置。根据本发明的第一方面,提供一种编码方法,所述编码方法用于编码被分为多个片的帧,所述多个片中的每个片具有多个区块,所述编码方法包括:将源自所述帧的第一片的最后一个区块行中的区块的编码相关信息储存到存储装置;从所述存储装置中读取所述编码相关信息;以及根据从所述存储装置中读取的所述编码相关信息的至少一部分,对所述帧的第二片的第一区块行中的区块执行熵编码;其中,所述第二片的所述第一区块行垂直邻近于所述第一片的所述最后一个区块行,且所述第二片的所述第一区块行的所述熵编码开始于所述第一片的所述最后一个区块行的所述熵编码完成之前。根据本发明的第二方面,一种编码装置,所述编码装置用于编码被分为多个片的帧,所述多个片中的每个片具有多个区块,所述编码装置包括:存储装置;编码电路,将源自所述帧的第一片的最后一个区块行中的区块的编码相关信息储存到所述存储装置;以及封包电路,从所述存储装置中读取所述编码相关信息,且根据从所述存储装置中读取的所述编码相关信息的至少一部分对所述帧的第二片的第一区块行中的区块执行熵编码;其中,所述第二片的所述第一区块行垂直邻近于所述第一片的所述最后一个区块行,且所述第二片的所述第一区块行的所述熵编码开始于所述第一片的所述最后一个区块行的所述熵编码完成之前。本发明提供的编码方法及编码装置,能够对帧中的垂直邻近片进行并行的熵编码,可增强的编码性能。【附图说明】图1根据本发明的实施例的用于编码帧的编码装置的示意图。图2为根据相关技术所示的由VP9编码标准建议的两级编码方案的流程图。图3为根据本发明的实施例所提出的两级编码方案的流程图。图4根据本发明的实施例的帧的片分区布局的示意图。图5为根据本发明的实施例的与目前正在封包的超级区块相关的某些邻近超级区块的示意图。图6为根据本发明的实施例中于第一级编码流程中储存编码相关信息的操作以及于第二级编码流程中读取/加载编码相关信息的操作的示意图。【具体实施方式】于接下来的描述和权利要求中,遍及使用了某些术语,这些术语表示特定的组件。因为本领域的技术人员将会理解,电子设备制造商可以用不同的名字来表示一个组件。本文不是想要根据名称的不同来区分组件,而是根据功能来区分组件。于接下来的描述和权利要求中,术语“包括”是开放式的,且因此应当被解释为“包括,但不限于...”。而且,术语“耦接”是表示间接或直接的电连接。因此,如果一个装置耦接到另一装置,则该连接可以是通过直接电连接,或经由其它装置以及连接的非直接电连接。本发明涉及帧数据编码,更特别地,是关于通过加载帧中一片(tile)上方的另一片的编码相关信息(例如,分区大小信息)来封包(即,熵编码)帧中该片的编码方法以及编码装置,其中,另一片的编码相关信息是来自于存储装置。图1根据本发明的实施例的用于编码帧的编码装置100的示意图。装置100可包括一个电子装置的(例如,一部分或所有),例如:视频编码器的至少一部分。编码装置100可包括此电子装置(例如,视频编码器)的一部分,更特别地,可以是此电子装置中的至少一个硬件电路,例如,至少一个集成电路(IC)。于另一实施例中,编码装置100可以是此电子装置(例如,视频编码器)的全部。于又一实施例中,编码装置100可包括此电子装置的电子系统(例如,包括此视频编码器的电子系统)。此电子装置的示例可包含,但不限于,移动电话(例如,多功能移动电话),平板电脑,以及个人电脑(例如,笔记本电脑或台式电脑)。简而言之,使用所提到的编码装置100的任何电子装置或电子系统均属于本发明的保护范围。如图1所示,编码装置100可具有:编码电路102,封包电路(packingcircuit)104,以及存储装置106,其中,存储装置106耦接于编码电路102以及封包电路104。应该注意到,只有跟本发明相关的组件被显示于图1中。于实践中,编码装置100可包含附加的组件,以获取其它功能。编码电路102用于执行图像编码,例如,与帧IMG的片相关的图像编码操作。编码电路102可根据已选择的片分区布局(selectedtilepartitioninglayout),将帧IMG分为多个片,并采用光栅扫描顺序(rasterscanorder)来处理此多个片。封包电路104被安排于执行封包(即,熵编码)以产生比特流BS。于此情况下,根据已选择的片分区布局,将帧IMG分为多个片,封包电路104将对由编码电路102产生的每个片的已处理数据进行封包以输出对应比特流。在本实施例中,编码电路102以及封包电路104中的每一个都可使用专属硬件电路来实现。然而,此仅用于说明性的目的,并不用于限定本发明。根据本发明的某些实施例,图1所示的至少一部分组件(例如,编码电路102和/或封包电路104)可以由运行某些程序代码的处理器来实现。例如,此处理器可以是计算机处理器,例如,中央处理单元(CentralProcessingUnit,CPU)或图形处理单元(GraphicsProcessingUnit,GPU)。本发明采用两级编码方案的优点以达到并行编码帧中多个垂直邻近片(vertically-adjacenttiles)的目的。具体地,编码电路102被安排以执行第一级编码流程(first-stageencodingflow),且封包电路104被安排以执行第二级编码流程(second-stageencodingflow),其中,第一级编码流程以及第二级编码流程中的每个都应用于相同帧IMG中的所有区块,即,整个帧IMG。考虑到编码装置100用于产生符合VP9编码标准的比特流BS的情况下,帧IMG可以被分为64x64大小的区块(或称为超级区块)。因此,第一级编码流程以及第二级编码流程中的每个被用于处理帧IMG中的所有超级区块。换句话说,于封包电路104开始处理帧IMG的所有超级区块之前,编码电路102已经完成了对帧IMG中所有超级区块的处理。图2为根据相关技术所示的由VP9编码标准建议的两级编码方案的流程图。第一级编码流程包括:步骤202、步骤204、步骤206、以及步骤208,且第二级编码流程包括:步骤210、步骤212,以及步骤214。步骤202被执行以进行运动估计(motionestimation,ME),运动补偿(motioncompensation,MC),转换(transform,T),量化(quantization,Q),反转换(inversetransform,IT),反量化(inversequantization,IQ),符号化(tokenization)等编码步骤。于步骤202的编码步骤完成后,帧IMG的量化系数/运动向量/模式的分布被确定。换句话说,发生的语法元素(syntaxelement)能被确定。根据步骤202中确定的语法元素的分布,步骤204被执行以计算优化的(optimized)概率来产生创建帧IMG的概率表(probabilitytable)。以此方式,所描述的精确的概率表可以被创建来匹配语法元素的实际分布。步骤206被执行以选择一个优化的环路滤波器级别(loopfilterlevel)。步骤208被执行以将具有所选择的环路滤波器级别的环路滤波应用到区块边界。第二级编码流程的目的是对帧报头(frameheader)以及片执行熵编码(例如,算术编码)。步骤210被执行以产生帧报头的比特流,其中,帧报头包括:帧类型、滤波器级别、概率表等。步骤212被执行以对帧IMG中的所有片进行封包(即,熵编码)。具体地,对于每个片,步骤212被执行以对所述片中所有超级区块进行封包(即,熵编码)。步骤214进行概率向后适配(probabilitybackwardadaptation)以根据趋势修改概率。作为本领域技术人员可以容易地理解VP9编码标准所提出的典型的两级编码方案的细节,为了简洁,此处省略了进一步的描述。编码电路102用于处理用于编码每个帧的两级编码方案中的第一级编码流程,且封包电路104用于处理两级编码方案中的第二级编码流程,其中,第二级编码流程是跟随于第一级编码流程后,且熵编码(即,封包)仅包含于第二级编码流程中。因此,于第一级编码流程处理完整个帧IMG后,执行封包操作(例如,算术编码操作)。在本实施例中,编码电路102执行如图2所示的第一级编码流程中的步骤202至步骤208,以及如图3所示的附加的步骤302;且封包电路104执行如图2所示的第二级编码流程中的步骤210-214,以及如图3所示的附加的步骤304。请参考图3,图3为根据本发明的实施例所提出的两级编码方案的流程图。步骤302被执行以将编码相关信息INFPS储存到存储装置106(即,保存编码相关信息INFPS)。步骤304被执行以从存储装置106中读取编码相关信息INFPS(即,加载编码相关信息INFPS)。例如,帧IMG被分为多个片,且每个片是由多个区块(例如,VP9中的超级区块)组成。因此,编码电路102可将源自帧IMG的第一片的最后一个区块行(即,最底部的行)中的区块的编码相关信息储存到存储装置106,且封包电路104可以从存储装置106中读取所述编码相关信息,并根据从存储装置106中读取的所述编码相关信息的至少一部分对帧IMG的第二片的第一区块行(即,最顶部的行)的区块执行熵编码(例如,算术编码),其中,第一片以及第二片是在相同片列中连续的片,且第二片的第一区块行是垂直邻近于第一片的最后一个区块行。于编码装置100用于产生符合VP9编码标准的比特流BS的情况下,帧IMG被分为64x64大小的区块(或被称为超级区块SB64x64),帧IMG中的每个片都是由超级区块SB64x64组成,且在一个片中的每个区块行是一个超级区块行,超级区块行是由超级区块SB64x64组成。图4根据本发明的实施例的帧的片分区布局的示意图。如图4所示,帧IMG具有两个片列以及两个片行(tilerow),因此包括四个片Tile_0,Tile_1,Tile_2,以及Tile_3。片Tile_0以及片Tile_1位于帧IMG的上片行(theuppertilerow),且片Tile_0以及片Tile_1在水平方向上彼此邻近,片Tile_2以及片Tile_3位于帧IMG的下片行(thelowertilerow),且片Tile_2以及片Tile_3在水平方向上彼此邻近。另外,片Tile_0以及片Tile_2位于帧IMG的的左片列,且片Tile_0以及片Tile_2在垂直方向上彼此邻近(即,垂直邻近),片Tile_1以及片Tile_3位于帧IMG的的右片列,且片Tile_1以及片Tile_3在垂直方向上彼此邻近。假设编码装置100用于产生符合VP9编码标准的比特流,编码电路102将帧IMG分为64x64大小的区块,即,超级区块SB64x64。片Tile_0至片Tile_3将按照光栅扫描顺序被处理,且每个片中的超级区块SB64x64也将按照光栅扫描顺序被处理。片Tile_0包括多个超级区块行SBrow_01至SBrow_0M,每个超级区块行具有多个超级区块SB64x64;片Tile_1包括多个超级区块行SBrow_11至SBrow_1M,每个超级区块行具有多个超级区块SB64x64;片Tile_2包括多个超级区块行SBrow_21至SBrow_2N,每个超级区块行具有多个超级区块SB64x64;且片Tile_3包括多个超级区块行SBrow_31至SBrow_3N,每个超级区块行具有多个超级区块SB64x64。M的值是根据上片行的高度来决定的,N的值是根据下片行的高度来决定的。应该注意到,如图4所示的片分区布局仅仅是用于说明性的目的,而不是用于限制本发明。于实践中,对于片是有一些限制或要求的。首先,每个片行的数量以及片列的数量需要是2的次方(例如2n,其中,符号n为大于或等于零的整数),在分片的过程中,一个帧可以被垂直地或水平地分为2、4、8等,份。此外,一个片中的每个最小宽度以及最小高度等于256像素。例如,一个“1280x720”的帧,其包括(1280*720)像素,最多可以被分为(4*2)个片。于另一示例中,一个“1920x1080”的帧,其包括(1920*1080)像素,最多可以被分为(4*4)个片。典型地,编码器侧的编码装置100需要将帧中所有片的偏置(offset)增加到此帧的帧报头中,由此,解码器侧的装置在提取/解析帧报头后可以定位所有子流(sub-stream)。VP9支持基于编码的四叉树(quad-tree)。因此,编码电路102可以使用递归分区(recursivepartitioning)将帧IMG中的每个超级区块SB64x64分为一个或多个分区(例如,较小大小的超级区块)以进行编码。例如,VP9编码标准支持的分区可包含正方形分区(squarepartition),例如,64x64大小的区块(或称为超级区块SB64x64),32x32大小的区块(或称为超级区块SB32x32),16x16大小的区块(或称为超级区块SB16x16),8x8大小的区块(或称为超级区块SB8x8)等,还可包含非正方形分区,例如,64x32大小的区块(或称为超级区块SB32x64),32x64大小的区块(或称为超级区块SB32x64),32x16大小的区块(或称为超级区块SB32x16),16x32大小的区块(或称为超级区块SB16x32)等。因此,分区大小可包含64x64、32x32、16x16、8x8、64x32、32x64、32x16、16x32,等。更具体地,任何对帧IMG中每个超级区块SB64x64使用递归分区来确定的分区将被认为是一个编码单元。从图4中可以看出,片Tile_0中的最后一个超级区块行SBrow_0M是垂直邻近于片Tile_2的第一超级区块行SBrow_21,且片Tile_1的最后一个超级区块行SBrow_1M是垂直邻近于片Tile_3的第一超级区块行SBrow_31。在封包过程中,相同片列中邻近片之间具有依赖关系的,尤其是,属于相同片列的不同片中的垂直邻近的超级区块。图5为根据本发明的实施例的与目前正在封包的超级区块相关的某些邻近超级区块的示意图。超级区块SB_A,SB_L,以及SB_C的分区是根据前述应用于超级区块SB64x64的递归分区来确定的。根据VP9编码标准,当封包/编码当前的超级区块SB_C的一个具体语法元素(例如,分区类型)时,封包电路104可能需要当前的超级区块SB_C的上方或左侧的超级区块的编码相关信息(例如,分区大小),例如,图5所示的上方超级区块SB_A以及左侧超级区块SB_L。其中,不同的分区类型可以被分类为:水平分区类型(2NxN),垂直分区类型(Nx2N),以及正方形分区类型(NxN)。当编码当前的超级区块SB_C的分区类型时,封包电路104必须知道上方超级区块SB_A以及左侧超级区块SB_L的分区大小。如上所述,编码电路102通过计数每个帧中每个语法元素发生的次数,可以产生每个帧的概率表。表索引Prob_offset被用于加载来自概率表中的概率集合(即,概率模型),表索引Prob_offset是根据至少一个上方超级区块以及至少一个左侧超级区块对应的分区大小来决定。对应于当前的超级区块SB_C分区类型的编码的表索引Prob_offse的计算可以表示如下。Prob_offset=offset_above+offset_left*2;其中,参数offset_above可以通过比较上方超级区块SB_A的分区大小与当前的超级区块SB_C的分区大小而推导出,且参数offset_left可以通过比较左侧超级区块SB_L的分区大小与当前的超级区块SB_C的分区大小而推导出。例如,如果当前的超级区块SB_C的任何上方邻近的分区(即,位于当前的超级区块SB_C上方的任何邻近分区)的宽度小于当前的超级区块SB_C的宽度,则参数offset_above被设置为1;否则,参数offset_above被设置为0。于另一示例中,如果当前的超级区块SB_C的任何左侧邻近的分区(即,任何位于当前的超级区块SB_C左侧的邻近分区)的高度小于当前的超级区块SB_C的高度,则参数offset_left被设置为1;否则,参数offset_left被设置为0。然而,如果左侧超级区块SB_L以及当前的超级区块SB_C被定位位于不同的片,参数offset_left被设置为0。请注意,即使上方分区位于不同的片(即,与当前的超级区块SB_C所在的片不同的片),参考仍然是有效的。当当前的超级区块SB_C是包含于第二片的第一超级区块行中的分区,以及上方超级区块SB_A是包含于第一片的最后一个超级区块行中的分区,且第一片的最后一个超级区块行垂直邻近于第二片的第一超级区块行时,在相同片列的连续片之间就存在依赖关系(例如,分区大小的依赖关系)。因为在封包过程中,相同片列中的垂直邻近片具有依赖关系,这些片的封包操作就不能并行进行。例如,相关技术中典型的视频编码器是以光栅扫描顺序对相同帧中的片进行封包,且以光栅扫描顺序对相同片中的超级区块进行封包。为了实现相同片列中垂直邻近片的并行封包,本发明因此提出了于两级编码方案的第一级编码流程期间,将来自于特定片的最后一个区块行的区块中的编码相关信息INFPS保存到存储装置106,并于两级编码方案的第二级编码流程期间,从存储装置106中加载编码相关信息INFPS。于编码装置100用于产生符合VP9编码标准的比特流BS的情况下,编码相关信息INFPS可包含第一片中最后一个超级区块行中的分区的分区大小信息(即,由递归分区确定的超级区块的分区大小),编码相关信息INFPS将在封包第二片的第一超级区块行中的分区(即,由递归分区确定的超级区块)的分区类型时被需要,其中,第一片的最后一个超级区块行垂直邻近于第二片的第一超级区块行。由存储装置106加载的编码相关信息INFPS可以作为第二级编码流程的初始内容(initialcontext)。因此,根据编码电路102提供的并保存于存储装置106中的初始内容,封包电路104不再需要按照光栅扫描顺序来封包帧IMG中的片。于本发明的另一实施例中,第一级编码流程包括产生帧的概率表;帧中第一片的最后一个区块行的区块以及第二片的第一区块行的每个区块被分为一个或多个分区以用于编码;对第二片的第一区块行执行熵编码的步骤包括:当编码第二片的第一区块行的当前分区的语法元素时,根据第一片的最后一个区块行的至少一个特定分区的编码相关信息的至少一部分确定表索引,其中,至少一个特定分区是位于当前分区的上方;且根据所述表索引,从概率表中选择概率集合以编码当前分区的语法元素,其中,所述至少一个特定分区的编码相关信息包括所述至少一个特定分区的分区大小信息,所述当前分区的所述语法元素包括所述当前分区的分区类型。并且,所述帧中第一片的最后一个区块行中的每个区块以及第二片的第一区块行中的每个区块是符合VP9编码标准的超级区块,例如,图5中所示的当前的超级区块SB_C、上方超级区块SB_A、以及左侧超级区块SB_L。图6为根据本发明的实施例中于第一级编码流程中储存编码相关信息的操作以及于第二级编码流程中读取/加载编码相关信息的操作的示意图。以具有如图4所示的片分区布局的帧IMG作为例子。当执行如图3所提出的第一级编码流程时,编码电路102进一步将编码相关信息INFPS储存到存储装置106(存储装置106可作为超级区块信息缓冲器),其中,编码相关信息INFPS包括:超级区块行SBrow_0M的超级区块的分区大小信息,以及超级区块行SBrow_1M的超级区块的分区大小信息。当执行如图3所提出的第二级编码流程时,封包电路104进一步从存储装置106中读取所储存的编码相关信息INFPS,包括:超级区块行SBrow_0M的超级区块的分区大小信息,以及超级区块行SBrow_1M的超级区块的分区大小信息,并根据从存储装置106中读取的编码相关信息INFPS的至少一部分,对超级区块行SBrow_21以及SBrow_31中的超级区块执行封包(例如,算术编码)。于一示范性设计中,封包电路104在对位于片Tile_2上方的片Tile_0中的最后一个超级区块SBrow_0M的封包完成之前,就开始对片Tile_2的第一超级区块SBrow_21进行封包,和/或在位于片Tile_3上方的片Tile_1的最后一个超级区块SBrow_1M的封包完成之前,就开始对片Tile_3的第一超级区块SBrow_31进行封包。因此,封包电路104不需要以光栅扫描顺序来封包片Tile_0、片Tile_1、片Tile_2、以及片Tile_3。于另一示范性设计中,封包电路104并行地执行对片Tile_2的第一超级区块SBrow_21的封包,以及执行位于片Tile_2上方的片Tile_0中的最后一个超级区块SBrow_0M的封包,和/或并行地执行片Tile_3的第一超级区块SBrow_31的封包以及位于片Tile_3上方的片Tile_1的最后一个超级区块SBrow_1M的封包。例如,封包电路104同时开始执行对片Tile_2的第一超级区块SBrow_21的封包以及对位于片Tile_2上方的片Tile_0中的最后一个超级区块SBrow_0M的封包,和/或同时开始执行对片Tile_3的第一超级区块SBrow_31的封包以及位于片Tile_3上方的片Tile_1的最后一个超级区块SBrow_1M的封包。在又一示范性设计中,封包电路104并行地对帧IMG的所有片Tile_0、片Tile_1、片Tile_2、以及片Tile_3进行封包。例如,封包电路104同时开始对片Tile_0的封包,对片Tile_1的封包,对片Tile_2的封包,以及对片Tile_3的封包。以此方式,可以获得优化的编码性能。于以上实施例中,假设视频编码标准是VP9编码标准。然而,这仅是为了说明的目的,并且不意味着是本发明的限制。任何现存的支持两级编码方案以及帧片方案(frametilingscheme)的视频编码标准都可以被修改以采用所提出的设计,来达到并行封包(熵编码)相同片列中的片的目的。另外,任何支持两级编码方案以及帧片方案的发展中的视频编码标准都可以采用所提出的设计,来达到并行封包(熵编码)相同片列中的片的目的。这些都属于本发明的范围。应该注意到本发明对储存于存储装置106的编码相关信息INFPS的数据格式没有限制。于一示范性设计,编码电路102可直接将编码相关信息INFPS传送到存储装置106,且封包电路104可直接从存储装置106接收编码相关信息INFPS。于另一示范性设计,编码电路102可将编码相关信息INFPS转化/转换(translate/convert)为已转化/已转换的数据集,并将已转化/已转换的数据集传送到存储装置106;且封包电路104从存储装置106中接收该已转化/已转换的数据集,并且处理该已转化/已转换的数据集以恢复编码相关信息INFPS。本发明虽以较佳实施例揭露如上,然其并非用以限定本发明的范围,任何本领域技术人员,在不脱离本发明的精神和范围内,当可做些许的更动与润饰,因此本发明的保护范围当视权利要求所界定者为准。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1