專(zhuān)利名稱(chēng)::快速解碼的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及數(shù)據(jù)解碼,具體地涉及可變長(zhǎng)度編碼的數(shù)據(jù)的解碼。具體地,本發(fā)明還為用中央處理器(CPU)快速有效地解碼霍夫曼編碼的數(shù)據(jù)提供了新方法和裝置。在多數(shù)計(jì)算機(jī)系統(tǒng)中,大量的應(yīng)用軟件是在數(shù)據(jù)進(jìn)行壓縮/解壓縮的同時(shí),在同一CPU中運(yùn)行的。隨著視頻數(shù)據(jù)正成為基于計(jì)算機(jī)的通信系統(tǒng)和應(yīng)用軟件的工作界面,就更另需要高分辨率、高品質(zhì)的圖象??焖賶嚎s/解壓縮,包括編碼/解碼,是用戶(hù)處理視頻數(shù)據(jù)時(shí)降低延遲的需要。霍夫曼編碼是一種最廣泛用于壓縮視頻數(shù)據(jù)的算法,霍夫曼編碼被用于各種圖象和視頻壓縮標(biāo)準(zhǔn),如聯(lián)合圖象專(zhuān)家組(JPEG),運(yùn)動(dòng)圖象專(zhuān)家組(MPEG),MPEG-Ⅱ,H.261,H.263和H.323。在此部分地或全部地參考上述標(biāo)準(zhǔn)?;舴蚵a是一種無(wú)損熵編碼技術(shù)。它利用概率論,對(duì)出現(xiàn)次數(shù)最頻繁的數(shù)據(jù)選擇最短的編碼。例如,當(dāng)編碼英語(yǔ)文本時(shí),在英語(yǔ)中很常用的字符“E”占2位碼字,而象“A”等非常用的字符占8位碼字。結(jié)果,霍夫曼編碼是如此進(jìn)行數(shù)據(jù)壓縮的,即把頻繁出現(xiàn)的數(shù)據(jù)指定為較短的編碼,把不太常出現(xiàn)的數(shù)據(jù)指定為較長(zhǎng)的編碼。這些指定的碼字被維持在接收和發(fā)送時(shí)使用的數(shù)據(jù)表中。關(guān)于霍夫曼編碼的更詳細(xì)的說(shuō)明,請(qǐng)參見(jiàn)“一種最小冗余碼結(jié)構(gòu)的方法”,IRE會(huì)議錄,第40卷,第9期,1952年9月,第1098-1101頁(yè),作者D.A.Huffman,在此整體地做為參考。而且,霍夫曼碼字的組成方法是,非代碼是其它代碼的前綴。這使得,盡管代碼的長(zhǎng)度可變,數(shù)據(jù)位流中的每個(gè)符號(hào)都有明確的解碼。對(duì)霍夫曼編碼特征的附加描述在下列書(shū)中能查到,DataCompressionBook,M&TBooks,1996,M.nelson和J.L.Gailly等著。在第31-35頁(yè)中,指出了基于樹(shù)型結(jié)構(gòu)的解碼算法。然而,這種算法不適用于諸如因特爾公司奔騰系列產(chǎn)品一類(lèi)的現(xiàn)行微處理器的快速解壓縮。因此,人們需要一種可以在共享其CUP資源的計(jì)算機(jī)系統(tǒng)中,更快速有效地壓縮/解壓縮,編碼/解碼的技術(shù)。本發(fā)明通過(guò)并行地將第一組接收數(shù)據(jù)的碼字與編碼長(zhǎng)度表中的相應(yīng)值比較,提高了數(shù)據(jù)解碼的速度和效率。如果比較的第一組碼字超出標(biāo)準(zhǔn),就將第二組接收數(shù)據(jù)的碼字與碼長(zhǎng)表中的相應(yīng)值比較。如果第一和第二組碼字之一中有一個(gè)碼字符合標(biāo)準(zhǔn),則確定來(lái)自第一和第二組碼字之一中的一個(gè)碼字符合標(biāo)準(zhǔn)。一旦符合標(biāo)準(zhǔn)的碼字被確定,就提供其符號(hào)值。在一個(gè)實(shí)施例中,公開(kāi)了一種包括屏蔽掉所接收的數(shù)據(jù)中的第一和第二組接收數(shù)據(jù)的碼字的方法。這種屏蔽操作確定了所接收的數(shù)據(jù)的哪一部分將與碼長(zhǎng)表的相應(yīng)值比較。例如,第一組碼字可以是從相同位流開(kāi)始點(diǎn)的2,3,4和5位。如果其中一個(gè)碼字包含在最大和最小碼值范圍內(nèi),就尋找可變長(zhǎng)編碼,并可將它應(yīng)用到霍夫曼查詢(xún)表中。這種屏蔽允許對(duì)該并行比較選擇不同的位長(zhǎng)。在另一個(gè)實(shí)施例中,公開(kāi)了一種僅用一個(gè)查詢(xún)表來(lái)索引霍夫曼編碼值的算法。這使所需的寄存器數(shù)最小化,并加速對(duì)霍夫曼編碼值的索引,在多種情況下這是有用的。該算法利用這樣一個(gè)表,對(duì)于每個(gè)霍夫曼編碼表它僅需要被計(jì)算一次。該算法基于兩個(gè)其他表的查詢(xún)結(jié)果來(lái)計(jì)算該表值。本發(fā)明是用擴(kuò)充多媒體容量的微處理器實(shí)施的。具體地,具有執(zhí)行圖形操作的內(nèi)部功能的微處理器,需要在多個(gè)象素上進(jìn)行單指令多數(shù)據(jù)流(SIMD)操作,它們適用于利用SIMD指令來(lái)執(zhí)行本發(fā)明的解碼過(guò)程。為進(jìn)一步了解本發(fā)明的實(shí)質(zhì)和優(yōu)點(diǎn),下面將結(jié)合附圖進(jìn)行說(shuō)明。圖1顯示了一種用于實(shí)現(xiàn)本發(fā)明方法的計(jì)算機(jī)系統(tǒng);圖2顯示了一種用于實(shí)現(xiàn)本發(fā)明方法的典型計(jì)算機(jī)系統(tǒng)100的簡(jiǎn)化系統(tǒng)方塊圖;圖3顯示了按照本發(fā)明一個(gè)實(shí)施例的一種SIMD系統(tǒng)300的簡(jiǎn)化方塊圖;圖4顯示了按照本發(fā)明一個(gè)實(shí)施例的一種系統(tǒng)400的簡(jiǎn)化方塊圖5顯示了按照本發(fā)明一個(gè)實(shí)施例的一種用于解碼霍夫曼編碼數(shù)據(jù)的順序解碼方法500;圖6顯示了按照本發(fā)明另一個(gè)實(shí)施例的一種用于解碼霍夫曼編碼數(shù)據(jù)的并行解碼方法600。圖1顯示了用于執(zhí)行本發(fā)明軟件的計(jì)算機(jī)系統(tǒng)。圖1顯示計(jì)算機(jī)系統(tǒng)100包括監(jiān)視器104,屏幕102,機(jī)箱108,鍵盤(pán)214(見(jiàn)圖2)和鼠標(biāo)110。鼠標(biāo)110有多個(gè)按鍵,如按鍵112。機(jī)箱108包括用于存儲(chǔ)和檢索包含本發(fā)明的軟件程序的CD-ROM光盤(pán)驅(qū)動(dòng)器106和硬盤(pán)驅(qū)動(dòng)器(未顯示)。盡管光盤(pán)106是可移動(dòng)的媒體,但其他可移動(dòng)媒體包括軟盤(pán)、磁帶機(jī)、壓縮(ZIP)驅(qū)動(dòng)器和閃存都可使用。機(jī)箱108還包括其他計(jì)算機(jī)部件,如處理器,內(nèi)存等。圖2顯示了一種用于執(zhí)行本發(fā)明軟件的典型計(jì)算機(jī)系統(tǒng)的簡(jiǎn)化方塊圖。如圖1所示,計(jì)算機(jī)系統(tǒng)100包括監(jiān)視器104,同時(shí)還包括輸入/輸出控制器204、系統(tǒng)內(nèi)存206、中央處理器208、揚(yáng)聲器210、可移動(dòng)磁盤(pán)212、鍵盤(pán)214、固定磁盤(pán)216、和網(wǎng)絡(luò)接口218等子系統(tǒng)。其它適用于本發(fā)明的計(jì)算機(jī)系統(tǒng)還可包括其它子系統(tǒng)。例如,某種計(jì)算機(jī)系統(tǒng)包括不止一個(gè)處理器208(如多處理器系統(tǒng))或高速緩沖存儲(chǔ)器。箭頭220代表計(jì)算機(jī)系統(tǒng)100的系統(tǒng)總線構(gòu)架,這些箭頭220表示連接子系統(tǒng)的各種互連方案。例如,本地總線可用于將中央處理器208與系統(tǒng)內(nèi)存206連接。為獲取圖象數(shù)據(jù),圖象獲取設(shè)備,如電荷耦合器件(CCD)攝象機(jī)被連接到計(jì)算機(jī)系統(tǒng)100。圖象獲取設(shè)備通過(guò)相同或其它總線結(jié)構(gòu)如通用串行總線(USB)等連接到計(jì)算機(jī)系統(tǒng)100。USB可即插即用,它通過(guò)與設(shè)備驅(qū)動(dòng)程序數(shù)據(jù)庫(kù)相匹配的識(shí)別碼,能支持100多種外設(shè)。USB還可通過(guò)輸入/輸出控制器204或網(wǎng)絡(luò)接口218連接到計(jì)算機(jī)系統(tǒng)100。另外,計(jì)算機(jī)系統(tǒng)100被設(shè)置為通過(guò)輸入/輸出控制器204或網(wǎng)絡(luò)接口218連接到因特網(wǎng)。因此,數(shù)據(jù)還可通過(guò)各種設(shè)備輸入到計(jì)算機(jī)系統(tǒng)100或從其輸出。圖2所示的計(jì)算機(jī)系統(tǒng)只是一個(gè)適用于本發(fā)明的計(jì)算機(jī)系統(tǒng)的例子,其它適用于本發(fā)明的子系統(tǒng)配置對(duì)一般專(zhuān)業(yè)人員來(lái)說(shuō)是顯而易見(jiàn)的。本發(fā)明適用任何包括單指令多數(shù)據(jù)流(SIMD)的微處理器。例如,因特爾公司的多媒體微處理器(IntelMMXTM),SUN公司的具有可視化指令集的UltraSPARC,高級(jí)微驅(qū)動(dòng)設(shè)備公司的3Dnow!TM,具有數(shù)據(jù)流SIMD擴(kuò)展的IntelMMXTM,等均可利用。為了舉例,將對(duì)因特爾公司的多媒體技術(shù)進(jìn)行描述,多媒體技術(shù)是1997年1月推出的,用于加速中央處理器所需的多媒體應(yīng)用軟件。因特爾公司的多媒體技術(shù)提供一套指令(57個(gè)指令)。它可在同一構(gòu)架的一個(gè)64位單元中實(shí)現(xiàn)加、減、乘、邏輯和移位運(yùn)算等。這個(gè)64位單元還可當(dāng)作8字節(jié),4個(gè)字,2個(gè)詞或1個(gè)四元詞。飽和算法和打包/解包數(shù)據(jù)指令以及在多媒體寄存器和整數(shù)寄存器間轉(zhuǎn)換的指令也被提供了。其它關(guān)于多媒體技術(shù)的信息在“因特爾公司多媒體技術(shù)構(gòu)架開(kāi)發(fā)手冊(cè)介紹”(因特爾公司1996年)中有介紹。圖3顯示了SIMD系統(tǒng)300的簡(jiǎn)化方塊圖。該系統(tǒng)300包括多媒體處理器302,它支持57個(gè)指令。多媒體處理器在CPU中執(zhí)行或在一單獨(dú)芯片中運(yùn)行。多媒體處理器302從寄存器304a-h中接收數(shù)據(jù),每個(gè)寄存器304a-h有64位。每個(gè)寄存器可容納8*8,16*4,32*2,64*1位數(shù)據(jù)。多媒體處理器302在每個(gè)程序循環(huán)中從寄存器304a-h中接收數(shù)據(jù),執(zhí)行所需的運(yùn)算。經(jīng)過(guò)處理的數(shù)據(jù)存儲(chǔ)到內(nèi)存306中或返回寄存器304a-h。內(nèi)存306在多媒體處理器302中運(yùn)行或?yàn)楣蚕泶鎯?chǔ)器。多媒體處理器302在同一時(shí)間再對(duì)不同的數(shù)據(jù)執(zhí)行同樣的步驟。因此,它有了SIMD構(gòu)架。圖4顯示了根據(jù)本發(fā)明一個(gè)實(shí)施例的系統(tǒng)400的簡(jiǎn)化方塊圖。攝象機(jī)402捕獲圖象并將它們提供到位流轉(zhuǎn)換模塊404,攝象機(jī)402包括用于模擬數(shù)據(jù)到數(shù)字?jǐn)?shù)據(jù)轉(zhuǎn)換的電路。攝象機(jī)402還包括用于數(shù)據(jù)壓縮和/或編碼的電路。攝象機(jī)402和位流轉(zhuǎn)換器404通過(guò)連接器406進(jìn)行連接。連接器可從其它一般專(zhuān)業(yè)人員熟悉的連接器和總線結(jié)構(gòu)中選擇。連接器406最好是USB連接,在一些構(gòu)架中,USB提供每秒12兆比帶寬。連接器406還可是可提供每秒100兆比,200,400或800兆比帶寬的火線(IEEE1394)。對(duì)某些實(shí)例來(lái)說(shuō),連接器最好是USB,因?yàn)樗强商峁└哌_(dá)500毫安和5伏的功率總線。USB提供的功率可用于運(yùn)行連接到總線的驅(qū)動(dòng)設(shè)備,如攝象機(jī)402。此外,USB成本低。在一些結(jié)構(gòu)中,由于USB沒(méi)有象火線一樣的帶寬,數(shù)據(jù)在傳送給USB前首先要進(jìn)行壓縮。此外,攝象機(jī)402可包括壓縮電路,在發(fā)送數(shù)據(jù)到位流轉(zhuǎn)換器404前壓縮獲取的圖像。攝象機(jī)402可是其他獲取圖像的驅(qū)動(dòng)設(shè)備,包括CCD,互補(bǔ)金屬氧化物半導(dǎo)體(CMOS)等。位流轉(zhuǎn)換模塊404可被用于將連續(xù)傳送數(shù)據(jù)轉(zhuǎn)換成數(shù)據(jù)包。例如,位流轉(zhuǎn)換塊404對(duì)每幀圖像進(jìn)行累加,并向解壓縮模塊408發(fā)送累加的數(shù)據(jù)。每幀數(shù)據(jù)的大小是任意的,最好是352*288像素。幀還可是320*240,176*144或160*120像素。在一些構(gòu)架中,每幀數(shù)據(jù)還可是640*480像素。解壓縮模塊408解壓和/或解碼從位流轉(zhuǎn)換模塊404中接收的數(shù)據(jù)。解碼可依據(jù)霍夫曼編碼,算法碼,其它類(lèi)型平均信息量碼等。位流轉(zhuǎn)換模塊404還包括存儲(chǔ)從攝象機(jī)402中接收的數(shù)據(jù)和向解壓縮模塊408發(fā)送的數(shù)據(jù)的緩沖區(qū)。解壓縮模塊408中的解壓縮數(shù)據(jù)提供給彩色轉(zhuǎn)化模塊410。解壓縮模塊408中的數(shù)據(jù)可是任意格式,但最好是YUV格式,這里,Y是亮度,U是紅色度(也稱(chēng)CR),V是藍(lán)色度(也稱(chēng)CB)。轉(zhuǎn)換模塊410把YUV格式的數(shù)據(jù)轉(zhuǎn)換為適合顯示器412格式的數(shù)據(jù),包括RBG(紅綠藍(lán))。顯示器412可以是包括打印機(jī),手持設(shè)備等在內(nèi)的輸出設(shè)備。系統(tǒng)400還包括為顯示器412、彩色轉(zhuǎn)換模塊410和位流轉(zhuǎn)換模塊404提供用于存儲(chǔ)的內(nèi)存414。內(nèi)存414可是諸如動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM),擴(kuò)充數(shù)據(jù)總線動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(EDODRAM),同步動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(SDRAM),視頻隨機(jī)存儲(chǔ)器(VRAM),靜態(tài)隨機(jī)存儲(chǔ)器(SRAM)等。位流轉(zhuǎn)換模塊404,彩色轉(zhuǎn)換模塊410和顯示器412可有本地內(nèi)存。解壓縮模塊408根據(jù)其存儲(chǔ)需要,也可有自己的存儲(chǔ)器或使用內(nèi)存414。圖5顯示了根據(jù)本發(fā)明一個(gè)實(shí)施例的用于解碼霍夫曼編碼數(shù)據(jù)的順序解碼方法500。該順序解碼方法500用下列4個(gè)表得出解碼值MINCODE[I]-長(zhǎng)度為I的碼字的最小值;MAXCODE[I]-長(zhǎng)度為I的碼字的最大值;HUFFVAL[J]-與第J個(gè)碼字相符合的符號(hào)值表;VALPTR[I]-HUFFVAL列表的起始索引,該值是用長(zhǎng)度為I的碼字解碼的。所有碼字的最小長(zhǎng)度是MinLength,碼字的最大長(zhǎng)度是MaxLength,因此,MINCODE,MAXCODE和VALPTR表的大小等于[最大長(zhǎng)度值-最小長(zhǎng)度值+1]。HUFFVAL的大小依賴(lài)于碼字的數(shù)量,用N表示。對(duì)每個(gè)霍夫曼編碼,MINCODE,MAXCODE和VALPTR這三個(gè)表是解碼HUFFVAL表的指針。在步驟502,在解碼時(shí)接收位流數(shù)據(jù);在步驟504,設(shè)定當(dāng)前碼長(zhǎng)值I為最小長(zhǎng)度;步驟504還將變量CODE初始化為下一位[最小長(zhǎng)度],它包括從步驟502提供的位流中得到的碼字;步驟506比較CODE和最大CODE[I]的值,如果CODE值大于最大CODE[I]值,則當(dāng)前碼比I長(zhǎng),I是在步驟504處首先設(shè)置的最小值,步驟508接著步驟506。在步驟508中,I值增加1,同時(shí),步驟508還讀取位流中的下一位到CODE,并在當(dāng)前CODE值上左邏輯移位(SLL)一位來(lái)更新CODE值,并用位流中的下一位(NEXTBIT)來(lái)填充CODE的最低有效位。另一方面,如果在步驟506中,碼值不大于最大CODE[I]的值,則當(dāng)前碼字長(zhǎng)度等于或小于I,就進(jìn)入步驟510,步驟510解碼符號(hào)值,計(jì)算指針J的碼值,并用J計(jì)算符號(hào)值。在步驟510中,賦值J為VALPTR[I-最小長(zhǎng)度]+CODE-最小碼[I-最小長(zhǎng)度],步驟510通過(guò)給HUFFVAL[J]設(shè)置VALUE值來(lái)計(jì)算符號(hào)值。步驟510執(zhí)行3個(gè)表檢索,即VALPTR,MINCODE和HUFFVAL,以計(jì)算符號(hào)值。計(jì)算出的符號(hào)值(VALUE)輸出給步驟512。順序解碼方法500再重復(fù)下一個(gè)碼字。用于編解碼的霍夫曼表可自定義。許多編碼標(biāo)準(zhǔn)都提供缺省的霍夫曼表。下表1是一個(gè)根據(jù)JPEG標(biāo)準(zhǔn)推薦的亮度DC差分的霍夫曼表。詳細(xì)信息參見(jiàn)“JPEG-靜止圖像數(shù)據(jù)壓縮標(biāo)準(zhǔn)”,附錄A,國(guó)際標(biāo)準(zhǔn)化組織ISODIS10981-1,需求和指導(dǎo)方針,第F-26頁(yè),VanNostrandReinhold,1993,作者WilliamB.Pennebaker和JoanL.Mitchell,在此僅做參考。在JPEG標(biāo)準(zhǔn)中,最小長(zhǎng)度是2,最大長(zhǎng)度為16。碼字按長(zhǎng)度分組,每組按升序排序。最小碼值和最大碼值指定為16位整數(shù)。<tablesid="table1"num="001"><table>霍夫曼碼值編碼長(zhǎng)度碼字霍夫曼編碼0200013010223011333100443101553110664111014751111030861111106297111111012610811111110254119111111110510</table></tables>表1在表1中,碼字是位流中的實(shí)際碼字;碼長(zhǎng)度是每個(gè)碼字的長(zhǎng)度;霍夫曼碼是每個(gè)碼字的值;霍夫曼碼值是每個(gè)符號(hào)的霍夫曼碼。例,從表1中取值,最小長(zhǎng)度為2,最大長(zhǎng)度為9,用順序解碼方法500得出的3個(gè)表值為MINCODE[8]={0,2,14,30,62,126,254,510};MAXCODE[8]={0,6,14,30,62,126,254,510};VALPTR[8]={0,1,6,7,8,9,10,11}。例如,考慮到輸入位流“010”,步驟504將I賦值為2,CODE為01。由于“01”大于MAXCODE[2-2]的值“0”,故步驟506返回YES。在步驟508中,I增加到3,CODE值為“010”。則再重復(fù)步驟506,由于“010”小于MAXCODE[3-2]的值“6”,步驟506返回NO,步驟510賦值J為1,同時(shí)檢索符號(hào)值HUFFVAL[I],并在步驟512中輸出符號(hào)值(VALUE)。因此,順序法500重復(fù)將位流移位為CODE碼,比較當(dāng)前碼和相同長(zhǎng)度的最大碼。一旦碼長(zhǎng)已知,解碼每個(gè)值需要兩個(gè)加數(shù)并檢索3個(gè)表。事實(shí)上,由于編碼長(zhǎng)度被順序搜索,這種算法是順序的。在檢查I值長(zhǎng)度前,實(shí)際編碼長(zhǎng)度I,I+1,I+2等是不確定的。圖6顯示了按照本發(fā)明另一個(gè)實(shí)施例的用于解碼霍夫曼編碼數(shù)據(jù)的并行解碼方法600。為了舉例,就象參考圖3所討論的那樣,來(lái)描述并行解碼方法600的實(shí)施。而且參考圖5和表1所談到的JPEG樣值和也用于該實(shí)施例中??墒牵⑿薪獯a方法600可用任意包括單指令多數(shù)據(jù)流的處理器執(zhí)行,包括Intel公司的MMX多媒體系統(tǒng)微處理器,SUN公司的具有可視化指令集的SPARC工作站系統(tǒng),AdvanceMicroDevice公司的3Dnow!TM,具有單指令多數(shù)據(jù)流擴(kuò)展的IntelMMXTM等。正如上面提到的,多媒體技術(shù)可用同樣的指令運(yùn)行64位。一個(gè)64位可視為8字節(jié),4個(gè)字,2個(gè)詞或一個(gè)四位詞。例如表1,64位視為4個(gè)16位寄存器(或4個(gè)字),這是因?yàn)楸?中的最大碼字長(zhǎng)度是9。在圖6中,MMX多媒體指令PSRL,PSLL和PSRA被用于轉(zhuǎn)移所選變量的內(nèi)容。PSRL代表數(shù)據(jù)包向右邏輯轉(zhuǎn)移,PSLL代表數(shù)據(jù)包向左邏輯轉(zhuǎn)移,PSRA代表數(shù)據(jù)包向右算法轉(zhuǎn)移。在步驟602,并行解碼方法600接收位流數(shù)據(jù),在步驟604,位流被排列為具有l(wèi)ittle-endian(小-安迪安)格式的4位格式(或4位碼)。即如果原始位流是b0,b1,b2,b3……(bi代表字節(jié)I)形式,則轉(zhuǎn)換的位流是b1,b0,b1,b0,b1,b0,b1,b0,b3,b2,b3,b2,b3,b2,b3,b2,b3,b2,……形式。這種變換用每16位字5.5循環(huán)來(lái)執(zhí)行。在步驟606中,I的值,掩碼和碼4(CODE4)被初始化。正如上面JPEG例子提到的,I被賦值為2,步驟606將碼4賦值為位流中4*16位碼(或4位碼)的第一集合。并行解碼方法600用MASK(掩碼)屏蔽用于步驟608中比較操作的位。MASK初始值位“1100,0000,0000,0000,1110,0000,0000,0000,1111,0000,0000,0000,1111,1000,0000,0000b”或“0xC000,E000,F(xiàn)000,F(xiàn)800.”這是編碼長(zhǎng)度2至5的掩碼位,它們?cè)诓⑿薪獯a方法600的第一次迭代中被查出。在步驟608,CODE4被MASK值屏蔽掉。在步驟608,賦值MAXCODE4為MAXCODE4_P[I~I(xiàn)+3],它表示I,I+1,I+2,和I+3的MAXCODE4P值。因此對(duì)于四個(gè)連續(xù)的碼長(zhǎng),MAXCODE4始終保持最大值。由于MAXCODE4的4個(gè)值被裝載在一個(gè)指令中,并行解碼方法600的MAXCODE表如下I=0當(dāng)I小于(最大長(zhǎng)度-最小長(zhǎng)度+2)時(shí),執(zhí)行J=(I/4)*4+3-I%4MAXCODE_P[I]=(2(16-最小長(zhǎng)度-J)*MAXCODE[J]+1I=I+1結(jié)束其中,“J”代表舍入部分,“%”代表模操作,MAXCODE_P的值代表未標(biāo)記的16位整數(shù)。每個(gè)霍夫曼表僅產(chǎn)生一次MAXCODE表。關(guān)于圖5的連續(xù)霍夫曼解碼算法,并行算法的MAXCODE表具有如下值MAXCODE_P[8]={61441,57345,49153,1,65281,65025,64513,63489}在本例中,本表的維數(shù)必須是4的倍數(shù)。同時(shí),霍夫曼編碼表中不允許碼長(zhǎng)為0的值。在步驟610,比較MAXCODE4的值和在步驟606和608中被初始化和屏蔽掉的CODE4的大小。在使用多媒體技術(shù)的裝置中,由于多媒體指令PCMPEQ只比較標(biāo)記的字,這種比較操作由一個(gè)具有飽和的無(wú)正負(fù)標(biāo)記結(jié)構(gòu)和零的比較過(guò)程來(lái)執(zhí)行。MAXCODE+1的值儲(chǔ)存到MAXCODE4中。如果CODE4大于MAXCODE4,則進(jìn)入步驟612,I增加4,MASK值向右算術(shù)位移4位。MASK的新值產(chǎn)生出下4編碼長(zhǎng)度(6到9)的位掩碼。執(zhí)行完612步后,再重復(fù)608和610步驟。據(jù)此,在表1中,步驟608和610重復(fù)兩次,一次是從編碼長(zhǎng)度2到5,一次是從6到9。直到步驟610的返回值是YES,才執(zhí)行步驟614,在步驟614中,確定檢索的4個(gè)長(zhǎng)度之一包括符號(hào)。據(jù)此,步驟614計(jì)算DIF值,DIF等于[MAXCODE4-CODE4-1]邏輯向右位移4位。步驟610同時(shí)查找表,提供找到的符號(hào)值(VALUE)。步驟614在表HUFFVAL_P中查找符號(hào)值(VALUE)。在本例中,假設(shè)1<J<17,表HUFFVAL_P作為索引由[I+16*(MAXCODE[I]-CODE)]產(chǎn)生。令M=max(MAXCODE[I]-MINCODE[I]);I=0,1,2,…..,最大長(zhǎng)度-最小長(zhǎng)度。表HUFFVAL_P的大小為[16*(M+2)]。令COENUM[I]等于編碼長(zhǎng)度為(I+最小長(zhǎng)度)的碼字?jǐn)?shù)。令CODE[J]等于編碼長(zhǎng)度為I的第J個(gè)編碼值。HUFFVAL表的各項(xiàng)計(jì)算如下I=0當(dāng)I小于(最大長(zhǎng)度-最小長(zhǎng)度+1)時(shí),執(zhí)行J=0當(dāng)J小于CODENUM[I]時(shí),執(zhí)行HUFFVAL_P[I+16*(MAXCODE[I]+1-CODE[J])]=HUFFVAL[VALPTR[I]+CODE[J]-MINCODE[I]J=J+1結(jié)束I=I+1結(jié)束據(jù)此,表HUFFVAL_P將依據(jù)霍夫曼編碼數(shù)將成為無(wú)正負(fù)標(biāo)記的16位整數(shù)的最大值。通過(guò)將順序法的3個(gè)表組合成一個(gè),檢索霍夫曼編碼值的指明顯減小。同時(shí),減小的表號(hào)存儲(chǔ)有效寄存器空間,另外,當(dāng)確定編碼長(zhǎng)度時(shí)計(jì)算出(MAXCODE[I]+1-CODE),并且可由查詢(xún)表獲得。在步驟616,計(jì)算出的符號(hào)值(VALUE)被輸出。一旦當(dāng)前霍夫曼編碼的長(zhǎng)度在步驟614中被確定,當(dāng)前4*16位碼字即向左位移,下一個(gè)4*16位碼字也位移相同位數(shù)。然后開(kāi)始下一個(gè)霍夫曼編碼的解碼。據(jù)此,并行解碼方法600從位流中一次讀取4位數(shù)據(jù)。每個(gè)連續(xù)4位長(zhǎng)度被并行地檢查,以確定當(dāng)前編碼是否在范圍之內(nèi)。在連續(xù)算法覆蓋1到16的范圍,需要16次檢查,而現(xiàn)在只需4次檢查就可覆蓋相同的范圍。其它改進(jìn)是合并3個(gè)檢索表,以便只解碼一個(gè)表。它使計(jì)算和寄存器的使用最小化,這在許多情況下是有用的。長(zhǎng)度從1到8的實(shí)例在上例中,編碼長(zhǎng)度在2到9之間。如果編碼的長(zhǎng)度在1和8之間,則解碼是以8位為單元進(jìn)行的。對(duì)于每個(gè)碼字,最多需要1個(gè)檢查,而不是8個(gè)。這就需要位流擴(kuò)充到8*8位。例如,如果輸入位流是“b0,b1,…”(bi代表i字節(jié)),則轉(zhuǎn)換的位流為“b0,b0,b0,b0,b0,b0,b0,b0,b1,b1,b1,b1,b1,b1,b1,b1,…”初始位掩碼為“10000000,11000000,11100000,11110000,11111000,11111100,11111110,11111111b”或“0x80C0,EOF8,F(xiàn)8FC,F(xiàn)EFF.”表中各項(xiàng)如下產(chǎn)生I=0當(dāng)I小于(最大長(zhǎng)度-最小長(zhǎng)度+1)時(shí),執(zhí)行J=(I/8)*8+7-I%8MAXCODE_P[I]=(2(8-最小長(zhǎng)度-1)*MAXCODE[J]+1I=I+1結(jié)束I=1當(dāng)I小于9時(shí),執(zhí)行J=0當(dāng)J小于CODENUM[I]時(shí),執(zhí)行HUFFVAL_P[I+8*(MAXCODE[I]+1-CODE[J])]=HUFFVAL[VALPTR[I]+CODE[J]-MINCODE[I]]J=J+1結(jié)束I=I+1結(jié)束HUFFVAL_P表值為無(wú)正負(fù)的8位整數(shù)。MAXCODE_P表值為無(wú)正負(fù)8位整數(shù)。長(zhǎng)度從1到32的實(shí)例如果編碼長(zhǎng)度在1到32之間,解碼可以32位為單元進(jìn)行。為了確定碼字長(zhǎng)度最多需要8個(gè)檢查,而不是16個(gè)。位流擴(kuò)充到2*32位,如下輸入位流b0,b1,b2,b3,b4,b5,b6,b7,…輸出位流b3,b2,b1,b0,b3,b2,b1,b0,b7,b6,b5,b4,b7,b6,b5,b4,…初始位掩碼是“10000000,00000000,00000000,00000000,11000000,00000000,00000000,00000000,00000000,b”或“0x8000,0000,C000,0000?!北砀黜?xiàng)運(yùn)行如下I=0當(dāng)I小于32時(shí),執(zhí)行J=(I/2)*2+1-I%2MAXCODE_P[I]=(2(32-最小長(zhǎng)度-1)*MAXCODE[J])+1I=I+1結(jié)束I=1當(dāng)I小于32時(shí),執(zhí)行J=0當(dāng)J小于CODENUM[I]時(shí),執(zhí)行HUFFVAL_P[I+32*(MAXCODE[I]+1-CODE[J])]=HUFFVAL[VALPTR[I]+CODE[J]-MINCODE[I]]J=J+1結(jié)束I=I+1結(jié)束因此,MAXCODE_P表值為無(wú)正負(fù)的32位整數(shù)。HUFFVAL_P表值為無(wú)正負(fù)的32位整數(shù)的最大值。評(píng)估性能建議的并行霍夫曼解碼算法用多媒體匯編碼完成。對(duì)于此部分,從原始位流擴(kuò)展到4*16位部分的CPU工作時(shí)間包括在解碼時(shí)間內(nèi)。如果長(zhǎng)度為I的碼字出現(xiàn)的概率為2-1,則碼字具有長(zhǎng)度I的概率為CODENUM[I]*2-1。令T[I]為解碼長(zhǎng)度為I的碼字的時(shí)間,一個(gè)符號(hào)的平均解碼時(shí)間計(jì)算如下T‾=ΣI=216CODENUM[I]*T[I]2I]]>假設(shè)用連續(xù)算法對(duì)10個(gè)通用中間格式(CIF)圖像壓縮,其中,1/4離散余弦變換系數(shù)被RUN-LEVEL符號(hào)編碼,則要解碼的霍夫曼編碼計(jì)算如下(352*288/4)*10=253,440盡管選擇的是離散余弦變換,顯而易見(jiàn),一般專(zhuān)業(yè)人員均可應(yīng)用,如差分脈碼調(diào)制技術(shù)(DPCM),小波,子波段變換,向量量化等。應(yīng)用166兆赫因特爾多媒體奔騰處理器,最佳情況(全部編碼均為2到5位長(zhǎng))、最差情況(全部編碼均為12到15位長(zhǎng))和平均情況(編碼長(zhǎng)度分散為2到16位)的壓縮時(shí)間,如表2所示<tablesid="table2"num="002"><table>解碼時(shí)間(千分之一秒)并行霍夫曼解碼最好情況111一般情況113最差情況218</table></tables>表2表2說(shuō)明,當(dāng)一般情況性能優(yōu)良時(shí),并行算法明顯地減少最差情況的解碼時(shí)間。另外,通過(guò)進(jìn)一步優(yōu)化匯編編碼能提供較好結(jié)果。對(duì)于一般專(zhuān)業(yè)人員來(lái)說(shuō),在不脫離本發(fā)明的基本特性和精神情況下,可用其它特定格式來(lái)實(shí)施本發(fā)明。例如,本發(fā)明應(yīng)用于單指令多數(shù)據(jù)流系統(tǒng),如SUN公司的具有可視化指令集的UltraSPARC,AdvanceMicroDevice公司的3Dnow!TM等均可利用。繼奔騰Ⅱ添加流式單指令多數(shù)據(jù)流之后,因特爾公司又推出新一代奔騰Ⅲ處理器。奔騰Ⅲ提供70個(gè)新的指令。許多指令支持浮點(diǎn)型單指令多數(shù)據(jù)流系統(tǒng),即3D應(yīng)用。這些指令針對(duì)MPEG(移動(dòng)圖象專(zhuān)家組)編碼/解碼(運(yùn)動(dòng)估計(jì),運(yùn)動(dòng)補(bǔ)償)。一般專(zhuān)業(yè)人員應(yīng)了解,這些新的指令有利于進(jìn)一步加速本發(fā)明的解碼技術(shù)。例如,最小最大化操作可加速編碼長(zhǎng)度的檢測(cè)。嵌入指令轉(zhuǎn)換整數(shù)寄存器,部分多媒體寄存器也提供加速。同樣,廣播指令可以更有效地方式復(fù)制位流。本發(fā)明可在計(jì)算機(jī)系統(tǒng)中實(shí)現(xiàn)。例如,方法500和600可在外設(shè)部件互連標(biāo)準(zhǔn)卡(PCI)上實(shí)現(xiàn)。PCI卡安裝個(gè)人計(jì)算機(jī)PCI總線上。同樣,其它總線技術(shù),如NUBUS(網(wǎng)絡(luò)用戶(hù)總線),ISA(工業(yè)標(biāo)準(zhǔn)結(jié)構(gòu)),EISA(擴(kuò)展工業(yè)標(biāo)準(zhǔn)結(jié)構(gòu)),USB(通用串行總線構(gòu)架),1394Firewire(火線)和AGP(圖形加速端口)均可被利用。此外,本發(fā)明可通過(guò)利用例行程序和功能部件來(lái)實(shí)現(xiàn),如高速緩存,新的指令集合,多處理器系統(tǒng)及其替代物。因此,本發(fā)明范圍的限定,請(qǐng)參考所附的權(quán)利要求書(shū)。權(quán)利要求1.一種數(shù)據(jù)解碼方法,包括接收待解碼的數(shù)據(jù);并行地將第一組接收數(shù)據(jù)的碼字與編碼長(zhǎng)度表的相應(yīng)值比較;如果第一組碼字超出標(biāo)準(zhǔn),將第二組接收數(shù)據(jù)的碼字與編碼長(zhǎng)度表的相應(yīng)值比較;如果第一和第二組被比較的碼字之一中的一組碼字中有一個(gè)碼字符合標(biāo)準(zhǔn),則確定來(lái)自第一和第二組被比較的碼字之一中的哪一個(gè)碼字符合標(biāo)準(zhǔn);提供上述確定的碼字的符號(hào)值。2.按照權(quán)利要求1的方法,其中,所接收的數(shù)據(jù)是可變長(zhǎng)編碼的。3.按照權(quán)利要求2的方法,其中,可變長(zhǎng)編碼的數(shù)據(jù)是用包括霍夫曼編碼和算法編碼的組群中挑選的方法而形成的。4.按照權(quán)利要求1的方法,其中,第一、第二組碼字是從已接收數(shù)據(jù)的連續(xù)數(shù)組中挑選的。5.按照權(quán)利要求1的方法,其中,已接收數(shù)據(jù)的第一、第二組碼字是彼此不同的。6.按照權(quán)利要求1的方法,進(jìn)一步包括編碼長(zhǎng)度表的計(jì)算。7.按照權(quán)利要求6的方法,其中,編碼長(zhǎng)度表包括碼字的最大長(zhǎng)度值,它用于對(duì)接收的數(shù)據(jù)進(jìn)行編碼的編碼技術(shù)。8.按照權(quán)利要求1的方法,進(jìn)一步包括屏蔽掉第一、第二組接收數(shù)據(jù)的碼字,這種屏蔽操作確定了接收數(shù)據(jù)的哪一部分要與編碼長(zhǎng)度表中的相應(yīng)值比較。9.按照權(quán)利要求1的方法,其中,所說(shuō)標(biāo)準(zhǔn)是,第一、第二組碼字小于或等于編碼長(zhǎng)度表中的相應(yīng)值。10.按照權(quán)利要求1的方法,其中,第一、第二組碼字均包括已接收數(shù)據(jù)的重迭碼字。11.按照權(quán)利要求1的方法,其中,第一、第二組碼字均包括4*16位的接收數(shù)據(jù)。12.一種數(shù)據(jù)解碼方法,包括接收待解碼的數(shù)據(jù),接收的數(shù)據(jù)是司變長(zhǎng)編碼的;計(jì)算編碼長(zhǎng)度表,編碼長(zhǎng)度表包括最大碼字長(zhǎng)度值,該碼字用于編碼接收數(shù)據(jù)的編碼技術(shù);屏蔽接收數(shù)據(jù)中的第一組碼字;并行地將屏蔽掉的第一組碼字與編碼長(zhǎng)度表中的相應(yīng)值比較;如果比較的第一組碼字大于編碼長(zhǎng)度表中的相應(yīng)值,則將接收數(shù)據(jù)的第二組碼字與編碼長(zhǎng)度表中的相應(yīng)值比較;屏蔽接收數(shù)據(jù)的第二組碼字,屏蔽掉的第二組碼字確定接收數(shù)據(jù)中的哪一部分要與編碼長(zhǎng)度表中的相應(yīng)值比較;如果第一、第二組被比較的碼字中的一組碼字中有一個(gè)碼字小于或等于編碼長(zhǎng)度表中的相應(yīng)值,則確定第一、第二組碼字中的哪一個(gè)碼字符合標(biāo)準(zhǔn);為確定的碼字提供符號(hào)值。13.一種計(jì)算機(jī)程序產(chǎn)品,包括計(jì)算機(jī)可用的媒介,其中具有計(jì)算機(jī)可讀的用于解碼數(shù)據(jù)的編碼,所說(shuō)計(jì)算機(jī)編碼包括執(zhí)行以下步驟的指令接收要被解碼的數(shù)據(jù);并行地將第一組接收數(shù)據(jù)的碼字與編碼長(zhǎng)度表的相應(yīng)值比較;如果該被比較的第一組碼字超出標(biāo)準(zhǔn),將第二接收數(shù)據(jù)的碼字與編碼長(zhǎng)度表的相應(yīng)值比較;如果第一和第二組被比較的碼字之一中有一個(gè)碼字符合標(biāo)準(zhǔn),則確定來(lái)自第一和第二組被比較的碼字之一中的哪一個(gè)碼字符合標(biāo)準(zhǔn);提供上述確定的碼字的符號(hào)值。14.一種從攝象機(jī)傳送圖像的系統(tǒng),該系統(tǒng)包括連接到攝象機(jī)的編碼器,該編碼器如此構(gòu)成,以便通過(guò)對(duì)給圖像進(jìn)行可變長(zhǎng)編碼,而對(duì)從攝象機(jī)接收的圖像進(jìn)行編碼;與所述編碼器連接的位流轉(zhuǎn)換器,該位流轉(zhuǎn)換器如此構(gòu)成,以將順序傳輸?shù)臄?shù)據(jù)轉(zhuǎn)換成數(shù)據(jù)包,該傳輸?shù)臄?shù)據(jù)包括形成圖象的數(shù)據(jù);連接器,將編碼器和位流轉(zhuǎn)換器連接在一起;解碼器,連接到位流轉(zhuǎn)換器,該解碼器如此構(gòu)成,以解碼編碼的圖像,該解碼器包括包含指令的編碼,用于接收要被解碼的數(shù)據(jù);并行地將第一組接收數(shù)據(jù)的碼字與編碼長(zhǎng)度表的相應(yīng)值比較;如果被比較的第一組碼字超出標(biāo)準(zhǔn),將第二接收數(shù)據(jù)的碼字與編碼長(zhǎng)度表的相應(yīng)值比較;如果第一和第二組被比較的碼字之一中有一個(gè)碼字符合標(biāo)準(zhǔn),則確定來(lái)自第一和第二組碼字之一中的哪一個(gè)碼字符合標(biāo)準(zhǔn);提供上述確定的碼字的符號(hào)值;以及輸出設(shè)備,連接到所述解碼器,該輸出設(shè)備如此構(gòu)成,以便輸出解碼的圖像,該解碼的圖像是通過(guò)由解碼器提供的符號(hào)值形成的。15.按照權(quán)利要求14的系統(tǒng),其中,所說(shuō)連接器是從PCI(外設(shè)部件互連標(biāo)準(zhǔn)),NUBUS(網(wǎng)絡(luò)用戶(hù)總線),ISA(工業(yè)標(biāo)準(zhǔn)結(jié)構(gòu)),EISA(擴(kuò)展工業(yè)標(biāo)準(zhǔn)結(jié)構(gòu)),USB(通用串行總線構(gòu)架),F(xiàn)irewire(火線)和AGP(圖形加速端口)中選擇的。16.按照權(quán)利要求14的系統(tǒng),其中,所說(shuō)解碼器包括能運(yùn)算單指令多數(shù)據(jù)流的中央處理器。17.按照權(quán)利要求14的系統(tǒng),其中,所說(shuō)解碼器包括從以下類(lèi)型中選擇的中央處理器Intel多媒體微處理器,SUN公司的具有可視化指令集的UltraSPARC,AdvanceMicroDevice公司的3Dnow!TM,具有流SIMD擴(kuò)展的IntelMMXTM。18,按照權(quán)利要求14的系統(tǒng),其中,可變長(zhǎng)編碼的圖像利用從包括霍夫曼編碼和算法碼的組群中選出的方法形成的。19,按照權(quán)利要求14的系統(tǒng),其中,第一、第二組碼字是從接收數(shù)據(jù)中的連續(xù)組群中選擇的。20,按照權(quán)利要求14的系統(tǒng),其中,接收數(shù)據(jù)中的第一、第二組碼字是彼此不同的。21,按照權(quán)利要求14的系統(tǒng),其中,第一、第二組碼字均包括接收數(shù)據(jù)的重迭碼字。22,按照權(quán)利要求14的系統(tǒng),其中,所說(shuō)標(biāo)準(zhǔn)是指第一、第二組碼字小于或等于編碼長(zhǎng)度表中的相應(yīng)值。全文摘要一種新穎的、改進(jìn)型的可變長(zhǎng)解碼方法和裝置,通過(guò)并行地將第一組接收數(shù)據(jù)的碼字與編碼長(zhǎng)度表中的相應(yīng)值比較,提高了數(shù)據(jù)解碼的速度和效率,如果比較的第一組碼字超出標(biāo)準(zhǔn),就將第二組接收數(shù)據(jù)的碼字與碼長(zhǎng)表中的相應(yīng)值比較,如果第一和第二組碼字之一中有一個(gè)碼字符合標(biāo)準(zhǔn),則確定來(lái)自第一和第二組碼字之一中的哪一個(gè)碼字符合標(biāo)準(zhǔn),一旦符合標(biāo)準(zhǔn)的碼字被確定,就提供其符號(hào)值。文檔編號(hào)H04N5/232GK1281295SQ00122590公開(kāi)日2001年1月24日申請(qǐng)日期2000年6月30日優(yōu)先權(quán)日1999年6月30日發(fā)明者李偉申請(qǐng)人:羅技電子股份有限公司