基于HEVC熵编码器的集成电路设计方法与流程

文档序号:12789940阅读:来源:国知局

技术特征:

1.一种基于HEVC标准的熵编码器集成电路设计方法,包括如下步骤:

(1)创建寄存器LengthOut1、LengthOut2、csbfOut、LengthOut1Reg32、LengthOut1Reg16、LengthOut1Reg8、LengthOut2Reg32、LengthOut2Reg16、LengthOut2Reg8、CsbfReg32、CsbfReg16、CsbfReg8、Counter32、Counter16和Counter8,并将这些寄存器初始化为0;

(2)计算HEVC熵编码器用到的HEVC标准中各语法元素的二元符号Bin长度:

(2a)对当前4×4子块的二维系数进行扫描,得到当前4×4子块的一维数据;

(2b)对当前4×4子块的一维数据中非零系数的位置信息和幅值信息进行格式转化,得到多个HEVC标准中语法元素;

(2c)对HEVC标准中各语法元素进行二值化,得到当前4×4子块多个二元符号Bin长度;

(3)计算当前4×4子块的二元符号Bin串长度和全零标志位csbf的值,并将计算结果分别存储到相应的寄存器中,实现步骤为:

(3a)按照当前4×4子块与lastCG的位置关系,对当前4×4子块各二元符号Bin长度进行不同操作:

当当前4×4子块位于lastCG之前,则当前4×4子块的二元符号Bin串长度为0,将数值0分别存入寄存器LengthOut1和寄存器LengthOut2;

当当前4×4子块位于lastCG之后,对当前4×4子块中与所有非零系数幅值信息和除最后一个非零系数之外的非零系数的位置信息相关的二元符号Bin长度进行相加,并将计算结果存入寄存器LengthOut1;

当当前4×4子块位置与lastCG位置相同,对当前4×4子块中与所有非零系数幅值信息和位置信息相关的二元符号Bin长度进行相加,并将计算结果存入寄存器LengthOut2;

(3b)计算当前4×4子块所有系数的绝对值之和,并判断计算结果是否为0,若是,则当前4×4子块的全零标志位csbf的值为0,否则,当前4×4子块的全零标志位csbf的值为1,再将全零标志位csbf的值存入寄存器csbfOut;

(4)根据当前4×4子块所在TU块的规格,对当前4×4子块在TU块中的位置坐标(CGposX,CGposY)进行不同的位置格式转换操作,并将寄存器LengthOut1、寄存器LengthOut2和寄存器csbfOut存储的值分别存储到相应的寄存器中:

当当前4×4子块所在TU块的规格是TU32×32,将当前4×4子块在TU块中的位置坐标(CGposX,CGposY),转换为当前4×4子块在TU块的所有子块扫描顺序中的位置CGNum,并将寄存器LengthOut1存储的值存储到寄存器LengthOut1Reg32的CGNum位置处,将寄存器LengthOut2存储的值存储到寄存器LengthOut2Reg32的CGNum位置处,将寄存器csbfOut存储的值存储到寄存器CsbfReg32的CGNum位置处;

当当前4×4子块所在TU块的规格是TU16×16,将当前4×4子块在TU块中的位置坐标(CGposX,CGposY),转换为当前4×4子块在TU块的所有子块扫描顺序中的位置CGNum,然后将寄存器LengthOut1存储的值存储到寄存器LengthOut1Reg16的CGNum位置处,将寄存器LengthOut2存储的值存储到寄存器LengthOut2Reg16的CGNum位置处,将寄存器csbfOut存储的值存储到寄存器CsbfReg16的CGNum位置处;

当当前4×4子块所在TU块的规格是TU8×8,将当前4×4子块在TU块中的位置坐标(CGposX,CGposY),转换为当前4×4子块在TU块的所有子块扫描顺序中的位置CGNum,然后将寄存器LengthOut1存储的值存储到寄存器LengthOut1Reg8的CGNum位置处,将寄存器LengthOut2存储的值存储到寄存器LengthOut2Reg8的CGNum位置处,将寄存器csbfOut存储的值存储到寄存器CsbfReg8的CGNum位置处;

(5)根据当前4×4子块所在TU块的规格,计算TU块中已经计算得到二元符号Bin串长度的4×4子块的个数,并将不同的计算结果分别存入寄存器Counter32、Counter16和Counter8:

当当前4×4子块所在TU块的规格是TU32×32,对寄存器Counter32存储的值加1,并将计算结果存入寄存器Counter32;

