摘 要: MPEG-4標準是最有影響的多媒體數(shù)據(jù)編碼國際標準之一,具有高壓縮比、可擴展性、可交互性等諸多優(yōu)點,逐漸成為現(xiàn)代視頻編碼領(lǐng)域的主流標準。為加快視頻解碼的速度,在分析MPEG-4視頻編解碼標準的基礎(chǔ)上,利用GPU加速視頻解碼的并行架構(gòu)方案,對解碼算法中的DCT變換、運動估計和運動補償算法分別進行了優(yōu)化。實驗測試顯示,優(yōu)化后的MPEG-4視頻解碼器解碼速度平均提高了25%,具有一定的實用價值。
關(guān)鍵詞: 視頻壓縮編碼; MPEG-4; 視頻解碼器; 圖形處理單元
中圖分類號:TP393.04 文獻標志碼:A 文章編號:1006-8228(2013)01-06-02
Design and optimization of MPEG-4 video decoder
Li Xiang
(Network Center, Department of Information Engineering, Lanzhou VOC-TECH College, Lanzhou, Gansu 730070, China)
Abstract: The MPEG-4, one of the most influential international standards of multimedia date code, has many advantages: the high compression ratio, the property of expanding and the property of switching. It has already gradually become the main standard in the realm of modern video frequency code. In order to accelerate the speed of the video decoding, on the basis of analyzing the coding and decoding standards of MPEG-4 video, a project abreast of parallel structures to accelerate the decoding of video frequency is designed. Decoding algorithm DCT, motion estimation and motion compensation algorithm are optimized. Finally through the test, the optimized MPEG-4 video decoder decoding speed increases by an average of 15%. It has certain practical value.
Key words: video compression; MPEG-4; video decoder; GPU
0 引言
作為第一個面向?qū)ο蟮囊曨l編碼標準,MPEG-4的出現(xiàn)具有很強的歷史意義[1]。由于其廣泛適用于實時監(jiān)控、多媒體通信、網(wǎng)絡(luò)的可視化合作等多媒體應(yīng)用場合,使基于MPEG-4標準的視頻編解碼技術(shù)受到前所未有的重視。本文針對MPEG-4系統(tǒng)提出了一種GPU+CPU并行實現(xiàn)架構(gòu),并在PC平臺實現(xiàn)了基于DCT算法改進的MPEG-4解碼器軟件設(shè)計,所設(shè)計的解碼器具有實時高效和控制靈活的特點,并加快了視頻解碼的速度。
1 并行解碼器架構(gòu)
傳統(tǒng)的解碼器都是基于MB Level的,也就是說,依照次序?qū)γ恳粋€宏塊完成IQ(逆量化)、IDCT(逆DCT變換)和MC(運動補償)。由于CPU和GPU之間頻繁的小塊數(shù)據(jù)交換非常低效,而且繪制小圖形也不能充分發(fā)揮GPU的性能,因此這種方式并不適合在GPU上實現(xiàn)。
適合在CPU+GPU的體系上實現(xiàn)的并行解碼器架構(gòu)是基于幀級(Frame Level)的,把包括運動補償、相加和幀緩沖的整個反饋回路都放到GPU上去執(zhí)行,圖1為分級的并行解碼器構(gòu)架原理圖。原理圖中整個反饋環(huán)都已經(jīng)并入了MC的框圖之中,由于緩沖區(qū)的存在,GPU上執(zhí)行的部分可以延后X幀。CPU和GPU可以并行工作,顯然這非常有利于解碼速度的提高。并行解碼器可以分3個級別來分別實現(xiàn),解碼器的3種架構(gòu)級別分別對應(yīng)不同的硬件情況:如果CPU性能比GPU強很多,就可以選擇級別1,反之則選擇級別3,級別2則介于兩者之間。事實上,這3種級別是可以切換的。在解碼過程中,通過動態(tài)地在3種級別間進行切換,可以比較合理地將任務(wù)分配給CPU和GPU[2]。
2 MPEG-4視頻解碼器的軟件算法優(yōu)化
2.1 MPEG-4視頻的解碼流程
解碼器是基于Frame Level的,無論是MC,還是IDCT或者IQ,當它們在GPU上實現(xiàn)時,每一步的操作都是針對同一幀上的所有宏塊的。VOP是MPEG-4的基本編碼單元,它包含視頻對象邊框的尺寸。圖2是MPEG-4的解碼流程,可以看出MPEG-4視頻解碼主要由三部分組成:形狀解碼、運動解碼和紋理解碼,重建的VOP是通過合并解碼的形狀、運動和紋理信息得到的[3,4]。
2.2 解碼算法優(yōu)化
2.2.1 IDCT變換的優(yōu)化
從復(fù)雜度上分析,DCT變換是很耗時的,為了減少這部分的計算量,需要對它進行優(yōu)化。在DCT變換前,需要根據(jù)信號能量的量化因子QP進行DCT模式選擇,模式選擇我們設(shè)定了0×0 DCT變換、1×1 DCT變換、2×2 DCT變換、4×4 DCT變換、8×8 DCT變換五種。首先根據(jù)二維DCT/IDCT計算公式進行行列分離,把二維的DCT變換轉(zhuǎn)化為一維的DCT變換。然后采用一維DCT快速算法進一步降低其復(fù)雜度。
在幀間模式下,通過當前塊的量化因子QP和信號能量值作DCT模式選擇可以減少計算量。為了簡化計算,取絕對差之和SAD來近似信號能量值。此外,為了減少誤判率和加快計算速度,在0×0 DCT變換和8×8 DCT變換兩種模式基礎(chǔ)上加了1×1 DCT變換、2×2 DCT變換、4×4 DCT變換三種模式。
2.2.2 運動估計優(yōu)化
運動補償是MPEG-4視頻解碼的核心之一。在編碼過程中,通過塊的匹配得出運動矢量信息,同時也會得出當前編碼塊的殘差信息。由于殘差信息帶有的信息量較少,可以通過紋理進行編碼。通過逆向推導(dǎo),解碼時運動補償通過從碼流中獲取運動信息,進而解碼出運動矢量。然后根據(jù)運動矢量從參考幀中得出預(yù)測值。最后將預(yù)測值與解碼的紋理信息相加,即得到實際的圖像。由于MPEG-4(簡單框架)處理的都是基于塊對象的,因此不涉及形狀編碼,無需填充過程[5]。
3 MPEG-4視頻解碼器的實現(xiàn)
3.1 MPEG-4壓縮視頻的碼流結(jié)構(gòu)
MPEG-4標準定義了MPEG-4碼流中的每一位的具體含義,MPEG-4碼流的組織形式是按分層的形式組織起來的。首先是碼流頭,又叫起始碼字,是一個在碼流中其他地方不會出現(xiàn)的一個比較長的特殊序列,具體的頭信息定義了整個碼流的一些特征。接下來是幀頭,幀起始碼字和具體的幀頭信息,定義了當前幀的一些特征,這些信息決定了該如何解碼當前幀。從宏塊頭開始就是具體的數(shù)據(jù),宏塊頭并沒有一個宏塊起始碼字,它緊跟在幀頭信息后面。
應(yīng)用程序調(diào)用相關(guān)接口函數(shù),通過封裝靜態(tài)鏈接庫的方法可以實現(xiàn)解碼器。在視頻序列解碼的不同階段分別調(diào)用相關(guān)的接口函數(shù),首先調(diào)用getvophdr獲取VOP的頭信息,然后調(diào)用macroblock函數(shù)實現(xiàn)幀解碼。
3.2 頭信息的解碼[6]
首先看V0、VOL、VOP頭信息的編解碼過程。編碼時,若編碼第一幀,則首先調(diào)用函數(shù)PutVoVolHeader對V0、VOP的頭信息進行編碼,接下來對每一幀編碼時,即編碼VOP時,首先調(diào)用函數(shù)BitstreamPutVopHeader對每個VOP的頭信息進行編碼。與此相對應(yīng),在解碼時,首先調(diào)用函數(shù)getvophdr,解碼V0、VOL的頭信息,然后在解碼每一幀時,調(diào)用函數(shù)getvophdr獲取VOP的頭信息。
3.3 VOP解碼
頭信息解碼完成之后,調(diào)用函數(shù)get_mp4picture對每個VOP進行解碼。該函數(shù)的實現(xiàn)過程為[6]:
⑴ 初始化宏塊的循環(huán)控制變量;
⑵ 循環(huán)調(diào)用宏塊解碼函數(shù)macroblock對VOP中的每一個宏塊進行解碼;
⑶ 調(diào)用函數(shù)make_edge對上一步獲得的解碼幀frame_ref(亦作為參考幀)進行邊填允;
⑷ 調(diào)用函數(shù)PictureDisplay將frame_ref圖像轉(zhuǎn)換為bmp圖像;
⑸ 將當前幀與參考幀交換。
3.4 宏塊的解碼
VOP解碼的整體過程中最關(guān)鍵就是函數(shù)macroblock的實現(xiàn)。VOP的編碼過程是基于宏塊的,所以VOP解碼過程同樣是基于宏塊的,因此此函數(shù)是解碼的核心函數(shù),它一方面通過VLD(可變長解碼)、RLD(行程解碼)、IQ(逆量化)、IDCT(逆DCT變換)解碼出原始圖像值(I_VOP)或誤差值(P_VOP);一方面解碼出運動矢量Motion Vector,并進行MC(運動補償)[7]。
4 結(jié)束語
為了驗證GPU+CPU加速視頻解碼方案和相關(guān)算法優(yōu)化的效果,我們采用XVID作為模擬驗證軟件。軟件測試的計算機硬件配置為Intel奔騰雙核E5300 CPU,2GRAM,GeForce 9500GT GPU。軟件實現(xiàn)的軟件環(huán)境為Windows XP 中文專業(yè)版操作系統(tǒng)平臺,采用VisualC++7.0為程序開發(fā)環(huán)境[8]。
通過選取標準視頻QICF文件做了視頻編碼后作為測試的視頻序列,測試其優(yōu)化前和優(yōu)化后解碼一幀所需要的時間,從而對同一幀的解碼時間進行比較。從測試結(jié)果看,視頻解碼速度優(yōu)化前與優(yōu)化后的平均解碼時間差有15ms。解碼器對于所有的視頻序列解碼速度平均提高了25%,解碼的視頻質(zhì)量能讓人眼所接受,證明GPU輔助CPU加速解碼,對DCT算法、運動估計和運動補償算法的改進是行之有效的。
參考文獻:
[1] 尤會明,楊杰.MPEG-4視頻編碼分析[M].武漢理工大學學報(信息與管理工程版),2005.27(5):136-139
[2] 房波.基于通用可編程GPU的視頻編解碼器——架構(gòu)、算法與實現(xiàn)[D].浙江大學,2005.
[3] 張志偉.一種遠程礦井瓦斯?jié)舛葯z測儀的設(shè)計[M].煤礦安全,2011.42(5):78-80
[4] 趙麗鮮,蘇鴻根.MPEG-4視頻編解碼器設(shè)計實現(xiàn)與性能優(yōu)化[J].計算機工程與設(shè)計,2009.30(12):3001-3004
[5] 張石,張明亮,鮑喜榮,佘黎煌.MPEG-4視頻解碼模塊的設(shè)計與優(yōu)化[J].計算機工程,2007.5:193-195
[6] 劉璋.MPEG-4視頻解碼器的設(shè)計與優(yōu)化[D].華中科技大學,2006.
[7] 沈承東.MPEG4視頻編碼算法的研究與實現(xiàn)[D].國防科學技術(shù)大學,2002.
[8] 張志偉.電磁帶隙結(jié)構(gòu)在同步開關(guān)噪聲抑制中的應(yīng)用分析[M].電訊技術(shù),2010.50(3):64-68