專利名稱::一種音頻解碼方法及裝置的制作方法
技術領域:
:本發(fā)明涉及音頻解碼
技術領域:
,具體涉及一種音頻解碼方法及裝置。
背景技術:
:在IS0/IEC11172-3,IS0/IEC13818-3和IS0/IEC14496-3這3個國際標準中,運動圖像專家組(MPEG,MovingPictureExpertsGroup)音頻壓縮標準LayerIII作為其中一個非常重要的部分,有著廣泛的應用。使用LayerIII壓縮出來的各種mp3音頻文件在世界范圍內(nèi)非常的普及和流行。哈夫曼編解碼是許多種流行的音頻編解碼的一個重要組成部分。一次具體哈夫曼解碼的起始與終止過程依賴于11172-3協(xié)議第2.4.1.7節(jié)中HuffmancodebitsO的語法結(jié)構(gòu)定義以及第2.4.2.7節(jié)中對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)ο由于大表采用上述最基本的方式進行存儲會太浪費內(nèi)存,同時使得加載內(nèi)存時的中央處理器高速緩存CPUcache命中率很低,導致執(zhí)行效率的降低,為了進一步的壓縮這些解碼表,特別是最后的幾張大表,有可能需要將hcod拆分成多個部分,進行多級索引方式的查詢。總體的原則是在保持表的內(nèi)存占用在可接受的情況下同時不降低解碼的性能。一般的解碼表出于對后面表13,15,16,24需要全16位分配的考慮,對所有表統(tǒng)一采用16位分配,或者在最開始的幾個表也采用多級索引來表示。在對現(xiàn)有技術的研究和實踐過程中,本發(fā)明的發(fā)明人發(fā)現(xiàn)1)如果所有表統(tǒng)一采用16位分配,浪費了內(nèi)存空間,CPUcache命中率低;2)如果在最開始的幾個表也采用多級索引來表示,只是節(jié)省了一點點內(nèi)存空間但是卻增加了許多指令數(shù),降低了性能;所以,在現(xiàn)有的MPEG音頻LayerIII的哈夫曼解碼中,解碼表太大或解碼需要的指令多性能低,兩者之間沒有達到一個最佳的平衡。
發(fā)明內(nèi)容本發(fā)明實施例提供一種音頻解碼方法及裝置,能夠?qū)⑸傻墓蚵獯a表的大小控制在合理的范圍,提高了CPUcache命中率,同時結(jié)合減少解碼查詢所需指令數(shù),提高了哈夫曼解碼的效率。一種音頻解碼方法,根據(jù)11172-3協(xié)議中第2.4.1.7節(jié)中對table—select的語法結(jié)構(gòu)以及2.4.2.7中對table_Select的具體描述選取相應的哈夫曼解碼表進行解析,其特征在于,包括如果解析出的哈夫曼解碼表的表值是1、2、3、5或者6時獲取所述哈夫曼解碼表中的第一個字節(jié)數(shù)據(jù),所述數(shù)據(jù)的值N與11172-.7的原始哈夫曼碼表中hlen的最大值相等,所述哈夫曼解碼表采用8位存儲,并從所述哈夫曼解碼表的第二個字節(jié)開始從索引0開始依次標識;獲取待解碼數(shù)據(jù)時,每次獲取N位數(shù)據(jù),所述N位數(shù)據(jù)的值為M;以所述M作為索引查詢所述哈夫曼解碼表中的數(shù)據(jù);根據(jù)索引為M的數(shù)據(jù)解碼出X,y和hlen。一種音頻解碼裝置,包括第一獲取模塊,用于當根據(jù)11172-3協(xié)議中第2.4.1.7節(jié)中對table—select的語法結(jié)構(gòu)以及2.4.2.7中對table_Select的具體描述選取相應的哈夫曼解碼表進行解析,如果解析出的哈夫曼解碼表的表值是1、2、3、5或者6時,獲取所述哈夫曼解碼表中的第一個字節(jié)數(shù)據(jù),所述數(shù)據(jù)的值N與11172-3B.7的原始哈夫曼碼表中hlen的最大值相等,所述哈夫曼解碼表采用8位存儲,并記索引0從所述哈夫曼解碼表的第二個字節(jié)開始依次標識;第二獲取模塊,用于獲取待解碼數(shù)據(jù)時,根據(jù)所述N,每次獲取N位數(shù)據(jù),所述N位數(shù)據(jù)的值為M;第一查詢模塊,用于根據(jù)所述M,以所述M作為索引查詢所述哈夫曼解碼表中的數(shù)據(jù);第一解析模塊,用于根據(jù)查詢模塊查詢的索引為M的數(shù)據(jù)解碼出X,y和hlen。本發(fā)明實施例采用在根據(jù)11172-3協(xié)議中第2.4.1.7節(jié)中對table—select的語法結(jié)構(gòu)以及2.4.2.7中對table_Select的具體描述選取相應的哈夫曼解碼表進行解析,如果解析出的哈夫曼解碼表的表值是1、2、3、5、6時,對表值為1、2、3、5或6的哈夫曼解碼表采用8位存儲,先獲取哈夫曼解碼表在的第一個字節(jié)數(shù)據(jù)的值N,N與原始哈夫曼表中的hlen的最大值相等,獲取待解碼數(shù)據(jù)時,每次獲取N位數(shù)據(jù),該N位數(shù)據(jù)的值為M,再以M為索引查詢哈夫曼解碼表中的數(shù)據(jù),并根據(jù)該數(shù)據(jù)進行解碼;該方法對哈夫曼解碼表以8位壓縮存儲,節(jié)省了存儲空間,在解碼時提高了數(shù)據(jù)讀取的CPUcache命中率,同時不增加查詢指令數(shù),從而提高解碼性能。圖1是本發(fā)明實施例音頻解碼方法的流程示意圖;圖2是本發(fā)明實施例音頻解碼方法的流程示意圖;圖3是本發(fā)明實施例音頻解碼裝置的邏輯結(jié)構(gòu)示意圖;圖4是本發(fā)明實施例音頻解碼裝置的邏輯結(jié)構(gòu)示意圖。具體實施例方式本發(fā)明實施例提供一種音頻解碼方法,本發(fā)明實施例還提供相應的裝置。以下分別進行詳細說明。請參閱圖1,本發(fā)明實施例中音頻解碼方法的第一實施例具體的一次具體哈夫曼解碼的起始與終止過程依賴于11172-3協(xié)議第2.4.1.7節(jié)中函數(shù)HuffmancodebitsO的語法結(jié)構(gòu)定義以及第2.4.2.7節(jié)中對Huffmancodebits()的語義描述,在對MPEG音頻LayerIII利用哈夫曼解碼表進行解碼時,根據(jù)11172-3協(xié)議中第2.4.1.7節(jié)中對table_select的語法結(jié)構(gòu)以及2.4.2.7中對table_select的具體描述選取相應的哈夫曼解碼表進行解析;101、獲取哈夫曼解碼表中的第一個字節(jié)數(shù)據(jù);如果解析出的哈夫曼解碼表的表值是1、2、3、5、6時,獲取哈夫曼解碼表中的第一個字節(jié)數(shù)據(jù),該數(shù)據(jù)的值N與11172-3B.7的原始哈夫曼碼表中hlen的最大值相等,其中,哈夫曼解碼表采用8位存儲,并記索引0從哈夫曼解碼表的第二個字節(jié)開始依次標識。102、獲取待解碼數(shù)據(jù)時,每次獲取N位數(shù)據(jù);在獲取解碼數(shù)據(jù)時,每次獲取N位數(shù)據(jù),其中,N位數(shù)據(jù)的值為M。103、以M作為索引查詢哈夫曼解碼表中的數(shù)據(jù)。104、根據(jù)索引為M的數(shù)據(jù)解碼出X,y和hlen。進一步的,在對數(shù)據(jù)進行解碼前,需要先根據(jù)11172-3B.7的原始哈夫曼碼表生成哈夫曼解碼表,其中,生成的哈夫曼解碼表按hcod進行升序排列,并且滿足方程(1)權利要求1.一種音頻解碼方法,根據(jù)11172-3協(xié)議中第2.4.1.7節(jié)中對table—select的語法結(jié)構(gòu)以及2.4.2.7中對table_Select的具體描述選取相應的哈夫曼解碼表進行解析,其特征在于,包括如果解析出的哈夫曼解碼表的表值是1、2、3、5或者6時獲取所述哈夫曼解碼表中的第一個字節(jié)數(shù)據(jù),所述數(shù)據(jù)的值N與11172-.7的原始哈夫曼碼表中hlen的最大值相等,所述哈夫曼解碼表采用8位存儲,并從所述哈夫曼解碼表的第二個字節(jié)開始從索引0開始依次標識;獲取待解碼數(shù)據(jù)時,每次獲取N位數(shù)據(jù),所述N位數(shù)據(jù)的值為M;以所述M作為索引查詢所述哈夫曼解碼表中的數(shù)據(jù);根據(jù)索引為M的數(shù)據(jù)解碼出X,y和hlen。2.根據(jù)權利要求1所述的方法,其特征在于,所述方法還包括如果解析出的哈夫曼解碼表的表值是7、8、9、10、11或者12時取V位待解碼數(shù)據(jù)作為一級索引在所述哈夫曼解碼表的區(qū)域一中查詢,從查詢結(jié)果中得到hlen;其中,并記索引0從所述哈夫曼解碼表的第一個字節(jié)開始依次標識;所述V為分割hcod的臨界值,將11172-3B.7的原始哈夫曼碼表中的每個hcod分成2部分,如果hlen大于V,則hcod的第一部分長度為V,第二部分長度為leftlen,即hlen減去V的值,如果hlen小于等于V,則hcod的第一部分長度為hlen,第二部分長度為0;所述哈夫曼解碼表采用16位和8位混合存儲,每個表分成兩個存儲區(qū)域,第一個存儲區(qū)域總共存儲2的V次方個值,每個值以16位存儲,第二個存儲區(qū)域總共存儲表的長度tblbytes減去2的V加1次方的差值個值,每個值以8位存儲;判斷查詢得到的hlen的值是否為zeros,所述zeros表示0;如果查詢結(jié)果的hlen不為zeros,則從所述查詢結(jié)果中可以得到x,y和hlen;如果查詢結(jié)果的hlen為zeros,則獲取所述哈夫曼解碼表區(qū)域二的起始地址的字節(jié)偏移offset和二級索引區(qū)的讀取長度IeftlenmaxJy^ileftlenmax為相同組中l(wèi)eftlen的最大值,所述相同組指當hlen大于V時hcod前V位相同的所有hcod所在的行的集合;讀取leftlenmax位待解碼數(shù)據(jù)作為二級索引根據(jù)offset在區(qū)域二中進行查詢,根據(jù)查詢結(jié)果解碼出X,y和hlen,所述hlen的值等于leftlen加V的值。3.根據(jù)權利要求1或者權利要求2所述的方法,其特征在于,所述方法還包括所述哈夫曼解碼表按hcod進行升序排列。4.根據(jù)權利要求1所述的方法,其特征在于,所述方法還包括所述表值是1、2、3、5、6的各個哈夫曼解碼表中,χ以xbits個比特位表示,y以ybits個比特位表示,hlen以hlenbits個比特位表示,所述xbits、ybits和hlenbits滿足方程⑴5.根據(jù)權利要求4所述的方法,其特征在于,所述方法還包括對于同一個升序排列后的哈夫曼碼表的每一行,將根據(jù)所述方程(1)計算所得的每個表示值連續(xù)存儲2~(hlOTax_hlm)次。6.根據(jù)權利要求2所述的方法,其特征在于,所述方法還包括所述表值是7、8、9、10、11或者12的各個哈夫曼解碼表中,χ以xbits個比特位表示,y以ybits個比特位表示,hlen以hlenbits個比特位表示,所述xbits、ybits和hlenbits滿足方程⑵7.根據(jù)權利要求6所述的方法,其特征在于,所述方法還包括所述哈夫曼解碼表中,offset以offsetbits個比特位表示,Ieftlenmax以Ieftlenmaxbits個比牛寺4立表示,zeros以zerosbits個比牛寺4立表示,所述offsetbits、Ieftlenmaxbits禾口zerosbits滿足方禾呈(3)8.根據(jù)權利要求7所述的方法,其特征在于,所述方法還包括對于同一個升序排列后的哈夫曼碼表的每一行,如果hlen小于等于V,則將根據(jù)所述方程(計算所得的每個表示值(X,y,hlen)連續(xù)存儲2~(v_hlm)次到區(qū)域一中;其中,x,y,hlen的相對順序是任意的。9.根據(jù)權利要求8所述的方法,其特征在于,所述方法還包括對于同一個升序排列后的哈夫曼碼表的每一行,如果hlen大于V并且該行含有相同組的第一個hcod,則將根據(jù)所述方程(3)計算所得的每個表示值(offset,leftlenmax,zeros)存儲到區(qū)域一中,并且將所述offset的值增加;其中,0ffset,leftlenmax,zeros的相對順序是任意的。10.根據(jù)權利要求9所述的方法,其特征在于,所述方法還包括對于同一個升序排列后的哈夫曼碼表的每一行,如果hlen大于V,區(qū)域二的存儲表示為(x,y,leftlen),其中,χ以xbits位表示,y以ybits位表示,Ieftlen以Ieftlenbits位表示,并且xbits、ybits和Ieftlenbits滿足方程(4)11.一種音頻解碼裝置,其特征在于,包括第一獲取模塊,用于當根據(jù)11172-3協(xié)議中第2.4.1.7節(jié)中對table—select的語法結(jié)構(gòu)以及2.4.2.7中對table_Select的具體描述選取相應的哈夫曼解碼表進行解析,如果解析出的哈夫曼解碼表的表值是1、2、3、5或者6時,獲取所述哈夫曼解碼表中的第一個字節(jié)數(shù)據(jù),所述數(shù)據(jù)的值N與11172-3B.7的原始哈夫曼碼表中hlen的最大值相等,所述哈夫曼解碼表采用8位存儲,并記索引0從所述哈夫曼解碼表的第二個字節(jié)開始依次標識;第二獲取模塊,用于獲取待解碼數(shù)據(jù)時,根據(jù)所述N,每次獲取N位數(shù)據(jù),所述N位數(shù)據(jù)的值為M;第一查詢模塊,用于根據(jù)所述M,以所述M作為索引查詢所述哈夫曼解碼表中的數(shù)據(jù);第一解析模塊,用于根據(jù)查詢模塊查詢的索引為M的數(shù)據(jù)解碼出X,y和hlen。12.根據(jù)權利要求11所述的裝置,其特征在于,所述裝置還包括第二查詢模塊,用于當根據(jù)11172-3協(xié)議中第2.4.1.7節(jié)中對table_Select的語法結(jié)構(gòu)以及2.4.2.7中對table_Select的具體描述選取相應的哈夫曼解碼表進行解析,如果解析出的哈夫曼解碼表的表值是7、8、9、10、11或者12時,取V位待解碼數(shù)據(jù)作為一級索引在哈夫曼解碼表的區(qū)域一中查詢,從查詢結(jié)果中得到hlen;其中,并記索引0從所述哈夫曼解碼表的第一個字節(jié)開始依次標識,所述V為分割hcod的臨界值,將11172-3B.7的原始哈夫曼碼表中的每個hcod分成2部分,如果hlen大于V,則hcod的第一部分長度為V,第二部分長度為leftlen,即hlen減去V的值,如果hlen小于等于V,則hcod的第一部分長度為hlen,第二部分長度為0;所述哈夫曼解碼表采用16位和8位混合存儲,每個表分成兩個存儲區(qū)域,第一個存儲區(qū)域總共存儲2的V次方個值,每個值以16位存儲,第二個存儲區(qū)域總共存儲表的長度tblbytes減去2的V加1次方的差值個值,每個值以8位存儲;判斷模塊,用于判斷查詢得到的hlen的值是否為zeros,所述zeros表示0;第二解碼模塊,用于當判斷模塊判斷出hlen不為zeros時,則從第二查詢模塊的查詢結(jié)果中可以得到x,y和hlen;第三獲取模塊,用于當判斷模塊判斷出hlen為zeros時,則獲取所述哈夫曼解碼表區(qū)域二的起始地址的字節(jié)偏移offset和二級索引區(qū)的讀取長度Ieftlenmax,所述Ieftlenmax為相同組中l(wèi)eftlen的最大值,所述相同組指當hlen大于V時hcod前V位相同的所有hcod所在的行的集合;第三查詢模塊,用于根據(jù)第三獲取模塊獲取的leftIenmax和offset,讀取Ieftlenmax位待解碼數(shù)據(jù)作為二級索引根據(jù)offset在區(qū)域二中進行查詢,得到查詢結(jié)果;第三解碼模塊,用于根據(jù)第三查詢模塊的查詢結(jié)果解碼出x,y和hlen,所述hlen的值等于Ieftlen加V的值。全文摘要本發(fā)明公開了一種音頻解碼方法,本發(fā)明實施例還提供相應的裝置。本發(fā)明技術方案通過對表值為1、2、3、5或6的哈夫曼解碼表采用8位存儲,先獲取哈夫曼解碼表在的第一個字節(jié)數(shù)據(jù)的值N,N與原始哈夫曼表中的hlen的最大值相等,獲取待解碼數(shù)據(jù)時,每次獲取N位數(shù)據(jù),該N位數(shù)據(jù)的值為M,再以M為索引查詢哈夫曼解碼表中的數(shù)據(jù),并根據(jù)該數(shù)據(jù)進行解碼;該方法對哈夫曼解碼表以8位壓縮存儲,節(jié)省了存儲空間,在解碼時提高了數(shù)據(jù)讀取的CPUcache命中率,同時不增加查詢指令數(shù),從而提高解碼性能。文檔編號G10L19/00GK102136270SQ20101060732公開日2011年7月27日申請日期2010年12月27日優(yōu)先權日2010年12月27日發(fā)明者明亮,蘇延雄申請人:華為軟件技術有限公司