一种基于HEVC的低周期CABAC解码器及其解码方法与流程

文档序号:14844496发布日期:2018-06-30 14:42阅读:195来源:国知局
一种基于HEVC的低周期CABAC解码器及其解码方法与流程
本发明属于视频编解码技术的熵解码
技术领域
,具体的说是一种适用于HEVC的低周期CABAC解码器及其解码方法。
背景技术
:随着目前科学技术的不断发展,信息技术和计算机互联网分别在不同程度改变了人们的日常的生活。如今,人们对于高清视频并且占用空间小的要求越来越强烈,视频编解码就越显得重要。HEVC(HighEfficiencyVideoCoding,HEVC)是高效率视频编解码标准,是国际电信联盟电信标准分局的视频编码专家组和ISO/IEC的动态图像专家组联合提出的最新视频编码标准。CABAC(ContextAdaptiveBinaryArithmeticCoding,CABAC)是针对HEVC中主要档次的自适应二进制算术编码,是一种优良的数据压缩方法,是HEVC唯一的熵编解码方法,并且熵编解码在HEVC整体编解码过程中占据25%以上的时间开销。对于一般的视频序列,据统计残差变换系数熵编解码占整个熵编解码的60~86%,所以对残差变换系数熵解码优化很有必要。现有技术中,熵解码电路已经得到很大的提高,2016年孙皓的论文“HEVC码流解析与熵解码模块的研究与设计”对熵解码电路的研究比较详细,但还存在以下不足:1、在对残差解码的过程中,扫描最后一个非零系数位置坐标占用了很多周期数,降低了时钟利用率;2、码流解析状态机设计时,对算术解码中的常规解码和旁路解码使用两种状态机,两种状态机之间频繁的跳转浪费时钟周期,降低了熵解码器的速度;3、由于残差解码过程中的扫描算法和算术解码中的状态机的频繁跳转,导致整个CABAC解码电路浪费时间周期,降低了实际工作效率;技术实现要素:本发明为克服现有HEVC标准中CABAC熵解码器时钟周期多、时钟利用率低、速度慢的问题,提出了一种基于HEVC标准的CABAC解码器及其解码方法,旨在减少熵解码过程中不必要的周期数,提高熵解码器的时钟利用率,进而提高解码器的速度,并保证解码数据的正确性。本发明为达到上述目的所采用的技术方案是:本发明一种基于HEVC的低周期CABAC解码电路的特点是包括:码流缓冲模块、上下文初始化模块、上下文存储模块、上下文索引生成模块、总控模块、算术解码模块、反二值化模块;所述总控模块包括:解码状态控制模块和残差预测模块;所述算术解码模块包括:常规算术解码模块、旁路算术解码模块;所述码流缓冲模块读取外部的码流存储器ROM中存储的码流并存储到自身的高位寄存器和低位寄存器中,并接收所述算术解码模块解码传递的码流长度比特数,从而根据所述码流长度比特数按照高位寄存器到低位寄存器的顺序交替地输出变长的码流给所述算术解码模块;所述上下文初始化模块根据HEVC标准协议中每个语法元素的初始化值和HEVC标准协议中的初始化方法得到上下文变量的大概率符号值表和概率状态索引表并发送给所述上下文存储模块进行存储;再将初始化完成标志发送给所述解码状态控制模块;所述残差预测模块根据HEVC标准协议中所定义的变换块,将所述变换块中的子变换块之间的坐标(xS,yS)分别用查找表的形式与不同扫描方式下的lastSubBlock值一一对应起来;将所述变换块中的子变换块的内部坐标(xC,yC)分别用查找表的形式与不同扫描方式下的lastScanPos值一一对应起来;所述解码状态控制模块在初始状态下接受所述初始化完成标志,并根据配置好的视频码流参数集的参数在码流顺序解析状态机中进行八个解码状态的转移,即在每个解码状态下,通过多路选择器将相对应的语法元素状态标识和反二值化模式发送给所述反二值化模块,并根据HEVC标准协议将常规算数解码模式所属的解码状态对应的信息参数和解码状态标识发送给所述上下文索引生成模块;若所述解码状态控制模块在解码状态中的预测状态下,则根据HEVC标准协议向所述残差预测模块发送不同扫描方式下的扫描类型索引scanIdx和变换块大小;所述上下文索引生成模块根据所接收的信息参数和解码状态标识,得到上下文索引偏移量ctxIdxOffset和上下文索引偏移量增量ctxInc,从而生成上下文索引ctxidx并发送给所述上下文存储模块;所述上下文存储模块在所述大概率符号值表和概率状态索引表中获取与所述上下文索引ctxidx相对应的大概率符号值valMPS和概率状态索引pstateIdx并发送给所述常规算术解码模块;所述反二值化模块根据所接收的语法元素状态标识判断当前算数解码模式,若当前算数解码模式为常规算数解码模式,则发送常规算数解码模式信号给所述算数解码模块;若当前算数解码模式为旁路算数解码模式,则发送旁路算数解码模式信号给所述算数解码模块;若当前算数解码模式为终止算数解码模式,则发送终止算数解码模式信号给所述算数解码模块;所述算数解码模块若接收所述常规算数解码模式信号,则将所述当前变长的码流传递给所述常规算术解码模块;若接收所述旁路算数解码模式信号,则将所述当前变长的码流传递给旁路算术解码模块;若接收所述终止算数解码模式信号,则将所述当前变长的码流传递给终止算术解码模块;所述常规算术解码模块根据所接收到的大概率符号值valMPS和概率状态索引pstateIdx对所述变长的码流进行解析,得到解码二进制值并传递给所述反二值化模块;同时根据HEVC标准协议更新与所述大概率符号值valMPS和概率状态索引pstateIdx相对应的上下文索引ctxidx并反馈给所述上下文存储模块;所述旁路算术解码模块或所述终止算数解码模块对所接收到的变长的码流进行解码,得到解码二进制值并传递给所述反二值化模块;所述反二值化模块根据所接收的语法元素状态标识和反二值化模式,将解码二进制值转换为当前解码状态下变长的码流的实际值,并发送给所述解码状态控制模块;若当前解码状态为预测状态,则将解码二进制值转换为最后一个非零系数的位置坐标(x,y),并发送给所述残差预测模块;所述解码状态控制模块接收所述当前解码状态下变长的码流的实际值得到下一个解码状态,从而进行八个解码状态的转移;所述残差预测模块在预测状态下根据所接收的最后一个非零系数的位置坐标(x,y)得到所述子变换块之间的坐标(xS,yS)和子变换块的内部坐标(xC,yC);再根据所述扫描类型索引scanIdx、变换块大小和坐标(xS,yS),选择相应扫描方式下的lastSubBlock值并发送给解码状态控制模块;同时根据所述扫描类型索引scanIdx、变换块大小和内部坐标(xC,yC),选择相应扫描方式下的lastScanPos值并发送给解码状态控制模块;所述解码状态控制模块在预测状态下根据所接收的相应扫描方式下的lastSubBlock值和lastScanPos值判断下一个解码状态,从而进行八个解码状态的转移。本发明一种基于HEVC的低周期CABAC解码方法的特点是按如下步骤进行:步骤1、将外部的码流存储器ROM中存储的码流存储到高位寄存器和低位寄存器中,并根据码流长度比特数按照高位寄存器到低位寄存器的顺序交替地输出变长的码流;步骤2、根据HEVC标准协议中每个语法元素的初始化值和HEVC标准协议中的初始化方法得到上下文变量的大概率符号值表和概率状态索引表,同时生成初始化完成标志;步骤3、根据HEVC标准协议中所定义的变换块,将所述变换块中的子变换块之间的坐标(xS,yS)分别用查找表的形式与不同扫描方式下的lastSubBlock值一一对应起来;将所述变换块中的子变换块的内部坐标(xC,yC)分别用查找表的形式与不同扫描方式下的lastScanPos值一一对应起来;步骤4、在初始状态下,根据所述初始化完成标志以及配置好的视频码流参数集的参数在码流顺序解析状态机中进行八个解码状态的转移,包括:在每个解码状态下,通过多路选择器选择相对应的语法元素状态标识和反二值化模式,并根据HEVC标准协议得到常规算数解码模式所属的解码状态对应的信息参数和解码状态标识;其中,若当前解码状态为预测状态,则根据HEVC标准协议得到不同扫描方式下的扫描类型索引scanIdx和变换块大小;步骤5、根据所述信息参数和解码状态标识,得到上下文索引偏移量ctxIdxOffset和上下文索引偏移量增量ctxInc,从而生成上下文索引ctxidx;步骤6、在所述大概率符号值表和概率状态索引表中获取与所述上下文索引ctxidx相对应的大概率符号值valMPS和概率状态索引pstateIdx;步骤7、根据所述语法元素状态标识判断当前算数解码模式,若当前算数解码模式为常规算数解码模式,则根据所接收到的大概率符号值valMPS和概率状态索引pstateIdx对所述变长的码流进行解析,得到解码二进制值;同时根据HEVC标准协议更新与所述大概率符号值valMPS和概率状态索引pstateIdx相对应的上下文索引ctxidx;若当前算数解码模式为旁路算数解码模式或为终止算数解码模式,则直接对所述变长的码流进行解码,得到解码二进制值;步骤8、根据所述语法元素状态标识和反二值化模式,将解码二进制值转换为当前解码状态下变长的码流的实际值;若当前解码状态为预测状态,则将解码二进制值转换为最后一个非零系数的位置坐标(x,y);步骤9、根据当前解码状态下变长的码流的实际值得到下一个解码状态,从而进行八个解码状态的转移;若当前解码状态为预测状态,则根据所述最后一个非零系数的位置坐标(x,y)得到所述子变换块之间的坐标(xS,yS)和子变换块的内部坐标(xC,yC);再根据所述扫描类型索引scanIdx、变换块大小和坐标(xS,yS),选择相应扫描方式下的lastSubBlock值,同时根据所述扫描类型索引scanIdx、变换块大小和内部坐标(xC,yC),选择相应扫描方式下的lastScanPos值;从而根据相应扫描方式下的lastSubBlock值和lastScanPos值判断下一个解码状态用于八个解码状态的转移。与现有技术相比,本发明的有益技术效果体现在:1、本发明提出的适用于HEVC标准的CABAC解码器,通过快速查找方法来实现了最后一个非零系数位置坐标的扫描算法,且在码流解析状态机设计时,对算术解码中的常规解码和旁路解码仅使用一种状态机,分别减少了最后一个非零系数位置坐标的扫描周期和两种状态机之间频繁跳转产生的时钟周期,进而提高了CABAC解码器的时钟利用率,从而提高了熵解码器的速度,并保证了解码数据的正确性。2、本发明提出的快速查找方法用于实现最后一个非零系数位置坐标的扫描算法,减少了最后一个非零系数位置坐标的扫描周期,从而有效提高了CABAC解码器的时钟利用率。3、本发明提出的码流顺序解析状态机,对算术解码中的常规解码和旁路解码仅使用一种状态机,减少了两种状态机之间频繁跳转产生的时钟周期,减少了时钟周期的浪费,提高了时钟周期利用率,从而提高了CABAC解码器的解码速度。附图说明图1本发明CABAC解码器框架图;图2本发明码流缓冲模块电路图;图3本发明最后一个非零系数位置查找表电路图;图4本发明解码状态控制模块状态图;图5本发明上下文索引生成模块关键电路图;图6本发明算术解码模块电路图;图7本发明与现有技术的总周期对比图;图8本发明与现有技术的最后一个非零位置扫描周期占比对比图;图9本发明与现有技术的资源消耗对比图。具体实施方式本实施例中,基于HEVC的低周期CABAC解码电路的功能为读入图像经过压缩后的二进制码流,估计各个语法元素的概率,并按照HEVC标准的解码顺序,经过算术解码,反二值化过程解码出各个语法元素的值,以供视频解码器后续解码模块(反变换,反量化等)使用;如图1所示,该解码电路主要包括:码流缓冲模块、上下文初始化模块、上下文存储模块、上下文索引生成模块、总控模块、算术解码模块、反二值化模块;其中,总控模块包括:解码状态控制模块和残差预测模块;算术解码模块包括:常规算术解码模块、旁路算术解码模块;如图2所示,码流缓冲模块读取外部的码流存储器ROM中存储的码流并存储到自身的高位寄存器和低位寄存器中,并接收算术解码模块解码传递的码流长度比特数,从而根据码流长度比特数按照高位寄存器到低位寄存器的顺序交替地输出变长的码流给算术解码模块;上下文初始化模块根据HEVC标准协议中每个语法元素的初始化值和HEVC标准协议中的初始化方法得到上下文变量的大概率符号值表和概率状态索引表并发送给上下文存储模块进行存储;再将初始化完成标志发送给解码状态控制模块;具体初始化计算方法如下:b=initValue&15c=5*a-45d=(b<<3)-16e=Clip3(1,126,((c*Clip3(0,51,QPY))>>4)+d)其中Clip3的定义如下:其中a,b,c,d,e为中间变量,QPY为亮度量化参数,x,y,z为函数变量,valMPS为大概率符号值,pstateIdx为概率状态索引,<<为左移符号,>>为右移符号;如图3所示,残差预测模块根据HEVC标准协议中所定义的变换块,将变换块中的子变换块之间的坐标(xS,yS)分别用查找表的形式与不同扫描方式下的lastSubBlock值一一对应起来;将变换块中的子变换块的内部坐标(xC,yC)分别用查找表的形式与不同扫描方式下的lastScanPos值一一对应起来;如图4所示,解码状态控制模块中的码流顺序解析状态机包含SAO单元、CQT单元、CU单元、PU单元、MVD单元、TT单元、TU单元、RC单元以及end_flag等解码状态,8个子状态分别控制SAO、CQT、CU、PU、MVD、TT、TU以及RC单元内部的语法元素。主控状态机状态转移图中各个状态和转移条件的含义分别如表1和表2所示。表1主控状态转移图中状态的含义表2主控状态转移图中转移条件含义转移条件转移条件含义1若是新的CTU2上下文初始化完成并且码流中包含SAO单元3SAO单元解码完成4上下文初始化完成并且码流中不包含SAO单元5CU单元划分标志为16PU单元存在7PU单元存在MVD单元8MVD单元解码完成9PU单元解码完成10CU单元解码完且存在TT单元11TT单元不在往下划分,且存在TU单元12存在残差单元13残差单元解码完成且slice未结束,回到CQT状态14残差单元解码完成且slice解码结束解码状态控制模块在初始状态下接受初始化完成标志,并根据配置好的视频码流参数集的参数在码流顺序解析状态机中进行八个解码状态的转移,即在每个解码状态下,通过多路选择器将相对应的语法元素状态标识和反二值化模式发送给反二值化模块,并根据HEVC标准协议将常规算数解码模式所属的解码状态对应的信息参数和解码状态标识发送给上下文索引生成模块;若解码状态控制模块在解码状态中的预测状态下,则根据HEVC标准协议向残差预测模块发送不同扫描方式下的扫描类型索引scanIdx和变换块大小;如图5所示,上下文索引生成模块根据所接收的信息参数和解码状态标识,得到上下文索引偏移量ctxIdxOffset和上下文索引偏移量增量ctxInc,根据公式ctxidx=ctxIdxOffset+ctxInc,生成上下文索引ctxidx并发送给上下文存储模块;上下文存储模块在大概率符号值表和概率状态索引表中获取与上下文索引ctxidx相对应的大概率符号值valMPS和概率状态索引pstateIdx并发送给常规算术解码模块;反二值化模块根据所接收的语法元素状态标识判断当前算数解码模式,若当前算数解码模式为常规算数解码模式,则发送常规算数解码模式信号给算数解码模块;若当前算数解码模式为旁路算数解码模式,则发送旁路算数解码模式信号给算数解码模块;若当前算数解码模式为终止算数解码模式,则发送终止算数解码模式信号给算数解码模块;如图6所示,算数解码模块若接收常规算数解码模式信号,则将当前变长的码流传递给常规算术解码模块;若接收旁路算数解码模式信号,则将当前变长的码流传递给旁路算术解码模块;若接收终止算数解码模式信号,则将当前变长的码流传递给终止算术解码模块;常规算术解码模块根据所接收到的大概率符号值valMPS和概率状态索引pstateIdx对变长的码流进行解析,得到解码二进制值并传递给反二值化模块;同时根据HEVC标准协议更新与大概率符号值valMPS和概率状态索引pstateIdx相对应的上下文索引ctxidx并反馈给上下文存储模块;旁路算术解码模块或终止算数解码模块对所接收到的变长的码流进行解码,得到解码二进制值并传递给反二值化模块;反二值化模块根据所接收的语法元素状态标识和反二值化模式,将解码二进制值转换为当前解码状态下变长的码流的实际值,并发送给解码状态控制模块;若当前解码状态为预测状态,则将解码二进制值转换为最后一个非零系数的位置坐标(x,y),并发送给残差预测模块;解码状态控制模块接收当前解码状态下变长的码流的实际值得到下一个解码状态,从而进行八个解码状态的转移;残差预测模块在预测状态下根据所接收的最后一个非零系数的位置坐标(x,y)得到子变换块之间的坐标(xS,yS)和子变换块的内部坐标(xC,yC);再根据扫描类型索引scanIdx、变换块大小和坐标(xS,yS),选择相应扫描方式下的lastSubBlock值并发送给解码状态控制模块;同时根据扫描类型索引scanIdx、变换块大小和内部坐标(xC,yC),选择相应扫描方式下的lastScanPos值并发送给解码状态控制模块;解码状态控制模块在预测状态下根据所接收的相应扫描方式下的lastSubBlock值和lastScanPos值判断下一个解码状态,从而进行八个解码状态的转移。本实施例中,一种基于HEVC的低周期CABAC解码方法是按如下步骤进行:步骤1、将外部的码流存储器ROM中存储的码流存储到高位寄存器和低位寄存器中,并根据码流长度比特数按照高位寄存器到低位寄存器的顺序交替地输出变长的码流;步骤2、根据HEVC标准协议中每个语法元素的初始化值和HEVC标准协议中的初始化方法得到上下文变量的大概率符号值表和概率状态索引表,同时生成初始化完成标志;步骤3、根据HEVC标准协议中所定义的变换块,将变换块中的子变换块之间的坐标(xS,yS)分别用查找表的形式与不同扫描方式下的lastSubBlock值一一对应起来;将变换块中的子变换块的内部坐标(xC,yC)分别用查找表的形式与不同扫描方式下的lastScanPos值一一对应起来;步骤4、在初始状态下,根据初始化完成标志以及配置好的视频码流参数集的参数在码流顺序解析状态机中进行八个解码状态的转移,包括:在每个解码状态下,通过多路选择器选择相对应的语法元素状态标识和反二值化模式,并根据HEVC标准协议得到常规算数解码模式所属的解码状态对应的信息参数和解码状态标识;其中,若当前解码状态为预测状态,则根据HEVC标准协议得到不同扫描方式下的扫描类型索引scanIdx和变换块大小;步骤5、根据信息参数和解码状态标识,得到上下文索引偏移量ctxIdxOffset和上下文索引偏移量增量ctxInc,从而生成上下文索引ctxidx;步骤6、在大概率符号值表和概率状态索引表中获取与上下文索引ctxidx相对应的大概率符号值valMPS和概率状态索引pstateIdx;步骤7、根据语法元素状态标识判断当前算数解码模式,若当前算数解码模式为常规算数解码模式,则根据所接收到的大概率符号值valMPS和概率状态索引pstateIdx对变长的码流进行解析,得到解码二进制值;同时根据HEVC标准协议更新与大概率符号值valMPS和概率状态索引pstateIdx相对应的上下文索引ctxidx;若当前算数解码模式为旁路算数解码模式或为终止算数解码模式,则直接对变长的码流进行解码,得到解码二进制值;步骤8、根据语法元素状态标识和反二值化模式,将解码二进制值转换为当前解码状态下变长的码流的实际值;若当前解码状态为预测状态,则将解码二进制值转换为最后一个非零系数的位置坐标(x,y);步骤9、根据当前解码状态下变长的码流的实际值得到下一个解码状态,从而进行八个解码状态的转移;若当前解码状态为预测状态,则根据最后一个非零系数的位置坐标(x,y)得到子变换块之间的坐标(xS,yS)和子变换块的内部坐标(xC,yC);再根据扫描类型索引scanIdx、变换块大小和坐标(xS,yS),选择相应扫描方式下的lastSubBlock值,同时根据扫描类型索引scanIdx、变换块大小和内部坐标(xC,yC),选择相应扫描方式下的lastScanPos值;从而根据相应扫描方式下的lastSubBlock值和lastScanPos值判断下一个解码状态用于八个解码状态的转移。本实施例中,在赛灵思FPGA开发板Virtex6_XC6VLX760上实现,输入视频编号如表3所示,电路运行频率为166MHz;表3总周期对比如图7所示,本设计电路在实例测试中,总周期比传统CABAC解码电路平均减少90%以上;最后一个非零位置扫描周期占比对比如图8所示,在实例测试中,传统CABAC解码电路最后一个非零位置扫描周期占比都在49%以上,仅在两个实例中分别达到了13.64%和33.22%,而本专利设计电路基本能达到熵解码周期占比在3%以下,仅有一个实例占比为7.06%;资源消耗如图9所示,传统CABAC解码电路消耗了3243个查找表,而本专利设计电路消耗了5670个查找表,传统CABAC解码电路消耗了1543位寄存器,而本专利设计电路消耗了4518位寄存器,传统CABAC解码电路消耗了5840位RAM而本专利设计电路消耗了3157位RAM,以上对比说明了和传统CABAC解码电路相比,本专利设计的面积的增加是在可接受的范围内,但是对于总周期和最后一个非零位置扫描周期的缩减效果是非常明显的。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1