当当前4×4子块所在TU块的规格是TU16×16,对寄存器Counter16存储的值加1,并将计算结果存入寄存器Counter16;

当当前4×4子块所在TU块的规格是TU8×8,对寄存器Counter8存储的值加1,并将计算结果存入寄存器Counter8;

(6)将寄存器Counter32、Counter16和Counter8的值与TU块包含的4×4子块的总数进行比较,并根据比较结果和当前4×4子块所在TU块的规格,对当前TU块的下一个4×4子块和当前TU块进行不同操作:

当寄存器Counter32小于64,且4×4子块所在TU块的规格是TU32×32时,执行步骤(2),计算当前TU块的下一个4×4子块的二元符号Bin串长度,否则执行步骤(7),计算当前TU块的二元符号Bin串长度;

当寄存器Counter16小于16,且4×4子块所在TU块的规格是TU16×16时,执行步骤(2),计算当前TU块的下一个4×4子块的二元符号Bin串长度,否则执行步骤(7),计算当前TU块的二元符号Bin串长度;

当寄存器Counter8小于4,且4×4子块所在TU块的规格是TU8×8时,执行步骤(2),计算当前TU块的下一个4×4子块的二元符号Bin串长度,否则执行步骤(7),计算当前TU块的二元符号Bin串长度;

(7)计算当前4×4子块所在不同规格的TU块的二元符号Bin串长度:

当当前4×4子块所在TU块的规格为TU32×32,根据寄存器CsbfReg32存储的值,将寄存器LengthOut1Reg32和寄存器LengthOut2Reg32中存储的多个4×4子块的二元符号Bin串长度进行相加,得到TU32×32的二元符号Bin串长度;

当当前4×4子块所在TU块的规格为TU16×16,根据寄存器CsbfReg16存储的值,将寄存器LengthOut1Reg16和寄存器LengthOut2Reg16中存储的多个4×4子块的二元符号Bin串长度进行相加,得到TU16×16的二元符号Bin串长度;

当当前4×4子块所在TU块的规格为TU8×8,根据寄存器CsbfReg8存储的值将寄存器LengthOut1Reg8和寄存器LengthOut2Reg8中存储的多个4×4子块的二元符号Bin串长度进行相加,得到TU8×8块的二元符号Bin串长度。

2.根据权利要求1所述的基于HEVC标准的熵编码器集成电路设计方法,其特征在于:步骤(2a)中所述的对当前4×4子块的二维系数进行扫描,得到当前4×4子块的一维数据,实现步骤如下:

(2a1)确定对当前4×4子块的二维系数进行扫描的方式:当前4×4子块的扫描方式ScanIdx取值为0,采用HEVC熵编码器中的对角扫描方式,取值为1,采用HEVC熵编码器中的水平扫描方式,取值为2,采用HEVC熵编码器中的垂直扫描方式;

(2a2)根据确定的扫描方式,按照当前4×4子块由右下角到左上角的顺序,从该4×4子块的最后一个系数到第一个系数逐一进行扫描,得到一维数据。

3.根据权利要求1所述的基于HEVC标准的熵编码器集成电路设计方法,其特征在于:步骤(2b)中所述的对当前4×4子块的一维数据中非零系数的位置信息和幅值信息进行格式转化,得到多个HEVC标准中语法元素,实现步骤如下:

(2b1)将当前4×4子块的一维数据中最后一个非零系数在该4×4子块中的位置坐标,转化为HEVC标准中对应的语法元素的格式;

(2b2)将当前4×4子块的一维数据中除最后一个非零系数之外的所有非零系数的位置信息,转化为HEVC标准中对应的语法元素的格式;

(2b3)将当前4×4子块的一维数据中所有非零系数的幅值信息,转化为HEVC标准中对应的语法元素的格式。

4.根据权利要求1所述的基于HEVC标准的熵编码器集成电路设计方法,其特征在于:步骤(4)中所述的根据当前4×4子块所在TU块的规格,对当前4×4子块在TU块中的坐标(CGposX,CGposY)进行不同的位置格式转换操作,实现步骤为:

(4a)计算当前4×4子块在所属TU块中所有子块按光栅扫描顺序排列中的位置CGZscanNum:

CGZscanNum=(CGposY<<ShiftNum)+CGposX

其中,ShiftNum=log2TUSize-2,TUSize表示当前4×4子块所属的TU块的规格;

(4b)将当前4×4子块在所属TU块中所有子块按光栅扫描顺序排列中的位置CGZscanNum转换为该子块在所属TU块中所有子块的扫描顺序中的位置CGNum。

当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1