一种音频解码方法及装置的制作方法

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

专利名称::一种音频解码方法及装置的制作方法
技术领域
:本发明涉及音频解码
技术领域
,具体涉及一种音频解码方法及装置。
背景技术
:在IS0/IEC11172-3,IS0/IEC13818-3和IS0/IEC14496-3这3个国际标准中,运动图像专家组(MPEG,MovingPictureExpertsGroup)音频压缩标准LayerIII作为其中一个非常重要的部分,有着广泛的应用。使用LayerIII压缩出来的各种mp3音频文件在世界范围内非常的普及和流行。哈夫曼编解码是许多种流行的音频编解码的一个重要组成部分。一次具体哈夫曼解码的起始与终止过程依赖于11172-3协议第2.4.1.7节中HuffmancodebitsO的语法结构定义以及第2.4.2.7节中对HuffmancodebitsO的语义描述。在IS0/IEC11172-3附录B.7,即“HuffmancodesforLayerIII”中,给出了表HuffmancodetableforquadruplesA禾口B以及表HuffmancodetableO至Ij31。Huffmancodetable中除了意义不大的表0,从表1到表31中,表4和表14不存在,表17到表23共用表16,表25到表31共用表M。以下是IS0/IEC11172-3附录B.7原始Huffmancodetable5和Huffmancodetable10的部分原始哈夫曼码表表示示例Huffmancodetable5Xyhlenhcod00110130100260001100370000101103011113001126000100137000010020600011133800000000Huffmancodetable1χyhlenhcod00110130100260010100380001011104900010001105900001111006900000110007100000010001............7711000000000000在原始的每个Huffmancodetable中,有表项x、y以及hlen和hcod。在原始的每个Huffmancodetableforquadruples中,有表I页ν、w、χ、y、以及hlen禾口hcod。hcod作为编码时的输出和解码时的输入,(x,y)或(v,w,x,y)作为编码时的输入和解码时的输出,hlen仅是一项辅助说明,其值与hcod的实际长度恒等。由于这些原始的表是按编码的升序进行排列的,进行解码查询的时候,需要按照hcod进行反查,实际上很不方便,所以一般会自定义解码表。这些解码表最基本的形式是将原始表按hcod升序排列,同时将(x,y,hlen)或(v,w,X,y,hlen)进行压缩表示,实际查询时,以hcod作为索引,查询出对应的解码值(X,y)或(V,w,χ,y)ο由于大表采用上述最基本的方式进行存储会太浪费内存,同时使得加载内存时的中央处理器高速缓存CPUcache命中率很低,导致执行效率的降低,为了进一步的压缩这些解码表,特别是最后的几张大表,有可能需要将hcod拆分成多个部分,进行多级索引方式的查询。总体的原则是在保持表的内存占用在可接受的情况下同时不降低解码的性能。一般的解码表出于对后面表13,15,16,24需要全16位分配的考虑,对所有表统一采用16位分配,或者在最开始的几个表也采用多级索引来表示。在对现有技术的研究和实践过程中,本发明的发明人发现1)如果所有表统一采用16位分配,浪费了内存空间,CPUcache命中率低;2)如果在最开始的几个表也采用多级索引来表示,只是节省了一点点内存空间但是却增加了许多指令数,降低了性能;所以,在现有的MPEG音频LayerIII的哈夫曼解码中,解码表太大或解码需要的指令多性能低,两者之间没有达到一个最佳的平衡。
发明内容本发明实施例提供一种音频解码方法及装置,能够将生成的哈夫曼解码表的大小控制在合理的范围,提高了CPUcache命中率,同时结合减少解码查询所需指令数,提高了哈夫曼解码的效率。一种音频解码方法,根据11172-3协议中第2.4.1.7节中对table—select的语法结构以及2.4.2.7中对table_Select的具体描述选取相应的哈夫曼解码表进行解析,其特征在于,包括如果解析出的哈夫曼解码表的表值是1、2、3、5或者6时获取所述哈夫曼解码表中的第一个字节数据,所述数据的值N与11172-.7的原始哈夫曼码表中hlen的最大值相等,所述哈夫曼解码表采用8位存储,并从所述哈夫曼解码表的第二个字节开始从索引0开始依次标识;获取待解码数据时,每次获取N位数据,所述N位数据的值为M;以所述M作为索引查询所述哈夫曼解码表中的数据;根据索引为M的数据解码出X,y和hlen。一种音频解码装置,包括第一获取模块,用于当根据11172-3协议中第2.4.1.7节中对table—select的语法结构以及2.4.2.7中对table_Select的具体描述选取相应的哈夫曼解码表进行解析,如果解析出的哈夫曼解码表的表值是1、2、3、5或者6时,获取所述哈夫曼解码表中的第一个字节数据,所述数据的值N与11172-3B.7的原始哈夫曼码表中hlen的最大值相等,所述哈夫曼解码表采用8位存储,并记索引0从所述哈夫曼解码表的第二个字节开始依次标识;第二获取模块,用于获取待解码数据时,根据所述N,每次获取N位数据,所述N位数据的值为M;第一查询模块,用于根据所述M,以所述M作为索引查询所述哈夫曼解码表中的数据;第一解析模块,用于根据查询模块查询的索引为M的数据解码出X,y和hlen。本发明实施例采用在根据11172-3协议中第2.4.1.7节中对table—select的语法结构以及2.4.2.7中对table_Select的具体描述选取相应的哈夫曼解码表进行解析,如果解析出的哈夫曼解码表的表值是1、2、3、5、6时,对表值为1、2、3、5或6的哈夫曼解码表采用8位存储,先获取哈夫曼解码表在的第一个字节数据的值N,N与原始哈夫曼表中的hlen的最大值相等,获取待解码数据时,每次获取N位数据,该N位数据的值为M,再以M为索引查询哈夫曼解码表中的数据,并根据该数据进行解码;该方法对哈夫曼解码表以8位压缩存储,节省了存储空间,在解码时提高了数据读取的CPUcache命中率,同时不增加查询指令数,从而提高解码性能。图1是本发明实施例音频解码方法的流程示意图;图2是本发明实施例音频解码方法的流程示意图;图3是本发明实施例音频解码装置的逻辑结构示意图;图4是本发明实施例音频解码装置的逻辑结构示意图。具体实施例方式本发明实施例提供一种音频解码方法,本发明实施例还提供相应的装置。以下分别进行详细说明。请参阅图1,本发明实施例中音频解码方法的第一实施例具体的一次具体哈夫曼解码的起始与终止过程依赖于11172-3协议第2.4.1.7节中函数HuffmancodebitsO的语法结构定义以及第2.4.2.7节中对Huffmancodebits()的语义描述,在对MPEG音频LayerIII利用哈夫曼解码表进行解码时,根据11172-3协议中第2.4.1.7节中对table_select的语法结构以及2.4.2.7中对table_select的具体描述选取相应的哈夫曼解码表进行解析;101、获取哈夫曼解码表中的第一个字节数据;如果解析出的哈夫曼解码表的表值是1、2、3、5、6时,获取哈夫曼解码表中的第一个字节数据,该数据的值N与11172-3B.7的原始哈夫曼码表中hlen的最大值相等,其中,哈夫曼解码表采用8位存储,并记索引0从哈夫曼解码表的第二个字节开始依次标识。102、获取待解码数据时,每次获取N位数据;在获取解码数据时,每次获取N位数据,其中,N位数据的值为M。103、以M作为索引查询哈夫曼解码表中的数据。104、根据索引为M的数据解码出X,y和hlen。进一步的,在对数据进行解码前,需要先根据11172-3B.7的原始哈夫曼码表生成哈夫曼解码表,其中,生成的哈夫曼解码表按hcod进行升序排列,并且满足方程(1)权利要求1.一种音频解码方法,根据11172-3协议中第2.4.1.7节中对table—select的语法结构以及2.4.2.7中对table_Select的具体描述选取相应的哈夫曼解码表进行解析,其特征在于,包括如果解析出的哈夫曼解码表的表值是1、2、3、5或者6时获取所述哈夫曼解码表中的第一个字节数据,所述数据的值N与11172-.7的原始哈夫曼码表中hlen的最大值相等,所述哈夫曼解码表采用8位存储,并从所述哈夫曼解码表的第二个字节开始从索引0开始依次标识;获取待解码数据时,每次获取N位数据,所述N位数据的值为M;以所述M作为索引查询所述哈夫曼解码表中的数据;根据索引为M的数据解码出X,y和hlen。2.根据权利要求1所述的方法,其特征在于,所述方法还包括如果解析出的哈夫曼解码表的表值是7、8、9、10、11或者12时取V位待解码数据作为一级索引在所述哈夫曼解码表的区域一中查询,从查询结果中得到hlen;其中,并记索引0从所述哈夫曼解码表的第一个字节开始依次标识;所述V为分割hcod的临界值,将11172-3B.7的原始哈夫曼码表中的每个hcod分成2部分,如果hlen大于V,则hcod的第一部分长度为V,第二部分长度为leftlen,即hlen减去V的值,如果hlen小于等于V,则hcod的第一部分长度为hlen,第二部分长度为0;所述哈夫曼解码表采用16位和8位混合存储,每个表分成两个存储区域,第一个存储区域总共存储2的V次方个值,每个值以16位存储,第二个存储区域总共存储表的长度tblbytes减去2的V加1次方的差值个值,每个值以8位存储;判断查询得到的hlen的值是否为zeros,所述zeros表示0;如果查询结果的hlen不为zeros,则从所述查询结果中可以得到x,y和hlen;如果查询结果的hlen为zeros,则获取所述哈夫曼解码表区域二的起始地址的字节偏移offset和二级索引区的读取长度IeftlenmaxJy^ileftlenmax为相同组中leftlen的最大值,所述相同组指当hlen大于V时hcod前V位相同的所有hcod所在的行的集合;读取leftlenmax位待解码数据作为二级索引根据offset在区域二中进行查询,根据查询结果解码出X,y和hlen,所述hlen的值等于leftlen加V的值。3.根据权利要求1或者权利要求2所述的方法,其特征在于,所述方法还包括所述哈夫曼解码表按hcod进行升序排列。4.根据权利要求1所述的方法,其特征在于,所述方法还包括所述表值是1、2、3、5、6的各个哈夫曼解码表中,χ以xbits个比特位表示,y以ybits个比特位表示,hlen以hlenbits个比特位表示,所述xbits、ybits和hlenbits满足方程⑴5.根据权利要求4所述的方法,其特征在于,所述方法还包括对于同一个升序排列后的哈夫曼码表的每一行,将根据所述方程(1)计算所得的每个表示值连续存储2~(hlOTax_hlm)次。6.根据权利要求2所述的方法,其特征在于,所述方法还包括所述表值是7、8、9、10、11或者12的各个哈夫曼解码表中,χ以xbits个比特位表示,y以ybits个比特位表示,hlen以hlenbits个比特位表示,所述xbits、ybits和hlenbits满足方程⑵7.根据权利要求6所述的方法,其特征在于,所述方法还包括所述哈夫曼解码表中,offset以offsetbits个比特位表示,Ieftlenmax以Ieftlenmaxbits个比牛寺4立表示,zeros以zerosbits个比牛寺4立表示,所述offsetbits、Ieftlenmaxbits禾口zerosbits满足方禾呈(3)8.根据权利要求7所述的方法,其特征在于,所述方法还包括对于同一个升序排列后的哈夫曼码表的每一行,如果hlen小于等于V,则将根据所述方程(计算所得的每个表示值(X,y,hlen)连续存储2~(v_hlm)次到区域一中;其中,x,y,hlen的相对顺序是任意的。9.根据权利要求8所述的方法,其特征在于,所述方法还包括对于同一个升序排列后的哈夫曼码表的每一行,如果hlen大于V并且该行含有相同组的第一个hcod,则将根据所述方程(3)计算所得的每个表示值(offset,leftlenmax,zeros)存储到区域一中,并且将所述offset的值增加;其中,0ffset,leftlenmax,zeros的相对顺序是任意的。10.根据权利要求9所述的方法,其特征在于,所述方法还包括对于同一个升序排列后的哈夫曼码表的每一行,如果hlen大于V,区域二的存储表示为(x,y,leftlen),其中,χ以xbits位表示,y以ybits位表示,Ieftlen以Ieftlenbits位表示,并且xbits、ybits和Ieftlenbits满足方程(4)11.一种音频解码装置,其特征在于,包括第一获取模块,用于当根据11172-3协议中第2.4.1.7节中对table—select的语法结构以及2.4.2.7中对table_Select的具体描述选取相应的哈夫曼解码表进行解析,如果解析出的哈夫曼解码表的表值是1、2、3、5或者6时,获取所述哈夫曼解码表中的第一个字节数据,所述数据的值N与11172-3B.7的原始哈夫曼码表中hlen的最大值相等,所述哈夫曼解码表采用8位存储,并记索引0从所述哈夫曼解码表的第二个字节开始依次标识;第二获取模块,用于获取待解码数据时,根据所述N,每次获取N位数据,所述N位数据的值为M;第一查询模块,用于根据所述M,以所述M作为索引查询所述哈夫曼解码表中的数据;第一解析模块,用于根据查询模块查询的索引为M的数据解码出X,y和hlen。12.根据权利要求11所述的装置,其特征在于,所述装置还包括第二查询模块,用于当根据11172-3协议中第2.4.1.7节中对table_Select的语法结构以及2.4.2.7中对table_Select的具体描述选取相应的哈夫曼解码表进行解析,如果解析出的哈夫曼解码表的表值是7、8、9、10、11或者12时,取V位待解码数据作为一级索引在哈夫曼解码表的区域一中查询,从查询结果中得到hlen;其中,并记索引0从所述哈夫曼解码表的第一个字节开始依次标识,所述V为分割hcod的临界值,将11172-3B.7的原始哈夫曼码表中的每个hcod分成2部分,如果hlen大于V,则hcod的第一部分长度为V,第二部分长度为leftlen,即hlen减去V的值,如果hlen小于等于V,则hcod的第一部分长度为hlen,第二部分长度为0;所述哈夫曼解码表采用16位和8位混合存储,每个表分成两个存储区域,第一个存储区域总共存储2的V次方个值,每个值以16位存储,第二个存储区域总共存储表的长度tblbytes减去2的V加1次方的差值个值,每个值以8位存储;判断模块,用于判断查询得到的hlen的值是否为zeros,所述zeros表示0;第二解码模块,用于当判断模块判断出hlen不为zeros时,则从第二查询模块的查询结果中可以得到x,y和hlen;第三获取模块,用于当判断模块判断出hlen为zeros时,则获取所述哈夫曼解码表区域二的起始地址的字节偏移offset和二级索引区的读取长度Ieftlenmax,所述Ieftlenmax为相同组中leftlen的最大值,所述相同组指当hlen大于V时hcod前V位相同的所有hcod所在的行的集合;第三查询模块,用于根据第三获取模块获取的leftIenmax和offset,读取Ieftlenmax位待解码数据作为二级索引根据offset在区域二中进行查询,得到查询结果;第三解码模块,用于根据第三查询模块的查询结果解码出x,y和hlen,所述hlen的值等于Ieftlen加V的值。全文摘要本发明公开了一种音频解码方法,本发明实施例还提供相应的装置。本发明技术方案通过对表值为1、2、3、5或6的哈夫曼解码表采用8位存储,先获取哈夫曼解码表在的第一个字节数据的值N,N与原始哈夫曼表中的hlen的最大值相等,获取待解码数据时,每次获取N位数据,该N位数据的值为M,再以M为索引查询哈夫曼解码表中的数据,并根据该数据进行解码;该方法对哈夫曼解码表以8位压缩存储,节省了存储空间,在解码时提高了数据读取的CPUcache命中率,同时不增加查询指令数,从而提高解码性能。文档编号G10L19/00GK102136270SQ20101060732公开日2011年7月27日申请日期2010年12月27日优先权日2010年12月27日发明者明亮,苏延雄申请人:华为软件技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1