前言:想要寫出一篇引人入勝的文章?我們特意為您整理了MPEG4視頻解碼器的優(yōu)化路徑研討范文,希望能給你帶來靈感和參考,敬請(qǐng)閱讀。
1MPEG-4視頻的解碼流程
解碼器是基于FrameLevel的,無論是MC,還是IDCT或者IQ,當(dāng)它們?cè)贕PU上實(shí)現(xiàn)時(shí),每一步的操作都是針對(duì)同一幀上的所有宏塊的。VOP是MPEG-4的基本編碼單元,它包含視頻對(duì)象邊框的尺寸。圖2是MPEG-4的解碼流程,可以看出MPEG-4視頻解碼主要由三部分組成:形狀解碼、運(yùn)動(dòng)解碼和紋理解碼,重建的VOP是通過合并解碼的形狀、運(yùn)動(dòng)和紋理信息得到的[3,4]。
2解碼算法優(yōu)化
(1)IDCT變換的優(yōu)化
從復(fù)雜度上分析,DCT變換是很耗時(shí)的,為了減少這部分的計(jì)算量,需要對(duì)它進(jìn)行優(yōu)化。在DCT變換前,需要根據(jù)信號(hào)能量的量化因子QP進(jìn)行DCT模式選擇,模式選擇我們?cè)O(shè)定了0×0DCT變換、1×1DCT變換、2×2DCT變換、4×4DCT變換、8×8DCT變換五種。首先根據(jù)二維DCT/IDCT計(jì)算公式進(jìn)行行列分離,把二維的DCT變換轉(zhuǎn)化為一維的DCT變換。然后采用一維DCT快速算法進(jìn)一步降低其復(fù)雜度。在幀間模式下,通過當(dāng)前塊的量化因子QP和信號(hào)能量值作DCT模式選擇可以減少計(jì)算量。為了簡化計(jì)算,取絕對(duì)差之和SAD來近似信號(hào)能量值。此外,為了減少誤判率和加快計(jì)算速度,在0×0DCT變換和8×8DCT變換兩種模式基礎(chǔ)上加了1×1DCT變換、2×2DCT變換、4×4DCT變換三種模式。
(2)運(yùn)動(dòng)估計(jì)優(yōu)化
運(yùn)動(dòng)補(bǔ)償是MPEG-4視頻解碼的核心之一。在編碼過程中,通過塊的匹配得出運(yùn)動(dòng)矢量信息,同時(shí)也會(huì)得出當(dāng)前編碼塊的殘差信息。由于殘差信息帶有的信息量較少,可以通過紋理進(jìn)行編碼。通過逆向推導(dǎo),解碼時(shí)運(yùn)動(dòng)補(bǔ)償通過從碼流中獲取運(yùn)動(dòng)信息,進(jìn)而解碼出運(yùn)動(dòng)矢量。然后根據(jù)運(yùn)動(dòng)矢量從參考幀中得出預(yù)測(cè)值。最后將預(yù)測(cè)值與解碼的紋理信息相加,即得到實(shí)際的圖像。由于MPEG-4(簡單框架)處理的都是基于塊對(duì)象的,因此不涉及形狀編碼,無需填充過程[5]。
MPEG-4視頻解碼器的實(shí)現(xiàn)
1MPEG-4壓縮視頻的碼流結(jié)構(gòu)
MPEG-4標(biāo)準(zhǔn)定義了MPEG-4碼流中的每一位的具體含義,MPEG-4碼流的組織形式是按分層的形式組織起來的。首先是碼流頭,又叫起始碼字,是一個(gè)在碼流中其他地方不會(huì)出現(xiàn)的一個(gè)比較長的特殊序列,具體的頭信息定義了整個(gè)碼流的一些特征。接下來是幀頭,幀起始碼字和具體的幀頭信息,定義了當(dāng)前幀的一些特征,這些信息決定了該如何解碼當(dāng)前幀。從宏塊頭開始就是具體的數(shù)據(jù),宏塊頭并沒有一個(gè)宏塊起始碼字,它緊跟在幀頭信息后面。應(yīng)用程序調(diào)用相關(guān)接口函數(shù),通過封裝靜態(tài)鏈接庫的方法可以實(shí)現(xiàn)解碼器。在視頻序列解碼的不同階段分別調(diào)用相關(guān)的接口函數(shù),首先調(diào)用getvophdr獲取VOP的頭信息,然后調(diào)用macroblock函數(shù)實(shí)現(xiàn)幀解碼。
2頭信息的解碼
首先看V0、VOL、VOP頭信息的編解碼過程。編碼時(shí),若編碼第一幀,則首先調(diào)用函數(shù)PutVoVolHeader對(duì)V0、VOP的頭信息進(jìn)行編碼,接下來對(duì)每一幀編碼時(shí),即編碼VOP時(shí),首先調(diào)用函數(shù)BitstreamPutVopHeader對(duì)每個(gè)VOP的頭信息進(jìn)行編碼。與此相對(duì)應(yīng),在解碼時(shí),首先調(diào)用函數(shù)getvophdr,解碼V0、VOL的頭信息,然后在解碼每一幀時(shí),調(diào)用函數(shù)getvophdr獲取VOP的頭信息。
3VOP解碼
頭信息解碼完成之后,調(diào)用函數(shù)get_mp4picture對(duì)每個(gè)VOP進(jìn)行解碼。該函數(shù)的實(shí)現(xiàn)過程為[6]:⑴初始化宏塊的循環(huán)控制變量;⑵循環(huán)調(diào)用宏塊解碼函數(shù)macroblock對(duì)VOP中的每一個(gè)宏塊進(jìn)行解碼;⑶調(diào)用函數(shù)make_edge對(duì)上一步獲得的解碼幀frame_ref(亦作為參考幀)進(jìn)行邊填允;⑷調(diào)用函數(shù)PictureDisplay將frame_ref圖像轉(zhuǎn)換為bmp圖像;⑸將當(dāng)前幀與參考幀交換。
4宏塊的解碼
VOP解碼的整體過程中最關(guān)鍵就是函數(shù)macroblock的實(shí)現(xiàn)。VOP的編碼過程是基于宏塊的,所以VOP解碼過程同樣是基于宏塊的,因此此函數(shù)是解碼的核心函數(shù),它一方面通過VLD(可變長解碼)、RLD(行程解碼)、IQ(逆量化)、IDCT(逆DCT變換)解碼出原始圖像值(I_VOP)或誤差值(P_VOP);一方面解碼出運(yùn)動(dòng)矢量MotionVector,并進(jìn)行MC(運(yùn)動(dòng)補(bǔ)償)[7]。
結(jié)束語
為了驗(yàn)證GPU+CPU加速視頻解碼方案和相關(guān)算法優(yōu)化的效果,我們采用XVID作為模擬驗(yàn)證軟件。軟件測(cè)試的計(jì)算機(jī)硬件配置為Intel奔騰雙核E5300CPU,2GRAM,GeForce9500GTGPU。軟件實(shí)現(xiàn)的軟件環(huán)境為WindowsXP中文專業(yè)版操作系統(tǒng)平臺(tái),采用VisualC++7.0為程序開發(fā)環(huán)境[8]。通過選取標(biāo)準(zhǔn)視頻QICF文件做了視頻編碼后作為測(cè)試的視頻序列,測(cè)試其優(yōu)化前和優(yōu)化后解碼一幀所需要的時(shí)間,從而對(duì)同一幀的解碼時(shí)間進(jìn)行比較。從測(cè)試結(jié)果看,視頻解碼速度優(yōu)化前與優(yōu)化后的平均解碼時(shí)間差有15ms。解碼器對(duì)于所有的視頻序列解碼速度平均提高了25%,解碼的視頻質(zhì)量能讓人眼所接受,證明GPU輔助CPU加速解碼,對(duì)DCT算法、運(yùn)動(dòng)估計(jì)和運(yùn)動(dòng)補(bǔ)償算法的改進(jìn)是行之有效的。(本文作者:李想 單位:蘭州職業(yè)技術(shù)學(xué)院網(wǎng)絡(luò)管理中心信息工程系)