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