cabac二进制化和上下文模型产生的编码方法和装置与流程

文档序号:30177921发布日期:2022-05-26 12:24阅读:53来源:国知局
1.本发明涉及视频编码领域,具体而言涉及一种cabac二进制化和上下文模型产生的编码方法和装置。
背景技术
::2.在集成电路设计,基于上下文的自适应二进制算术编码(context-basedadaptivebinaryarithmeticcoding,cabac)是已经广泛用于诸如avc(h.264),hevc(h.265)的高级视频编码中的高效熵编码工具。举例来说,hevc标准的各种语法元素是以cabac模式来编码,其中基于与基础语法元素相关的上下文,来自适应地将熵编码应用于二进制化语法元素。由于cabac引擎中的算术编码器只能对二进制符号值(binarysymbolvalue)进行编码,因此cabac过程需要使用二进制化器来将语法元素的值转换为二进制字符串(binarystring)。转换过程通常被称为二进制化。在编码过程中,从用于不同上下文的编码符号逐渐建立概率模型。cabac在做算术编码之前需要将相关语法元素进行二进制化(或称为二值化)处理成bin(在算术编码前单个位),以及产生每个bin所对应的上下文模型。即如图1为cabac过程的示例性框图所示,编码程序包括四部分,先将欲编码之数据交叉扫描s100,将将相关语法元素进行二进制化s200,上下文产生s300再进行算术编码s400。在芯片设计实现时,高性能的编码器需要面积小速度快的语法元素二进制化的方法和上下文模型产生方法,尤其是在重要系数标志significant_coef_flag和最后重要系数标志last_significant_coef_flag的二进制化和上下文模型产生多半很复杂,或者耗时长影响性能。3.例如参照图2,描述avc中的语法元素。其中需要先对所有的significant_coef_flag和last_significant_coef_flag编码再进入到残差的level系数值编码,这样对于会影响到编码性能,而且语法元素二进制化对应的bin和上下文模型的产生因为不同的情况和不同值的不同bin会有不同的计算方式,情况复杂效率低。4.目前在cabac基础上改进二进制化和上下文模型产生的编码方法和装置有以下几种:1.中国专利cn106416246bꢀ“视频编码中的语法的二进制化和上下文自适应编码的方法和装置”其设计要点是:首先确定当前符号值的最高有效位索引和任何精细位。通过使用一元码或截断一元码来对与当前符号值的最高有效位索引相关的前缀部分进行二进制化,来生成第一二进制字符串。此外,如果存在任何精细位,则通过使用固定长度码或截断二进制码来对与当前符号值的一个或多个精细位相对应的后缀部分进行二进制化,来生成第二二进制字符串。使用上下文自适应二进制算术编码对第一二进制字符串进行编码,并且如果第二二进制字符串存在,则也使用上下文自适应二进制算术编码对第二二进制字符串进行编码。5.2.中国专利cn103222269bꢀ“用于较高吞吐量的最后位置的二值化”ꢀ其涉及用于较高吞吐量的最后位置的二值化,设计要点是:利用上下文自适应二进制算术编码(cabac)以给定扫描次序对变换系数的最后位置(x,y)编码,为了提高吞吐量,利用x和y的一元代码对二值化排序,继之以x和y的固定二进制代码。6.然而,现有技术所提出的方法都过于复杂,处理能力低。因此,本发明提出一种cabac二进制化和上下文模型产生的编码方法和装置,提高语法元素的二进制化和上下文模型产生速度,复杂度低且吞吐率高。技术实现要素:7.为了解决上述技术问题,本发明提供一种cabac二进制化和上下文模型产生的编码方法和装置,尤其是重要系数标志significant_coef_flag和最后重要系数标志last_significant_coef_flag的二进制化和上下文模型产生,提高语法元素的二进制化和上下文模型产生速度,复杂度低且吞吐率高。8.为了实现上述发明目的,本发明中提供一种cabac二进制化和上下文产生的编码方法,所述编码方法包括:将4x4块内的16位像素按照交叉扫描的模式产生扫描后顺序的残差数据所对应的重要系数标志和最后重要系数标志,把重要系数标志和最后重要系数标志两者组合后的值,根据该值是非零值的标志组合成4组非零标志位模式;对第0组的重要系数标志和最后重要系数标志依照第二解析表进行解析,其有效位长度为4至8位;对第1、2、3组的重要系数标志和最后重要系数标志依照第一解析表进行解析,其有效位长度为3至6位;该组的重要系数标志和最后重要系数标志的解析结果包含1或0浮动值的最后重要系数标志时,以其他组的非0标志位模式决定该浮动值以产生第0至3组的二进制化bin序列bin0~31;决定当前块类型,取得对应的重要系数标志和最后重要系数标志的上下文模型的基本偏移量,依照该bin序列的扫描位置和该组模式查表取得上下文模型的补充偏移量,将基本偏移量和补充偏移量相加得出各bin序列的上下文模型;将解析后的bin序列及其对应的上下文模型输出进行合并处理,得到最终的二进制化数据和对应的上下文。9.优选地,其中所述4组非零标志位模式存入分组重要系数模式缓存,而扫描后的level系数和符号位依照与扫描顺序相反的顺序存入残差数据缓存中。10.优选地,其中更包括将第0组的16x16预测模式的亮度dc块,色度dc_u块,色度dc_v块,4x4预测模式下的亮度块数据依照所述第一解析表进行解析。11.优选地,其中更包括将第0组的16x16预测模式的亮度ac块,色度ac_u块,色度ac_v块数据依照所述第二解析表进行解析。12.优选地,其中该组为第3组时,该浮动值设为1。13.优选地,其中该组为第2组时,该浮动值不等于该第3组模式。14.优选地,其中更包括将解析后的bin序列及其对应的上下文模型输出,将第0组数据归为第一部分,第1,2,3组数据按照各组有效长度高位在左对齐合并为第二部分合并处理。15.优选地,其中更包括语法元素mvd_i0_x,mvd_i0_y的二进制化采用截断一元码及3阶哥伦布编码,完成tu(9),egk3,以及对于mvd符号位的fl(1)方法的二进制化。16.优选地,其中更包括语法元素coef_abs_coef_minus1的二进制化采用截断一元码及0阶哥伦布编码,完成tu(14),egk0,以及对于level系数的符号位的fl(1)方法的二进制化。17.本发明还提供一种cabac二进制化和上下文产生的编码装置,所述编码装置包括:交叉扫描模块,将4x4块内的16位像素按照交叉扫描的模式产生扫描后顺序的残差数据所对应的重要系数标志和最后重要系数标志,把重要系数标志和最后重要系数标志两者组合后的值,根据该值是非零值的标志组合成4组非零标志位模式,所述4组非零标志位模式存入分组重要系数模式缓存,而扫描后的level系数和符号位依照与扫描顺序相反的顺序存入残差数据缓存中;语法元素、类型、二进制化方法、上下文偏移量产生模块,对第0组的重要系数标志和最后重要系数标志依照第二解析表进行解析,其有效位长度为4至8位;对第1、2、3组的重要系数标志和最后重要系数标志依照第一解析表进行解析,其有效位长度为3至6位;该组的解析结果包含1或0浮动值的最后重要系数标志时,以其他组的非0标志位模式决定该浮动值以产生第0至3组的二进制化bin序列bin0~31;上下文模型产生模块,决定当前块类型,取得对应的重要系数标志和最后重要系数标志的上下文模型的基本偏移量,依照该bin的扫描位置和该组模式查表取得上下文模型的补充偏移量,将所述基本偏移量和所述补充偏移量相加得出各bin的上下文模型;上下文模型组合输出模块,将解析后的bin序列及其对应的上下文模型输出进行合并处理,得到最终的二进制化数据和对应的上下文。附图说明18.图1是cabac的示意图。19.图2是习知技术中残差块cabac语法的说明。20.图3是对4x4块内16个像素数据交叉(zigzag)扫描的示意图。21.图4是根据本发明实施例分组重要系数模式和残差数据的示意图。22.图5是根据本发明实施例将语法元素二进制化及产生上下文模型的架构图。23.图6是根据本发明实施例产生上下文模型及bin和上下文模型组合输出的流程示意图。24.图7是根据本发明实施例分组bin和上下文模型组合输出的资料结构示意图。具体实施方式25.以下描述为本发明的较佳实施例。以下实施例仅用来举例阐释本发明的技术特征,并非用以限定本发明。本发明的保护范围当视权利要求书所界定为准。26.图3是对4x4块内16个像素数据交叉扫描的示意图。对4x4块内16个像素数据在交叉扫描模块100进行扫描的同时,把扫描后顺序的残差数据对应的重要系数标志sig_coef_flag和最后重要系数标志last_sig_coef_flag,两者组合后的模式按照4个组分类,每个4x4块内16个像素按照交叉扫描的模式的产生,根据该值是非零值的标志组合成4组模式:group0_mode[3:0],group1_mode[3:0],group2_mode[3:0],group3_mode[3:0],共16位。各位分别对应zigzag扫描后数据的非零标志。各像素点位置如图3所示,group0_mode[3]表示图中位置0的点的非零标志,group3_mode[0]表示图中位置15的点的非零标志。[0027]参照图4,交叉扫描后产生的group0_mode~group3_mode存入分组重要系数模式缓存102,而交叉扫描后的残差数据的level系数按照逆交叉的方式存储在残差数据缓存101中。[0028]参照图4及图5,语法元素和类型和二进制方法和上下文偏移量产生模块103读入分组重要系数模式缓存102所存储的group0_mode~group3_mode,并以逆交叉顺序读入level系数和符号位。语法元素和类型和二进制方法和上下文偏移量产生模块103将按照标准规定的条件和顺序依次对要处理的数据产生不同的语法元素,并将数据进行归类,按下表1设置二进制化方法bin_method,将要处理的数据所产生的各语法元素依照所对应的二进制化方法,在对应的二值化处理模块进行二值化处理。如表1所示,包括mb_qp_delta,coded_block_pattern,intra_chroma_pred_mode,mb_skip_flag,coded_block_flag,coef_sign_flag,end_of_slice_flag,coded_block_pattern等语法元素对应utufl二进制化模块104进行所有的u,tu,fl方式的编码。语法元素coef_abs_coef_minus1对应uegk0二进制化模块105对进行二进制化编码。语法元素mvd_i0_x,mvd_i0_y对应uegk3二进制化模块106进行二进制化编码。语法元素mb_type,sub_mb_type对应lut二进制化模块107进行二进制化编码。[0029]于本发明中,二值化方法u是指一元码(unary),tu是指截断一元码(tu,truncatedunary),fl是指定长编码(fl,fixed-length),egk是指k阶指数哥伦布编码(kthorderexp-golomb,egk),lut是指查表(lookuptable)。[0030]按编码顺序输入各类语法元素,每个时钟产生一个语法元素(或者一组可被同时处理的语法元素),输入有二进制化方法bin_mthd,语法元素值synval,该语法元素对应的上下文偏移量ctx_offset。特别地,将变换量化后的系数resi_data,符号标志coef_signed_flag放在一起输入{signed_flag,resi_data}进行二进制化处理。除了sig_coef_flag和last_sig_coef_flag(或称重要系数标志significant_coef_flag和最后重要系数标志last_significant_coef_flag)以外的各类语法元素二值化后的结果,即各语法元素的二进制化bin串分别输入选择器110,在其后的bin和上下文模型组合输出模块111与其对应的上下文模型组合输出。[0031]其中,针对sig_coef_flag和last_sig_coef_flag(或称重要系数标志significant_coef_flag和最后重要系数标志last_significant_coef_flag)的语法元素,本实施例中以重要系数和最后重要系数和推断预测模式二进制化模块(sig_lastsig_pipm_ripm)108实现sig_coef_flag和last_sig_coef_flag二进制化并且复用prev_intra4x4_mode_flag和rem_intra4x4_pred_mode的二进制化。首先,从分组重要系数模式缓存102中全部取出16位的4组组模式sig_group_mode,根据表2,依照不同组别用不同的解析方式,查找第一解析表(表3)和第二解析表(表4)分别对第0至3组的组模式sig_group_mode同时解析重要系数标志sig_coef_flag和最后重要系数标志last_sig_coef_flag。输出分2部分:group0作为第一部分的bin输出,group1,group2,group3作为第二部分的bin输出。[0032]由于不同预测模式和不同变换模式下的块大小不一样,对于16x16预测模式下的4x4亮度ac块(block),或者色度预测模式下的ac块,group0(第0组)的sig_coef_flag和last_sig_coef_flag的数据和有效位长度按照表4进行解析,对于其它模式的块(16x16预测模式下的4x4亮度dc块,4x4预测模式下的4x4亮度块,色度dc_u块,dc_v块),group0(第0组)的数据和有效位长度参照参照表3的方法解析结果。group1,group2,group3(第1、2、3组)的sig_coef_flag和last_sig_coef_flag数据和有效位长度参照表3的方法解析。特别的,如果当前块是色度dc_u,dc_v块的时候仅有group0有数据。[0033]表4中浮动值x表示last_sig_coef_flag可能为1或者0,取决于其它几组的非零标志位模式:x的计算方法如下:sig_group0组中的x=!sig_group1_mode&&!sig_group2_mode&&!sig_group3_modesig_group1组中的x=!sig_group2_mode&&!sig_group3_modesig_group2组中的x=!sig_group3_modesig_group3组中的x=1举例说明,假设一个4x4预测的亮度块,输入两组组模式,sig_group0_mode为3,sig_group1_mode为3,得到group0、group1的sig_coef_flag分别为3’b011,4’b0011。对group0的4x4预测的亮度块通过查表4模式为3得到输出bin序列为“0101x”,由于sig_group2_mode和sig_group3_mode为0且sig_group1_mode不为0,计算得到x的值为0。sig_group1_mode查表1可得到“00101x”,通过上述x的计算公式计算x的值为1。[0034]last_sig_coef_flag的值仅当非零标志sig_coef_flag为1的时候存在,且当最后一个为1的非零标志时取1,若不是最后一个为1的非零标志时取0,则last_sig_coef_flag和最终输出的bin符号序列进行融合拼接,以及每个bin符号选择标志位sig_last_sel(0表示sig_coef_flag,1表示last_sig_coef_flag)如下表5所示。[0035]如此,将sig_coef_flag,last_sig_coef_flag二值化组合输出。[0036]又,sig_coef_flag,last_sig_coef_flag上下文模型的补充偏移量产生方法如下表所示,依照sig_group_mode0~15和bin0~31pos对应的值决定补充偏移量。[0037]表中,像素位置pixel_pos以bin0_pos~bin31_pos显示,表示当前bin在4x4块中的交叉扫描的位置,在不同组模式(sig_group_mode)下,不同位置输出符号对应不同的值,在blk_cat块类型取[0,4]范围内的值时,依照标准规定对应的significant_coef_flag上下文模型的基本偏移量ctx_offset为(105,120,134,149,152),对应的last_significant_coef_flag上下文模型的基本偏移量为(166,181,195,210,213),再加上表中每个bin的位置对应的补充偏移量即可得出每个符号各自的上下文模型的值。在实现中,将4x4块经过交叉扫描后,分别针对每个位置(共16个位置),依块类型[0:4]分别计算其为significant_coef_flag时的5种可能取值,并分别计算其为last_significant_coef_flag时的5种可能取值,通过块类型分别选择得到最终结果。[0038]如此,每个4x4块经过解析后得到4组按照significant_coef_flag和last_significant_coef_flag顺序排列好的数据,对于16个位置的significant_coef_flag和last_significant_coef_flag,4组之和总共最多为32bin的数据。然后针对每一个bin分别计算其上下文,每一bin根据表6-1~6-4分别根据其所属组模式(sig_group_mode)选择相应的上下文模型。[0039]例如对于bin9(从0开始的第9个bin),bin9属于第1组(表6-2),该组组模式sig_group1_mode0~15所对应的偏移值为4~7间,因此列出significant_flag和last_significant_flag的上下文模型的基本偏移值如下表7所示:当块类型blk_cat确定了后pos4~7sig,pos4~7lstsig等值已确定。而根据表6-2,bin9_pos的sig_group_mode在组模式取值为3时选择pos4sig的值,其余依照bin9的组模式取值为0,1,2,4,5,6,7时及[8,15]是选择pos5sig的值。[0040]同理,bin0~31可以并行计算,依照上述方法查表得到上下文模型的偏移值。所有bin分为4组,在分别将解析后的bin序列、各bin对应的上下文模型,以及每组bin的有效长度输出到后续的cabac_bin_ctx模块进行合并处理即得到最终的二进制化数据和对应的上下文。[0041]所以,通过上面的方法可以同时得到4x4块内所有sig_coef_flag和last_sig_coef_flag的语法元素的所有二进制化的结果和上下文模型(包括基本偏移值和增量偏移值得到最终的上下文模型)。[0042]对于prev_intra4x4_mode_flag和rem_intra4x4_pred_mode的二进制化,只需要将4x4块所有的flag同时获取到,并通过fl(7)+fl(1)同时二进制化以及产生相应的上下文。[0043]此外,语法元素mvd_i0_x,mvd_i0_y的二进制化采用uegk3二进制化模块106,完成uegk3的功能(mvd相关语法元素),即完成tu(9),egk3,以及对于mvd符号位的fl(1)方法的二进制化。第一部分为tu(9),第二部分为egk3,即3阶指数哥伦布编码,若mvd绝对值大于9则存在,否则该部分不存在。[0044]语法元素coef_abs_coef_minus1的二进制化采用uegk0二进制化模块105,完成tu(14),egk0,以及对于level系数的符号位的fl(1)方法的二进制化。第一部分为tu(14),第二部分,egk0即0阶指数哥伦布编码,若残差绝对值减1大于14则存在,否则该部分不存在。[0045]以上各语法元素依照表述方法进行二进制化后依据各语法元素产生的bin串、每个bin对应的上下文模型以及对应的bin串的长度输入bin和上下文模型组合输出模块(bin_ctx_merge_align)111。继续参照图6,bin和上下文模型组合输出模块111产生所有语法元素的上下文增量和最终的上下文模型。对于每个输入的语法元素或语法元素组合,输入进来的是基本偏移量,该模块针对不同的bin根据标准规定并行产生所有bin需要的上下文模型增量,最终产生所有bin的对应的上下文模型。特别的,对于sig_coef_flag,last_sig_coef_flag和prev_intra4x4_mode_flag和rem_intra4x4_pred_mode的上下文模型由于已在上下文模型产生时依照块类型、像素位置等进行修正,因此进行bin和上下文模型组合输出时,只需要他们4组上下文模型合并,合并的方式如图7所示,第0组归为第一部分,第1,2,3组按照各组有效长度高位在左对齐合并为第二部分。对于需要用到相邻块的参数或标志来决定当前使用的上下文增量的语法元素,输入的相邻块的信息全部由mvd和其他相邻信息缓存(cabac_mvd_mbinfo_ram)113提供输入,并按照编码标准规定的方式产生所有语法元素的相应的上下文信息。[0046]mvd和其他相邻信息缓存113是用以存放上一行宏块和左边宏块的mvd值和其它宏块信息,用于后续宏块产生上下文模型索引增量,在读信号来的时候输出上一行宏块底部2个8x8块的mvd值,并将本宏块的底部2个8x8块的mvd值更新到ram中。在读信号来的时候输出左边宏块右边2个8x8块的mvd值,并将本宏块相应块的mvd值更新到寄存器中。在读信号来的时候输出当前的宏块的第0,第1,第2个8x8块mvd值,供当前宏块中每个8x8块使用。本模块同时复用mbinfo(宏块相邻信息)的存储和读取,存储数据时和mvd一起打包在一起,接口时序一致。在读信号来的时候输出上一行宏块和左边宏块的mbinfo值,并将本宏块的mbinfo值更新到ram和寄存器中。[0047]如此,对应各语法元素产生二进制化后的bin串和相对应的上下文模型,此两部分数据(包括bin和上下文模型)通过所有语法元素分类可以得到二进制化后的bin串、每个bin对应的上下文模型以及对应的bin串的长度,以上数据可以依组别分为如图7所示的两个部分存在第一部分缓存和第一部分缓存中,对两部分的分类方式是将重要系数和最后重要系数和推断预测模式二进制化模块108的group0,uegk3的前9位,uegk0的前14位以及其它语法元素的二进制化和上下文结果归入第一部分,存在第一部分缓存中,并将重要系数和最后重要系数和推断预测模式二进制化模块(sig_lstsig_pipm_ripm)108的剩余部分,uegk3的剩余部分,uegk0的剩余部分归入第二部分,存在第二部分缓存中。bin和上下文模型组合输出模块(bin_ctx_merge_align)111最后再把两部分的bin和对应的上下文模型合并成最终的bin序列和上下文模型,对输入的两部分数据(包括bin和上下文模型)进行合并对齐,并且按照对齐的16组二进制化bin+上下文模型的方式输出。对齐的16组二进制化bin及上下文模型,也就是合并好的最终bin序列和上下文模型会打包对齐好输出到bin和上下文模型缓存模块112中。特别地,bin和上下文模型组合输出模块111若是遇到宏块结束或是片结束,则无论是否对齐都将结果输出。[0048]这样语法元素的吞吐率可以达到最高40bin/clk的uegk0类语法元素二进制化,和最高26bin/clk的uegk3语法元素二进制化,以及最高32bin/clk的sig_coef_flag,last_sig_coef_flag和prev_intra4x4_mode_flag和rem_intra4x4_pred_mode的语法元素的二进制化,而语法元素的上下文模型亦可以用与二进制化吞吐率同样吞吐率产生。[0049]本发明还提供一种cabac二进制化和上下文产生的编码装置,包括:交叉扫描模块100,语法元素、类型、二进制化方法、上下文偏移量产生模块103,上下文模型产生模块109,及上下文模型组合输出模块111。[0050]交叉扫描模100块将4x4块内的16位像素按照交叉扫描的模式产生扫描后顺序的残差数据所对应的重要系数标志和最后重要系数标志,把重要系数标志和最后重要系数标志两者组合后的值,根据该值是非零值的标志组合成4组非零标志位模式,所述4组非零标志位模式存入分组重要系数模式缓存,而扫描后的level系数和符号位依照与扫描顺序相反的顺序存入残差数据缓存中。[0051]语法元素、类型、二进制化方法、上下文偏移量产生模块103对第0组的重要系数标志和最后重要系数标志依照第二解析表进行解析,其有效位长度为4至8位;对第1、2、3组的重要系数标志和最后重要系数标志依照第一解析表进行解析,其有效位长度为3至6位;该组的解析结果包含1或0浮动值的最后重要系数标志时,以其他组的非0标志位模式决定该浮动值以产生第0至3组的二进制化bin序列bin0~31。[0052]上下文模型产生模块(cabac_bin_ctx_inc)109决定当前块类型,取得对应的重要系数标志和最后重要系数标志的上下文模型的基本偏移量,且依照该bin的扫描位置和该组模式查表取得上下文模型的补充偏移量,将基本偏移量和补充偏移量相加得出各bin的上下文模型。[0053]上下文模型组合输出模块111将解析后的bin序列及其对应的上下文模型输出进行合并处理,得到最终的二进制化数据和对应的上下文。[0054]综上所述,本发明提供的cabac二进制化和上下文产生的编码方法提出了更优的并行处理16个系数的语法元素重要系数和最后重要系数sig_lastsig的二进制化产生方法,及其上下文模型的产生方法。由于可于一个时钟周期并行处理16个系数的语法元素sig(significantflag),last_sig(lastsignificantflag),一方面减少了每个宏块处理重要系数和最后重要系数的时间,另一方面减小了16个系数的语法元素重要系数和最后重要系数并行二进制化和上下文模型产生的复杂度。二进制化和上下文模型的吞吐率可以达到16bin/clk。此外,本发明的编码方法还可以达到最高40bin/clk的uegk0类语法元素二进制化,最高26bin/clk的uegk3语法元素二进制化,以及最高32bin/clk的sig_coef_flag,last_sig_coef_flag和prev_intra4x4_mode_flag和rem_intra4x4_pred_mode的语法元素的二进制化,以及同样吞吐率的所有语法元素的上下文模型产生。[0055]以上所述仅是本发明的优选实施例而已,并非对本发明做任何形式上的限制,虽然本发明已以优选实施例揭露如上,然而并非用以限定本发明,任何熟悉本专业的技术人员,在不脱离本发明技术方案的范围内,当可利用上述揭示的技术内容作出些许更动或修饰为等同变化的等效实施例,但凡是未脱离本发明技术方案的内容,依据本实用发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1