适于vlsi实现的avs视频解码器变长解码的简化码表及实施方法

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

专利名称::适于vlsi实现的avs视频解码器变长解码的简化码表及实施方法
技术领域
:本发明涉及VLSI实现视频编解码
技术领域
,具体地说,涉及一种适于VLSI实现的AVS视频解码器变长解码的简化码表及实施方法。
背景技术
:随着视频编解码技术的发展,产生了许多视频编解码的标准MPEG1/2/4、H.263/4、VC-1/AVS。AVS是中国拥有自主知识产权的标准,与h.264比,性能相当,专利收费低,实现复杂度低,有一定的竞争优势,许多芯片制造商都已参与其中。在设计AVS芯片的时候,需要对AVS算法进行优化减小内存带宽、减小片内存储、减小运算量、减小程序逻辑等,以达到加快速度、节省资源的目的。AVS视频解码器变长解码的主要任务,就是从压縮的二进制码流中解出残差矩阵变换量化后的非零系数。这个过程分两步1、将二进制码流解析成变换系数;2、将变换系数(trans—coeff)解码成非零系数(level,run)。第一步采用指数哥伦布码进行解析,标准描述得简洁清晰,这里不作考虑。标准给出的第二步的解码过程比较抽象,参考代码描述的标准给出的十九个码表VLCO—Intra,VLCl—Intra,VLC2—Intra,VLC3—Intra,VLC4—Intra,VLC5—Intra,VLC6—Intra,VLCO—Inter,VLCl—Inter,VLC2—Inter,VLC3—Inter,VLC4一Inter,VLC5—Inter,VLC6—Inter,VLCO—Chroma,VLCl—Chroma,VLC2—Chroma,VLC3—Chroma,VLC4—Chroma所占存储巨大,需要7X26X27+7X26X27+5X26X27=13338个字节的片内存储,必须优化。分析参考代码描述的十九个码表所占存储大的原因,就是解码器用的是编码器的码表。编码时对变换量化后的非零系数进行之字形计数,得到(level,run),以(level,run)为索引查表,一步找到transcoeff,这对编码器来说是很合适的。但对解码器来说是很不合适的,解码时还用编码器的码表,参考代码就不得不分别循环level和run,遍历13338字节的码表来生成一个7X64X2+7X64X2+5X64X2=2432个字节的码表,使得2432字节的码表能够以trans—coeff为索引,一步查找到(level,run)。至此问题似乎可以解决了,比如,将13338字节码表和遍历13338字节码表生成2432字节码表的运算都扔掉,直接用2432字节码表来做解码器的码表,既去掉了很多的冗余存储,又去掉了很多的冗余运算,这样的VLD应该是可以的了吧。仔细观察2432字节码表,仍然有冗余存储;仔细观察参考代码,仍然有冗余运算,有必要继续优化。小的片内存储,小的运算逻辑,对芯片来说都是很有意义的。
发明内容本发明的目的在于,提供一种适于VLSI实现的AVS视频解码器变长解码的简化码表及实施方法,以克服目前变长解码时存在的冗余存储和冗余运算问题。为了实现上述发明目的,本发明的技术方案如下这里既不要那个适于编码器的13338字节码表,也不要那个由程序生成的适于解码器的2432字节码表,由13338字节码表生成2432字节码表的运算过程也被扔掉。我们这里给出一个由标准附录A的十九个码表直接推导出的大小为1102个字节的一维数组码表VLD_table[1102]。该一维数组码表的推导过程包括如下步骤步骤l:将标准附录A的一个以level为横坐标,以run为纵坐标,以trans—coeff为内容的矩阵状码表,重写成一个由trans_coeff到(level,run)的有29个元素的映射表。步骤2:将步骤1的映射表转化成一个,以trans—coeff》l为索引,以Ueve,rud为内容,大小为29x2个字节的二维数组。步骤3:将步骤2的二维数组,按其存储顺序转变成58个字节的一维数组,level放在偶地址,run放在奇地址。步骤4:将标准附录A的十九个码表按照上述步骤生成的十九个一维数组,按照标准附录A给出的先后顺序,依次放在一个19X29X2=1102个字节的一维数组里。根据上述一维数组码表的组成,上述码表的寻址方法包括如下步骤步骤l:根据块类型(blocktype):帧内亮度块(O)、帧间亮度块(7)、色度块(14),分别初始化地址addr—vld-O、406、812,7X29X2=406,14X29X2=812。步骤2:根据当前的表号tablenum,计算索引地址idx=addr_vld+tablenumX58。步骤3:根据解析出的变换系数trans—coeff,继续计算索引地址。trans—coeff小于结束符时,idx+=((trans—coeff》1)《1);trans—coeff大于结束符,idx+=(((trans—coeff-1)》1)〈〈1)。采用上述一维数组码表及其寻址方法,将变换系数tmns一coeff,解码成非零系数(levd,run)的方法,该解码方法包括如下步骤步骤l:根据上述寻址方法计算出的索引地址idx,访问一维数组码表求出残差矩阵的非零量化系数level及其游程run。level=VLD—table[idx],■=VLD—table[idx+1]。步骤2:判断trans一coeff的奇偶性,决定level的正负号。trans—coeff小于结束符时,若trans一coeff为奇数,贝Ulevel取负值。trans—coeff大于结束符时,若trans—coeff是偶数,贝Ulevel取负值。在transjoeff不等于块结束符,且trans—coeff小于59的情况下,才会用上述1102个字节的码表,trans—coeff大于或等于59时,会用到一个以run为索引的大小为219个字节的一维数组表ref一abs—level[219],该表的寻址也分三步第一步、根据blocktype,初始化地址addr—ref=0、65、150;第二步、根据tablenum,计算idx=addr—ref+max—run[blocktype+0]+......+max一run[blocktype+tablenum-1]+tablenum;第三步、根据trans一coeff,计算idx+=((transcoeff-59)》l)。采用该码表及其寻址方法解出level、run的方法与标准相同,不再赘述。6标准附录A的十九个码表中,帧内亮度块的第一个表、帧间亮度块的第一个表、色度块的第一个表都没有结束标志,我们将它们的结束符设为short类型的最大值,与其余16个结束符一起组成一个有19个元素的结束符表eob_pos[19]。十九个表的最大run值组成一个十九个元素的最大run值表max—run[19]。十九个表的指数哥伦布码的阶组成一个十九个元素的哥伦布阶表golomb—grad[19]。采用本发明的简化码表及实施方法,十九个元素对应着十九个表,这样就能够由统一的逻辑来处理不同的块类,达到简化逻辑的目的,最大限度地消除冗余存储和冗余运算。图1A:帧内亮度块的level、run与trans—coeff的映射表VLCOJntra。图IB:由图1A推导出的由trans—coeff到level、run的映射表。图1C:由图IB推导出的以trans—coeff^〉1为索引的二维数组。图1D:由图IC推导出的一维数组。图2A:帧内亮度块的level、run与trans—coeff的映射表VLC1—Intra。图2B:由图2A推导出的由trans—coeff到level、run的映射表。图2C:由图2B推导出的以trans—coeffl为索引的二维数组。图2D:由图2C推导出的一维数组。图3:对应十九个表的levd、run的1102字节码表。图4A:对应十九个表的RefAbsLevel表。图4B:对应十九个表的结束符表。图4C:对应十九个表的最大run值表。图4D:对应十九个表的指数哥伦布码阶表。图5A:采用小码表进行解码的流程图。图5B:—个8x8块的变长解码过程。图5C:AVS视频解码器的硬件多线程流水线架构。具体实施例方式下面根据图1A至图5C,给出本发明的较佳实施例,并予以详细描述,使能更好地理解本发明的功能、特点。图1A是标准附录A给出的十九个码表中的第一个表VLC0—Intra,把它列在这里,是以此为例来说明1102字节码表推导的依据。图1B是依据图1A推导出的由trans—coeff到(level,run)的映射表,会发现trans—coeff全是偶数,从0到56,那么trans—coeffl,就是从0到28的连续整数,这样很自然地由图1B推导出图1C所示的以trans—coef^1为索引、以(level,run)为内容的二维数组。将图1C的二维数组,按其存储顺序,写成图1D所述的58个字节的一维数组。图1D的58个字节的一维数组构成图3所示的1102字节码表的第一行的58个数据。图2A是标准附录A给出的十九个码表中的第二个表VLCl_Intra,把它也列在这里,是为了更进一步说明1102字节码表推导的依据。图2B是依据图2A推导出的由trans—coeff到(level,run)的映射表,trans_coeff的前几个数0、2、4、6是偶数,后面的9、11、13......55、57是奇数,我们发现trans—coeffl仍然是从0到28的连续整数,这样就能够由图2B推导出图2C所示的以trans—coef£l为索引、以{level,run}为内容的二维数组。将图2C的二维数组,按其存储顺序,写成图2D所述的58个字节的一维数组。图2D的一维数组构成图3所示的1102字节码表的第二行的58个数据。以此类推,我们可以由标准附录A的第三个、第四个、到第十九个码表,推导出图3的第三行、第四行、直到第十九行的每行58个数据,这样就推导出了19X58=1102个字节的一维数组码表。图3是一个1102字节的一维数组码表,该数组码表的寻址分三步完成第一步,根据帧内亮度块、帧间亮度块、色度块的类型,分别初始化地址addr—vld=0、406(7X29X2)、812((7+7)X29X2);第二步,根据当前的表号tablenum(对应于VLC0—Intra、VLC1—Intra......VLC4—Chroma中的0、1、2、3、4、5、6),索引地址addr—vld前进tablenum个58;第三步、根据解析出的变换系数trans—coeff,若trans—coeff小于结束符,则addr—vld前进((trans—coeff》l)《l)个字节,若trans—coeff大于结束符,则addr—vld前进(((trans—coeff-1)》1)《1)个字节,在这个地址取出level,下个地址取出run。图4A是根据标准附录A的十九个表的由run到RefAbsLevel的映射优化成的219个字节的表。该表是在trans一coeff大于或等于59时,将trans一coeff解码成(level,mn)时用到的,该表的寻址也分三步第一步,根据帧内亮度块、帧间亮度块、色度块的类型,分别初始化地址addr—ref=0、65、150;第二步,根据blocktype、tablenum、max_run,addr—ref前进max—run[blocktype+0]+......+max一run[blocktype+tablenum-l]+tablenum;第三步,根据trans_coeff,addr一ref前进run=(trans—coeff-59)》1。图4B对应十九个表的结束符,帧内亮度块的第一个表、帧间亮度块的第一个表、色度块的第一个表都没有结束标志,我们将它们设为short类型的最大值,以简化查表逻辑trans—coeff小于结束符的,都是偶数,大于结束符的,都是奇数。图4C对应十九个表的最大run值,图4D对应十九个表的指数哥伦布码的阶,十九个元素对应着十九个表,这样就能够由统一的逻辑来处理不同的块类,达到简化逻辑的目的。图5A采用1102字节码表进行解码的流程将指数哥伦布码解析出的trans—coeff与相应的结束符比较,若小于结束符,根据其寻址规则,取出(levd,run),判断level是否奇数,是则取反;否则根据其寻址规则,取出(level,run),判断level是否偶数,是则取反。图5B是一个8X8块的变长解码过程,该过程的输入是块类型(blocktype)和一段二进制的码流(bstr),输出是一组(level,run)值。该过程由以下几步组成第一步,初始化。为了统一码表的访问,blocktype的值VLD一INTRA、VLD—INTER、VLD—CHROMA分别定义为0、7、14;由于每个类型的块解码时都是从其第一个表开始的,所以表号tablemim初始化为0;依据blocktype的值,初始化寻址地址addr_vld=0、406、812,addr—refK)、65、150,指数哥伦布码的阶grad=golomb—gmd[blocktype+tablenum],当前解的第i个变换系数的i=0。第二步,解析变换系数。trans—coeff=ce—v(grad,bstr)。依据指数哥伦布码的解析规则,很容易解析出变换系数。第三步,判断变换系数是否为结束符。若变换系数是结束符,则该8x8块的变长解码结束,这也是该解码过程的唯一正确的出口。若变换系数不是结束符,判断变换系数是否小于59,若小于执行第四步,否则执行第五步。第四步,査找1102字节码表VLD—table,得到(levd,run),放入相应数组中,这也正是图5A的过程,然后转入第六步。第五步,査找219字节码表ref—abs—level,得到(level,run),放入相应数组中,然后进入第六步。第六步,修改表号tablenum和指数哥伦布码的阶grad,i++,跳转到第二步。图5C是我们给出的AVS解码器的硬件多线程流水线架构,可以看出VLD是这个三阶段四线程流水线结构的第一阶段,VLD输入二进制码流,输出非零矩阵于下一阶段的IQ/IDCT,IntraPred或MC的预测矩阵,与IDCT后的残差矩阵相加,得到重构矩阵,经过Deblocking,得到输出的图像。前面提供了对较佳实施例的描述,以使本领域内的任何技术人员可使用或利用本发明。对该较佳实施例,本领域内的技术人员在不脱离本发明原理的基础上,可以作出各种修改或者变换。应当理解,这些修改或者变换都不脱离本发明的保护范围。权利要求1、一种适合于VLSI实现的AVS视频解码器变长解码的简化码表,其特征在于,该码表为19×29×2=1102个字节的一维数组VLD_table[1102]。2、如权利要求1所述的适合于VLSI实现的AVS视频解码器变长解码的简化码表,其特征在于,所述一维数组是从标准附录A的十九个变长码表通过如下方法得出的步骤l:将标准附录A的一个以level为横坐标,以run为纵坐标,以trans—coeff为内容的矩阵状码表,重写成一个由trans_coeff到(level,run)的有29个元素的映射表;步骤2:将步骤1的映射表转化成一个以trans—coeff》1为索引,以Ueve,run)为内容,大小为29X2个字节的二维数组;步骤3:将步骤2中的二维数组,按其存储顺序转变成58个字节的一维数组,level放在偶地址,run放在奇地址。步骤4:将由标准附录A的十九个码表按照上述步骤生成的十九个一维数组,按照附录A给出的先后顺序,依次放在一个19X29X2=1102个字节的一维数组里。3、如权利要求2所述的适合于VLSI实现的AVS视频解码器变长解码的简化码表,其特征在于,Tmns—coeff大于或等于59时,用到一个以run为索引求RefAbsLevel的表,该表是一个有219个字节的一维数组,该一维数组的寻址包括如下步骤步骤h根据块类型(blocktype):帧内亮度块(O)、帧间亮度块(7)、色度块(14)'初始化地址addr—ref-O、65、150;步骤2:根据当前的标号tablenum,计算索引地址idx=addr—ref+max一run[blocktype+0]+......+max—mn[blocktype+table皿m-l]+tablenum;步骤3:根据变换系数trans—coeff,计算idx+二((trans—coeff-59)〉〉1)。4、如权利要求1所述的适合于VLSI实现的AVS视频解码器变长解码的简化码表,其特征在于,所述一维数组码表的寻址方法包括如下步骤步骤1:根据块类型(blocktype):帧内亮度块(O)、帧间亮度块(7)、色度块(14),分别初始化地址addr—vld=0、406、812,7X29X2=406,14X29X2=812;步骤2:根据当前的表号tablenum,计算索引地址idx=addr_vld+tablenum氺58;步骤3:根据当前解析出的变换系数trans—coeff,继续计算索引地址;当trans一coeff小于结束符时,索引地址idx+二((trans—coeff》1)《1);当trans一coeff大于结束符时,索引地址idx+=(((trans—coeff-l)》l)<〈l)。5、采用如权利要求4所述码表将变换系数trans一coeff解码成非零系数的方法,其特征在于,该解码方法包括如下步骤步骤1:根据所述索引地址,访问一维数组码表求出残差矩阵的非零量化系数level及其游程run,其中的level=VLD—table[idx],run=VLD—table[idx+1]。步骤2:判断tmns一coeff的奇偶性,决定level的正负号;tmns一coeff小于结束符时,若trans—coeff为奇数,贝!Jlevel取负值;trans—coeff大于结束符时,若trans—coeff是偶数,贝Ulevel取负值。6、如权利要求5所述的解码方法,其特征在于,所述结束符属于一个有十九个元素的一维数组,该一维数组的十九个元素对应标准附录A的十九个码表的结束符;码表VLC0_Intra、VLC0一Inter、VLCO一Chroma没有结束符,设其结束符为32767,与其它码表保持统一的逻辑判断。7、如权利要求6所述的解码方法,其特征在于,所述的统一逻辑判断,是指帧内亮度、帧间亮度、色度的tmns一coeff解码成level,run时具有共同的程序逻辑。全文摘要本发明公开了一种适于VLSI实现的AVS视频解码器变长解码的简化码表及实施方法。简化码表是由标准附录A的十九个变长码表推导出的大小为19×29×2=1102个字节的以level、run为元素的一维数组。上述码表的解码方法包括如下两步1.根据索引地址访问一维数组码表求出残差矩阵的非零量化系数level及其游程run。2.判断trans_coeff的奇偶性,决定level的正负号。trans_coeff小于结束符时,若trans_coeff为奇数,则level取负值。trans_coeff大于结束符时,若trans_coeff是偶数,则level取负值。十九个元素对应着十九个表,这样就能够由统一的逻辑来处理不同的块类,达到简化逻辑的目的,最大限度地消除冗余存储和冗余运算。文档编号H04N7/50GK101365131SQ20081004184公开日2009年2月11日申请日期2008年8月19日优先权日2008年8月19日发明者野田申请人:华亚微电子(上海)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1