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