- 相關(guān)推薦
探優(yōu)化H.264解碼器
1.引言
H.264 標(biāo)準(zhǔn)是由ITU-T 的視頻編碼專家組(VCEG)和ISO/IEC 的活動圖像專家組共同成立的聯(lián)合視頻小組(JVT)于2003 年3 月公布的。與以往標(biāo)準(zhǔn)相比,在同等畫面質(zhì)量下H.264 能將碼率降低50%左右。H.264/AVC 解碼器包括熵解碼,重排序,反量化,反變換,運動補償和環(huán)路去塊效應(yīng)濾波。在解碼環(huán)中引入的高度自適應(yīng)去塊濾波系統(tǒng)是H.264在相對碼率較低的情況下依舊能保持較好的主觀視覺效果的重要因素之一,是H.264 中的重要組成部分。中國碩士論文網(wǎng)提供大量免費工商管理碩士論文,如有業(yè)務(wù)需求請咨詢網(wǎng)站客服人員!
本文依據(jù)H.264 去方塊濾波算法的特點,對算法的實現(xiàn)進行了結(jié)構(gòu)上的優(yōu)化,并采用MMX 技術(shù)對其中執(zhí)行時間最多、執(zhí)行次數(shù)最多的部分代碼進行優(yōu)化。在保證解碼質(zhì)量的前提下,節(jié)省了硬件資源,提高了解碼速度。
2.去方塊濾波器的算法分析
由于H.264 中的整數(shù)變換和運動估計的最小塊是基于4×4 大小的,因此塊濾波系統(tǒng)在濾波的時候也應(yīng)以4×4 點的塊為單元處理。
濾波系統(tǒng)按照光柵掃描順序依次對已解碼的每個宏塊進行濾波。對宏塊內(nèi)部進行濾波時按照先亮度塊后色度塊,先進行垂直邊界的水平濾波然后進行水平邊界的垂直濾波的順序進行,如圖1 所示,圖中的標(biāo)有數(shù)字的線為需要濾波的邊界。
對于不同的BS 值,濾波器采取不同的濾波模式,有條件地選擇不同的濾波器修正邊界兩邊的樣點值。最多有6 個樣點值將在濾波過程中得到調(diào)整,以去除塊效應(yīng)。
3.去方塊濾波器的優(yōu)化
3.1 邊界濾波強度判斷
流程的改進經(jīng)分析發(fā)現(xiàn)該解碼器的去塊濾波算法中的函數(shù)邏輯關(guān)系復(fù)雜、跳轉(zhuǎn)、判斷以及函數(shù)調(diào)用情況頻繁;函數(shù)的循環(huán)體中存在著大量不必要的重復(fù)計算和很多用不到的數(shù)據(jù),如在傳統(tǒng)JM 模型的Bs 判斷中,對所有BS 值分別進行16 次判斷(由于邊界有16 個點,所以對每個點都做了濾波強度判斷),這明顯造成程序冗余因為當(dāng)BS=3,4 時,只取決于預(yù)測模式是否為幀內(nèi)模式和模塊是否為邊緣模塊即可。根據(jù)C 代碼優(yōu)化方法,通過改變函數(shù)結(jié)構(gòu)以及函數(shù)調(diào)用等情況,得到了圖3 所示的改進的BS 判斷流程。
3.2 宏塊濾波順序的調(diào)整
如果按照基本的濾波順序運行去方塊濾波程序,就沒有充分利用相鄰4×4 數(shù)據(jù)之間的相關(guān)性。比如完成“1”濾波后需要將其右側(cè)方塊的數(shù)據(jù)寫回事先分配的內(nèi)存中,等到要進行“5”之前再從內(nèi)存中讀取將這個方塊的數(shù)據(jù)。對于每一個方塊都要從內(nèi)存中讀取數(shù)據(jù),完成濾波后還需要將數(shù)據(jù)寫回至相應(yīng)的地址,如此頻繁讀取內(nèi)存,對內(nèi)存的帶寬要求比較高,同時增加了解碼的時間。因此提出了一種改進的濾波順序.
3.3使用多媒體指令集(MMX)對像
素級濾波計算進行優(yōu)化從上面的算法分析可以看出,環(huán)路濾波部分算法不很復(fù)雜但是計算量密集,例如對濾波條件的判斷和完成對像素值的修改的過程。所以在保證圖像質(zhì)量的基礎(chǔ)上,盡可能的加快運算速度,就成為當(dāng)前研究的新熱點。MMX(Microprocessor Media Extension)是Intel公司為提高PC 機多媒體功能和通信能力而推出的一項單指令多數(shù)據(jù)流(Single InstructionMultiple Data,SIMD)技術(shù),是對IA(Intel Architecture)指令集的擴展,他通過在“奔騰(Pentium)”處理器中增加8 個64 位寄存器和57 條新指令來實現(xiàn)[3]。將多個數(shù)據(jù)組織入MMX 寄存器中,用指令進行統(tǒng)一處理,就可達到單指令多數(shù)據(jù)的目的。SIMD 技術(shù)的執(zhí)行模式。
3.3.1數(shù)據(jù)重排(內(nèi)存讀取的優(yōu)化)
為實現(xiàn)多路數(shù)據(jù)的并行處理,應(yīng)將各路數(shù)據(jù)中進行相同操作的數(shù)據(jù)放在同一個寄存器的不同位置,使得單一指令可對多路數(shù)據(jù)并行操作。在并行操作實現(xiàn)的過程中,若數(shù)據(jù)的原始排序不能滿足并行操作,就須對原始數(shù)據(jù)進行重排序。
需要修正水平方向的像素點可直接其需要的8 個像素點movq 進來。而在對水平邊界進行垂直濾波時,由于像素值在存儲位置上是水平連續(xù)的,那么可一次讀入的64位寄存器中的數(shù)據(jù)必須是水平方向上4 組數(shù)據(jù)的同一列像素點,而不是水平方向上同一組數(shù)據(jù)的不同列。因此,為實現(xiàn)并行操作,寄存器中數(shù)據(jù)應(yīng)按所需要的處理順序來排布。該例中就是將每個需要調(diào)整所需像素位置的塊先進行轉(zhuǎn)置操作,以實現(xiàn)并行數(shù)據(jù)處理。用到的主要指令有:punpckl[bw,wd,dq]交錯放置兩數(shù)的低位;punpckh[bw,wd,dq]交錯放置兩數(shù)的高位。在寄存器存儲數(shù)據(jù)的時候數(shù)據(jù)的格式,就是先進來的數(shù)據(jù)放在寄存器的低位,后進來的數(shù)據(jù)依次往高位存放。即,比如4×4 矩陣的第一行[X00 X01 X02 X03],而要存放的寄存器mm0 中為[X03 X02 X01 X00]。4x4 矩陣轉(zhuǎn)置的實現(xiàn)。
3.3.2將跳轉(zhuǎn)指令轉(zhuǎn)化為條件
判斷程序中條件判斷是頻繁出現(xiàn)的。在MMX 中,對于包含條件判斷的數(shù)據(jù)處理,直接采用條件分支跳轉(zhuǎn)是不合適的。因為進行并行處理的各組數(shù)據(jù)對某一條件的成立與否不盡相同。這里我們通過邏輯運算來避免跳轉(zhuǎn)。例如濾波的首要條件的實現(xiàn)的過程,將(1)式改寫為如下形式,以便使用MMX 指令實現(xiàn)。歡迎查看物流管理配送和管理。
可以看出這個過程中可看做是取平均值,取四分之一和八分之一的過程,而這些過程均是由pavgb 這條指令來完成的,pavgb 的作用是取緊縮無符號字節(jié)的平均值,四舍五入。
這樣每用一次這條指令結(jié)果將四舍五入一次,而我們實際想要的是最后的結(jié)果進行四舍五入,如果這樣每使用一次就四舍五入一次,這樣將會使結(jié)果偏大。所以為了解決這個問題,我們在用pavgb 的時候還要考慮將這部分誤差,所以這個算法的實現(xiàn)。
3.3.4 限幅算法的實現(xiàn)
4. 優(yōu)化結(jié)果
分析解碼器測試用PC 機,操作系統(tǒng)是WindowsXP,在Visual C++6.0 環(huán)境下調(diào)試編譯,解碼測試了三個序列包括兩個標(biāo)準(zhǔn)測試碼流Foreman(CIF 352x288) 和Mobile(CIF 352x288)以及由本實驗室采樣經(jīng)ΤΙ公司提供的x264 編碼器編碼獲得的測試碼流TI(D1 720x576)。,從以上測試結(jié)果可以看出,對于解碼cif 格式的視頻流,速率大約提高了40fps,對于解碼D1 格式的視頻流,速率大約提高了10fps。改進的算法對于提高解碼速率具有明顯優(yōu)勢。并且因為只是對程序進行了代碼級的優(yōu)化,解碼器的性噪比沒有下降,圖像質(zhì)量不會受都影響。證明這是一種行之有效的方法,對進一步優(yōu)化各種音視頻解碼器都提供了很好的借鑒方法,有利于解碼器在流媒體、視頻會議等實時領(lǐng)域的應(yīng)用。
【探優(yōu)化H.264解碼器】相關(guān)文章:
DM642上H.264編碼器的優(yōu)化與實現(xiàn)11-22
H.264碼率控制算法研究03-07
基于塊分類的H.264視頻水印算法03-07
基于H.264標(biāo)準(zhǔn)的船舶機艙視頻監(jiān)控系統(tǒng)03-07
針對硬件實現(xiàn)的H.264視頻編碼算法改進03-18
讀《拓跋史探》01-07
對現(xiàn)代美術(shù)的淺探03-01
淺探室內(nèi)陳設(shè)01-07