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