[发明专利]基于HEVC熵编码器的集成电路设计方法有效
申请号: | 201710255725.9 | 申请日: | 2017-04-19 |
公开(公告)号: | CN106911935B | 公开(公告)日: | 2019-07-16 |
发明(设计)人: | 李云松;李姝仪;何刚 | 申请(专利权)人: | 西安电子科技大学 |
主分类号: | H04N19/91 | 分类号: | H04N19/91;H04N19/176;H04N19/70;H04N19/593 |
代理公司: | 陕西电子工业专利中心 61205 | 代理人: | 韦全生;王品华 |
地址: | 710071 陕*** | 国省代码: | 陕西;61 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 hevc 编码器 集成电路设计 方法 | ||
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子块与当前二维量化残差数据TU块中最后一个非零系数的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串长度。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于西安电子科技大学,未经西安电子科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710255725.9/1.html,转载请声明来源钻瓜专利网。