CN109587483A - 码流提取模块 - Google Patents
码流提取模块 Download PDFInfo
- Publication number
- CN109587483A CN109587483A CN201910107577.5A CN201910107577A CN109587483A CN 109587483 A CN109587483 A CN 109587483A CN 201910107577 A CN201910107577 A CN 201910107577A CN 109587483 A CN109587483 A CN 109587483A
- Authority
- CN
- China
- Prior art keywords
- coding
- lower limit
- code stream
- selector
- normalized
- 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
Landscapes
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本申请是201511033027.1的分案申请,提供了一种码流提取模块。二进制算术编码器包括编码区间更新与归一化模块、编码下限更新与归一化模块和码流提取模块,所述编码区间更新与归一化模块、编码下限更新与归一化模块和码流提取模块形成并行的三级流水结构,码流提取模块可以在一个时钟周期内处理一个或多个编码符号,实现了完全并行,解决了现有技术中并行差的问题;另外,通过选择器实现不同编码模式的共用,提高了电路的复用性,减少了硬件成本;此外,所述码流提取方法的码流提取操作简单,无须额外的FIFO资源。
Description
本申请是分案申请,原申请的申请号为201511033027.1,申请日为2015年12月31日,发明名称为“二进制算术编码器及其编码方法”。
技术领域
本发明涉及视频编码技术领域,特别涉及一种编码区间更新与归一化模块、编码下限更新与归一化模块和码流提取模块,还涉及一种包含所述编码区间更新与归一化模块、编码下限更新与归一化模块和码流提取模块的二进制算术编码器及其编码方法。
背景技术
二进制算术编码器(Context-based Adaptive Binary Arithmetic Coder,简称CABAC)是根据二进制算术编码原理设计的编码器,CABAC中的二进制算术编码技术是基于区间的递归划分原理的。CABAC的编码过程包括:二进制化、上下文建模和算术编码。其中,二进制化是将语法元素进行简单变长映射成一串二进制位,算术编码是对每一位进行编码得到H.264/AVC的输出码流,算术编码包括区间细分和区间归一化。
目前,H.264/AVC标准的二进制算术编码有三种模式,分别是常规编码模式、等概率编码模式(bypass编码模式)和截止编码模式。
以常规编码模式为例,编码区间(range)分成两个子间隔,即小概率字符(LPS)的区间和大概率字符(MPS)的区间。其中,小概率字符的区间长度用rLPS表示,大概率字符的区间长度用rMPS表示,rMPS=range-rLPS。区间划分时为了减少计算量,二进制算术编码器中通过查表的方式得到rLPS。新的编码区间(range)是根据当前的编码符号(bin)是小概率字符(LPS)还是大概率字符(MPS)来确定的。为了使编码区间(range)保持在一定的范围内,需要对编码区间(range)进行归一化。在常规编码模式中,编码区间(range)的取值范围在28到29之间。若新的编码区间(range)超出了该取值范围,就需要对该编码区间(range)进行归一化,使其保持在28到29之间。归一化过程中还包括对编码下限(low)进行调整,使其与归一化后的编码区间相匹配。
对于等概率编码模式而言,编码区间(range)是固定不变的。当编码符号(bin)为“0”时,编码下限(low)为2*low。当编码符号(bin)为“1”时,编码下限(low)则为2*low+range。
对于截止编码模式而言,小概率字符的区间长度(rLPS)固定为2,其他操作与常规编码模式相同。
可见,三种编码模式各有差异,传统的二进制算术编码器中若要同时处理三种编码模式,必须要设置专门的逻辑控制电路,增加额外的硬件成本。并且,二进制算术编码是串行编码,并行性差,完成当前编码符号(bin)一般需要多次迭代,后续编码符号(bin)的编码依赖于当前编码符号(bin)的迭代结果。而且,在归一化过程中还需要不断调整编码下限(low)的范围,归一化的计算非常复杂。目前,有些二进制算术编码器只能实现部分并行化,还有些二进制算术编码器虽然能够实现完全并行化,但是无法统一处理常规编码模式、等概率编码模式和截止编码模式这三种编码模式,即三种编码模式分开处理,重用性差。此外,目前码流提取的技术也比较落后,一般需要多个时钟周期才能完成一个编码符号(bin)的码流提取操作,为此需要依靠加数据FIFO的方式来解决码流提取操作和归一化操作之间的时间差。
发明内容
本发明的目的在于提供一种二进制算术编码器及其编码方法,以解决现有的二进制算术编码并行性差的问题。
本发明的另一目的在于解决现有技术中二进制算术编码重用性差的问题。
本发明的又一目的在于解决现有技术中码流提取操作复杂的问题。
为解决上述技术问题,本发明提供一种二进制算术编码器,用于输出多种编码模式的二进制算术编码的码流,包括编码区间更新与归一化模块、编码下限更新与归一化模块和码流提取模块,所述编码区间更新与归一化模块、编码下限更新与归一化模块和码流提取模块形成并行的三级流水结构;
所述编码区间更新与归一化模块,作为第一级流水引擎,用于提取编码状态、编码模式以及编码符号,更新编码区间和完成编码区间的归一化,并输出编码区间归一化的迭代次数以及编码区间至所述编码下限更新与归一化模块;
所述编码下限更新与归一化模块,作为第二级流水引擎,用于提取编码符号、编码模式、编码区间归一化的迭代次数以及编码区间,更新编码下限和完成编码下限的归一化,并输出编码下限的溢出位以及编码下限归一化的迭代次数至码流提取模块;
所述码流提取模块,作为第三级流水引擎,用于提取所述编码下限归一化的迭代次数和编码下限的溢出位,输出变长码流以及码流长度。
优选的,所述的二进制算术编码器中,所述编码区间更新与归一化模块还输出大概率字符的区间长度至所述编码下限更新与归一化模块。
优选的,所述的二进制算术编码器中,通过选择器实现模式复用。
优选的,所述的二进制算术编码器中,所述编码模式包括常规编码模式、等概率编码模式和截止编码模式。
优选的,所述的二进制算术编码器中,模式复用时,所述编码区间更新与归一化模块包括第一选择器、第一减法器、第二选择器、首1检测电路、第一移位器和第一D触发器;其中,第一选择器,用于根据提取的编码模式获得当前编码模式下的小概率字符的区间长度;第一减法器,用于根据当前的编码区间和当前编码模式下的小概率字符的区间长度,获得当前编码模式下的大概率字符的区间长度;第二选择器,用于根据当前编码模式和当前编码符号从当前的编码区间、当前编码模式下的小概率字符的区间长度和当前编码模式下的大概率字符的区间长度中择一作为归一化前的编码区间进行输出;首1检测电路,用于对所述归一化前的编码区间进行前导0计数,得到编码区间归一化的迭代次数;第一移位器,用于根据所述编码区间归一化的迭代次数对归一化前的编码区间进行左移输出归一化后的编码区间,归一化后的编码区间经所述第一D触发器后输出编码区间待下一周期备用。
优选的,所述的二进制算术编码器中,当所述编码模式是等概率编码模式时,所述编码区间更新与归一化模块包括第一触发器,编码区间直接输出作为归一化后的编码区间,归一化后的编码区间经所述第一D触发器后输出编码区间待下一周期备用。
优选的,所述的二进制算术编码器中,当所述编码模式是截止编码模式时,所述编码区间更新与归一化模块包括第一减法器、第二选择器、首1检测电路、第一移位器和第一D触发器;其中,第一减法器,用于根据当前的编码区间和当前编码模式下的小概率字符的区间长度,获得当前编码模式下的大概率字符的区间长度;第二选择器,用于根据当前编码模式和当前编码符号,从所述当前编码模式下的小概率字符的区间长度或当前编码模式下的大概率字符的区间长度中择一作为归一化前的编码区间进行输出;首1检测电路,用于对所述归一化前的编码区间进行前导0计数,得到编码区间归一化的迭代次数;第一移位器,用于根据所述编码区间归一化的迭代次数对归一化前的编码区间进行左移输出归一化后的编码区间,归一化后的编码区间经所述第一D触发器后输出编码区间待下一周期备用。
优选的,所述的二进制算术编码器中,模式复用时,所述编码下限更新与归一化模块包括第三选择器、第四选择器、第一加法器、第五选择器、第二移位器、第三移位器、第四移位器、第一比较器和第二D触发器;其中,第三选择器,用于根据当前编码模式和当前编码符号,从所述当前的编码区间、当前编码模式下的大概率字符的区间长度和编码下限的默认值中择一作为输出;第四选择器,用于根据当前编码模式从编码下限或2倍的编码下限中择一作为输出;第一加法器,用于根据所述第三选择器和第四选择器获得归一化前的编码下限;第五选择器,用于根据所述编码模式从所述编码区间归一化的迭代次数和编码下限归一化的迭代次数的默认值中择一作为编码下限归一化的迭代次数进行输出;第二移位器,用于根据编码下限归一化的迭代次数将归一化前的编码下限左移,取低9位,得到归一化后的编码下限的低9位;第三移位器,用于将所述第二移位器所得结果右移9位得到编码下限的溢出位;第四移位器,用于根据编码下限归一化的迭代次数将常数0x1ff右移,常数0x1ff右移后与归一化前的编码下限按位或操作的结果通过第一比较器与常数0x3ff进行比较,根据比较结果得到归一化后的编码下限的最高位,归一化后的编码下限经过所述第二D触发器后,输出编码下限待下一周期备用。
优选的,所述的二进制算术编码器中,当前编码模式为常规编码模式且编码符号为小概率字符的区间长度时,所述第三选择器选择大概率字符的区间长度为输出;当前编码模式为等概率编码模式且编码符号为1时,所述第三选择器选择当前的编码区间为输出;其余情况所述第三选择器选择编码下限的默认值为输出。
优选的,所述的二进制算术编码器中,当前编码模式为等概率编码模式时,所述第四选择器选择2倍的编码下限为输出,其他情况选择编码下限为输出。
优选的,所述的二进制算术编码器中,当前编码模式为等概率编码模式时,所述第五选择器选择编码下限归一化的迭代次数的默认值为输出,其他情况所述第五选择器选择编码区间归一化的迭代次数为输出。
优选的,所述的二进制算术编码器中,所述第四移位器将常数0x1ff右移编码下限归一化的迭代次数位后与归一化前的编码下限按位或输出,所述第一比较器将按位或输出的结果与常数0x3ff进行比较,按位或操作的结果若等于0x3ff,所述归一化后的编码下限的最高位为1,否则为0。
优选的,所述的二进制算术编码器中,当所述编码模式是常规编码模式和/或截止编码模式时,所述编码下限更新与归一化模块包括:第三选择器、第一加法器、第五选择器、第二移位器、第三移位器、第四移位器、第一比较器和第二D触发器;其中,第三选择器,用于根据当前编码符号,选择当前编码模式下的大概率字符的区间长度和编码下限的默认值输出;第一加法器,用于根据所述第三选择器编码下限获得归一化前的编码下限;第五选择器,用于根据所述编码模式,选择所述编码区间归一化的迭代次数作为编码下限归一化的迭代次数进行输出;第二移位器,用于根据编码下限归一化的迭代次数将归一化前的编码下限左移,取低9位,得到归一化后的编码下限的低9位;第三移位器,用于将所述第二移位器所得结果右移9位得到编码下限的溢出位;第四移位器,用于根据编码下限归一化的迭代次数将常数0x1ff右移,常数0x1ff右移后与归一化前的编码下限按位或操作的结果通过第一比较器与常数0x3ff进行比较,根据比较结果得到归一化后的编码下限的最高位,归一化后的编码下限经过所述第二触发器后,输出编码下限待下一周期备用。
优选的,所述的二进制算术编码器中,当所述编码模式是等概率编码模式时,所述编码下限更新与归一化模块包括第三选择器、第一加法器、第五选择器、第二移位器、第三移位器、第四移位器、第一比较器和第二D触发器;其中,第三选择器,用于根据当前编码符号,选择所述当前的编码区间和编码下限的默认值作为输出;第一加法器,用于根据所述第三选择器和2倍的编码下限获得归一化前的编码下限;第五选择器,用于根据所述编码模式,选择编码下限归一化的迭代次数的默认值作为编码下限归一化的迭代次数进行输出;第二移位器,用于根据编码下限归一化的迭代次数将归一化前的编码下限左移,取低9位,得到归一化后的编码下限的低9位;第三移位器,用于将所述第二移位器所得结果右移9位得到编码下限的溢出位;第四移位器,用于根据编码下限归一化的迭代次数将常数0x1ff右移,常数0x1ff右移后与归一化前的编码下限按位或操作的结果通过第一比较器与常数0x3ff进行比较,根据比较结果得到归一化后的编码下限的最高位,归一化后的编码下限经过所述第二D触发器后,输出编码下限待下一周期备用。
优选的,所述的二进制算术编码器中,所述码流提取模块包括首0检测电路、第六选择器、第三D触发器、第七选择器和码流输出单元;其中,首0检测电路,用于对编码下限的溢出位进行尾部首0检测,输出第一个0之后出现的1的个数,所述第一个0之后出现的1的个数与编码下限归一化的迭代次数进行比较以得到比较结果;第六选择器,用于根据比较结果从所述第一个0之后出现的1的个数、不确定位个数的默认值和编码下限归一化的迭代次数与不确定位个数之和中择一作为不确定位个数进行输出;第三D触发器,用于对所述第六选择器输出的不确定位个数进行存储作为下一周期备用;第七选择器,用于根据所述比较结果从所述编码下限归一化的迭代次数与不确定位个数之和、码流长度的默认值和编码下限归一化的迭代次数与不确定位个数之和与第一个0之后出现的1的个数的差值中择一作为码流长度进行输出;码流输出单元,用于根据所述编码下限的溢出位输出变长码流。
优选的,所述的二进制算术编码器中,当所述编码下限归一化的迭代次数小于所述第一个0之后出现的1的个数时,比较结果为0;当所述编码下限归一化的迭代次数等于所述第一个0之后出现的1的个数时,比较结果为1;当所述编码下限归一化的迭代次数大于所述第一个0之后出现的1的个数时,比较结果为2。
优选的,所述的二进制算术编码器中,当所述比较结果为0时,所述第六选择器将所述编码下限归一化的迭代次数与不确定位个数之和作为输出;当所述比较结果为1时,所述第六选择器将所述不确定位个数的默认值作为输出;当所述比较结果为2时,所述第六选择器将所述第一个0之后出现的1的个数作为输出。
优选的,所述的二进制算术编码器中,当所述比较结果为0时,所述第七选择器输出的码流长度为所述编码下限归一化的迭代次数与不确定位个数之和;当所述比较结果为1时,所述第七选择器输出的码流长度为所述码流长度的默认值;当所述比较结果为2时,所述第七选择器输出的码流长度为所述编码下限归一化的迭代次数与不确定位个数之和与第一个0之后出现的1的个数的差值。
优选的,所述的二进制算术编码器中,所述码流输出单元包括第八选择器、第五移位器和第六移位器;当有效的码流的最高位为0时,第八选择器输出第一常数,当有效的码流的最高位为1时,第八选择器输出第二常数;第五移位器根据63与不确定位个数的差值将第八选择器的输出结果右移,所述第六移位器根据编码下限归一化的迭代次数与1之和将第五移位器的输出结果左移,最后与最末位按位或输出。
优选的,所述的二进制算术编码器中,所述码流输出单元采用左对齐方式依次输出一个最高位、若干个中间位和若干个最末位;其中,所述最高位为1时中间位全为0,所述最高位为0时中间位全为1,所述中间位的个数等于不确定位个数。
优选的,所述的二进制算术编码器中,所述码流提取模块在一个时钟周期内完成码流提取操作。
相应的,本发明还提供一种编码区间更新与归一化模块,用于提取编码状态、编码模式以及编码符号,更新编码区间和完成编码区间的归一化,并输出编码区间归一化的迭代次数以及编码区间;
所述编码区间更新与归一化模块包括第一选择器、第一减法器、第二选择器、首1检测电路、第一移位器和第一D触发器;其中,
第一选择器,用于根据提取的编码模式获得当前编码模式下的小概率字符的区间长度;
第一减法器,用于根据当前的编码区间和当前编码模式下的小概率字符的区间长度,获得当前编码模式下的大概率字符的区间长度;
第二选择器,用于根据当前编码模式和当前编码符号从当前的编码区间、当前编码模式下的小概率字符的区间长度和当前编码模式下的大概率字符的区间长度中择一作为归一化前的编码区间进行输出;
首1检测电路,用于对所述归一化前的编码区间进行前导0计数,得到编码区间归一化的迭代次数;
第一移位器,用于根据所述编码区间归一化的迭代次数对归一化前的编码区间进行左移输出归一化后的编码区间,归一化后的编码区间经所述第一D触发器后输出编码区间待下一周期备用。
优选的,在所述的编码区间更新与归一化模块中,当前编码模式为常规编码模式或等概率编码模式时,查表得到4个小概率字符的区间长度初始值,所述第一选择器选择4个小概率字符的区间长度初始值的其中一个作为当前编码模式下的小概率字符的区间长度;当前编码模式为截止编码模式时,所述小概率字符的区间长度等于2。
优选的,在所述的编码区间更新与归一化模块中,当前编码模式为等概率编码模式时,所述第二选择器选择当前的编码区间为输出;当前编码模式为截止编码模式且当前编码符号为1,或当前编码模式为常规编码模式下且当前编码符号为0时,所述第二选择器选择当前编码模式下的小概率字符的区间长度为输出;其他情况所述第二选择器选择当前编码模式下的大概率字符的区间长度为输出。
相应的,本发明还提供一种编码下限更新与归一化模块,用于提取编码符号、编码模式、编码区间归一化的迭代次数以及编码区间,更新编码下限和完成编码下限的归一化,并输出编码下限的溢出位以及编码下限归一化的迭代次数;
所述编码下限更新与归一化模块包括第三选择器、第四选择器、第一加法器、第五选择器、第二移位器、第三移位器、第四移位器、第一比较器和第二D触发器;其中,
第三选择器,用于根据当前编码模式和当前编码符号,从所述当前的编码区间、当前编码模式下的大概率字符的区间长度和编码下限的默认值中择一作为输出;
第四选择器,用于根据当前编码模式从编码下限或2倍的编码下限中择一作为输出;
第一加法器,用于根据所述第三选择器和第四选择器获得归一化前的编码下限;
第五选择器,用于根据所述编码模式从所述编码区间归一化的迭代次数和编码下限归一化的迭代次数的默认值中择一作为编码下限归一化的迭代次数进行输出;
第二移位器,用于根据编码下限归一化的迭代次数将归一化前的编码下限左移,取低9位,得到归一化后的编码下限的低9位;
第三移位器,用于将所述第二移位器所得结果右移9位得到编码下限的溢出位;
第四移位器,用于根据编码下限归一化的迭代次数将常数0x1ff右移,常数0x1ff右移后与归一化前的编码下限按位或操作的结果通过第一比较器与常数0x3ff进行比较,根据比较结果得到归一化后的编码下限的最高位,归一化后的编码下限经过所述第二D触发器后,输出编码下限待下一周期备用。
优选的,在所述的编码下限更新与归一化模块中,当前编码模式为常规编码模式且编码符号为小概率字符的区间长度时,所述第三选择器选择大概率字符的区间长度为输出;当前编码模式为等概率编码模式且编码符号为1时,所述第三选择器选择当前的编码区间为输出;其余情况所述第三选择器选择编码下限的默认值为输出。
优选的,在所述的编码下限更新与归一化模块中,当前编码模式为等概率编码模式时,所述第四选择器选择2倍的编码下限为输出,其他情况选择编码下限为输出。
优选的,在所述的编码下限更新与归一化模块中,当前编码模式为等概率编码模式时,所述第五选择器选择编码下限归一化的迭代次数的默认值为输出,其他情况所述第五选择器选择编码区间归一化的迭代次数为输出。
优选的,在所述的编码下限更新与归一化模块中,所述第四移位器将常数0x1ff右移编码下限归一化的迭代次数位后与归一化前的编码下限按位或输出,所述第一比较器将按位或输出的结果与常数0x3ff进行比较,按位或操作的结果若等于0x3ff,所述归一化后的编码下限的最高位为1,否则为0。
相应的,本发明还提供一种码流提取模块,用于提取所述编码下限归一化的迭代次数和编码下限的溢出位,输出变长码流以及码流长度;
所述码流提取模块包括首0检测电路、第六选择器、第三D触发器、第七选择器和码流输出单元;其中,
首0检测电路,用于对编码下限的溢出位进行尾部首0检测,输出第一个0之后出现的1的个数,所述第一个0之后出现的1的个数与编码下限归一化的迭代次数进行比较以得到比较结果;
第六选择器,用于根据比较结果从所述第一个0之后出现的1的个数、不确定位个数的默认值和编码下限归一化的迭代次数与不确定位个数之和中择一作为不确定位个数进行输出;
第三D触发器,用于对所述第六选择器输出的不确定位个数进行存储作为下一周期备用;
第七选择器,用于根据所述比较结果从所述编码下限归一化的迭代次数与不确定位个数之和、码流长度的默认值和编码下限归一化的迭代次数与不确定位个数之和与第一个0之后出现的1的个数的差值中择一作为码流长度进行输出;
码流输出单元,用于根据所述编码下限的溢出位输出变长码流。
优选的,在所述的码流提取模块中,当所述编码下限归一化的迭代次数小于所述第一个0之后出现的1的个数时,比较结果为0;当所述编码下限归一化的迭代次数等于所述第一个0之后出现的1的个数时,比较结果为1;当所述编码下限归一化的迭代次数大于所述第一个0之后出现的1的个数时,比较结果为2。
优选的,在所述的码流提取模块中,当所述比较结果为0时,所述第六选择器将所述编码下限归一化的迭代次数与不确定位个数之和作为输出;当所述比较结果为1时,所述第六选择器将所述不确定位个数的默认值作为输出;当所述比较结果为2时,所述第六选择器将所述第一个0之后出现的1的个数作为输出。
优选的,在所述的码流提取模块中,当所述比较结果为0时,所述第七选择器输出的码流长度为所述编码下限归一化的迭代次数与不确定位个数之和;当所述比较结果为1时,所述第七选择器输出的码流长度为所述码流长度的默认值;当所述比较结果为2时,所述第七选择器输出的码流长度为所述编码下限归一化的迭代次数与不确定位个数之和与第一个0之后出现的1的个数的差值。
优选的,在所述的码流提取模块中,所述码流输出单元包括第八选择器、第五移位器和第六移位器;当有效的码流的最高位为0时,第八选择器输出第一常数,当有效的码流的最高位为1时,第八选择器输出第二常数;第五移位器根据63与不确定位个数的差值将第八选择器的输出结果右移,所述第六移位器根据编码下限归一化的迭代次数与1之和将第五移位器的输出结果左移,最后与最末位按位或输出。
优选的,在所述的码流提取模块中,所述码流输出单元采用左对齐方式依次输出一个最高位、若干个中间位和若干个最末位;其中,所述最高位为1时中间位全为0,所述最高位为0时中间位全为1,所述中间位的个数等于不确定位个数。
优选的,在所述的码流提取模块中,所述码流提取模块在一个时钟周期内完成码流提取操作。
相应的,本发明还提供一种二进制算术编码器的编码方法,所述二进制算术编码器的编码方法包括:
步骤S10:编码区间更新与归一化模块作为第一级流水引擎,提取编码状态、编码模式以及编码符号,更新编码区间和完成编码区间的归一化,并输出编码区间归一化的迭代次数以及编码区间;
步骤S11:编码下限更新与归一化模块作为第二级流水引擎,提取编码符号、编码模式、编码区间归一化的迭代次数以及编码区间,更新编码下限和完成编码下限的归一化,并输出编码下限的溢出位以及编码下限归一化的迭代次数;
步骤S12:码流提取模块作为第三级流水引擎,提取所述编码下限归一化的迭代次数和编码下限的溢出位,输出变长码流以及码流长度。
优选的,所述的二进制算术编码器的编码方法中,在步骤S10中,所述编码区间更新与归一化模块还输出大概率字符的区间长度至所述编码下限更新与归一化模块。
优选的,所述的二进制算术编码器的编码方法中,所述编码模式包括常规编码模式、等概率编码模式和截止编码模式。
优选的,所述的二进制算术编码器的编码方法中,所述步骤S10进一步包括:
第一选择器根据编码模式获得当前编码模式下的小概率字符的区间长度;
第一减法器根据当前的编码区间和当前编码模式下的小概率字符的区间长度,获得当前编码模式下的大概率字符的区间长度;
第二选择器根据当前编码模式和当前编码符号,从所述当前的编码区间、当前编码模式下的小概率字符的区间长度或当前编码模式下的大概率字符的区间长度中择一作为归一化前的编码区间进行输出;
首1检测电路对所述归一化前的编码区间进行前导0计数,得到编码区间归一化的迭代次数;
第一移位器根据所述编码区间归一化的迭代次数,对归一化前的编码区间进行左移输出归一化后的编码区间,归一化后的编码区间经一D触发器后,输出编码区间待下一周期备用。
优选的,所述的二进制算术编码器的编码方法,其特征在于,当前编码模式为常规编码模式或等概率编码模式时,查表得到4个小概率字符的区间长度初始值,所述第一选择器选择4个小概率字符的区间长度初始值的其中一个作为当前编码模式下的小概率字符的区间长度;当前编码模式为截止编码模式时,所述小概率字符的区间长度等于2。
优选的,所述的二进制算术编码器的编码方法中,当前编码模式为等概率编码模式时,所述第二选择器选择当前的编码区间为输出;当前编码模式为截止编码模式且当前编码符号为1,或当前编码模式为常规编码模式下且当前编码符号为0时,所述第二选择器选择当前编码模式下的小概率字符的区间长度为输出;其他情况所述第二选择器选择当前编码模式下的大概率字符的区间长度为输出。
优选的,所述的二进制算术编码器的编码方法,其特征在于,步骤S11进一步包括:
第三选择器根据当前编码模式和当前编码符号,从所述当前的编码区间、当前编码模式下的大概率字符的区间长度或编码下限的默认值中择一作为输出;
第四选择器根据当前编码模式,从编码下限或2倍的编码下限中择一作为输出;
第一加法器根据所述第三选择器和第四选择器获得归一化前的编码下限;
第五选择器根据所述当前编码模式,从所述编码区间归一化的迭代次数和编码下限归一化的迭代次数的默认值中择一作为编码下限归一化的迭代次数进行输出;
第二移位器根据所述编码下限归一化的迭代次数将归一化前的编码下限左移,取低9位,得到归一化后的编码下限的低9位;
第三移位器将所述第二移位器所得结果右移9位得到编码下限的溢出位;
第四移位器根据编码下限归一化的迭代次数将常数0x1ff右移,常数0x1ff右移后与归一化前的编码下限按位或操作的结果通过第一比较器与常数0x3ff进行比较,根据比较结果得到归一化后的编码下限的最高位;
归一化后的编码下限经过第三D触发器之后,输出编码下限待下一周期备用。
优选的,所述的二进制算术编码器的编码方法中,当前编码模式为常规编码模式且编码符号为小概率字符的区间长度时,所述第三选择器选择大概率字符的区间长度为输出;当前编码模式为等概率编码模式且编码符号为1时,所述第三选择器选择当前的编码区间为输出;其余情况所述第三选择器选择编码下限的默认值为输出。
优选的,所述的二进制算术编码器的编码方法中,当前编码模式为等概率编码模式时,所述第四选择器选择2倍的编码下限为输出,其他情况选择编码下限为输出。
优选的,所述的二进制算术编码器的编码方法中,当前编码模式为等概率编码模式时,所述第五选择器选择编码下限归一化的迭代次数的默认值为输出,其他情况所述第五选择器选择编码区间归一化的迭代次数为输出。
优选的,所述的二进制算术编码器的编码方法中,所述第四移位器将常数0x1ff右移编码下限归一化的迭代次数位后与归一化前的编码下限按位或输出,所述第一比较器将按位或输出的结果与常数0x3ff进行比较,按位或操作的结果若等于0x3ff,所述归一化后的编码下限的最高位为1,否则为0。
优选的,所述的二进制算术编码器的编码方法中,步骤S12进一步包括:
首0检测电路对编码下限的溢出位进行尾部首0检测,输出第一个0之后出现的1的个数,所述第一个0之后出现的1的个数与编码下限归一化的迭代次数进行比较;
第六选择器根据比较结果所述从第一个0之后出现的1的个数、不确定位个数的默认值和编码下限归一化的迭代次数与不确定位个数之和中择一作为不确定位个数进行输出;
第三D触发器对所述第六选择器输出的不确定位个数进行存储;
第七选择器根据所述比较结果从所述编码下限归一化的迭代次数与不确定位个数之和、码流长度的默认值和编码下限归一化的迭代次数与不确定位个数之和与第一个0之后出现的1的个数的差值中择一作为码流长度进行输出;
码流输出单元根据所述编码下限的溢出位输出变长码流。
优选的,所述的二进制算术编码器的编码方法中,当所述编码下限归一化的迭代次数小于所述第一个0之后出现的1的个数时,比较结果为0;当所述编码下限归一化的迭代次数等于所述第一个0之后出现的1的个数时,比较结果为1;当所述编码下限归一化的迭代次数大于所述第一个0之后出现的1的个数时,比较结果为2。
优选的,所述的二进制算术编码器的编码方法中,当所述比较结果为0时,所述第六选择器将所述编码下限归一化的迭代次数与不确定位个数之和作为输出;当所述比较结果为1时,所述第六选择器将所述不确定位个数的默认值作为输出;当所述比较结果为2时,所述第六选择器将所述第一个0之后出现的1的个数作为输出。
优选的,所述的二进制算术编码器的编码方法中,当所述比较结果为0时,所述第七选择器输出的码流长度为所述编码下限归一化的迭代次数与不确定位个数之和;当所述比较结果为1时,所述第七选择器输出的码流长度为所述码流长度的默认值;当所述比较结果为2时,所述第七选择器输出的码流长度为所述编码下限归一化的迭代次数与不确定位个数之和与第一个0之后出现的1的个数的差值。
优选的,所述的二进制算术编码器的编码方法中,当有效的码流的最高位为0时,第八选择器输出第一常数,当有效的码流的最高位为1时,第八选择器输出第二常数;第五移位器根据63与不确定位个数的差值将第八选择器的输出结果右移,所述第六移位器根据编码下限归一化的迭代次数与1之和将第五移位器的输出结果左移,最后与最末位按位或输出。
优选的,所述的二进制算术编码器的编码方法中,所述码流输出单元采用左对齐方式依次输出一个最高位、若干个中间位和若干个最末位;其中,所述最高位为1时中间位全为0,所述最高位为0时中间位全为1,所述中间位的个数等于不确定位个数。
优选的,所述的二进制算术编码器的编码方法中,所述码流提取模块在一个时钟周期内完成码流提取操作。
在本发明提供的二进制算术编码器及其编码方法中,通过编码区间更新与归一化模块、编码下限更新与归一化模块形成三级流水结构,由此码流提取模块可以在一个时钟周期内处理一个或多个编码符号,实现了完全并行,解决了现有技术中并行差的问题;另外,通过选择器实现不同编码模式的共用,提高了电路的复用性,减少了硬件成本;此外,所述码流提取方法的码流提取操作简单,无须额外的FIFO资源。
附图说明
图1是本发明实施例的二进制算术编码器的原理框图;
图2是本发明实施例的模式复用下的编码区间更新与归一化模块的工作流程示意图;
图3是本发明实施例的常规编码模式下的编码区间更新与归一化模块的工作流程示意图;
图4是本发明实施例的等概率编码模式下的编码区间更新与归一化模块的工作流程示意图;
图5是本发明实施例的截止编码模式下的编码区间更新与归一化模块的工作流程示意图;
图6中本发明实施例的模式复用下的编码下限更新与归一化模块的工作流程示意图;
图7中本发明实施例的常规编码模式以及截止编码模式下的编码下限更新与归一化模块的工作流程示意图;
图8中本发明实施例的等概率编码模式下的编码下限更新与归一化模块的工作流程示意图;
图9为本发明实施例的码流提取模块的结构示意图;
图10为本发明实施例的二进制算术编码器的编码方法的流程图;
图11为图10中步骤S10的具体流程示意图;
图12为图10中步骤S11的具体流程示意图;
图13为图10中步骤S12的具体流程示意图。
具体实施方式
以下结合附图和具体实施例对本发明提出的二进制算术编码器及其编码方法作进一步详细说明。
请参考图1,其为本发明实施例的二进制算术编码器的原理框图。所述二进制算术编码器用于输出各种编码模式mode的二进制算术编码的码流,如图1所示,所述二进制算术编码器100包括编码区间更新与归一化模块10、编码下限更新与归一化模块20和码流提取模块30,所述编码区间更新与归一化模块10、编码下限更新与归一化模块20和码流提取模块30形成并行的三级流水结构。
编码区间更新与归一化模块10,作为第一级流水引擎,用于提取编码状态state、编码模式mode以及编码符号Bin,更新编码区间range和完成编码区间range的归一化,并输出编码区间归一化的迭代次数S、编码区间range以及大概率字符的区间长度rMPS至下一级流水引擎即编码下限更新与归一化模块20。
编码下限更新与归一化模块20,作为第二级流水引擎,用于提取编码符号Bin、编码模式mode、编码区间归一化的迭代次数S、编码区间range以及大概率字符的区间长度rMPS,更新编码下限(low)和完成编码下限(low)的归一化,并输出编码下限的溢出位overflow_low以及编码下限归一化的迭代次数S1至下一级流水引擎即码流提取模块30。
码流提取模块30,作为第三级流水引擎,用于提取所述编码下限归一化的迭代次数S1和编码下限的溢出位overflow_low,输出变长码流bit_stream以及码流长度bit_len。
本发明通过采用三级流水结构,即采用高度并行的全流水线设计,无须加入任何控制逻辑电路,可以在一个时钟周期内处理一个或多个编码符号,实现了完全并行,解决了现有技术中并行差的问题。
具体的,所述编码模式mode包括常规编码模式、等概率编码模式和截止编码模式。本实施例中,mode为0表示常规编码模式,mode为1表示等概率编码模式,mode为2表示截止编码模式。
本实施例中,所述二进制算术编码器中的编码区间更新与归一化模块10和编码下限更新与归一化模块20通过选择器实现不同编码模式的共用,提高了电路的复用性,增加了电路吞吐量率,减少硬件开销。
以下将分别对各个模块进行详细说明。
图2是本发明实施例的模式复用下的编码区间更新与归一化模块10的工作流程示意图,图3是本发明实施例的常规编码模式下的编码区间更新与归一化模块10的工作流程示意图,图4是本发明实施例的等概率编码模式下的编码区间更新与归一化模块10的工作流程示意图,图5是本发明实施例的截止编码模式下的编码区间更新与归一化模块10的工作流程示意图。
下面结合图2所示详细介绍模式复用下的编码区间更新与归一化模块10的结构及其工作流程。如图2所示,模式复用下的编码区间更新与归一化模块10包括第一选择器11、第二选择器12、第一减法器13、首1检测电路15、第一移位器16和第一D触发器17。
其中,第一选择器11,用于根据提取的编码模式mode获得当前编码模式下的小概率字符的区间长度rLPS,并输出所述当前编码模式下的小概率字符的区间长度rLPS;具体的,当编码模式mode为0或1时,即常规编码模式或等概率编码模式下,根据概率状态state查表结果和range[7:6]得到小概率字符的区间长度rLPS,作为一个非限制性的例子,概率状态state查表得到4个rLPS初始值(rLPS0、rLPS1、rLPS2、rLPS3),第一选择器11根据range[7:6]选择4个初始值的其中一个作为当前编码模式(标准模式)下的小概率字符的区间长度rLPS输出;当编码模式mode为2时,即截止编码模式下,输出的小概率字符的区间长度rLPS等于2。
其中,第一减法器13,用于根据当前的编码区间range和当前编码模式下的小概率字符的区间长度rLPS,获得当前编码模式下的大概率字符的区间长度rMPS,rMPS的计算公式为:rMPS=range-rLPS。
其中,第二选择器12,用于根据当前编码模式mode和当前编码符号bin,从当前的编码区间range、当前编码模式下的小概率字符的区间长度rLPS和当前编码模式下的大概率字符的区间长度rMPS中选择其一作为归一化前的编码区间rangenor进行输出。具体的,模式复用情况下,第二选择器12的输入为当前编码模式下的小概率字符的区间长度rLPS、当前编码模式下的大概率字符的区间长度rMPS以及当前的编码区间range,选择因子为当前编码模式mode以及当前编码符号bin;若当前编码模式mode为1,选择当前的编码区间range为输出;若当前编码模式mode为2且当前编码符号bin为1,或当前编码模式mode为0且当前编码符号bin为0时,选择当前编码模式下的小概率字符的区间长度rLPS为输出;除上述两种之外的其他情况,选择当前编码模式下的大概率字符的区间长度rMPS为输出。
其中,首1检测电路15,用于对归一化前的编码区间rangenor进行前导0计数,得到编码区间归一化的迭代次数S,编码区间归一化的迭代次数S将输入到下一级流水引擎,也就是编码下限更新与归一化模块20。
其中,第一移位器16,用于根据所述归一化前的编码区间rangenor和编码区间归一化的迭代次数S得到归一化后的编码区间rangeO,即通过将归一化前的编码区间rangenor左移S位得到归一化后的编码区间rangeO;归一化后的编码区间rangeO经过第一D触发器17之后,输出编码区间range待编码区间更新与归一化模块10下一周期备用。
下面结合图3所示详细介绍常规编码模式下的编码区间更新与归一化模块10的结构及其工作流程。如图3所示,所述常规编码模式下的编码区间更新与归一化模块10包括第一减法器13、第二选择器12、首1检测电路15、第一移位器16和第一D触发器17。
其中,第一减法器13,用于根据当前的编码区间range和当前编码模式mode的小概率字符的区间长度rLPS,获得当前编码模式下的大概率字符的区间长度rMPS;rMPS的计算公式为:rMPS=range-rLPS。作为一个非限制性的例子,根据概率状态state查表结果和range[7:6]得到小概率字符的区间长度rLPS。概率状态state查表得到4个rLPS初始值(rLPS0、rLPS1、rLPS2、rLPS3),根据range[7:6]选择4个rLPS初始值的其中一个作为小概率字符的区间长度rLPS输出给第一减法器13,第一减法器13则根据当前的编码区间range和当前编码模式mode的小概率字符的区间长度rLPS,获得当前编码模式下的大概率字符的区间长度rMPS。
其中,第二选择器12,用于根据当前编码符号bin,从当前编码模式下的小概率字符的区间长度rLPS和当前模式下的大概率字符的区间长度rMPS中选择其一作为归一化前的编码区间rangenor进行输出。
其中,首1检测电路15,用于对归一化前的编码区间rangenor进行前导0计数,得到编码区间归一化的迭代次数S,编码区间归一化的迭代次数S将输入到下一级流水引擎,也就是编码下限更新与归一化模块20。
其中,第一移位器16,用于根据所述归一化前的编码区间rangenor和编码区间归一化的迭代次数S得到归一化后的编码区间rangeO,即通过将归一化前的编码区间rangenor左移S位得到归一化后的编码区间rangeO,归一化后的编码区间rangeO经过第一D触发器17之后,输出编码区间range待编码区间更新与归一化模块10下一周期备用。
下面结合图4所示详细介绍等概率编码模式下的编码区间更新与归一化模块10的结构及其工作流程。如图4所示,所述等概率编码模式下的编码区间更新与归一化模块10包括第一D触发器17,当前的编码区间range直接输出作为归一化后的编码区间rangeO。归一化后的编码区间rangeO经过第一D触发器17之后,输出编码区间range待编码区间更新与归一化模块10下一周期备用。
下面结合图5所示详细介绍截止编码模式下的编码区间更新与归一化模块10的结构及其工作流程。如图5所示,所述截止编码模式下的编码区间更新与归一化模块10包括:第一减法器13、第二选择器12、首1检测电路15、第一移位器16和第一D触发器17。
其中,第一减法器13,用于根据当前的编码区间range和当前编码模式mode的小概率字符的区间长度rLPS(截止编码模式下,小概率字符的区间长度rLPS等于2),获得当前编码模式mode下的大概率字符的区间长度rMPS;rMPS的计算公式为:rMPS=range-rLPS。
其中,第二选择器12,用于根据当前编码模式mode和当前编码符号bin,从当前编码模式mode的小概率字符的区间长度rLPS或当前模式mode下大概率字符的区间长度rMPS中选择其一作为归一化前的编码区间rangenor进行输出。
其中,首1检测电路15,用于对归一化前的编码区间rangenor进行前导0计数,得到编码区间归一化的迭代次数S。编码区间归一化的迭代次数S将输入到下一级流水引擎,也就是编码下限更新与归一化模块20。
其中,第一移位器16,用于根据所述归一化前的编码区间rangenor和编码区间归一化的迭代次数S得到归一化后的编码区间rangeO,即通过将归一化前的编码区间rangenor左移S位得到归一化后的编码区间rangeO。归一化后的编码区间rangeO经过第一D触发器17之后,输出编码区间range待编码区间更新与归一化模块10下一周期备用。
图6中本发明实施例的模式复用下的编码下限更新与归一化模块的工作流程示意图,图7中本发明实施例的常规编码模式以及截止编码模式下的编码下限更新与归一化模块的工作流程示意图,图8中本发明实施例的等概率编码模式下的编码下限更新与归一化模块的工作流程示意图。
下面结合图6所示详细介绍本发明实施例的模式复用下的编码下限更新与归一化模块20的结构及其工作流程。如图6所示,所述模式复用下的编码下限更新与归一化模块20包括第三选择器21、第四选择器22、第一加法器23、第五选择器24、第二移位器25、第三移位器26、第四移位器27、第一比较器28和第二D触发器29。
其中,第三选择器21的输入大概率字符的区间长度rMPS和当前的编码区间range以及一编码下限的默认值(在此可以为0),选择因子为编码模式mode和编码符号bin,输出为low_add1。具体来说,当编码模式mode为0且编码符号bin为小概率字符的区间长度rLPS时,第三选择器21输出的low_add1等于rMPS;当mode为1且bin为1时,输出的low_add1等于range;否则输出的low_add1等于0。
其中,第四选择器22的输入为编码下限low或2倍的编码下限(即2*low),选择因子为编码模式mode,输出为low_add0。具体来说,当mode为1时,第四选择器22输出的low_add0为2*low,其他情况选择low为输出。
其中,第一加法器23根据所述第三选择器21和第四选择器22的输出获得归一化前的编码下限lownor。
其中,第五选择器24根据所述编码模式mode得到编码下限归一化的迭代次数S1。第五选择器24的输入为编码区间归一化的迭代次数S和编码下限归一化的迭代次数的默认值(在此可以为1),选择因子为编码模式mode,输出为编码下限归一化的迭代次数S1。具体来说,当mode为1时,即等概率编码模式时,第五选择器24输出的编码下限归一化的迭代次数S1等于1;其他模式下,编码下限归一化的迭代次数S1等于S。
其中,第二移位器25将归一化前的编码下限lownor左移S1位,取低9位,得到归一化后的编码下限lowO的低9位,所述第二移位器25所得结果通过第三移位器26右移9位得到编码下限的溢出位overflow_low。编码下限的溢出位overflow_low输入到下一级流水引擎,也就是码流提取模块30。在本实施例中编码下限的溢出位overflow_low的位数为8位,但应理解,本发明并不限定编码下限的溢出位overflow_low的位数。
其中,归一化后的编码下限lowO的最高位通过如下方式获得:判断lownor的第10位以及其后的S1位是否每一位都为1,如果都为1,则归一化后的编码下限lowO的最高位为1,否则为0。具体实现方式如下,第四移位器27将一常数0x1ff右移S1位后与归一化前的编码下限lownor按位或输出,第一比较器28将按位或输出的结果与一常数0x3ff进行比较,得到归一化后的编码下限lowO的最高位。本实施例中,按位或操作的结果若等于0x3ff,则归一化后的编码下限lowO的最高位为1,否则为0。
归一化后的编码下限lowO经过第二D触发器29之后,输出编码下限low待编码下限更新与归一化模块20下一周期备用。
下面结合图7所示详细介绍本发明实施例的常规编码模式以及截止编码模式下的编码下限更新与归一化模块20的结构及其工作流程。如图7所示,所述常规编码模式以及截止编码模式下的编码下限更新与归一化模块20包括第三选择器21、第一加法器23、第五选择器24、第二移位器25、第三移位器26、第四移位器27、第一比较器28和第二D触发器29。
其中,第三选择器21的输入为编码区间更新与归一化模块10输出的大概率字符的区间长度rMPS以及一编码下限的默认值(在此可以为0),选择因子为编码符号bin,输出为low_add1。具体来说,编码符号bin为小概率字符rLPS时,第三选择器21输出的low_add1等于rMPS;否则输出的low_add1等于0。
其中,第一加法器23根据所述第三选择器21和编码下限low获得归一化前的编码下限lownor。
其中,第五选择器24根据所述编码模式mode得到编码下限归一化的迭代次数S1。第五选择器24的输入为编码区间归一化的迭代次数S和编码下限归一化的迭代次数的默认值,在此可以为1,选择因子为编码模式mode,输出为编码下限归一化的迭代次数S1。编码下限归一化的迭代次数S1等于S。
其中,第二移位器25将归一化前的编码下限lownor左移S1位,取低9位,得到归一化后的编码下限lowO的低9位,所述第二移位器25所得结果通过第三移位器26右移9位得到编码下限的溢出位overflow_low。编码下限的溢出位overflow_low输入到下一级流水引擎,也就是码流提取模块30。在本实施例中编码下限的溢出位overflow_low的位数为8位,但应理解,本发明并不限定编码下限的溢出位overflow_low的位数。
归一化后的编码下限lowO的最高位通过如下方式获得:判断lownor的第10位以及其后的S1位是否每一位都为1,如果都为1,则归一化后的编码下限lowO的最高位为1,否则为0。具体实现方式如下,第四移位器27将常数0x1ff左移S1位后与归一化前的编码下限lownor按位或输出,第一比较器28将按位或输出的结果与一常数0x3ff进行比较,得到归一化后的编码下限lowO的最高位。本实施例中,按位或操作的结果若等于0x3ff,则归一化后的编码下限lowO的最高位为1,否则为0。
归一化后的编码下限lowO经过第二D触发器29之后,输出编码下限low待编码下限更新与归一化模块20下一周期备用。
下面结合图8所示详细介绍本发明实施例的等概率编码模式下的编码下限更新与归一化模块20的结构及其工作流程。如图8所示,所述等概率编码模式下的编码下限更新与归一化模块20包括第三选择器21、第一加法器23、第五选择器24、第二移位器25、第三移位器26、第四移位器27、第一比较器28和第二D触发器29。
其中,第三选择器21的输入为编码区间更新与归一化模块10输出的当前的编码区间range和编码下限的默认值(在此可以为0),选择因子为编码符号bin,输出为low_add1。具体来说,当编码符号bin为1时,输出的low_add1等于range;否则输出的low_add1等于0。
其中,第一加法器23根据所述第三选择器21和2倍的编码下限(即2*low)获得归一化前的编码下限lownor。
其中,第五选择器24根据所述编码模式mode得到编码下限归一化的迭代次数S1。第五选择器24的输入为编码区间归一化的迭代次数S和编码下限归一化的迭代次数的默认值,在此可以为1,选择因子为编码模式mode,输出为编码下限归一化的迭代次数S1,编码下限归一化的迭代次数S1等于1。
其中,第二移位器25将归一化前的编码下限lownor左移S1位,取低9位,得到归一化后的编码下限lowO的低9位,所述第二移位器25所得结果通过第三移位器26右移9位得到编码下限的溢出位overflow_low。编码下限的溢出位overflow_low输入到下一级流水引擎,也就是码流提取模块30。在本实施例中编码下限的溢出位overflow_low的位数为8位,但应理解,本发明并不限定编码下限的溢出位overflow_low的位数。
其中,归一化后的编码下限lowO的最高位通过如下方式获得:判断lownor的第10位以及其后的S1位是否每一位都为1,如果都为1,则归一化后的编码下限lowO的最高位为1,否则为0。具体实现方式如下,第四移位器27将常数0x1ff左移S1位后与归一化前的编码下限lownor按位或输出,第一比较器28将按位或输出的结果与一常数0x3ff进行比较,得到归一化后的编码下限lowO的最高位。本实施例中,按位或操作的结果若等于0x3ff,则归一化后的编码下限lowO的最高位为1,否则为0。
归一化后的编码下限lowO经过第二D触发器29之后,输出编码下限low待编码下限更新与归一化模块20下一周期备用。
请参考图9,其为本发明实施例的码流提取模块的结构示意图。如图9所示,所述码流提取模块30包括首0检测电路31、第六选择器32、第三D触发器33、第七选择器34和码流输出单元,所述码流输出单元包括第八选择器35、第五移位器36和第六移位器37。其中,首0检测电路31、第六选择器32、第三D触发器33和第七选择器34用于输出码流长度bit_len,第八选择器35、第五移位器36和第六移位器37用于输出码流bit_stream。
首0检测电路31对上一级流水引擎输出的编码下限的溢出位overflow_low进行尾部首0检测,输出第一个0之后出现的1的个数N,所述第一个0之后出现的1的个数N与编码下限归一化的迭代次数S1进行比较,得到比较结果sel。在此,比较结果sel表示码流提取中S1与N的大小关系,当S1小于N时,sel为0;当S1等于N时,sel为1;当S1大于N时,sel为2。
第六选择器32根据比较结果sel进行选择,得到不确定位个数num_ostd。第六选择器32的输入为N,不确定位个数的默认值,在此可以为0和S1+num_ostd,选择因子为比较结果sel。当比较结果sel为0时,第六选择器32得到的不确定位个数num_ostd为S1+num_ostd;当比较结果sel为1时,得到的不确定位个数num_ostd为0;当比较结果sel为2时,得到的不确定位个数num_ostd为N。
第六选择器32输出的不确定位个数num_ostd输入到第三D触发器33的D端,第三D触发器33存储所述不确定位个数num_ostd作为下一周期备用,第三D触发器33的Q端输出的是当前周期的不确定位个数num_ostd。不确定位是指H.264参考代码中的BitOutStanding,当未能确定最终输出的是‘1’还是‘0’时由num_ostd来计数。不确定位个数num_ostd用于输出当前周期的码流长度bit_len以及计算新的不确定位个数num_ostd。
第七选择器34根据比较结果sel输出码流长度bit_len。第七选择器34的输入为S1+num_ostd、码流长度的默认值(在此可以为0)、S1+num_ostd-N,选择因子为比较结果sel。当比较结果sel为0时,输出的码流长度bit_len为S1+num_ostd;当比较结果sel为1时,输出的码流长度bit_len为0;当比较结果sel为2时,输出的码流长度bit_len为S1+num_ostd-N。
可见,当sel为0时,码流长度bit_len更新为S1+num_ostd,不确定位个数num_ostd更新为0;当sel为1时,码流长度bit_len更新为0,不确定位个数num_ostd更新为S1+num_ostd;当sel为2时表示S1大于N,码流长度bit_len更新为S1+num_ostd–N,不确定位个数num_ostd更新为N。
在码流输出单元中,第八选择器35的输入为两个常数,分别是64’h7fffffffffffffff和64’h8000000000000000,第八选择器35的选择因子为有效码流的最高位overflow_low[S1]。当有效码流的最高位overflow_low[S1]为0时,输出为64’h7fffffffffffffff;当有效码流的最高位overflow_low[S1]为1时,输出为64’h8000000000000000。第八选择器35的输出结果经过第五移位器36右移63-num_ostd位,之后经过第六移位器37再左移S1+1位,最后与最末位overflow_low[s1-1:0]按位或输出。
由此,码流输出单元能够根据上一级流水引擎输入的编码下限的溢出位overflow_low采用左对齐方式依次输出码流的最高位overflow_low[S1]、不确定位个数num_ostd位的中间位!overflow_low[S1]和若干个最末位overflow_low[s1-1:0]。其中,overflow_low[S1]表示编码下限的溢出位overflow_low的第S1+1位,!overflow_low[S1]表示编码下限的溢出位overflow_low的第S1+1位取反,overflow_low[s1-1:0]表示编码下限的溢出位overflow_low的低S1位。码流输出单元输出的码流bit_stream已经包容了各种情况,符合H.264/AVC标准。所述码流提取模块20可在一个时钟周期内完成码流提取操作,码流提取操作非常简便,无需额外的FIFO资源(数据缓存)。
由上可知,在本发明实施例提供二进制算术编码器中,编码区间更新与归一化模块10和编码下限更新与归一化模块20通过选择器实现了三种编码模式的共用,无需增加任何控制电路,能够减少硬件成本。而且,由于编码下限归一化的迭代次数S1和编码下限的溢出位overflow_low可以由一个或多个编码符号bin二进制算术编码归一化后得到,因此所述二进制算术编码器可以在一个时钟周期内完成一个或多个编码符号bin的码流提取操作,码流提取操作非常简便,无需额外的FIFO资源(数据缓存)。
相应的,本实施例还提供了一种二进制算术编码器的编码方法。
请参考图10,其为本发明实施例的二进制算术编码器的编码方法的流程图。如图10所示,并结合图1,所述二进制算术编码器的编码方法包括以下步骤:
步骤S10:编码区间更新与归一化模块10作为第一级流水引擎,提取编码状态、编码模式以及编码符号,更新编码区间和完成编码区间的归一化,并输出编码区间归一化的迭代次数、编码区间以及大概率字符的区间长度;
步骤S11:编码下限更新与归一化模块20作为第二级流水引擎,提取编码符号、编码模式、编码区间归一化的迭代次数、编码区间以及大概率字符的区间长度,更新编码下限和完成编码下限的归一化,并输出编码下限的溢出位以及编码下限归一化的迭代次数;
步骤S12:码流提取模块30作为第三级流水引擎,提取所述编码下限归一化的迭代次数和编码下限的溢出位,输出变长码流以及码流长度。
具体的,请参考图11,本实施例中,步骤S10进一步包括:
步骤S101:第一选择器11根据编码模式获得当前编码模式下的小概率字符的区间长度rLPS;
具体来说,所述编码模式mode包括常规编码模式、等概率编码模式和截止编码模式;本实施例中,mode为0表示常规编码模式,mode为1表示等概率编码模式,mode为2表示截止编码模式。当编码模式mode为0或1时,即常规编码模式或等概率编码模式下,根据概率状态state查表结果和range[7:6]得到小概率字符的区间长度rLPS。概率状态state查表得到4个rLPS初始值(rLPS0、rLPS1、rLPS2、rLPS3),第一选择器11根据range[7:6]选择其中一个作为小概率字符的区间长度rLPS作为输出。当编码模式mode为2时,即截止编码模式下,输出的小概率字符的区间长度rLPS等于2;
步骤S102:第一减法器12根据当前的编码区间range和当前编码模式下的小概率字符的区间长度rLPS,获得当前编码模式下的大概率字符的区间长度rMPS;具体的,rMPS计算公式为:rMPS=range-rLPS;
步骤S103:第二选择器12根据当前编码模式mode和当前编码符号bin,从当前的编码区间range、当前编码模式下的小概率字符的区间长度rLPS或当前编码模式下的大概率字符的区间rMPS长度中择一作为归一化前的编码区间rangenor进行输出;本实施例中,若当前编码模式mode为1,选择当前的编码区间range为输出;若当前编码模式mode为2且当前编码符号bin为1,或当前编码模式mode为0且当前编码符号bin为0时,选择当前编码模式下的小概率字符的区间长度rLPS为输出;除上述两种之外的其他情况,选择当前编码模式下的大概率字符的区间长度rMPS为输出;
步骤S104:首1检测电路15对所述归一化前的编码区间rangenor进行前导0计数,得到编码区间归一化的迭代次数S;编码区间归一化的迭代次数S将输入到下一级流水引擎,也就是编码下限更新与归一化模块20;
步骤S105:第一移位器16根据所述编码区间归一化的迭代次数S,对归一化前的编码区间rangenor进行左移输出归一化后的编码区间rangeO,rangeO经过第一D触发器17之后,输出编码区间range待下一周期备用。
具体的,请参考图12,本实施例中,步骤S11进一步包括:
步骤S111:第三选择器21根据当前编码模式mode和当前编码符号bin,从所述当前的编码区间range、当前编码模式下的大概率字符的区间长度rMPS或编码下限的默认值(在此可以为0)中择一作为输出;本实施例中,当编码模式mode为0且编码符号bin为小概率字符rLPS时,第三选择器21输出的low_add1等于rMPS;当mode为1且bin为1时,输出的low_add1等于range;否则输出的low_add1等于0;
步骤S112:第四选择器22根据当前编码模式,从编码下限low或2倍的编码下限2*low中择一作为输出;本实施例中,当mode为1时,第四选择器22输出的low_add0为2*low,其他情况选择low为输出;
步骤S113:第一加法器23根据所述第三选择器21和第四选择器22获得归一化前的编码下限lownor;
步骤S114:第五选择器24根据所述当前编码模式,从所述编码区间归一化的迭代次数S和编码下限归一化的迭代次数S1的默认值(在此可以为1)中择一作为编码下限归一化的迭代次数进行输出;具体来说,当mode为1时,即等概率编码模式时,第五选择器输出的编码下限归一化的迭代次数S1等于1;其他模式下,编码下限归一化的迭代次数S1等于S;
步骤S115:第二移位器25根据所述编码下限归一化的迭代次数将归一化前的编码下限左移,取低9位,得到归一化后的编码下限的低9位;
步骤S116:第三移位器26将所述第二移位器25所得结果右移9位得到编码下限的溢出位overflow_low;编码下限的溢出位overflow_low输入到下一级流水引擎,也就是码流提取模块;在本实施例中编码下限的溢出位overflow_low的位数为8位;
步骤S117:第四移位器27根据编码下限归一化的迭代次数将常数0x1ff右移,常数0x1ff右移后与归一化前的编码下限lownor按位或操作的结果通过第一比较器28与常数0x3ff进行比较,根据比较结果得到归一化后的编码下限lowO的最高位;本实施例中,按位或操作的结果若等于0x3ff,则归一化后的编码下限lowO的最高位为1,否则为0;归一化后的编码下限lowO经过第二D触发器29之后,输出low待下一周期备用。
具体的,请参考图13,所述码流提取方法S12包括:
步骤一:对编码下限的溢出位overflow_low进行尾部首零检测以得到第一个0之后出现的1的个数N;
步骤二:比较编码下限归一化的迭代次数S1与第一个0之后出现的1的个数N的大小,得到比较结果sel;
步骤三:根据S1与N的比较结果sel得到不确定位个数num_ostd和输出码流长度bit_len;
步骤四:输出变长码流。
其中,如果在步骤二中S1小于N,表示之前积累的不确定位可输出,且当前所有的S1都为确定位可输出,积累的不确定位个数记为num_ostd。在步骤三中得到当前可输出的bit_len为S1+num_ostd,新的不确定位个数num_ostd更新为0。之后输出码流,先输出最高位overflow_low[S1],再输出num_ostd位的中间位!overflow_low[S1],最后输出若干个最末位overflow_low[s1-1:0]。至此,当前码流提取完成。
如果在步骤二中S1等于N,表示当前所有的S1位bit都为不确定位,因此,当前无可输出的bit,在步骤三中得到新的不确定位个数num_ostd更新为S1+num_ostd。至此,当前码流提取完成。
如果S1大于N,表示当前有确定位可将之前的不确定位输出,也有新的不确定位。因此,在步骤三中得到当前输出的bit长度为S1+num_ostd–N,新的不确定位个数num_ostd更新为N。之后输出码流,先输出最高位overflow_low[S1],再输出num_ostd位的中间位!overflow_low[S1],最后输出若干个最末位overflow_low[s1-1:0]。至此,当前码流提取完成。
可见,码流bit_stream由三部分组成,分别是最高位overflow_low[S1]、中间位!overflow_low[S1]和最末位overflow_low[s1-1:0],码流输出时最高位overflow_low[S1]、中间位!overflow_low[S1]和最末位overflow_low[S1-1:0]依次输出。当最高位为1时,首先输出1,其后跟着num_ostd位的0,最后输出overflow_low[s1-1:0]。当最高位为0时,首先输出0,其后跟着num_ostd位的1,最后输出overflow_low[s1-1:0]。
在所述码流提取方法中,一个时钟周期就能完成一个或多个编码符号bin的码流提取操作,因此无须额外的FIFO资源(数据缓存)。
所述二进制算术编码器的编码方法中,根据不同的编码模式可以选择不同的参数,进而实现各种编码模式的共用,包括常规编码模式、等概率编码模式和截止编码模式。而且,码流提取方法中由于归一化的迭代次数S1和编码下限的溢出位overflow_low均可以由一个或多个编码符号bin进行二进制算术编码归一化后得到,因此,所述码流提取方法能够一个周期内完成一个或多个编码符号bin的码流提取操作,有效地提高二进制算术编码的处理速度。
综上,在本发明实施例提供的二进制算术编码器及其编码方法中,编码区间更新与归一化模块、编码下限更新与归一化模块分别采用选择器以适应各种不同的编码模式,使得所述二进制算术编码器能够进行高效地电路复用,减少了硬件成本。同时,所述码流提取方法可以在一个周期内完成一位或多位的码流提取,而且码流提取操作简单,无须额外的FIFO资源(数据缓存)。
需要说明的是,本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的方法而言,由于与实施例公开的***相对应,所以描述的比较简单,相关之处参见***部分说明即可。
上述描述仅是对本发明较佳实施例的描述,并非对本发明范围的任何限定,本发明领域的普通技术人员根据上述揭示内容做的任何变更、修饰,均属于权利要求书的保护范围。
Claims (7)
1.一种码流提取模块,其特征在于,用于提取编码下限归一化的迭代次数和编码下限的溢出位,输出变长码流以及码流长度;
所述码流提取模块包括首0检测电路、第六选择器、第三D触发器、第七选择器和码流输出单元;其中,
首0检测电路,用于对编码下限的溢出位进行尾部首0检测,输出第一个0之后出现的1的个数,所述第一个0之后出现的1的个数与编码下限归一化的迭代次数进行比较以得到比较结果;
第六选择器,用于根据比较结果从所述第一个0之后出现的1的个数、不确定位个数的默认值和编码下限归一化的迭代次数与不确定位个数之和中择一作为不确定位个数进行输出;
第三D触发器,用于对所述第六选择器输出的不确定位个数进行存储作为下一周期备用;
第七选择器,用于根据所述比较结果从所述编码下限归一化的迭代次数与不确定位个数之和、码流长度的默认值和编码下限归一化的迭代次数与不确定位个数之和与第一个0之后出现的1的个数的差值中择一作为码流长度进行输出;
码流输出单元,用于根据所述编码下限的溢出位输出变长码流。
2.如权利要求1所述的码流提取模块,其特征在于,当所述编码下限归一化的迭代次数小于所述第一个0之后出现的1的个数时,比较结果为0;当所述编码下限归一化的迭代次数等于所述第一个0之后出现的1的个数时,比较结果为1;当所述编码下限归一化的迭代次数大于所述第一个0之后出现的1的个数时,比较结果为2。
3.如权利要求2所述的码流提取模块,其特征在于,当所述比较结果为0时,所述第六选择器将所述编码下限归一化的迭代次数与不确定位个数之和作为输出;当所述比较结果为1时,所述第六选择器将所述不确定位个数的默认值作为输出;当所述比较结果为2时,所述第六选择器将所述第一个0之后出现的1的个数作为输出。
4.如权利要求3所述的码流提取模块,其特征在于,当所述比较结果为0时,所述第七选择器输出的码流长度为所述编码下限归一化的迭代次数与不确定位个数之和;当所述比较结果为1时,所述第七选择器输出的码流长度为所述码流长度的默认值;当所述比较结果为2时,所述第七选择器输出的码流长度为所述编码下限归一化的迭代次数与不确定位个数之和与第一个0之后出现的1的个数的差值。
5.如权利要求4所述的码流提取模块,其特征在于,所述码流输出单元包括第八选择器、第五移位器和第六移位器;当有效的码流的最高位为0时,第八选择器输出第一常数,当有效的码流的最高位为1时,第八选择器输出第二常数;第五移位器根据63与不确定位个数的差值将第八选择器的输出结果右移,所述第六移位器根据编码下限归一化的迭代次数与1之和将第五移位器的输出结果左移,最后与最末位按位或输出。
6.如权利要求5所述的码流提取模块,其特征在于,所述码流输出单元采用左对齐方式依次输出一个最高位、若干个中间位和若干个最末位;其中,所述最高位为1时中间位全为0,所述最高位为0时中间位全为1,所述中间位的个数等于不确定位个数。
7.如权利要求6所述的码流提取模块,其特征在于,所述码流提取模块在一个时钟周期内完成码流提取操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910107577.5A CN109587483B (zh) | 2015-12-31 | 2015-12-31 | 码流提取模块 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201511033027.1A CN105791828B (zh) | 2015-12-31 | 2015-12-31 | 二进制算术编码器及其编码方法 |
CN201910107577.5A CN109587483B (zh) | 2015-12-31 | 2015-12-31 | 码流提取模块 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201511033027.1A Division CN105791828B (zh) | 2015-12-31 | 2015-12-31 | 二进制算术编码器及其编码方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109587483A true CN109587483A (zh) | 2019-04-05 |
CN109587483B CN109587483B (zh) | 2020-11-20 |
Family
ID=56390403
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910107577.5A Active CN109587483B (zh) | 2015-12-31 | 2015-12-31 | 码流提取模块 |
CN201511033027.1A Active CN105791828B (zh) | 2015-12-31 | 2015-12-31 | 二进制算术编码器及其编码方法 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201511033027.1A Active CN105791828B (zh) | 2015-12-31 | 2015-12-31 | 二进制算术编码器及其编码方法 |
Country Status (1)
Country | Link |
---|---|
CN (2) | CN109587483B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2021143634A1 (zh) * | 2020-01-17 | 2021-07-22 | 阿里巴巴集团控股有限公司 | 算术编码器及实现算术编码的方法和图像编码方法 |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108401158B (zh) * | 2017-02-07 | 2021-01-22 | 深圳市中兴微电子技术有限公司 | 一种上下文自适应二元算术编码重归一化实现方法和装置 |
CN107343201B (zh) * | 2017-06-21 | 2019-11-26 | 珠海市杰理科技股份有限公司 | Cabac编码方法和*** |
CN108391129B (zh) * | 2018-04-25 | 2019-09-27 | 西安万像电子科技有限公司 | 数据编码方法及装置 |
CN110365346B (zh) * | 2019-07-22 | 2021-07-06 | 浙江大华技术股份有限公司 | 一种算术熵编码方法及*** |
CN111818335B (zh) * | 2020-07-03 | 2022-04-26 | Tcl华星光电技术有限公司 | 一种熵编码方法和装置、电子设备 |
CN111787325B (zh) * | 2020-07-03 | 2022-03-08 | 北京博雅慧视智能技术研究院有限公司 | 一种熵编码器及其编码方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101771879A (zh) * | 2010-01-28 | 2010-07-07 | 清华大学 | 基于cabac的并行归一化编码实现电路及编码方法 |
CN101951516A (zh) * | 2010-09-25 | 2011-01-19 | 清华大学 | 基于h.264/avc中cabac的并行编码实现电路及编码方法 |
CN102176750A (zh) * | 2011-03-10 | 2011-09-07 | 西安电子科技大学 | 高性能自适应二进制算术编码器 |
CN103248896A (zh) * | 2013-05-15 | 2013-08-14 | 中国科学院光电技术研究所 | Mq算术编码器 |
CN103974066A (zh) * | 2014-05-14 | 2014-08-06 | 华为技术有限公司 | 视频编码方法和设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104918049A (zh) * | 2015-06-03 | 2015-09-16 | 复旦大学 | 适用于hevc标准的二进制算术编码模块 |
-
2015
- 2015-12-31 CN CN201910107577.5A patent/CN109587483B/zh active Active
- 2015-12-31 CN CN201511033027.1A patent/CN105791828B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101771879A (zh) * | 2010-01-28 | 2010-07-07 | 清华大学 | 基于cabac的并行归一化编码实现电路及编码方法 |
CN101951516A (zh) * | 2010-09-25 | 2011-01-19 | 清华大学 | 基于h.264/avc中cabac的并行编码实现电路及编码方法 |
CN102176750A (zh) * | 2011-03-10 | 2011-09-07 | 西安电子科技大学 | 高性能自适应二进制算术编码器 |
CN103248896A (zh) * | 2013-05-15 | 2013-08-14 | 中国科学院光电技术研究所 | Mq算术编码器 |
CN103974066A (zh) * | 2014-05-14 | 2014-08-06 | 华为技术有限公司 | 视频编码方法和设备 |
Non-Patent Citations (1)
Title |
---|
DAJIANG ZHOU等: "Ultra-High-Throughput VLSI Architecture of H .265/HEVC CABAC Encoder for UHDTV Applications", 《IEEE TRANSACTIONS ON CIRCUITS AND SYSTEMS FOR VIDEO TECHNOLOGY》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2021143634A1 (zh) * | 2020-01-17 | 2021-07-22 | 阿里巴巴集团控股有限公司 | 算术编码器及实现算术编码的方法和图像编码方法 |
Also Published As
Publication number | Publication date |
---|---|
CN105791828B (zh) | 2019-05-31 |
CN105791828A (zh) | 2016-07-20 |
CN109587483B (zh) | 2020-11-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109587483A (zh) | 码流提取模块 | |
CN100466739C (zh) | Cabac解码***及方法 | |
CN107294539B (zh) | 一种准动态霍夫曼硬件编码器及编码方法 | |
CN104038232B (zh) | 基于二次异或运算的测试数据压缩与解压缩方法 | |
CN108391129B (zh) | 数据编码方法及装置 | |
US20190140657A1 (en) | Data compression coding method, apparatus therefor, and program therefor | |
CN114697654B (zh) | 一种神经网络量化压缩方法及*** | |
CN114697672B (zh) | 基于游程全零编码的神经网络量化压缩方法及*** | |
CN103248367A (zh) | 码流数据的编码、解码方法和装置 | |
CN106445890A (zh) | 数据处理方法 | |
CN109284083A (zh) | 一种乘法运算装置及方法 | |
CN106649217A (zh) | 数据的匹配方法及装置 | |
CN108964671A (zh) | 一种译码方法及译码器 | |
CN103270699A (zh) | 用于确定搜索起点的装置和方法 | |
CN104918049A (zh) | 适用于hevc标准的二进制算术编码模块 | |
CN110073604A (zh) | 用于硬件解压缩引擎的多码元、多格式、并行码元解码器 | |
US9455742B2 (en) | Compression ratio for a compression engine | |
CN108829930B (zh) | 三维数字化工艺设计mbd模型的轻量化方法 | |
CN100426219C (zh) | 一种集成电路中的数据运算方法及装置 | |
CN100581258C (zh) | 霍夫曼解码方法和霍夫曼解码装置 | |
CN100551066C (zh) | 编码器及自适应算术编码的实现方法及装置 | |
CN107277553A (zh) | 一种二元算术编码器 | |
CN104199352B (zh) | 基于fpga的区间编码硬件实现*** | |
CN107679010B (zh) | 一种面向可重构计算阵列的算子映射***及方法 | |
CN112911314B (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 |