CN107277518A - Cabac解码方法 - Google Patents
Cabac解码方法 Download PDFInfo
- Publication number
- CN107277518A CN107277518A CN201710550901.1A CN201710550901A CN107277518A CN 107277518 A CN107277518 A CN 107277518A CN 201710550901 A CN201710550901 A CN 201710550901A CN 107277518 A CN107277518 A CN 107277518A
- Authority
- CN
- China
- Prior art keywords
- value
- decoding
- decoded
- sequence
- fiducial
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/102—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
- H04N19/13—Adaptive entropy coding, e.g. adaptive variable length coding [AVLC] or context adaptive binary arithmetic coding [CABAC]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/44—Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/70—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by syntax aspects related to video coding, e.g. related to compression standards
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明涉及一种CABAC解码方法,包括:在一个解码周期中将当前待解码序列左移两位,从待解码的位流中读入两比特置于左移后的当前待解码序列的低两位,得到第一待解码序列;将第一待解码序列与第一解码区间值进行比较,获取第一比较值;第一解码区间值为当前解码区间值左移一位对应的值;将第一待解码序列与第二解码区间值进行比较,获取第二比较值;第二解码区间值为当前解码区间值与第一解码区间值之和;根据所述第一比较值和第二比较值确定前缀部分的解码返回值和信息后缀的解码返回值,根据所述前缀部分的解码返回值和信息后缀的解码返回值对待解码的位流进行解码。
Description
技术领域
本发明涉及视频编解码技术领域,特别是涉及一种CABAC解码方法。
背景技术
H.264是由ISO/IEC和ITU-T两大国际标准组织联合制定的视频编码标准。与以往的视频标准相比,它具有更高的压缩比,更好的网络亲和性和信道适应性,同时具有较强的抗误码能力,能够满足非常广泛的业务需求。CABAC(Context-based Adaptive BinaryArithmetic Coding)是一种基于上下文的自适应二进制算术编码,是H.264标准提出的熵编码模式之一。CABAC能够充分考虑和利用视频流的上下文信息,并且能够自适应视频流的统计特性,因此能够带来极高的视频压缩比。
CABAC在对一些语法元素解码,特别是对指数哥伦布码解码时,一般需反复调用旁路解码函数,而旁路解码一次只能解码1比特,且后面比特的解码要依赖当前比特解码后更新的信息,这将会降低硬件CABAC解码的流水效率。特别是在大分辨率视频帧与帧之间的时间相关性较差时,上述问题带来的负面效应更加明显。
综上所述,传统对CABAC编码的解码方式解码效率较低。
发明内容
基于此,有必要针对解码效率较低的问题,提供一种CABAC解码方法。
一种CABAC解码方法,包括以下步骤:
在一个解码周期中将当前待解码序列左移两位,并从待解码的位流中读入两比特置于左移后的当前待解码序列的低两位,得到第一待解码序列;
将第一待解码序列与第一解码区间值进行比较,根据第一待解码序列与第一解码区间值的大小获取第一比较值;其中,第一解码区间值为当前解码区间值左移一位对应的值;
将第一待解码序列与第二解码区间值进行比较,根据第一比较值以及第一待解码序列与第二解码区间值的大小获取第二比较值;其中,第二解码区间值为当前解码区间值与第一解码区间值之和;
根据所述第一比较值和第二比较值确定前缀部分的解码返回值和信息后缀的解码返回值,根据所述前缀部分的解码返回值和信息后缀的解码返回值对待解码的位流进行解码。
上述CABAC解码方法,一次读入两比特待解码的数据,并对该两比特待解码的数据进行并行解码,提高了解码效率。特别地,上述解码过程中第一比较值和第二比较值的输出可以提前预测得知,所以硬件在对两比特并行解码的过程中,可以快速对解码序列进行更新,以供后续比特解码使用,避免了原始旁路解码方案中比特间解码的依赖,进一步提高了解码的流水效率。
附图说明
图1为一个实施例的CABAC的ue部分的解码流程图;
图2为一个实施例的CABAC的旁路解码流程图;
图3为一个实施例的CABAC的多bin旁路解码流程图;
图4为一个实施例的CABAC的ue部分多bin解码流程图;
图5为一个实施例的ue前缀部分经过一次多bin旁路解码后的输出结果图;
图6为一个实施例的ue信息后缀经过一次多bin旁路解码后的输出结果图;
图7为一个实施例的CABAC解码系统的模块图。
具体实施方式
下面结合附图对本发明的技术方案进行说明。
CABAC整个编码流程主要包含以下几个步骤:语法元素的二进制化,上下文概率模型的选择和更新,二进制算术编码。其中二进制算术编码包括常规编码和旁路编码两种方式。旁路编码分支,主要是语法元素二值化后比特流中“0”和“1”概率相当的比特位置,编码过程中“0”和“1”的概率固定为1/2,以此固定概率分配进行算术编码。对语法元素的二进制化,是CABAC编码的重要前提。每种语法元素根据各自的概率分布特性来选择二值化方法。指数哥伦布编码(Exp-Golomb)是语法元素二进制化的一种方式。Exp-Golomb又分为无符号指数哥伦布编码ue(v)、有符号指数哥伦布编码se(v)、截断指数哥伦布编码te(v)和映射指数哥伦布编码me(v)。任何语法元素值x在进行哥伦布编码前都要先转化为编码索引值CodeNum:
ue(v):从语法元素值x到CodeNum的转换公式为:CodeNum=x;
se(v):从语法元素值x到CodeNum的转换公式为:CodeNum=2x–1(x>0),CodeNum=-2x(x≤0);
te(v):从语法元素值x到CodeNum的转换规则为:首先判断x值的位数范围v,如果v大于1,则x到CodeNum的转换过程和ue(v)相同;如果v等于1,则x等于0或1,此时CodeNum与x的值相同,但最终的编码值是CodeNum取反后的值;
me(v):从语法元素值x到CodeNum的转换采用H.264规定的映射方式。
K阶指数哥伦布编码的公式如下:M=floor(log2(CodeNum+2k)),INFO=CodeNum+2k-2M。k阶指数哥伦布码的结构可以表示为[M-K 0][1][M INFO],即码字的前缀部分由M-K位0组成,信息后缀由M位的信息(INFO)组成,中间部分为1比特的1。在实际运用的时候,k阶指数哥伦布码的结构形式也可以是[M-K 1][0][M INFO],即码字前缀部分是M-K位1,信息后缀是M位的INFO,而中间位是0。在一个实施例中,为了便于说明,下面以第二种形式为例对本发明的技术方案进行说明,但本领域技术人员可以知道,在实际应用中,本发明不限于这种形式,也可以采用第一种形式。
CABAC编码中语法元素mvd(运动矢量残差)的绝对值大于9的部分,其二进制化采用了3阶ue编码;语法元素coeff_abs_level_minus1(残差绝对值减去1的值)大于14的部分,其二进制化采用了0阶ue编码。本发明以语法元素coeff_abs_level_minus1的ue部分的解码为例,提出一种针对ue的CABAC多bin解码方法。
CABAC对k阶ue进行解码时,首先从比特流中寻找第一个零比特所在的位置,并将找到的前缀部分连“1”的比特个数记为leadingBits,则:CodeNum=2leadingBits+k-2k+value,其中value为第一个零比特后(leadingBits+k)个比特的值。根据ue的编码规则,再将CodeNum反映射为对应的语法元素值。
语法元素coeff_abs_level_minus1的ue部分的解码流程如图1所示,分为三个阶段,第一阶段是求取前缀比特“1”的个数cnt,第二阶段根据cnt解码ue的信息后缀值level_minus1,第三阶段根据level_minus1确定解码的残差值level。其中,前两个阶段都是通过反复调用CABAC的旁路解码函数decode_bypass()来实现的。旁路解码的流程如图2所示,其方法是依据CodIOffset(当前待解码序列)和CodIRange(解码区间值)的大小关系,确定CodIOffset的值落入的子区间,进而输出“0”和“1”的二进制符号。落入的子区间就作为下一步译码过程所使用的概率区间,如果CodIOffset的值落在了大概率符号(More probablesymbol,MPS)的编码区间,则CodIOffset的值不变;如果CodIOffset的值落在了小概率符号(Less probable symbol,LPS)的编码区间,则CodIOffset要减去MPS编码区间的长度。CodIOffset的值来源于编码生成的比特流,每解码一比特,就要对CodIOffset进行更新,方法是CodIOffset左移1位(移出最高位),然后通过read_bit(1)从待译码数据中读取1比特作为CodIOffset二进制形式的最低位。
由上面的分析,可以看到CABAC对k阶ue解码的流程存在以下问题:第一阶段获取前缀比特“1”的个数cnt和第二阶段求取信息后缀level_minus1的过程都是通过反复调用旁路解码函数decode_bypass()来实现的,而旁路解码一次只能解码1比特,且后面比特的解码要依赖当前比特解码后更新的信息CodIOffset,这将会降低硬件CABAC解码的流水效率。特别地,当大分辨率视频帧与帧之间的时间相关性较差时,上述问题带来的负面效应也会随之增加。
为了克服现有技术存在的缺陷和不足。本发明的目的是提供一种CABAC解码方法,具体讲,是一种针对H.264中CABAC的指数哥伦布(Exp-Golomb)多bin解码方法,用以避免比特间解码的依赖带来的流水效率低的问题,包括ue前缀部分的多bin解码和信息后缀的多bin解码。本发明的多bin解码所依赖的旁路解码,每次解码两比特。
为了方便后面的阐述,在此说明一下解码过程中使用的几个变量的含义,a_eat:用以标志解码第一比特时,是否需要从待解码位流里重新读取新的一字节数据,需要时a_eat=1,否则a_eat=0。这里说明一下,旁路解码前,首先从待解码位流中读取一字节数据c_data,然后每解码一比特,就从c_data读取一比特置于CodIOffset的低位,当c_data的一字节解码完毕后,就要从待解码位流中读取新的一字节数据赋与c_data;b_eat:用以标志解码第二比特时,是否需要从待解码位流里面重新读取新的一字节数据,需要时b_eat=1,否则b_eat=0;a_flag:即第一比较值,表示CodIOffset1与(CodIRange<<1)大小关系的比较结果;b_flag:即第二比较值,表示CodIOffset1与((CodIRange<<1)+CodIRange)大小关系的比较结果。CodIRange<<1:即第一解码区间值,表示CodIRange左移一位对应的值,CodIRange表示当前解码区间值;CodIOffset1:即当前待解码序列CodIOffset左移两位,并从待解码的位流中读入两比特置于左移后的当前待解码序列的低两位得到的序列;(CodIRange<<1)+CodIRange,即第二解码区间值,表示第一解码区间值与当前解码区间值之和;cnt表示前缀部分的比特数;level_minus1表示解码得到的信息后缀值;level表示解码残差值;ret_pre为前缀部分的解码返回值;ret_suf为信息后缀的解码返回值;CodIOffset2为当前待解码序列的更新值。binval是CABAC旁路解码1比特的返回值。
本发明的CABAC解码方法可包括以下步骤:
步骤1:在一个解码周期中将当前待解码序列左移两位,并从待解码的位流中读入两比特置于左移后的当前待解码序列的低两位,得到第一待解码序列;
在一个实施例中,将当前待解码序列表示为CodIOffset,将第一待解码序列表示为CodIOffset1。如图3为本发明CABAC的多bin旁路解码流程图。旁路解码开始后,CodIOffset连续左移两次,通过两次调用read_bit(1),读入待解码的两比特,置于CodIOffset的低两位,得到CodIOffset1,并分别得到a_eat和b_eat的值。
步骤2:将第一待解码序列与第一解码区间值进行比较,根据第一待解码序列与第一解码区间值的大小获取第一比较值;其中,第一解码区间值为当前解码区间值左移一位对应的值;
在一个实施例中,将当前解码区间值表示为CodIRange,将第一解码区间值表示为CodIRange1。在本步骤中,比较CodIOffset1与(CodIRange<<1)的大小关系,具体地,如果CodIOffset1≥(CodIRange<<1),a_flag=1;否则,a_flag=0。
步骤3:将第一待解码序列与第二解码区间值进行比较,根据第一比较值以及第一待解码序列与第二解码区间值的大小获取第二比较值;其中,第二解码区间值为当前解码区间值与第一解码区间值之和;
在本步骤中,根据a_flag的取值情况,进一步对CodIOffset1和CodIRange的关系作比较。具体地,在a_flag=1的情况下,比较CodIOffset1与((CodIRange<<1)+CodIRange)的大小关系,如果CodIOffset1≥((CodIRange<<1)+CodIRange),b_flag=1;否则b_flag=0。在a_flag=0的情况下,比较CodIOffset1与CodIRange的大小关系,如果CodIOffset1≥CodIRange,b_flag=1;否则b_flag=0。
步骤4:根据所述第一比较值和第二比较值确定前缀部分的解码返回值和信息后缀的解码返回值,根据所述前缀部分的解码返回值和信息后缀的解码返回值对待解码的位流进行解码。
在本步骤中,根据a_eat,b_eat,a_flag,b_flag的取值情况,确定两比特旁路解码后ue前缀部分的解码返回值ret_pre和ue信息后缀的解码返回值ret_suf。然后根据前缀部分的解码返回值ret_pre和信息后缀的解码返回值ret_suf对待解码位流进行解码。具体地,根据返回值ret_pre确定前缀部分的比特数cnt;其中,所述前缀部分的比特数与信息后缀的比特数相等;根据cnt和返回值ret_suf解码得到信息后缀值;根据解码得到的信息后缀值计算解码残差值;根据所述解码残差值对待解码位流进行解码。
在一个实施例中,如果当前处于ue前缀部分的CABAC解码,两比特旁路解码后的解码返回值ret_pre确定如下:如果a_flag=1且b_flag=1,则解码返回值ret_pre为2;如果a_flag=1且b_flag=0,则解码返回值ret_pre为1,此时ue前缀部分解码结束;如果a_flag=0,无论b_flag的值为多少,解码返回值ret_pre为0。这种情况下,a_flag=0意味着第一比特解码完成后,ue前缀部分的解码实际已经结束,而第二比特属于额外多解码的一比特,因此要根据a_eat和b_eat的取值情况对多解码的第二比特进行还原。进一步地,将每次旁路解码后的返回值ret_pre进行累加,得到无符号哥伦布码前缀部分连“1”的个数cnt。由于哥伦布码的前缀部分的比特数与信息后缀的比特数相同,因此,可以得到信息后缀的比特数cnt。
在一个实施例中,如果当前处于ue信息后缀的CABAC解码,两比特旁路解码的解码返回值ret_suf确定如下:如果a_flag=1且b_flag=1,则解码返回值ret_suf为3;如果a_flag=1且b_flag=0,则解码返回值ret_suf为2;如果a_flag=0且b_flag=1,则解码返回值ret_suf为1;如果a_flag=0且b_flag=0,则解码返回值ret_suf为0。进一步地,每调用一次旁路解码,cnt的值减2,直至cnt等于0,信息后缀解码完毕,将每次旁路解码的返回值ret_suf做累加,得到level_minus1。
特别地,当对ue信息后缀进行解码时,有以下几种考虑:(1)当ue前缀部分解码得到的cnt为偶数时,直接按照上述信息后缀的解码规则对每一次解码返回值ret_suf进行累加,将累加的结果作为level_minus1的值;(2)当ue前缀部分解码得到的cnt=0时,信息后缀无需再进行旁路解码,直接得到level_minus1=0;(3)当ue前缀部分解码得到的cnt为奇数时,由于cnt每经过一次旁路解码就会减2,所以循环解码完毕的标志是cnt值递减为-1。但当cnt值等于0时,信息后缀的解码实际已经结束。此时,要根据a_eat及b_eat的值对多解码的一比特进行还原,而后将每一次解码的返回值ret_suf做累加,得到level_minus1。
最后,对信息后缀解码后得到的level_minus1执行:level_minus1+1+14,可得到解码残差值level的绝对值,即|level|=level_minus1+1+14。
上述CABAC解码方法,CodIOffset在一个解码周期里首先左移两位,并从待解码的位流里读入两比特置于CodIOffset的低两位,得到CodIOffset1。然后分别判断CodIOffset1与(CodIRange<<1)的大小关系A,CodIOffset1与((CodIRange<<1)+CodIRange)的大小关系B。根据确定后的关系A和关系B的不同组合,并依据ue解码所处的是前缀部分阶段还是信息后缀阶段,得到多bin旁路解码返回值,再根据多bin旁路解码返回值得到CABAC解码后的语法元素值。
本发明的有益效果是:在对语法元素coeff_abs_level_minus1的ue部分进行CABAC解码时,将ue解码所依赖的旁路解码部分,一次读入两比特,并对两比特进行并行解码,提高了硬件的流水效率。
进一步地,还可以根据确定后的关系A和关系B的不同组合,来更新CodIOffset值,以供后续比特解码使用。特别地,由于上述解码过程中关系A和关系B的组合情况可以提前预测得知,所以硬件在对两比特并行解码的过程中,可以快速对CodIOffset的值进行更新,以供后续比特解码使用,避免了原始旁路解码方案中比特间解码的依赖,进一步提高了ue解码的流水效率。
其中,如果当前处于ue前缀部分的CABAC解码,两比特旁路解码后CodIOffset的更新值确定如下:如果a_flag=1且b_flag=1,则CodIOffset2=CodIOffset1-(CodIRange<<1)-CodIRange;如果a_flag=1且b_flag=0,则CodIOffset2=CodIOffset1-(CodIRange<<1),此时ue前缀部分解码结束;如果a_flag=0,无论b_flag的值为多少,CodIOffset2=CodIOffset1>>1。这种情况下,a_flag=0意味着第一比特解码完成后,ue前缀部分的解码实际已经结束,而第二比特属于额外多解码的一比特,因此要根据a_eat和b_eat的取值情况对多解码的第二比特进行还原。
其中,如果当前处于ue信息后缀的CABAC解码,两比特旁路解码CodIOffset的更新值确定如下:如果a_flag=1且b_flag=1,则CodIOffset2=CodIOffset1-(CodIRange<<1)-CodIRange;如果a_flag=1且b_flag=0,则CodIOffset2=CodIOffset1-(CodIRange<<1);如果a_flag=0且b_flag=1,则CodIOffset2=CodIOffset1-CodIRange;如果a_flag=0且b_flag=0,将CodIOffset1左移两位对应的序列作为CodIOffset的更新值。
如图4为本发明关于语法元素coeff_abs_level_minus1的CABAC的ue部分的多bin解码流程图。根据ue解码所处的阶段以及a_eat,b_eat,a_flag,b_flag的取值情况,确定两比特旁路解码后CodIOffset的更新值、前缀部分的解码返回值ret_pre,以及信息后缀的解码返回值ret_suf,然后经过后续处理得到解码后的语法元素值。特别需要说明的是,a_flag和b_flag输出组合的情况在旁路解码前已经可以预测得知,所以硬件在设计的时候,可以根据a_flag和b_flag的不同组合,提前计算出CodIOffset在不同组合下的更新值,这样在实际进行多bin解码的时候更加有利于硬件的流水。
ue前缀部分经过一次多bin旁路解码后的输出结果图以及ue信息后缀经过一次多bin旁路解码后的输出结果图分别如图5和图6所示。上述CABAC解码方法,一次读入两比特待解码的数据,并对该两比特待解码的数据进行并行解码,提高了解码效率。
如图7所示,本发明还提供一种CABAC解码系统,可包括:
位移模块10,用于在一个解码周期中将当前待解码序列左移两位,并从待解码的位流中读入两比特置于左移后的当前待解码序列的低两位,得到第一待解码序列;
在一个实施例中,将当前待解码序列表示为CodIOffset,将第一待解码序列表示为CodIOffset1。如图3为本发明CABAC的多bin旁路解码流程图。旁路解码开始后,CodIOffset连续左移两次,通过两次调用read_bit(1),读入待解码的两比特,置于CodIOffset的低两位,得到CodIOffset1,并分别得到a_eat和b_eat的值。
第一比较模块20,用于将第一待解码序列与第一解码区间值进行比较,根据第一待解码序列与第一解码区间值的大小获取第一比较值;其中,第一解码区间值为当前解码区间值左移一位对应的值;
在一个实施例中,将当前解码区间值表示为CodIRange,将第一解码区间值表示为CodIRange1。在本步骤中,比较CodIOffset1与(CodIRange<<1)的大小关系,具体地,如果CodIOffset1≥(CodIRange<<1),a_flag=1;否则,a_flag=0。
第二比较模块30,用于将第一待解码序列与第二解码区间值进行比较,根据第一比较值以及第一待解码序列与第二解码区间值的大小获取第二比较值;其中,第二解码区间值为当前解码区间值与第一解码区间值之和;
在本模块中,根据a_flag的取值情况,进一步对CodIOffset1和CodIRange的关系作比较。具体地,在a_flag=1的情况下,比较CodIOffset1与((CodIRange<<1)+CodIRange)的大小关系,如果CodIOffset1≥((CodIRange<<1)+CodIRange),b_flag=1;否则b_flag=0。在a_flag=0的情况下,比较CodIOffset1与CodIRange的大小关系,如果CodIOffset1≥CodIRange,b_flag=1;否则b_flag=0。
解码模块40,用于根据所述第一比较值和第二比较值确定前缀部分的解码返回值和信息后缀的解码返回值,根据所述前缀部分的解码返回值和信息后缀的解码返回值对待解码的位流进行解码。
在本模块中,根据a_eat,b_eat,a_flag,b_flag的取值情况,确定两比特旁路解码后ue前缀部分的解码返回值ret_pre和ue信息后缀的解码返回值ret_suf。然后根据前缀部分的解码返回值ret_pre和信息后缀的解码返回值ret_suf对待解码位流进行解码。具体地,根据返回值ret_pre确定前缀部分的比特数cnt;其中,所述前缀部分的比特数与信息后缀的比特数相等;根据cnt和返回值ret_suf解码得到信息后缀值;根据解码得到的信息后缀值计算解码残差值;根据所述解码残差值对待解码位流进行解码。
在一个实施例中,如果当前处于ue前缀部分的CABAC解码,两比特旁路解码后的解码返回值ret_pre确定如下:如果a_flag=1且b_flag=1,则解码返回值ret_pre为2;如果a_flag=1且b_flag=0,则解码返回值ret_pre为1,此时ue前缀部分解码结束;如果a_flag=0,无论b_flag的值为多少,解码返回值ret_pre为0。这种情况下,a_flag=0意味着第一比特解码完成后,ue前缀部分的解码实际已经结束,而第二比特属于额外多解码的一比特,因此要根据a_eat和b_eat的取值情况对多解码的第二比特进行还原。进一步地,将每次旁路解码后的返回值ret_pre进行累加,得到无符号哥伦布码前缀部分连“1”的个数cnt。由于哥伦布码的前缀部分的比特数与信息后缀的比特数相同,因此,可以得到信息后缀的比特数cnt,然后继续解码cnt个比特。
其中,如果当前处于ue信息后缀的CABAC解码,两比特旁路解码的解码返回值ret_suf确定如下:如果a_flag=1且b_flag=1,则解码返回值ret_suf为3;如果a_flag=1且b_flag=0,则解码返回值ret_suf为2;如果a_flag=0且b_flag=1,则解码返回值ret_suf为1;如果a_flag=0且b_flag=0,则解码返回值ret_suf为0。进一步地,每调用一次旁路解码,cnt的值减2,直至cnt等于0,信息后缀解码完毕,将每次旁路解码的返回值ret_suf做累加,得到level_minus1。
特别地,当对ue信息后缀进行解码时,有以下几种考虑:(1)当ue前缀部分解码得到的cnt为偶数时,直接按照上述信息后缀的解码规则对每一次解码返回值ret_suf进行累加,将累加的结果作为level_minus1的值;(2)当ue前缀部分解码得到的cnt=0时,信息后缀无需再进行旁路解码,直接得到level_minus1=0;(3)当ue前缀部分解码得到的cnt为奇数时,由于cnt每经过一次旁路解码就会减2,所以循环解码完毕的标志是cnt值递减为-1。但当cnt值等于0时,信息后缀的解码实际已经结束。此时,要根据a_eat及b_eat的值对多解码的一比特进行还原,而后将每一次解码的返回值ret_suf做累加,得到level_minus1。
最后,对信息后缀解码后得到的level_minus1执行:level_minus1+1+14,可得到解码残差值level的绝对值,即|level|=level_minus1+1+14。
上述CABAC解码系统,CodIOffset在一个解码周期里首先左移两位,并从待解码的位流里读入两比特置于CodIOffset的低两位,得到CodIOffset1。然后分别判断CodIOffset1与(CodIRange<<1)的大小关系A,CodIOffset1与((CodIRange<<1)+CodIRange)的大小关系B。根据确定后的关系A和关系B的不同组合,并依据ue解码所处的是前缀部分阶段还是信息后缀阶段,得到多bin旁路解码返回值,再根据多bin旁路解码返回值得到CABAC解码后的语法元素值。
本发明的有益效果是:在对语法元素coeff_abs_level_minus1的ue部分进行CABAC解码时,将ue解码所依赖的旁路解码部分,一次读入两比特,并对两比特进行并行解码,提高了硬件的流水效率。
进一步地,还可以根据确定后的关系A和关系B的不同组合,来更新CodIOffset值,以供后续比特解码使用。特别地,由于上述解码过程中关系A和关系B的组合情况可以提前预测得知,所以硬件在对两比特并行解码的过程中,可以快速对CodIOffset的值进行更新,以供后续比特解码使用,避免了原始旁路解码方案中比特间解码的依赖,进一步提高了ue解码的流水效率。
其中,如果当前处于ue前缀部分的CABAC解码,两比特旁路解码后CodIOffset的更新值确定如下:如果a_flag=1且b_flag=1,则CodIOffset2=CodIOffset1-(CodIRange<<1)-CodIRange;如果a_flag=1且b_flag=0,则CodIOffset2=CodIOffset1-(CodIRange<<1),此时ue前缀部分解码结束;如果a_flag=0,无论b_flag的值为多少,CodIOffset2=CodIOffset1>>1。这种情况下,a_flag=0意味着第一比特解码完成后,ue前缀部分的解码实际已经结束,而第二比特属于额外多解码的一比特,因此要根据a_eat和b_eat的取值情况对多解码的第二比特进行还原。
其中,如果当前处于ue信息后缀的CABAC解码,两比特旁路解码CodIOffset的更新值确定如下:如果a_flag=1且b_flag=1,则CodIOffset2=CodIOffset1-(CodIRange<<1)-CodIRange;如果a_flag=1且b_flag=0,则CodIOffset2=CodIOffset1-(CodIRange<<1);如果a_flag=0且b_flag=1,则CodIOffset2=CodIOffset1-CodIRange;如果a_flag=0且b_flag=0,将CodIOffset1左移两位对应的序列作为CodIOffset的更新值。
如图4为本发明关于语法元素coeff_abs_level_minus1的CABAC的ue部分的多bin解码流程图。根据ue解码所处的阶段以及a_eat,b_eat,a_flag,b_flag的取值情况,确定两比特旁路解码后CodIOffset的更新值、前缀部分的解码返回值ret_pre,以及信息后缀的解码返回值ret_suf,然后经过后续处理得到解码后的语法元素值。特别需要说明的是,a_flag和b_flag输出组合的情况在旁路解码前已经可以预测得知,所以硬件在设计的时候,可以根据a_flag和b_flag的不同组合,提前计算出CodIOffset在不同组合下的更新值,这样在实际进行多bin解码的时候更加有利于硬件的流水。
ue前缀部分经过一次多bin旁路解码后的输出结果图以及ue信息后缀经过一次多bin旁路解码后的输出结果图分别如图5和图6所示。上述CABAC解码系统,一次读入两比特待解码的数据,并对该两比特待解码的数据进行并行解码,提高了解码效率。
在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,“计算机可读介质”可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。
计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种CABAC解码方法,其特征在于,包括以下步骤:
在一个解码周期中将当前待解码序列左移两位,并从待解码的位流中读入两比特置于左移后的当前待解码序列的低两位,得到第一待解码序列;
将第一待解码序列与第一解码区间值进行比较,根据第一待解码序列与第一解码区间值的大小获取第一比较值;其中,第一解码区间值为当前解码区间值左移一位对应的值;
将第一待解码序列与第二解码区间值进行比较,根据第一比较值以及第一待解码序列与第二解码区间值的大小获取第二比较值;其中,第二解码区间值为当前解码区间值与第一解码区间值之和;
根据所述第一比较值和第二比较值确定前缀部分的解码返回值和信息后缀的解码返回值,根据所述前缀部分的解码返回值和信息后缀的解码返回值对待解码的位流进行解码。
2.根据权利要求1所述的CABAC解码方法,其特征在于,根据所述前缀部分的解码返回值和信息后缀的解码返回值对待解码的位流进行解码的步骤包括:
根据前缀部分的解码返回值确定前缀部分的比特数;其中,所述前缀部分的比特数与信息后缀的比特数相等;
根据所述信息后缀的解码返回值和信息后缀的比特数确定解码得到的信息后缀值;
根据解码得到的信息后缀值计算解码残差值;
根据所述解码残差值对待解码的位流进行解码。
3.根据权利要求2所述的CABAC解码方法,其特征在于,根据第一待解码序列与第一解码区间值的大小获取第一比较值的步骤包括:
如果当前待解码序列大于或等于第一解码区间值,所述第一比较值取1;
否则,所述第一比较值取0。
4.根据权利要求3所述的CABAC解码方法,其特征在于,根据第一比较值以及第一待解码序列与第二解码区间值的大小获取第二比较值的步骤包括:
当所述第一比较值取1时,如果第一待解码序列大于或等于第二解码区间值,所述第二比较值取1,否则所述第二比较值取0;
当所述第一比较值取0时,如果第一待解码序列大于或等于当前解码区间值,所述第二比较值取1,否则所述第二比较值取0。
5.根据权利要求4所述的CABAC解码方法,其特征在于,根据所述第一比较值和第二比较值确定前缀部分的解码返回值和信息后缀的解码返回值的步骤包括:
若当前解码阶段处于前缀部分解码阶段,根据如下方式确定前缀部分的解码返回值:
如果所述第一比较值和所述第二比较值均为1,所述前缀部分的解码返回值取2;
如果所述第一比较值为1,且所述第二比较值为0,所述前缀部分的解码返回值取1;
如果所述第一比较值为0,所述前缀部分的解码返回值取0。
6.根据权利要求5所述的CABAC解码方法,其特征在于,根据所述第一比较值和第二比较值确定前缀部分的解码返回值和信息后缀的解码返回值的步骤还包括:
若当前解码阶段处于信息后缀解码阶段,根据如下方式确定信息后缀的解码返回值:
如果所述第一比较值和所述第二比较值均为1,所述信息后缀的解码返回值取3;
如果所述第一比较值为1,且所述第二比较值为0,所述信息后缀的解码返回值取2;
如果所述第一比较值为0,且所述第二比较值为1,所述信息后缀的解码返回值取1;
如果所述第一比较值为0,且所述第二比较值为0,所述信息后缀的解码返回值取0。
7.根据权利要求6所述的CABAC解码方法,其特征在于,根据信息后缀的解码返回值确定解码得到的信息后缀值的步骤包括:
当解码得到的前缀部分的比特数为偶数时,对历次解码所得的信息后缀的解码返回值进行累加,将累加结果设为解码得到的信息后缀值;
当解码得到的前缀部分的比特数为0时,将解码得到的信息后缀值设为0;
当解码得到的前缀部分的比特数为奇数时,根据a_eat及b_eat的值对多解码的一比特进行还原,而后将每一次解码得到的信息后缀的解码返回值进行累加,将累加结果设为解码得到的信息后缀值;
其中,a_eat用以标志解码第一比特时,是否需要从待解码位流里重新读取新的一字节数据,b_eat用以标志解码第二比特时,是否需要从待解码位流里重新读取新的一字节数据。
8.根据权利要求7所述的CABAC解码方法,其特征在于,根据解码得到的信息后缀值计算解码残差值的步骤包括:
根据如下公式计算解码残差值:
|level|=level_minus1+1+14;
式中,level为解码残差值,level_minus1为解码得到的信息后缀值。
9.根据权利要求1所述的CABAC解码方法,其特征在于,若当前解码阶段处于前缀部分解码阶段,在根据所述解码残差值对待解码的位流进行解码之后,还包括以下步骤:
如果所述第一比较值和所述第二比较值均为1,根据如下公式获取当前待解码序列的更新值:
CodIOffset2=CodIOffset1-CodIRange1-CodIRange;
如果所述第一比较值为1,且所述第二比较值为0,根据如下公式获取当前待解码序列的更新值:
CodIOffset2=CodIOffset1-CodIRange1;
如果所述第一比较值为0,将第一待解码序列右移一位对应的序列作为当前待解码序列的更新值;
式中,CodIOffset2为当前待解码序列的更新值,CodIOffset1为第一待解码序列,CodIRange1为第一解码区间值,CodIRange为当前解码区间值。
10.根据权利要求1所述的CABAC解码方法,其特征在于,若当前解码阶段处于信息后缀解码阶段,在根据所述解码残差值对待解码的位流进行解码之后,还包括以下步骤:
如果所述第一比较值和所述第二比较值均为1,根据如下公式获取当前待解码序列的更新值:
CodIOffset2=CodIOffset1-CodIRange1-CodIRange;
如果所述第一比较值为1,且所述第二比较值为0,根据如下公式获取当前待解码序列的更新值:
CodIOffset2=CodIOffset1-CodIRange1;
如果所述第一比较值为0,且所述第二比较值为1,根据如下公式获取当前待解码序列的更新值:
CodIOffset2=CodIOffset1-CodIRange;
如果所述第一比较值为0,且所述第二比较值为0,将第一待解码序列左移两位对应的序列作为当前待解码序列的更新值;
式中,CodIOffset2为当前待解码序列的更新值,CodIOffset1为第一待解码序列,CodIRange1为第一解码区间值,CodIRange为当前解码区间值。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN201710550901.1A CN107277518B (zh) | 2017-07-07 | 2017-07-07 | Cabac解码方法 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN201710550901.1A CN107277518B (zh) | 2017-07-07 | 2017-07-07 | Cabac解码方法 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| CN107277518A true CN107277518A (zh) | 2017-10-20 |
| CN107277518B CN107277518B (zh) | 2019-07-16 |
Family
ID=60072998
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN201710550901.1A Active CN107277518B (zh) | 2017-07-07 | 2017-07-07 | Cabac解码方法 |
Country Status (1)
| Country | Link |
|---|---|
| CN (1) | CN107277518B (zh) |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN112953682A (zh) * | 2021-02-20 | 2021-06-11 | Tcl华星光电技术有限公司 | 解码方法、解码设备及可读存储介质 |
Citations (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN1949873A (zh) * | 2005-10-12 | 2007-04-18 | 华为技术有限公司 | Cabac解码系统及方法 |
| US7710296B2 (en) * | 2007-09-19 | 2010-05-04 | Texas Instruments Incorporated | N-bin arithmetic coding for context adaptive binary arithmetic coding |
| US20130107951A1 (en) * | 2011-10-27 | 2013-05-02 | Qualcomm Incorporated | Mapping states in binary arithmetic coder for video coding |
| US20130177069A1 (en) * | 2012-01-09 | 2013-07-11 | Texas Instruments Incorporated | Context Adaptive Binary Arithmetic Coding (CABAC) with Scalable Throughput and Coding Efficiency |
| CN103931188A (zh) * | 2012-01-16 | 2014-07-16 | 联发科技(新加坡)私人有限公司 | 语法元素的上下文自适应二进制算术编码装置及方法 |
-
2017
- 2017-07-07 CN CN201710550901.1A patent/CN107277518B/zh active Active
Patent Citations (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN1949873A (zh) * | 2005-10-12 | 2007-04-18 | 华为技术有限公司 | Cabac解码系统及方法 |
| US7710296B2 (en) * | 2007-09-19 | 2010-05-04 | Texas Instruments Incorporated | N-bin arithmetic coding for context adaptive binary arithmetic coding |
| US20130107951A1 (en) * | 2011-10-27 | 2013-05-02 | Qualcomm Incorporated | Mapping states in binary arithmetic coder for video coding |
| US20130177069A1 (en) * | 2012-01-09 | 2013-07-11 | Texas Instruments Incorporated | Context Adaptive Binary Arithmetic Coding (CABAC) with Scalable Throughput and Coding Efficiency |
| CN103931188A (zh) * | 2012-01-16 | 2014-07-16 | 联发科技(新加坡)私人有限公司 | 语法元素的上下文自适应二进制算术编码装置及方法 |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN112953682A (zh) * | 2021-02-20 | 2021-06-11 | Tcl华星光电技术有限公司 | 解码方法、解码设备及可读存储介质 |
Also Published As
| Publication number | Publication date |
|---|---|
| CN107277518B (zh) | 2019-07-16 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US7839311B2 (en) | Architecture for multi-stage decoding of a CABAC bitstream | |
| US7385535B2 (en) | Decoding system and method based on context-based adaptive binary arithmetic coding | |
| US8782379B2 (en) | H.264 video decoder CABAC core optimization techniques | |
| CN107801041B (zh) | 解码器、解码和编码视频的方法 | |
| KR100648258B1 (ko) | 고속의 디코딩을 수행하는 파이프라인 구조의 내용 기반적응적 이진 산술 디코더 | |
| JP7195251B2 (ja) | ピクチャデータに関連する構文要素を表すバイナリシンボルのシーケンスのコンテキスト適応型二進算術コード化のための方法及びデバイス | |
| CN100440979C (zh) | 基于上下文的自适应二维变长解码方法和装置 | |
| US7411529B2 (en) | Method of decoding bin values using pipeline architecture and decoding device therefor | |
| CN107277518B (zh) | Cabac解码方法 | |
| CN107343201B (zh) | Cabac编码方法和系统 | |
| EP3149947B1 (en) | Dedicated arithmetic encoding instruction | |
| US20140247165A1 (en) | Method and system for de-binarization | |
| Chen et al. | A low cost context adaptive arithmetic coder for H. 264/MPEG-4 AVC video coding | |
| CN114079774A (zh) | 帧间预测信息的编解码方法及装置 | |
| CN100428634C (zh) | 数字信号处理中联合变长编解码的方法和装置 | |
| CN102263960B (zh) | 一种快速解码cavlc非零系数幅值的方法 | |
| CN116582669A (zh) | 二进制算术编码结构、装置、方法及存储介质 | |
| WO2022193386A1 (zh) | 系数编解码方法、编解码设备、终端及存储介质 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| PB01 | Publication | ||
| PB01 | Publication | ||
| SE01 | Entry into force of request for substantive examination | ||
| SE01 | Entry into force of request for substantive examination | ||
| GR01 | Patent grant | ||
| GR01 | Patent grant | ||
| CP02 | Change in the address of a patent holder |
Address after: 519000 No. 333, Kexing Road, Xiangzhou District, Zhuhai City, Guangdong Province Patentee after: ZHUHAI JIELI TECHNOLOGY Co.,Ltd. Address before: Floor 1-107, building 904, ShiJiHua Road, Zhuhai City, Guangdong Province Patentee before: ZHUHAI JIELI TECHNOLOGY Co.,Ltd. |
|
| CP02 | Change in the address of a patent holder |