1 引言
隨著數字電視及視頻會議的發(fā)展以及應用,H.264由于其更高的壓縮比、更好的圖像質量和良好的網絡適應性而備受關注。
基于上下文的自適應二進制算術編碼(CABAC)則作為H.264編碼器系統的最后一環(huán),對整個編碼性能影響較大。CABAC充分考慮視頻流的相關性.能適應信號統計特性的變化,容易達到漸進性能,編碼速度較高,但復雜度大,這造成單純用軟件編碼難以達到很高的性能,特別是對于高清晰度視頻(HDTV)不能實現實時編碼,這就需要硬件加速或設計專門的硬件編碼電路。
目前,已有相應的硬件加速電路設計問世,但主要是對算術編碼部分進行設計,整體性能仍不夠理想。這里在對以往加速電路分析的基礎上,把握CABAC整個編碼原理,主要對其中的二進制化部分進行優(yōu)化,對相應的二進制化方法進行歸類優(yōu)化,采用并行運算的方案,最終在FPGA上以較優(yōu)的速度和資源實現硬件編碼。
2 二進制化原理
CABAC實現方案包括3個過程:語法元素的二進制化、上下文建模、自適應算術編碼,圖1是CABAC編碼器基本結構。
二進制化是CABAC編碼的第1步,提高二進制化模塊的編碼速度有助于整個系統速度的提高。在二進制化過程中,一個給定的非二進制語法元素被唯一地映射到一個二進制序列(Bin String),其中的每一位稱為Bin。
如果輸入為給定的二進制語法元素,則此步就可以越過,隨后的步驟由編碼模式決定。
在H.264標準中。語法元素較多,約有20多種,而二進制轉換使這些語法元素的二進制表示接近最小冗余編碼,以減少碼流。
CABAC中二進制轉換有4種基本類型:一元(U)編碼、截斷一元(TU)編碼、指數哥倫布(EGK)編碼和定長(FL)編碼。另外,還可通過這幾種編碼方式的串聯進行二進制化轉換。
2.1 一元(U)二進制轉換方案
對于一個無符號語法元素x≥0,CABAC中的一元碼字是由x個“1”串連并在結尾處加上“0”,因此一元二進制化的長度是x+1,如表1所示,其中Binldx表示字符串的索引。一般來講,U二進制轉換主要用于參考幀隊列預測語法元素的編碼。
2.2 截斷一元(TU)二進制轉換方案
截斷一元二進制化對語法元素的值有要求,只對不大于某個界限值(S)的語法元素進行二進制化。若語法元素值小于S,則其二進制化結果同一元二進制化;若語法元素值等于S,則其結果為S個“1”。一般,TU二進制轉換主要用于幀內色度預測模式的編碼。
2.3 指數哥倫布(EGK)二進制轉換方案
EGK編碼最初由Teuhola在上下文控制長度編碼方案中提出,是由Golomb編碼派生的。EGK編碼由一個前綴和后綴碼字串聯構成,其前綴部分由一元碼字l(x)=[log2(x/2k+1)]的值組成,其后綴部分由x+2k(1-2l(x))計算得出。一般,EGK二進制轉換主要用于殘差以外數據的編碼,具體情形視編碼器的設置而定。EGK二進制化隨后取值的不同而不同,k的取值為非負整數。
2.4 固定長度(FL)二進制轉換方案
固定長度二進制化適用于語法元素值x小于界限值S的情況。方法為直接用x值的二進制表示形式作為其二進制化結果,長度同定為:lFL=[log2S]的向上取值。一般,FL二進制轉換被用于統一分配的語法元素,編碼塊的圖形符號部分關系到亮度殘差。
2.5 基本二進制轉換的串聯方案
由以上各種二進制方式可以再推導出3種基本的二進制轉換方案。第1種是4位FL前綴與TU后綴(S=2)的串聯,而第2和第3種方案來自TU和EGK二進制轉換,稱為UEGK。這些方案被用于運動矢量微分和變換系數取絕對值。另外語法元素mb_type和sub_mb_type二進制化使用遍歷二叉樹方法,對應的二叉樹已在參考文獻中給出。
3 二進制化編碼方案優(yōu)化
H.264標準中的二進制化編碼流程是串行的,適合軟件的實現,但由于待編語法元素較多,導致執(zhí)行速度慢且效率低下。而硬件實現的最大優(yōu)勢在于其并行性,可大大提高執(zhí)行效率。因此,為提高編碼速度,在不改變算法實質的前提下,對標準中的編碼流程進行相應優(yōu)化,以利于硬件實現。主要提出以下優(yōu)化措施:
(1)將語法元素歸類按照基本的編碼方法及H.264對各語法元素的要求,可將20余種語法元素的二進制編碼方法歸為6類,包括U二進制化、UEGKO二進制化(k=0,uco-eff=14)、UEGK3二進制化(k=3,ucoeff=9)、宏塊/子宏塊類型二進制化、宏塊量化偏移二進制化,定長與截斷串聯的二進制化。將語法元素歸類,將有效減小編碼過程中的繁雜和無序性,有利于編碼正常完成。
(2)并行化設計語法元素的二進制化方法可歸為8類,在設計中,采用控制單元辨別相應的語法元素,并送入二進制化模塊進行編碼。但依照H.264標準設計,二進制化單元的入口地址不僅取決于語法元素的值,還取決于語法元素的種類,這種數據依存關系無疑增加了運算量。且輸出是串行,不利于流水線設計,這樣就將降低系統的時鐘頻率。故采用一種并行設計方案,以語法元素值為輸入,結果得到6個不同的輸出,將它們鎖存后,利用多路選擇器以語法元素種類作為控制端選出所需的值。兩種不同的實現方式見圖2。
來源:xinxin1次