專利名稱:一種高速jpeg解碼的方法
技術領域:
本發(fā)明涉及應用于多媒體領域中對JPEG文件進行快速、高效解碼的方法,尤 其涉及一種高速JPEG解碼的方法。
背景技術:
為了滿足多媒體領域中對JPEG文件進行快速、高效解碼的要求,同時滿足高 清視頻的解碼計算速度的要求,流暢的支持高清解碼,有效利用顯卡GPU的計算 資源,減少對CPU資源的耗費。JPEG算法瓶頸在完全串行的哈夫曼解碼過程和 IDCT的計算復雜性高,現(xiàn)有的算法經過長時間的優(yōu)化已經很難在得到性能上的突 破。
發(fā)明內容
本發(fā)明的目的就是為了克服上述現(xiàn)有技術存在的缺陷,提供一種經過簡單的改 造,實現(xiàn)支持高清視頻的解碼高速JPEG解碼的方法。
本發(fā)明的目的可以通過以下技術方案來實現(xiàn) 一種高速JPEG解碼的方法,其 特征在于,該方法包括
(1) 并行哈夫曼解碼算法設計與實現(xiàn)
a. 從編碼塊中提取實際局部編碼的數據;
b. 根據提取的局部編碼數據通過全局檢查恢復為原始的編碼數據;
(2) 并行IDCT算法設計與實現(xiàn)
a. 將每個處理單元用到的操作數據復制到共享內存中;
b. 每個處理單元計算IDCT兩個步驟,中間需要進行一次同步操作,確定 所有處理單元完成上一步驟;
c. 每個處理單元將計算完成后的結果經過量化恢復為實際的圖像數據。
所述的步驟(1)中的從編碼塊中提取實際局部編碼的數據包括-(1) 動態(tài)檢測,直接從JPEG編碼數據流中掃描編碼塊的結束編碼符;
(2) 靜態(tài)索引,在JPEG編碼的過程中,保存每個編碼塊的地址位置,建立 整個圖像編碼塊的索引結構。
與現(xiàn)有技術相比,本發(fā)明在普通配置有當前主流顯卡的PC機上,可以實現(xiàn)分 辨率為(1024*768) JPEG圖像的實時解碼每秒60FPS以上,CPU占有率小于10%, 可以經過簡單的改造,實現(xiàn)支持高清視頻的解碼。
圖1是本發(fā)明一種高速JPEG解碼的方法的效果圖; 圖2是原始JPEG解碼方法效果圖3是本發(fā)明一種高速JPEG解碼的方法的動態(tài)檢測解碼方法示意圖; 圖4是本發(fā)明 一種高速JPEG解碼的方法的靜態(tài)索引解碼方法示意圖; 圖5是本發(fā)明一種高速JPEG解碼的方法的通用CPU解碼計算示意圖; 圖6是本發(fā)明一種高速JPEG解碼的方法的并行處理器解碼計算示意圖; 圖7是本發(fā)明一種高速JPEG解碼的方法的并行哈夫曼解碼過程示意圖; 圖8是本發(fā)明一種高速JPEG解碼的方法的并行IDCT計算過程示意圖。
具體實施例方式
為了滿足多媒體領域中對JPEG文件進行快速、高效解碼的要求,同時滿足高 清視頻的解碼計算速度的要求,流暢的支持高清解碼,有效利用顯卡GPU的計算 資源,減少對CPU資源的耗費。JPEG算法瓶頸在完全串行的哈夫曼解碼過程和 IDCT的計算復雜性高,本發(fā)明針對哈夫曼解碼過程的改進提供兩種技術解決方案 一是在編碼過程中記錄編碼塊的地址,建立整個數據流的索引結構;二是動態(tài) 進行數據流掃描,檢測編碼塊的位置。通過以上兩種方案可以消除JPEG算法解碼 過程中串行化的問題;本發(fā)明對IDCT算法進行并行化改進,完全可以利用并行計 算處理器的計算能力,達到50到100倍加速比。
并行哈夫曼解碼算法。哈夫曼解碼算法由于其固有的性質,要求完全串行化地 從數據流中提出壓縮數據。不利于在并行計算機處理器上進行并行解碼。因此本發(fā) 明需要對哈夫曼解碼算法進行并行化改造。有兩種改造方法 一是在編碼過程中記 錄每個編碼塊的位置,建立整個壓縮結構的索引,從而在解壓過程中消除每個塊之間的相關性,實現(xiàn)并行化解碼;二是并行動態(tài)檢測編碼結尾標志,并通過檢査全局 一致性,可以最終確定JPEG壓縮結構,實現(xiàn)正確的并行化解碼。
JPEG核心算法的GPU算法實現(xiàn)。現(xiàn)在主流的顯卡上都有一個可編程圖像處理 器,其計算速度相當于普通CPU的50到100倍。將JPEG解碼過程在GPU上實 現(xiàn)可以達到很高的加速比。但是GPU計算結構不同普通CPU,算法實現(xiàn)受到一定 的限制,通過精簡優(yōu)化,本發(fā)明最終實現(xiàn)了 JPEG核心算法從CPU到GPU的移植。
本發(fā)明為了滿足播放高清以及多媒體信息處理中對JPEG圖像解碼速度的要 求,通過提高本算法的并行性,將算法移植到并行計算機上進行加速。實現(xiàn)了很高 的加速比,達到實際應用的需求,本發(fā)明還可以為當前多種多媒體應用提供強大的 加速支持,比如圖形內容的搜索、多媒體信息庫、圖像處理等應用。
JPEG解碼算法是一個本質上串行的算法,在CPU上實現(xiàn),整個算法的瓶頸主 要存在于以下兩個部分
一、 哈夫曼編碼的整體串行性,哈夫曼編碼整體上是一個嚴格串行的過程,由 于前后編碼塊存在相關性,即使在雙核的CPU上也難以實現(xiàn)加速。
二、 IDCT變換的計算復雜性,IDCT變換是一個二維矩陣乘法計算,具有很 高的計算復雜性,在CPU上的實現(xiàn)特別是X86結構的CPU上,占用很大的CPU 計算時間,效率比較低下。
本發(fā)明針對JPEG以上兩個解碼瓶頸進行優(yōu)化,實現(xiàn)JPEG解碼加速。主要進 行哈夫曼解碼并行化改進和IDCT并行化改進。 哈夫曼解碼并行化改進
哈夫曼編碼壓縮算法利用信息的統(tǒng)計規(guī)律降低信息的冗余度,由于統(tǒng)計過程利 用到全局的信息,因此哈夫曼編碼的信息是整體相關的,因此首先要消除整體編碼 信息的相關性。本發(fā)明利用兩種辦法來消除編碼信息之間的相關性
一種方法是動態(tài)檢測,就是直接從JPEG編碼數據流中掃描編碼塊的結束編碼 符,由于每個編碼塊包含圖像塊的直流和交流系數,只要確定了圖像塊的直流與交 流系數,就可以單獨計算恢復本塊原始圖像。動態(tài)檢測方法優(yōu)點是不需要額外的數 據結構,也不需要對原始的JPEG文件進行格式轉換;缺點是編碼塊結束符在哈夫 曼編碼中有二義性,就是有可能出現(xiàn)錯誤,只有通過全局數據流檢查來檢測錯誤編 碼塊結束符。這樣出現(xiàn)浪費計算。
另一種方式靜態(tài)索引,就是在JPEG編碼的過程中,保存每個編碼塊的地址位置,建立整個圖像編碼塊的索引結構。在解碼是,利用索引數據結構直接定位每塊 圖像的位置,然后同時進行恢復計算。靜態(tài)索引方法優(yōu)點是計算效率高,解碼速度 更快,因為直接可以定位編碼塊結束符,不需要掃描,無浪費計算。缺點是需要額 外的數據結構,增加壓縮數據的體積,降低了壓縮率。
IDCT算法并行化改進
IDCT算法是一個矩陣乘法計算,本身具有很高的并行性,在并行計算機上實 現(xiàn)矩陣乘法計算需要計算機本身的數據一致性接口來支持。圖形處理器提供大量輕 量級的線程來處理相對簡單的計算過程,并且提供線程之間的共享內存以及同步工 具。這樣可以滿足IDCT并行計算,達到解碼的基本要求。
在通用CPU上的實現(xiàn),整個矩陣計算都是串行計算,對于X86架構的計算機 來說,計算型指令并不能充分利用整個計算機的資源,但是占用所有的計算時間, 因此計算效率不是很高,不能充分發(fā)揮處理器的效能。
而在并行處理器上實現(xiàn),所有的計算單元很適合處理計算型的指令,雖然每個 計算單元的計算能力趕不上通用CPU的處理能力,但是大量計算單元產生的總體 性能遠遠大于通用CPU的處理能力,因此在具有并行處理器結構的GPU上實現(xiàn) IDCT算法,可以達到很高計算性能。
JPEG算法GPU實現(xiàn)
解決了 JPEG算法主要的計算問題,就可以有效的在并行計算機結構的處理器 上實現(xiàn)JPEG算法。主要實現(xiàn)分為并行哈夫曼解碼算法和并行IDCT算法。
一、 并行哈夫曼解碼算法設計與實現(xiàn)
并行哈夫曼解碼算法實現(xiàn)可以分為兩個步驟首先從編碼塊中提取實際局部編 碼的數據;然后根據提取的局部編碼數據通過全局檢査恢復為原始的編碼數據。(如 圖5)
二、 并行IDCT算法設計與實現(xiàn)
JPEG壓縮圖像具有分塊屬性,圖像分塊之間的無相關性,圖像分塊內IDCT 計算有相關性。每個分塊的計算由并行處理器的處理器塊來進行計算,處理器塊具 有共享內存便于塊內處理器進行通信,塊內處理器可以進行計算同步操作。算法分 為三步首先將每個處理單元用到的操作數據復制到共享內存中;接著每個處理單 元計算IDCT兩個步驟,中間需要進行一次同步操作,確定所有處理單元完成上一 步驟;最后每個處理單元將計算完成后的結果經過量化恢復為實際的圖像數據。如圖1與圖2所示,原始JPEG解碼方法在哈夫曼解碼、數據全局性恢復及量 化以及IDCT計算過程中是經典的串行處理方法,計算資源利用率低,速度慢。高 速JPEG解碼的方法在哈夫曼解碼、數據全局性恢復及量化以及IDCT計算過程中 是并行處理方法,計算資源利用率高,速度快。
如圖3所示,動態(tài)檢測解碼過程中,并行處理器從頭掃描編碼數據,知道檢測 到對應的編碼塊結束符,然后開始哈夫曼解碼,編碼塊結束符在哈夫曼編碼中有二 義性,有可能出現(xiàn)定位錯誤,最后通過全局數據流檢査來檢測錯誤編碼塊結束符。 將正確的解碼數據合并起來得到本圖像編碼塊的局部系數矩陣。
如圖4所示,靜態(tài)索引解碼過程中,并行處理器通過索引直接計算得到對應的 編碼塊結束符,然后進行哈夫曼解碼,得到本圖像編碼塊的局部系數矩陣。
如圖5所示,通用CPU解碼計算過程,為了計算結果矩陣,CPU需要依次計 算結果矩陣的每個元素,整個計算過程耗費CPU時間多,計算效率低。
如圖6所示,并行處理器解碼計算過程,為了計算結果矩陣,每個處理單元同 時計算對應結果矩陣的元素,計算效率高。
如圖7所示,并行哈夫曼解碼過程
(1) 每個處理單元定位對應的編碼塊。
(2) 每個處理單元進行哈夫曼解碼,計算對應圖像編碼塊的DC和AC系數。
(3) 進行整體一致性檢查,恢復所有圖像編碼塊實際的DC和AC系數。 如圖8所示,并行IDCT計算過程
(1) 每個處理器塊將對應圖像編碼塊的系數復制到共享內存中;
(2) 進行IDCT列計算;
(3) 進行處理器塊內的同步操作,保證所有列計算結束;
(4) 進行IDCT行計算;
(5) 計算對應圖像的實際顏色值。
權利要求
1.一種高速JPEG解碼的方法,其特征在于,該方法包括(1)并行哈夫曼解碼算法設計與實現(xiàn)a.從編碼塊中提取實際局部編碼的數據;b.根據提取的局部編碼數據通過全局檢查恢復為原始的編碼數據;(2)并行IDCT算法設計與實現(xiàn)a.將每個處理單元用到的操作數據復制到共享內存中;b.每個處理單元計算IDCT兩個步驟,中間需要進行一次同步操作,確定所有處理單元完成上一步驟;c.每個處理單元將計算完成后的結果經過量化恢復為實際的圖像數據。
2. 根據權利要求1所述的一種高速JPEG解碼的方法,其特征在于,所述的步 驟(1)中的從編碼塊中提取實際局部編碼的數據包括(1) 動態(tài)檢測,直接從JPEG編碼數據流中掃描編碼塊的結束編碼符;(2) 靜態(tài)索引,在JPEG編碼的過程中,保存每個編碼塊的地址位置,建立 整個圖像編碼塊的索引結構。
全文摘要
本發(fā)明涉及一種高速JPEG解碼的方法,該方法包括并行哈夫曼解碼算法設計與實現(xiàn),從編碼塊中提取實際局部編碼的數據;根據提取的局部編碼數據通過全局檢查恢復為原始的編碼數據;并行IDCT算法設計與實現(xiàn),將每個處理單元用到的操作數據復制到共享內存中;每個處理單元計算IDCT兩個步驟,中間需要進行一次同步操作,確定所有處理單元完成上一步驟;每個處理單元將計算完成后的結果經過量化恢復為實際的圖像數據。與現(xiàn)有技術相比,本發(fā)明在普通配置有當前主流顯卡的PC機上,可以實現(xiàn)分辨率為(1024*768)JPEG圖像的實時解碼每秒60FPS以上,CPU占有率小于10%,可以經過簡單的改造,實現(xiàn)支持高清視頻的解碼。
文檔編號H04N7/26GK101626504SQ20081004040
公開日2010年1月13日 申請日期2008年7月9日 優(yōu)先權日2008年7月9日
發(fā)明者秦永進, 飛蘋果 申請人:上海飛來飛去多媒體創(chuàng)意有限公司