CN111818335B - 一种熵编码方法和装置、电子设备 - Google Patents
一种熵编码方法和装置、电子设备 Download PDFInfo
- Publication number
- CN111818335B CN111818335B CN202010635715.XA CN202010635715A CN111818335B CN 111818335 B CN111818335 B CN 111818335B CN 202010635715 A CN202010635715 A CN 202010635715A CN 111818335 B CN111818335 B CN 111818335B
- Authority
- CN
- China
- Prior art keywords
- length
- interval
- value
- subinterval
- decoding
- 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.)
- Active
Links
Images
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/20—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using video object coding
- H04N19/21—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using video object coding with binary alpha-plane coding for video objects, e.g. context-based arithmetic encoding [CAE]
-
- 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/90—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
- H04N19/91—Entropy coding, e.g. variable length coding [VLC] or arithmetic coding
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本申请公开了一种熵解码方法和装置、电子设备。所述方法包括:读入二进制码流数据获取解码参数,并根据解码参数对所述二进制码流数据并行进行二进制算术解码和重归一化。本申请通过调整增加部分变量及计算方式,使解码与重归一化由原来串行计算变为并行计算,节省硬件化后的时间需求,便于硬件化流水线方式实现。
Description
技术领域
本申请涉及视频编解码技术领域,具体涉及一种熵编码方法和装置、电子设备。
背景技术
随着显示分辨率的提高,针对显示行业数据的处理越来越重要,压缩与解压成为重要数据处理手段,但对于目前传统解码方式都有一定的弊端。H.264也称作MPEG-4AVC(Advanced Video Coding,高级视频编码),是一种视频压缩标准,同时也是一种被广泛使用的高精度视频的录制、压缩和发布格式。传统的H.264有两种熵编码方案,对应两种解码方式:一种是从可变长编码方案发展而来的基于上下文的自适应可变长编码CAVLC;另一种是从算术编码发展而来的基于上下文的自适应二进制算术编码CABAC(Context-basedAdaptive Binary Arithmetic Coding),与CAVLC相比,CABAC可以节省约7%的码流,能更有效地取出语法序列中的表示冗余,但增加了10%的计算时间。
CABAC算术解码方式会节省码流,对应节省数据存储空间,但传统CABAC算术解码整个解码流程硬件化实现过程复杂,计算按照二进制比特顺序进行,串行化要求高,导致计算复杂度增加。同时,在解高清码流时,无法完成实时解码的任务。
因此,提出关于CABAC的并行的算术解码硬件化加速是非常必要的。
发明内容
本申请目的在于提供一种熵编码方法和装置、电子设备,采用查找表的形式将数据预先存入,节省计算时间;通过调整增加部分变量及计算方式,使原来串行计算变为并行计算,解码与重归一化同时计算结束后进入下一码流的计算,节省硬件化后的时间需求,便于硬件化流水线方式实现。
本申请的第一方面,提供一种熵解码方法,包括:读入二进制码流数据,获取解码参数,其中所述解码参数包括:第一区间长度、区间偏移值、算术解码的比特数累加值、第一概率符号、第二概率符号对应的子区间长度、第二概率符号对应的子区间偏移值,以及第二区间长度,其中,所述第二区间长度为根据所述子区间长度更新所述第一区间长度所获取的区间长度;对所述二进制码流数据并行进行二进制算术解码和重归一化,所述二进制算术解码包括根据所述区间偏移值、所述第二区间长度、所述第一概率符号获取解码结果;所述重归一化包括预判所述第二区间长度或所述子区间长度大于预设长度值的循环移位个数,并根据所述子区间偏移值进行重归一化运算。
本申请的第二方面,提供一种熵解码装置,所述装置包括:解码参数获取单元,用于读入二进制码流数据,获取解码参数,其中所述解码参数包括:第一区间长度、区间偏移值、算术解码的比特数累加值、第一概率符号、第二概率符号对应的子区间长度、第二概率符号对应的子区间偏移值,以及第二区间长度,其中,所述第二区间长度为根据所述子区间长度更新所述第一区间长度所获取的区间长度;二进制算术解码单元,用于根据所述区间偏移值、所述第二区间长度、所述第一概率符号获取解码结果;重归一化单元,用于预判所述第二区间长度或所述子区间长度大于预设长度值的循环移位个数,并根据所述子区间偏移值进行重归一化运算;其中,所述二进制算术解码单元与所述重归一化单元被所述解码参数获取单元同时调用,以并行执行对所述二进制码流数据的二进制算术解码和重归一化。
本申请的第三方面,提供一种电子设备,包括存储器和处理器,所述存储器存储有计算机可执行程序,当所述计算机可执行程序被所述处理器执行时,使得本申请所述熵解码方法被执行。
附图说明
下面结合附图,通过对本申请的具体实施方式详细描述,将使本申请的技术方案及其它有益效果显而易见。
图1为本申请的熵解码方法的流程图。
图2为本申请一实施例熵解码方法的具体流程图。
图3为现有传统的CABAC算术解码的解码流程图。
图4为本申请的熵解码装置的结构框图。
图5为本申请的电子设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在本申请的描述中,需要理解的是,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个所述特征。在本申请的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
下文的公开提供了许多不同的实施方式或例子用来实现本申请的不同结构。为了简化本申请的公开,下文中对特定例子的部件和设置进行描述。当然,它们仅仅为示例,并且目的不在于限制本申请。
此外,本申请可以在不同例子中重复参考数字和/或参考字母,这种重复是为了简化和清楚的目的,其本身不指示所讨论各种实施方式和/或设置之间的关系。至始至终,相同的符号或字母,代表相同的数值或者组成部分。此外,本申请提供了的各种特定的工艺和材料的例子,但是本领域普通技术人员可以意识到其他工艺的应用和/或其他材料的使用。
请参照图1,本申请熵解码方法的流程图。如图1所示,本申请熵解码方法包括如下步骤:S1、读入二进制码流数据,获取解码参数,其中所述解码参数包括:第一区间长度R1、区间偏移值L、算术解码的比特数累加值de_length、第一概率符号MPS、第二概率符号LPS对应的子区间长度RLPS、第二概率符号LPS对应的子区间偏移值LLPS,以及第二区间长度R2;S2、对所述二进制码流数据进行二进制算术解码,其中,所述二进制算术解码包括根据所述区间偏移值L、所述第二区间长度R2、所述第一概率符号MPS获取解码结果;S3、对所述二进制码流数据进行重归一化,其中,所述重归一化包括预判所述第二区间长度R2或所述子区间长度RLPS大于预设长度值的循环移位个数,并根据所述子区间偏移值LLPS进行重归一化运算;其中,步骤S2与步骤S3并行进行,即对所述二进制码流数据并行进行二进制算术解码和重归一化。以下给出详细解释。
关于步骤S1、读入二进制码流数据,获取解码参数,其中所述解码参数包括:第一区间长度R1、区间偏移值L、算术解码的比特数累加值de_length、第一概率符号MPS、第二概率符号LPS对应的子区间长度RLPS、第二概率符号LPS对应的子区间偏移值LLPS,以及第二区间长度R2。其中,所述第二区间长度R2为根据所述子区间长度RLPS更新所述第一区间长度R1所获取的区间长度。
具体的,所述步骤S1进一步包括:1)对所述二进制码流数据进行初始化,获取第一区间长度R1、区间偏移值L、第一概率符号MPS以及概率索引值σ;2)根据所述第一区间长度R1获取区间索引值ρ,根据所述概率索引值σ和所述区间索引值ρ获取所述子区间长度RLPS,根据所述子区间RLPS长度更新所述第一区间长度R1获取所述第二区间长度R2,以及根据所述区间偏移值L和所述第二区间长度R2获取所述子区间偏移值LLPS。
CABAC的编码方法一般采用二进制算术编码,二进制算术编码的输入只有“0”和“1”两个符号,即输入为二进制串。具体地,在H.264解码器的输入码流中,所述码流数据的基本单位为语法元素(Syntax Element),也称作句法元素。每个语法元素由若干比特(bit)组成,表示某个特定的物理意义。语法元素被组织成有层次的结构,分别描述序列(Sequence)、图像(Picture)、片(Slice,或译作条带)、宏块(MB,Macroblock)、子宏块(Subblock)五个层次的信息,CABAC主要负责对片层以下的句法元素进行解码。在H.264进行编码的过程中,每一帧的图像被分为一个或多个片进行编码。每一个片包含多个宏块。
所述第一概率符号MPS,为二进制串(本申请中此处特指待解码文件bin_compfile)中出现当前概率较大的符号对应的值(即较大概率符号,More probablesymbol),与之相对的概念是第二概率符号LPS(即较小概率符号,Less probable symbol),具体需要根据实际情况进行调整。例如,若输入的二进制串中的“0”较多,则有MPS=0,LPS=1;反之则MPS=1,LPS=0。
所述第一区间长度R1,指所述概率区间的当前长度;所述区间偏移值L指概率区间的当前起始位置;概率索引值σ将所述概率区间划分成0~63共64种状态,63号状态表示退出,0号状态表示数值翻转,即第一概率符号MPS和第二概率符号LPS所代表的值进行交换。
进一步的实施例中,所述步骤1)进一步包括:获取所述二进制码流数据中待解码文件的比特数计数值cumula_de,以及预先计算设置二维查找表;其中,所述二维查找表的入口参数为概率索引值σ和区间索引值ρ。
其中,所述比特数计数值cumula_de,为当前所述待解码文件bin_compfile中bit数的计数值。
进一步的实施例中,所述步骤2)进一步包括:对所述第一区间长度R1进行量化,获取所述区间索引值ρ,其中,量化方法采用(R>>6)&3;根据所述概率索引值和所述区间索引值ρ,查找一预设的二维查找表rangeTab,获取所述子区间长度,即每编码1bit的所述待解码文件,都要减去较小概率值的概率区间;获取所述第一区间长度R1与所述子区间长度RLPS的差值,作为所述第二区间长度R2(R2=R1-RLPS);获取所述区间偏移值L与所述第二区间长度R2的差值,作为所述子区间偏移值LLPS(LLPS=L-R2)。
所述二维查找表rangeTab是预先建立的64×4的二维表格,第一索引为概率索引值σ,第二索引为区间索引值ρ。概率索引值σ将所述概率区间划分成0~63共64种状态,63号状态表示退出,0号状态表示数值翻转,即第一概率符号MPS和较小概率值LPS所代表的值进行交换。在步骤S1中,所述概率索引值σ等值为预设的概率索引初始值。因为CABAC根据所述概率索引值跳转的计算过程比较复杂,用所述二维查找表中存放预先计算好的乘法结果,在实际使用时,只需要用概率索引值的下标,快速查表即可获取。
关于所述步骤S2、对所述二进制码流数据进行二进制算术解码,其中,所述二进制算术解码包括根据所述区间偏移值L、所述第二区间长度R2、所述第一概率符号MPS获取解码结果。
具体地,所述步骤S2进一步包括:判断所述区间偏移值L是否大于或等于所述第二区间长度R2;若所述区间偏移值L大于或等于所述第二区间长度R2,则对所述第一概率符号MPS进行二进制取反,获取解码结果bin_output并存储,并更新所述第一概率符号MPS以及所述概率索引值σ,即获取下一个解码过程中的上下文模型;若所述区间偏移值L小于所述第二区间长度R2,则获取所述第一概率符号MPS作为解码结果bin_output并存储,并更新所述概率索引值σ,即获取下一个解码过程中的上下文模型;更新所述比特数累加值de_length,并执行判断所述比特数累加值de_length是否小于预设位宽width的操作。其中,所述预设位宽width为预先设置值,例如可以在上述步骤1)中进行初始化设置。
进一步,若所述比特数累加值de_length小于所述预设位宽width,则将所述第二区间长度R2赋值给所述第一区间长度R1,返回步骤S12继续解码;否则解码结束,输出解码结果bin_output。输出按照规定的H.264标准输出,必要的情况下,需要进行反二进制过程,具体可参考现有技术,此处不再赘述。
关于步骤S3、对所述二进制码流数据进行重归一化,其中,所述重归一化包括预判所述第二区间长度R2或所述子区间长度RLPS大于预设长度值的循环移位个数,并根据所述子区间偏移值LLPS进行重归一化运算。其中,对所述二进制码流数据并行进行二进制算术解码和重归一化。
具体的,所述步骤S3进一步包括:判断所述区间偏移值L是否小于所述第二区间长度R2,并根据判断结果执行相应的重归一化运算。
重归一化过程用于所述区间长度小于所述预设长度时,将所述区间长度按比例放大。根据重归一化算法的特点,循环的次数可由第二区间长度R2、区间偏移值L和子区间长度RLPS预先计算获得。一步进行计算,免除多次迭代移位。
当所述区间偏移值L小于所述第二区间长度R2时,所述重归一化运算进一步包括:根据所述第二区间长度R2,获取相应的第一循环移位个数Rcnt1;判断所述第二区间长度R2是否小于所述预设长度值;若所述第二区间长度R2小于所述预设长度值,则根据所述第一循环移位个数Rcnt1更新所述第二区间长度R2后获取新的所述第一区间长度R1,并根据所述第一循环移位个数Rcnt1以及所述子区间偏移值LLPS更新所述区间偏移值L;若所述第二区间长度R2大于或等于所述预设长度值,则执行判断所述比特数累加值de_length是否小于预设位宽的操作。其中,所述预设长度一般取256(二进制表示为0x10000000)。
当所述区间偏移值L大于或等于所述第二区间长度R2时,所述重归一化运算进一步包括:根据所述子区间长度RLPS,获取相应的第二循环移位个数Rcnt2;判断所述子区间长度RLPS是否小于所述预设长度;若所述子区间长度RLPS小于所述预设长度,则根据所述第二循环移位个数Rcnt2以及所述子区间长度RLPS更新所述第二区间长度R2后获取新的所述第一区间长度R1,并根据所述第二循环移位个数Rcnt2以及所述子区间偏移值LLPS,更新所述区间偏移值L;若所述第二子区间长度R2大于或等于所述预设长度,则根据所述子区间长度RLPS更新所述第二区间长度R2后获取新的所述第一区间长度R1、根据所述子区间偏移值LLPS更新所述区间偏移值L,并进一步执行判断所述比特数累加值de_length是否小于预设位宽的操作。其中,所述预设长度一般取256。
重归一化的具体操作除了引入循环移位个数进行预判、以及加入了子区间偏移值,用于更新所述第一区间长度R1和所述区间偏移值L外,其余诸如根据比特数计数值cumula_de和码流数据长度comptile_length,对待解码文件bin_compfile进行更新的操作,和常规的重归一化方法大致类似。对于未详尽描述的一般操作流程,本技术领域人员完全可以理解此步骤的具体运算过程,在此不做赘述。
本申请解码流程中增加变量子区间偏移值LLPS用于重归一化的计算,在获取解码参数的步骤进行计算,节省解码与重归一化的时间。现有解码流程需要顺序执行,即进行解码后、再进行重归一化。本申请优化流程将解码与重归一化并行计算,节省硬件化实现的解码时间,实现解码1bit码流只用1个时钟的时间。
本申请的一种熵解码方法采用查找表的形式将数据预先存入,节省解码计算时间;通过调整增加部分变量及计算方式,节省归一化运算时间;同时,使原来串行计算变为并行计算,解码与重归一化同时计算结束进入下一码流的计算,节省硬件化后的时间需求,实现解码1bit码流只用1个时钟的时间,便于硬件化流水线方式实现。
请参考图2,本申请一实施例熵解码方法的具体流程图。所述流程具体包括以下步骤。
步骤S1、读入二进制码流数据,获取解码参数,其中所述解码参数包括:第一区间长度R1、区间偏移值L、算术解码的比特数累加值de_length、第一概率符号MPS、第二概率符号LPS对应的子区间长度RLPS、第二概率符号LPS对应的子区间偏移值LLPS,以及第二区间长度R2。其中,所述第二区间长度R2为根据所述子区间长度RLPS更新所述第一区间长度R1所获取的区间长度。
具体地,所述步骤S1进一步包括:S11、对所述二进制码流数据进行初始化,获取第一区间长度R1、区间偏移值L、第一概率符号MPS以及概率索引值σ;S12、根据所述第一区间长度R1获取区间索引值ρ,根据所述概率索引值σ和所述区间索引值ρ获取所述子区间长度RLPS,根据所述子区间RLPS长度更新所述第一区间长度R1获取所述第二区间长度R2,以及根据所述区间偏移值L和所述第二区间长度R2获取所述子区间偏移值LLPS。
请参考图2,根据所述二进制码流数据,输入待解码文件bin_compfile、预设位宽width、码流数据长度comptile_length、二维查找表rangeTab;同时令比特数计数值cumula_de为10;比特数累加值de_length为0;第一概率符号MPS为1;第一区间长度R1为510;概率索引值σ为0;区间偏移值L通过读取待解码文件bin_compfile中{1:9}9bit,化成十进制数值获取。
例如,对于码流“0110001110011101101011011111011”,第一个0是编码时的第一个估计值,予以删除。L=read_bits(9:1),初始数值为连续读取9比特,即取110001110,步骤S1中,L=299,R=510,MPS=1,σ=0,cumula_de=10,de_length=0。
通过对所述第一区间长度R1进行量化,获得区间索引值ρ,其中,量化方法采用(R>>6)&3;依据上例,则有ρ=(510>>6)&3,510的二进制表示为0x111111110,右移动6位后为0x000000111,与3(即0x000000111)与位运算后,可得ρ为3。
根据所述概率索引值σ和所述区间索引值ρ,查找一预设的二维查找表rangeTab,获取所述子区间长度RLPS。依据上例,则有RLPS=rangeTab[σ][ρ],为240。
获取所述第一区间长度R1与所述子区间长度RLPS的差值,作为所述第二区间长度R2。依据上例,R2=R1-RLPS,所述第二区间长度R2为270,即每编码1bit的所述待解码文件,都要减去较小概率值的概率区间。
获取所述区间偏移值L与所述第二区间长度R2的差值,作为所述子区间偏移值LLPS,LLPS=L-R,依据上例,所述子区间偏移值LLPS为29。
规则解码(DecodeDecision)的二进制算术解码和归一化过程主要包括比较、减法、查表、移位操作。在H.264中,因为CABAC根据所述概率索引值跳转的计算过程比较复杂,用所述二维查找表中存放预先计算好的乘法结果,在实际使用时,只需要用概率索引值的下标,快速查表即可获取。为了减少计算的复杂度,首先建立一个64×4的二维的表格,即所述二维查找表rangeTab[64][4],如下表1所示。
用所述二维查找表rangeTab存放预先计算好的乘法结果,表格的入口参数为当前概率索引值σ(表中表示为pStateIdx)和当前区间索引值ρ(表中表示为qCodRangeIdx)。
本申请的芯片实现过程均采用Verilog HDL语言实现,但应该认识到的是,对硬件设计语言的选择不可理解为对本申请的限制。
表1二维查找表
S2、对所述二进制码流数据进行二进制算术解码,其中,所述二进制算术解码包括根据所述区间偏移值L、所述第二区间长度R2、所述第一概率符号MPS获取解码结果;S3、对所述二进制码流数据进行重归一化,其中,所述重归一化包括预判所述第二区间长度R2或所述子区间长度RLPS大于预设长度值的循环移位个数,并根据所述子区间偏移值LLPS进行重归一化运算;其中,步骤S2与步骤S3并行进行,即对所述二进制码流数据并行进行二进制算术解码和重归一化。根据流程图的制图规范,本领域技术人员可以理解的是,图2中两根平行线表示并行运算,图中菱形图框表示判断框。
具体的,所述步骤S2进一步包括:
判断所述区间偏移值L是否大于或等于所述第二区间长度R2(L>=R2);
若所述区间偏移值L大于或等于所述第二区间长度R2,则对所述第一概率符号MPS进行二进制取反(!MPS),获取解码结果bin_output并存储,当所述概率索引值σ大于零时,更新所述第一概率符号MPS(MPS=1-MPS),并用σ=transldxLPS[σ]更新所述概率索引值σ,否则直接用σ=transldxLPS[σ]更新所述概率索引值σ。即获取下一个解码过程中的上下文模型。其中,transldxLPS是预设的概率跳转表,本领域技术人员能很容易地获取所述概率跳转表的相关内容,不可认为是对本申请的限制,在此不做赘述。
若所述区间偏移值L小于所述第二区间长度R2,则获取所述第一概率符号MPS作为解码结果bin_output并存储,并用σ=transldxLPS[σ]更新所述概率索引值σ,即获取下一个解码过程中的上下文模型。
更新所述比特数累加值de_length,对其进行自增操作(de_length=de_length+1);判断所述比特数累加值de_length是否小于预设位宽width(de_length<width)。
进一步,根据本领域公知,若所述比特数累加值de_length小于所述预设位宽width,则返回步骤S12继续解码,其中第一区间长度R1的值使用经过所述步骤S3更新后的结果;否则解码结束,输出解码结果bin_output。输出按照规定的H.264标准输出,必要的情况下,需要进行反二进制过程。
依上例,所述区间偏移值L为299,所述第二区间长度R2为270,满足L>R2,则解码结果bin_output为第一概率符号MPS取反,值为零。经判断,当前概率索引值σ为零,则将第一概率符号MPS取反,更新为0,通过查询概率状态表,更新概率索引值σ,更新后的概率索引值σ为0,增加比特数累加值de_length。
具体的,所述步骤S3进一步包括:判断所述区间偏移值L是否小于所述第二区间长度R2,并根据判断结果执行相应的重归一化运算。重归一化过程的本质,即是更新所述区间偏移值L和所述第二区间长度R2。
当所述区间偏移值L小于所述第二区间长度R2时,所述重归一化运算进一步包括:根据所述第二区间长度R2,获取相应的第一循环移位个数Rcnt1;判断所述第二区间长度R2是否小于所述预设长度值256(R2<256);若所述第二区间长度R2小于256,则根据所述第一循环移位个数Rcnt1,通过对所述第二区间长度R2进行左移操作后,获取新的所述第一区间长度R1(R1=R2<<Rcnt1),并根据所述第一循环移位个数Rcnt1以及所述子区间偏移值LLPS更新所述区间偏移值L(L=LLPS<<Rcnt1);判断所述比特数累加值de_length是否小于预设位宽width;若所述第二区间长度R2大于或等于256,则直接执行判断所述比特数累加值de_length是否小于预设位宽的操作。即,在引入第一循环移位个数之前,重归一化过程为在待解码文件bin_compfile中读取1个bit,并与区间偏移值L按位取或运算并更新到所述区间偏移值L;引入第一循环移位个数Rcnt1后,通过对所述区间偏移值L的左移操作,可以一次性获得更新后的结果。若所述第二区间长度R2大于或等于所述预设长度256,则不需要进行重归一化。
当所述区间偏移值L大于或等于第二所述区间长度R2时,所述重归一化运算进一步包括:根据所述子区间长度RLPS,获取相应的第二循环移位个数Rcnt2;判断所述子区间长度RLPS是否小于所述预设长度256;若所述子区间长度RLPS小于256,则根据所述第二循环移位个数Rcnt2以及所述子区间长度RLPS更新所述第二区间长度R2后获取新的所述第一区间长度R1(R1=RLPS<<Rcnt2),并根据所述第二循环移位个数Rcnt2以及所述子区间偏移值LLPS,更新所述区间偏移值L(L=LLPS<<Rcnt2);若所述第二子区间长度R2大于或等于所述预设长度,则根据所述子区间长度RLPS更新所述第二区间长度R2后获取新的所述第一区间长度R1(R1=RLPS)、根据所述子区间偏移值LLPS更新所述区间偏移值L(L=RLPS),并进一步执行判断所述比特数累加值de_length是否小于预设位宽的操作。
依上例,区间偏移值L为299,第二区间长度R2为270,满足L>R2,计算第二循环移位个数Rcnt2,其中第二循环移位个数Rcnt2应满足使得当前子区间长度RLPS大于256,计算可得Rcnt2为1。通过左移操作更新子区间长度RLPS,为480。经判断,本例中比特数计数值cumula_de(值为10)以及比特数计数值cumula_de与第二循环移位个数Rcnt2的和(值为11),均小于码流数据长度comptile_length(此数据在步骤S11进行初始化设置),则根据所述第二循环移位个数R2和所述子区间偏移值LLPS,以及比特数计数值cumula_de和待解码文件bin_compfile更新所述区间偏移值L,为59。
重归一化的具体操作除了引入循环移位个数进行预判、以及加入了子区间偏移值LLPS外,和常规的重归一化方法大致类似。对于未详尽描述的一般操作流程,本技术领域人员完全可以理解此步骤的具体运算过程,在此不做赘述。
本申请解码流程中增加变量子区间偏移值LLPS用于重归一化的计算,在获取解码参数的步骤进行计算,节省解码与重归一化的时间。现有解码流程需要顺序执行,即进行解码后、再进行重归一化。本申请优化流程将解码与重归一化并行计算,节省硬件化实现的解码时间,实现解码1bit码流只用1个时钟的时间。
本申请实施例用于压缩过程中节省存储空间的同时,解码过程对于时间的需求也有所节省,从而解码过程的时序问题,满足实时解压的需求。优化后的算术解码流程可以达到一个时钟解码1bit码流数据。
硬件化实现时,解码流程第一步计算主要采用查找表和简单的移位与减法计算,最大限度的节省计算时间,同时在优化解码流程中,在传统流程中提前进行了LLPS=L-R的计算,便于解码与重归一化的并行操作,而不是传统流程中的串行计算,最大限度的节省了计算时间。为保证重归一化与解码计算同时计算完成,在重归一化计算过程中,新增加循环移位数Rcnt1或Rcnt2的计算,将传统中使RLPS>256的计算需要多次移位迭代,进行一步预判操作,从而实现重归一化与解码同时完成计算,便于硬件化实现流水线操作,进一步节省时间。
作为对比,图3为现有传统的CABAC算术解码的解码流程。如图3所示,CABAC的解码过程总体可以分为三个部分:步骤S301读入二进制码流数据并进行初始化、步骤S302二进制算术解码、步骤S303重归一化。
具体地,步骤S301中读入二进制码流数据包括待解码文件bin_compfile、预设位宽width、码流数据长度comptile_length、二维查找表rangeTab(可参考上表1);初始化后获取的解码参数包括:算术解码的比特数累加值de_length,读入二进制码流数据中待解码文件bin_compfile的比特数计数值cumula_de,第一概率符号MPS,区间长度R,区间偏移值L,概率索引值σ,区间索引值ρ。其中,所述第一概率符号MPS为二进制串(即待解码文件bin_compfile)中出现概率较大的符号(即较大概率符号);所述区间偏移值L为概率区间的起始位置,其通过读取待解码文件bin_compfile中{1:9}9bit,化成十进制数值获得;所述概率区间划分成0~63共64种状态,所述概率索引值σ表示所述概率区间处于第几状态,是所述二维查找表rangeTab以及所述概率迁移表transIdxLps的一个入口参数;所述区间索引值ρ是所述二维查找表rangeTab的另一个入口参数。
步骤S302展示了规则解码(DecodeDecision)过程。具体的,获取区间索引值ρ、子区间长度RLPS,更新所述区间长度R;判断所述区间偏移值L是否大于或等于更新后的所述区间长度R(L>=R?);若L>=R,则获取相应的解码结果bin_output并存储,并更新所述区间偏移值L、将所述子区间长度RLPS赋值给所述区间长度R、更新所述第一概率符号MPS以及所述概率索引值σ;若L<R,则获取相应的解码结果bin_output并存储,并更新所述概率索引值σ;更新所述比特数累加值de_length。
步骤S303展示了重归一化过程。具体的,判断赋值后的所述区间长度R是否小于256(R<256?);若R<256,则对所述区间长度R进行循环移位,否则直接执行判断所述比特数累加值de_length是否小于预设位宽width的操作;在对所述区间长度R进行循环移位后,进一步判断所述比特数计数值cumula_de是否小于或等于所述码流数据长度comptile_length(cumula_de<=comptile_length?),若是,则对所述区间偏移值L进行循环移位及更新,以及进行cumula_de自增,之后返回继续判断”R<256?”;若cumula_de>comptile_length,则仅对所述区间偏移值L进行循环移位及更新后返回继续判断”R<256?”。在判断所述比特数累加值de_length是否小于预设位宽width(de_length<width?)的操作中,若de_length<width则返回继续执行步骤302,否则输出解码结果bin_output。
图3所示现有传统的CABAC算术解码的解码流程,整个解码流程硬件化实现过程复杂,计算按照二进制比特顺序进行,串行化要求高,导致计算复杂度增加。在解高清码流时,无法完成实时解码的任务。
基于同一发明构思,本申请还提供了一种熵解码装置,本申请的熵解码装置可视作一种CABAC硬件加速器。
请参阅图4,本申请的熵解码装置的结构框图。如图4所示,本申请熵解码装置4包括:解码参数获取单元41、二进制算术解码单元42以及重归一化单元43。
所述解码参数获取单元41用于读入二进制码流数据,获取解码参数。其中所述解码参数包括:第一区间长度R1、区间偏移值L、算术解码的比特数累加值de_length、第一概率符号MPS、第二概率符号LPS对应的子区间长度RLPS、第二概率符号LPS对应的子区间偏移值LLPS,以及第二区间长度R2,其中,所述第二区间长度R2为根据所述子区间长度RLPS更新所述第一区间长度R1所获取的区间长度。
所述二进制算术解码单元42用于根据所述区间偏移值L、所述第二区间长度R2、所述第一概率符号MPS获取解码结果。
所述重归一化单元43用于预判所述第二区间长度R2或所述子区间长度RLPS大于预设长度值的循环移位个数,并根据所述子区间偏移值LLPS进行重归一化运算。
其中,所述二进制算术解码单元42与所述重归一化单元43被所述解码参数获取单元41同时调用,以并行执行对所述二进制码流数据的二进制算术解码和重归一化。
本申请的熵解码装置可采用查找表的形式将数据预先存入,节省解码计算时间;在所述重归一化单元增加部分变量运算,在解码第一步进行,节省重归一化的时间;同时,使原来串行实现变为并行实现,节省硬件化后的时间需求,实现解码1bit码流只用1个时钟的时间;解码与重归一化同时计算结束进入下一码流的计算,便于硬件化流水线方式实现。
基于同一发明构思,本申请还提供了一种电子设备。
请参阅图5,本申请的电子设备的结构示意图。如图5所示,本申请电子设备5包括:存储器51和处理器52,所述存储器51存储有计算机可执行指令,当所述计算机可执行指令被所述处理器52执行时,使得本申请所述熵解码方法被执行。
具体的,当所述计算机可执行指令被所述处理器52执行时,使得所述处理器51执行上述方法的步骤:S1、读入二进制码流数据,获取解码参数,其中所述解码参数包括:第一区间长度R1、区间偏移值L、算术解码的比特数累加值de_length、第一概率符号MPS、第二概率符号LPS对应的子区间长度RLPS、第二概率符号LPS对应的子区间偏移值LLPS,以及第二区间长度R2;S2、对所述二进制码流数据进行二进制算术解码,其中,所述二进制算术解码包括根据所述区间偏移值L、所述第二区间长度R2、所述第一概率符号MPS获取解码结果;S3、对所述二进制码流数据进行重归一化,其中,所述重归一化包括预判所述第二区间长度R2或所述子区间长度RLPS大于预设长度值的循环移位个数,并根据所述子区间偏移值LLPS进行重归一化运算;其中,步骤S2与步骤S3并行进行,即对所述二进制码流数据并行进行二进制算术解码和重归一化。
如图5所示,显示装置中的处理器51和存储器52可以通过总线或其他方式连接,图中以通过总线连接为例。
存储器52作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本申请实施例中的熵解码方法对应的程序指令/模块(例如,如图4所示的各个模块)。处理器51通过运行存储在存储器52中的软件程序、指令以及模块,从而执行服务器的各种功能应用以及数据处理,即实现上述的熵解码方法。
本实施例提出的电子设备与上述实施例提出的熵解码方法属于同一发明构思,未在本实施例中详尽描述的技术细节可参见上述实施例,并且本实施例具备执行熵解码方法相同的有益效果。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
以上对本申请实施例所提供的一种熵解码方法和装置、电子设备进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的技术方案及其核心思想;本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例的技术方案的范围。
Claims (6)
1.一种熵解码方法,其特征在于,所述方法包括如下步骤:
读入二进制码流数据,获取解码参数,其中所述解码参数包括:第一区间长度、区间偏移值、算术解码的比特数累加值、第一概率符号、第二概率符号对应的子区间长度、第二概率符号对应的子区间偏移值,以及第二区间长度,其中,所述第二区间长度为根据所述子区间长度更新所述第一区间长度所获取的区间长度;
对所述二进制码流数据并行进行二进制算术解码和重归一化,所述二进制算术解码包括根据所述区间偏移值、所述第二区间长度、所述第一概率符号获取解码结果;所述重归一化包括预判所述第二区间长度或所述子区间长度大于预设长度值的循环移位个数,并根据所述子区间偏移值进行重归一化运算;
获取所述第一区间长度与所述子区间长度的差值,作为所述第二区间长度;
获取所述区间偏移值与所述第二区间长度的差值,作为所述子区间偏移值;
其中,所述的读入二进制码流数据,获取解码参数的步骤进一步包括:
对所述二进制码流数据进行初始化,获取第一区间长度、区间偏移值、第一概率符号以及概率索引值;
根据所述第一区间长度获取区间索引值,根据所述概率索引值和所述区间索引值获取所述子区间长度,根据所述子区间长度更新所述第一区间长度获取所述第二区间长度,以及根据所述区间偏移值和所述第二区间长度获取所述子区间偏移值;
其中,所述重归一化进一步包括:判断所述区间偏移值是否小于所述第二区间长度,并根据判断结果执行相应的重归一化运算;
当所述区间偏移值小于所述第二区间长度时,所述重归一化运算进一步包括:根据所述第二区间长度,获取相应的第一循环移位个数;判断所述第二区间长度是否小于所述预设长度值;若所述第二区间长度小于所述预设长度值,则根据所述第一循环移位个数更新所述第二区间长度后获取新的所述第一区间长度,并根据所述第一循环移位个数以及所述子区间偏移值更新所述区间偏移值;若所述第二区间长度大于或等于所述预设长度值,则执行判断所述比特数累加值是否小于预设位宽的操作;
当所述区间偏移值大于或等于所述第二区间长度时,所述重归一化运算进一步包括:根据所述子区间长度,获取相应的第二循环移位个数;判断所述子区间长度是否小于所述预设长度;若所述子区间长度小于所述预设长度,则根据所述第二循环移位个数以及所述子区间长度更新所述第二区间长度后获取新的所述第一区间长度,并根据所述第二循环移位个数以及所述子区间偏移值,更新所述区间偏移值;若所述子区间长度大于或等于所述预设长度,则根据所述子区间长度更新所述第二区间长度后获取新的所述第一区间长度、根据所述子区间偏移值更新所述区间偏移值,并进一步执行判断所述比特数累加值是否小于预设位宽的操作。
2.如权利要求1所述的方法,其特征在于,所述的对所述二进制码流数据进行初始化,获取第一区间长度、区间偏移值、第一概率符号以及概率索引值的步骤进一步包括:获取所述二进制码流数据中待解码文件的比特数计数值,以及预先计算设置二维查找表;其中,所述二维查找表的入口参数为概率索引值和区间索引值。
3.如权利要求1所述的方法,其特征在于,所述的根据所述第一区间长度获取区间索引值,根据所述概率索引值和所述区间索引值获取所述子区间长度,根据所述子区间长度更新所述第一区间长度获取所述第二区间长度,以及根据所述区间偏移值和所述第二区间长度获取所述子区间偏移值的步骤进一步包括:
对所述第一区间长度进行量化,获取所述区间索引值;
根据所述概率索引值和所述区间索引值,查找一预设的二维查找表,获取所述子区间长度。
4.如权利要求1所述的方法,其特征在于,所述解码参数进一步包括:概率索引值,所述二进制算术解码进一步包括:
判断所述区间偏移值是否大于或等于所述第二区间长度;
若所述区间偏移值大于或等于所述第二区间长度,则对所述第一概率符号进行二进制取反,获取解码结果并存储,并更新所述第一概率符号以及所述概率索引值;
若所述区间偏移值小于所述第二区间长度,则获取所述第一概率符号作为解码结果并存储,并更新所述概率索引值;
更新所述比特数累加值,并执行判断所述比特数累加值是否小于预设位宽的操作。
5.一种熵解码装置,其特征在于,所述装置包括:
解码参数获取单元,用于读入二进制码流数据,获取解码参数,其中所述解码参数包括:第一区间长度、区间偏移值、算术解码的比特数累加值、第一概率符号、第二概率符号对应的子区间长度、第二概率符号对应的子区间偏移值,以及第二区间长度,其中,所述第二区间长度为根据所述子区间长度更新所述第一区间长度所获取的区间长度;
二进制算术解码单元,用于根据所述区间偏移值、所述第二区间长度、所述第一概率符号获取解码结果;
重归一化单元,用于预判所述第二区间长度或所述子区间长度大于预设长度值的循环移位个数,并根据所述子区间偏移值进行重归一化运算;
其中,所述二进制算术解码单元与所述重归一化单元被所述解码参数获取单元同时调用,以并行执行权利要求1至4中任一项所述的熵解码方法对所述二进制码流数据的二进制算术解码和重归一化。
6.一种电子设备,包括存储器和处理器,其特征在于,所述存储器存储有计算机可执行指令,当所述计算机可执行指令被所述处理器执行时,使得如权利要求1至4中任一项所述方法被执行。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010635715.XA CN111818335B (zh) | 2020-07-03 | 2020-07-03 | 一种熵编码方法和装置、电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010635715.XA CN111818335B (zh) | 2020-07-03 | 2020-07-03 | 一种熵编码方法和装置、电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111818335A CN111818335A (zh) | 2020-10-23 |
CN111818335B true CN111818335B (zh) | 2022-04-26 |
Family
ID=72855365
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010635715.XA Active CN111818335B (zh) | 2020-07-03 | 2020-07-03 | 一种熵编码方法和装置、电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111818335B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113905233B (zh) * | 2021-09-30 | 2024-04-30 | 安谋科技(中国)有限公司 | 基于音频视频编码标准的熵解码方法、可读介质及其电子设备 |
CN115334313A (zh) * | 2022-06-22 | 2022-11-11 | 百果园技术(新加坡)有限公司 | 一种视频解码方法、装置、设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008118303A (ja) * | 2006-11-01 | 2008-05-22 | Canon Inc | 復号装置及び復号方法 |
CN101198051A (zh) * | 2006-12-07 | 2008-06-11 | 深圳艾科创新微电子有限公司 | 基于h.264的熵解码器的实现方法及装置 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101841707B (zh) * | 2010-03-19 | 2012-01-04 | 西安电子科技大学 | 基于jpeg2000标准的高速实时处理算术熵编码方法 |
CN101848388B (zh) * | 2010-03-19 | 2012-01-04 | 西安电子科技大学 | 基于jpeg2000标准的算术编码码值归一化方法 |
CN102231830B (zh) * | 2010-11-23 | 2013-04-17 | 浙江大学 | 用于上下文算术编解码的运算单元 |
KR101726274B1 (ko) * | 2011-02-21 | 2017-04-18 | 한국전자통신연구원 | 병렬 엔트로피 부호화/복호화 방법 및 장치 |
CN102438140B (zh) * | 2011-06-02 | 2013-07-31 | 东南大学 | 一种用于图像压缩的算术编码器顺序重归一化方法 |
CN109587483B (zh) * | 2015-12-31 | 2020-11-20 | 杭州士兰微电子股份有限公司 | 码流提取模块 |
CN108401158B (zh) * | 2017-02-07 | 2021-01-22 | 深圳市中兴微电子技术有限公司 | 一种上下文自适应二元算术编码重归一化实现方法和装置 |
CN108965878B (zh) * | 2017-05-27 | 2019-11-15 | 深圳市中兴微电子技术有限公司 | 一种熵解码方法及装置 |
-
2020
- 2020-07-03 CN CN202010635715.XA patent/CN111818335B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008118303A (ja) * | 2006-11-01 | 2008-05-22 | Canon Inc | 復号装置及び復号方法 |
CN101198051A (zh) * | 2006-12-07 | 2008-06-11 | 深圳艾科创新微电子有限公司 | 基于h.264的熵解码器的实现方法及装置 |
Non-Patent Citations (1)
Title |
---|
基于重归一化的CABAC算法改进;商世广等;《信息技术》;20180918(第09期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN111818335A (zh) | 2020-10-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5045852A (en) | Dynamic model selection during data compression | |
KR100648258B1 (ko) | 고속의 디코딩을 수행하는 파이프라인 구조의 내용 기반적응적 이진 산술 디코더 | |
US7821430B2 (en) | Arithmetic decoding apparatus | |
US7982641B1 (en) | Context-based adaptive binary arithmetic coding engine | |
KR101118089B1 (ko) | 가변장 복호화 장치 및 방법 | |
CN111818335B (zh) | 一种熵编码方法和装置、电子设备 | |
RU2595916C1 (ru) | Кодер, декодер и способ | |
KR102123620B1 (ko) | 대용량 병렬 처리를 위해 비디오 신호를 엔트로피 인코딩 또는 엔트로피 디코딩하는 방법 및 장치 | |
Nikara et al. | Multiple-symbol parallel decoding for variable length codes | |
Kim et al. | High speed decoding of context-based adaptive binary arithmetic codes using most probable symbol prediction | |
JP2009021775A (ja) | 符号化装置及び符号化方法 | |
WO2024037091A1 (zh) | 一种点云处理方法、装置及计算机设备、存储介质 | |
CN112449191B (zh) | 压缩多个图像的方法、解压缩图像的方法和装置 | |
US8970405B2 (en) | Method and apparatus for entropy decoding | |
CN112422987B (zh) | 适用于avc的熵解码硬件并行计算方法及应用 | |
CN112449201B (zh) | 解码方法、编码方法、相应的装置、电子设备及存储介质 | |
Saidani et al. | Implementation of JPEG 2000 MQ-coder | |
Bingbo et al. | A high-performance VLSI architecture for CABAC decoding in H. 264/AVC | |
CN112073729B (zh) | 模型更新方法、装置、电子设备及计算机可读存储介质 | |
JP4936574B2 (ja) | 符号化装置及びその制御方法 | |
CN116828196A (zh) | 一种基于fpga的jpeg-ls编码器的实现方法 | |
KR20180031944A (ko) | 비디오 디코더 및 이를 포함하는 전자 시스템 | |
KR102109768B1 (ko) | Uhd 영상의 고속 처리를 위한 cabac 이진 산술 부호화기 | |
CN102263960B (zh) | 一种快速解码cavlc非零系数幅值的方法 | |
CN113489979A (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 |