摘 要:對支持宏塊級幀場自適應(yīng)的H.264去塊效應(yīng)濾波過程進(jìn)行深入分析,利用相鄰4×4 像素塊間數(shù)據(jù)的依賴關(guān)系合理組織數(shù)據(jù)存儲順序,提出了一種針對H.264/AVC標(biāo)準(zhǔn)的高性能、低復(fù)雜度的去塊效應(yīng)濾波系統(tǒng)的VLSI結(jié)構(gòu)。
關(guān)鍵詞:H.264/AVC解碼器;宏塊級幀場自適應(yīng);去塊濾波
H.264/AVC是由 ITU-T視頻編碼專家組和ISO/ IEC運(yùn)動圖像專家組聯(lián)合制定的面向未來IP和無線環(huán)境的最新視頻編碼標(biāo)準(zhǔn)[1]。H.264/AVC采用基于塊的DCT變換、量化、運(yùn)動補(bǔ)償,這些技術(shù)都會不可避免地在塊邊界引入塊效應(yīng),嚴(yán)重影響圖像的主觀質(zhì)量,因此,H.264/AVC標(biāo)準(zhǔn)采用去塊效應(yīng)環(huán)路濾波(簡稱環(huán)路濾波)來去除塊效應(yīng),以提高圖像的主觀質(zhì)量和編碼效率。
但在大幅度改善視頻圖像質(zhì)量和壓縮效率的同時,去塊效應(yīng)濾波系統(tǒng)也引入了極高的計算復(fù)雜度。其運(yùn)算量大約占解碼器計算總量的1/3[2],使之成為解碼器設(shè)計中的瓶頸之一。去塊效應(yīng)濾波系統(tǒng)對圖像中每一個4×4塊的內(nèi)容都要進(jìn)行橫向和縱向2次濾波,涉及到大量的存儲器讀寫,因此,去塊效應(yīng)濾波系統(tǒng)的VLSI 結(jié)構(gòu)設(shè)計和中間數(shù)據(jù)緩沖器的選擇成了硬件結(jié)構(gòu)設(shè)計上的重大難題。
參考文獻(xiàn)[2]是基于幀上的濾波結(jié)構(gòu),參考文獻(xiàn)[3-5]中列舉了幾種已經(jīng)提出的硬件加速器結(jié)構(gòu),這2種結(jié)構(gòu)都是以宏塊濾波為基礎(chǔ)的。很明顯, 基于幀上的濾波結(jié)構(gòu)需要一幀的緩沖器和更長的系統(tǒng)延時。為了克服這個困難,參考文獻(xiàn)[5]引入了一個雙口SRAM來同時對濾波數(shù)據(jù)進(jìn)行讀和寫,但是內(nèi)部結(jié)構(gòu)比較復(fù)雜而且處理延時仍然較大。
從現(xiàn)有的文獻(xiàn)看,討論H.264去塊效應(yīng)算法和硬件實現(xiàn)的文章不少,但對支持宏塊級幀場自適應(yīng)去塊效應(yīng)的文獻(xiàn)幾乎還是空白。本文分析并優(yōu)化了支持宏塊級幀場自適應(yīng)的去塊效應(yīng)的存儲器結(jié)構(gòu),并給出了硬件實現(xiàn)。
1 算法
1.1 去塊效應(yīng)濾波
去塊濾波在整個視頻解碼過程中位于重建之后,對每個解碼完成的宏塊按光柵掃描順序進(jìn)行濾波,圖像邊界不用濾波。濾波是基于宏塊的,由于H.264中的整數(shù)變換是基于4×4點的,那么塊濾波系統(tǒng)在濾波的時候也是以4×4點的塊為單元處理。先對垂直邊界進(jìn)行水平濾波,再對水平邊界進(jìn)行垂直濾波。對宏塊的2個方向濾波都完成后才能進(jìn)行后面宏塊的濾波。對圖像中宏塊的濾波按raster掃描方式進(jìn)行。對幀場自適應(yīng)編碼幀,它們在垂直方向上相鄰的宏塊對放在一起,則濾波順序按宏塊對進(jìn)行,即在幀中對宏塊對按raster掃描方式進(jìn)行,對每個宏塊對先進(jìn)行頂部宏塊的濾波[2]。圖1虛線為需要濾波的邊界。對每個亮度宏塊,先濾波宏塊最左邊的邊界(圖1中序號1),然后依次從左到右宏塊內(nèi)3個垂直邊界(圖1中的序號2~4)。類似地,對水平邊界先濾波宏塊頂部的邊界(圖1中的序號5),然后依次從上到下宏塊內(nèi)3個水平邊界(圖1中的序號6~8)。色度濾波次序類似。
H.264/AVC的自適應(yīng)環(huán)路濾波包括如下幾個部分:(1)邊界濾波像素的輸入輸出;(2)邊界濾波強(qiáng)度的計算,算法如圖2所示,必須先分清圖像的真實邊界和虛假邊界,對真實邊界要加以保持,而對虛假邊界進(jìn)行平滑濾波;(3)計算邊界閾值 α、β、c0。最后對濾波強(qiáng)度不為0 的虛假邊界進(jìn)行平滑濾波。整個處理過程如圖3所示。
1.2 宏塊級幀場自適應(yīng)
視頻幀可以分為2種類型:連續(xù)幀或隔行視頻幀[6]。通常為了減少大面積的閃爍現(xiàn)象,把一幀分為2個隔行的場。這時場內(nèi)相鄰行的時間相關(guān)性較強(qiáng),幀內(nèi)相鄰行的空間相關(guān)性較強(qiáng)。在有物體移動或攝像機(jī)鏡頭移動的隔行掃描幀中,與逐行掃描幀相比,臨近的兩行的統(tǒng)計依賴性下降。在這種情況下,也許對每個場單獨進(jìn)行壓縮的效率更高。為此H.264的設(shè)計中允許編碼器在對一幀進(jìn)行編碼時做如下決定:
(1)2個場結(jié)合在一起,對其按一個獨立的幀進(jìn)行編碼(幀模式)。
(2)2個場結(jié)合,對其按單獨的場獨立進(jìn)行編碼(場模式)。
(3)將2個場結(jié)合在一起,并將其作為一個單獨的幀壓縮,但編碼時需要首先將垂直相鄰的2個宏塊分成2場或2幀中的一對宏塊。
對一個序列中的每一幀都可以自適應(yīng)地選擇這3種選項中的一種。H.264采用宏塊自適應(yīng)幀場編碼(MB-AFF)模式中,幀場編碼的選擇在宏塊級中指定。且當(dāng)前片通常由16亮度像素寬和32亮度像素高的單元組成,并以宏塊對的形式編碼,如圖4所示。編碼器可按2個幀宏塊或者2個場宏塊來編碼每個宏塊對[7]。
由于宏塊級幀場自適應(yīng)是按照垂直宏塊對的形式進(jìn)行編碼,因此其解碼順序與普通幀/場中宏塊的解碼順序有很大的不同,如圖5、圖6所示。在非幀場自適應(yīng)模式下,解碼器按照水平掃描的順序依次解碼宏塊;而在宏塊級幀場自適應(yīng)時,解碼順序演變?yōu)殇忼X形順序。
當(dāng)采用宏塊級自適應(yīng)編碼時,相鄰宏塊位置的獲取就比較復(fù)雜了,在以宏塊對為單位對圖像進(jìn)行解碼時,除了需要判斷當(dāng)前宏塊是上宏塊還是下宏塊,還要判斷當(dāng)前宏塊對和參考宏塊對的幀場屬性,因為對于計算所需的像素位置是不同的。宏塊級幀場自適應(yīng)取值方法,具體可參見H.264協(xié)議[1]。相鄰宏塊對間的關(guān)系如圖7所示。
2 去塊效應(yīng)濾波系統(tǒng)結(jié)構(gòu)
2.1 濾波器結(jié)構(gòu)
針對影響去塊效應(yīng)濾波系統(tǒng)速度的因素,提出了一種高效的濾波結(jié)構(gòu),如圖8所示。該結(jié)構(gòu)利用了數(shù)據(jù)重用機(jī)制和并行計算來確保達(dá)到速度要求。整個結(jié)構(gòu)由中央濾波處理單元、閾值查詢單元、數(shù)據(jù)輸入輸出單元和同步控制單元組成。
中央濾波處理單元是去塊效應(yīng)濾波系統(tǒng)的核心部分??紤]到SRAM存取數(shù)據(jù)的時間耗費(fèi),不能采用參考軟件中的逐個濾波集合依次處理的方法,而一定要采用并行處理的方式進(jìn)行。但出于芯片面積和功耗的考慮,本設(shè)計中采用以一個塊邊界(Block Edge)為單元的濾波處理方案。
閾值查詢單元負(fù)責(zé)接收上一模塊傳遞進(jìn)來的indexA、indexB,然后實現(xiàn)查表功能,輸出閾值α、β、c0以及濾波強(qiáng)度Strength。
數(shù)據(jù)輸入輸出單元負(fù)責(zé)給中央濾波單元傳送數(shù)據(jù)和存儲數(shù)據(jù)。在新的視頻標(biāo)準(zhǔn)中,進(jìn)行水平濾波(垂直邊界濾波)和垂直濾波(水平邊界濾波)所用的數(shù)據(jù)格式有所不同,水平濾波取2個4×4塊的行數(shù)據(jù)進(jìn)行濾波,而垂直濾波是對2個塊的列數(shù)據(jù)進(jìn)行濾波。由于存儲數(shù)據(jù)時,都是一行4個數(shù)據(jù)進(jìn)行存儲的,因此在進(jìn)行水平濾波過程時,每個塊的數(shù)據(jù)都要經(jīng)過T(矩陣轉(zhuǎn)換單元)進(jìn)行一次矩陣的行列轉(zhuǎn)換,垂直濾波準(zhǔn)備數(shù)據(jù)。同時由于MBAFF模式下參考像素的獲取有了更大的靈活性,因此片內(nèi)數(shù)據(jù)的讀寫控制需要更加周密的設(shè)計。
同步控制單元用一個有限狀態(tài)機(jī)來實現(xiàn),控制整個去塊效應(yīng)濾波的數(shù)據(jù)處理過程包括接收啟動信號、宏塊參數(shù)信息的讀取、閾值查詢、濾波像素值的輸入、濾波操作和濾波后數(shù)據(jù)處理等;控制中央濾波單元的流水線操作,完成宏塊圖像數(shù)據(jù)去塊效應(yīng)濾波功能。
2.2 數(shù)據(jù)流控制
去塊效應(yīng)濾波在大幅度改善視頻圖像質(zhì)量和壓縮效率的同時,增加了對外部存儲器的訪問頻率。而頻繁的存儲器存取會增大整個芯片的功耗,所以設(shè)計出合理的存儲器訪問策略對本設(shè)計尤為重要。
由于濾波過程中不僅需要當(dāng)前宏塊重建之后的像素數(shù)據(jù),還需要相鄰宏塊的已經(jīng)濾波完的像素。對于1 080像素這樣解析度的圖像來說,在MBAFF模式下,需要存儲3個Block行的數(shù)據(jù)(1 920×4×12×3=270 KB),這么多的數(shù)據(jù)用片內(nèi)SRAM來存儲肯定是不現(xiàn)實的,而DRAM具有較低的成本和不錯的訪存速度,它被廣泛用來存儲整個圖像幀的數(shù)據(jù)。同時在片內(nèi)開辟一塊很小的SRAM(LineCache)用來和DRAM交互,增加數(shù)據(jù)的重復(fù)使用率和訪存效率,在解碼完若干個宏塊后進(jìn)行更新。這樣可以提高系統(tǒng)的整體性能。
作為溝通寄存器和DRAM數(shù)據(jù)流向的中間層的SRAM在設(shè)計中顯得尤為重要。片內(nèi)存儲器分為單口SRAM和Register Files兩部分。本設(shè)計采用6塊片內(nèi)SRAM,如圖8所示。下面以亮度信號為例,具體介紹SRAM的用途。MbLuma用來存放運(yùn)動補(bǔ)償單元處理后的宏塊數(shù)據(jù),由去塊效應(yīng)單元處理完畢后的數(shù)據(jù)也將放在這里,然后寫入到SDRAM中。當(dāng)宏塊的第一條邊界兩邊像素點濾波完成后,右邊的4個4×4塊被存入寄存器中,這部分?jǐn)?shù)據(jù)在對下一邊界濾波時可被重用,這樣就減少了存儲器讀取的頻率,從而降低處理的延遲。重復(fù)上述過程,直到最后一條垂直邊界濾波完成之后,將垂直邊界濾波后的數(shù)據(jù)存入BufLuma中。BufLuma作為片內(nèi)的存儲器用來緩沖進(jìn)行完縱向濾波后的數(shù)據(jù)。之前首先進(jìn)行了一次變換(將橫向排列的像素變?yōu)榭v向),以滿足接下來將要進(jìn)行的橫向濾波的要求。在進(jìn)行垂直邊界濾波時,數(shù)據(jù)主要由MbLuma讀出,處理后主要寫入BufLuma。接下來再進(jìn)行水平邊界濾波時,數(shù)據(jù)主要由BufLuma讀出,處理后主要寫入MbLuma,然后寫入SDRAM。CacheLuma中存放有去塊效應(yīng)需要暫存的參考像素數(shù)據(jù),主要包括當(dāng)前宏塊左側(cè)和上邊的若干個Block像素。
MBAFF下宏塊邊界參考像素數(shù)據(jù)存取要復(fù)雜很多。MBAFF下都是按照宏塊對的順序濾波的,宏塊對內(nèi)部的幀場屬性是一致的,但是不同宏塊對之間可能有不同的幀場屬性,對于宏塊內(nèi)部邊界的濾波與非MBAFF時邊界濾汲沒有區(qū)別,但是對于宏塊邊界的濾波,需要根據(jù)當(dāng)前宏塊在宏塊對中的位置,以及當(dāng)前宏塊和參考宏塊的幀場屬性來綜合判斷,確定濾波所需的濾波強(qiáng)度以及濾波參考像素的取值。對于水平邊界濾波也就形成了8種可能的組合,如表1所示。
對于ID.1、3、6、8的組合,由于當(dāng)前宏塊和參考宏塊幀場屬性相同,取值和非MBAFF模式下的一樣;而對于當(dāng)前宏塊和參考宏塊具有不同的幀場屬性,情況就要復(fù)雜很多。為了更清楚地說明對宏塊級幀場自適應(yīng)濾波,下面舉例分析。當(dāng)前宏塊為宏塊對中的頂宏塊,是場宏塊,現(xiàn)在做水平邊界的濾波,它需要參考其上面宏塊對的信息,其參考宏塊為幀宏塊對,那么它需要的參考Block就是圖9左邊中淺灰Block;假設(shè)當(dāng)前宏塊為宏塊對中的頂宏塊,是幀宏塊,現(xiàn)在做水平邊界的濾波,它需要參考其上面宏塊對的信息,其參考宏塊為場宏塊對,那么它需要的參考Block為圖9中右邊淺灰Block。
更多的宏塊級幀場自適應(yīng)在計算預(yù)測值時選取哪些值,具體可參見H. 264協(xié)議[1]。
本文對H.264/AVC 標(biāo)準(zhǔn)中MBAFF模式下的去塊效應(yīng)濾波過程進(jìn)行了分析,利用數(shù)據(jù)重用機(jī)制和并行計算來加速濾波的過程,提高了整個濾波系統(tǒng)的速度,對 H.264/AVC的編解碼有較好的實現(xiàn)。
參考文獻(xiàn)
[1] ITU-T. Advanced video coding for generic audio visual services.ITU-T Recommendation H.264 | ISO/IEC 14496-10 (MPEG-4 AVC), 2005.
[2] SIMA M, ZHOU Yuan Hua, ZHANG Wei. An efficient architecture for adaptive deblocking filter of H.264/AVC video coding. IEEE Trans. Consumer Electronics, 2004,50:292-296.
[3] HUANG Y W, CHEN T W, HSIEH B Y, et al. Architecture design for deblocking filter in H.264/JVT/AVC. IEEE International Conference on Multimedia and Expo, 2003.
[4] SHENG B, GAO W, WU D.An implemented architecture of deblocking filter for H.264/AVC. IEEE International Conference on Image Processing, 2004,1:665-668.
[5] CHENG Chao Chung, CHANG Tian Sheuan. An hardware efficient deblocking filter for H.264/AVC. Proc. of International Conference on Consumer Electronics (ICCE) 2005.[s.l.]:IEEE Press, 2005.
[6] 馮曉茹,陳晨,楊海池,等.支持宏塊級幀場自適應(yīng)的H.264解碼器幀內(nèi)模塊FPGA實現(xiàn)[J]. 空間電子技術(shù),2008(4).
[7] 畢厚杰.新一代視頻壓縮編碼標(biāo)準(zhǔn)H.264/AVC[M].北京:人民郵電出版社,2005.
[8] KIM J, NA S, KYUNG C. A low-power deblocking filter architecture for H.264 advanced video coding. Very Large Scale Integration, 2007. VLSI-SoC 2007. IFIP International Conference on Volume, Issue, 15-17 Oct. 2007:190-193 Digital Object Identifier 10.1109/VLSISOC.2007.4402496
[9] LIST P, JOCH A, LAINEMA J, et al. Adaptive deblocking filter[J]. IEEE Trans. on Circuit Syst.Video Technol, 2003, 13(7).
[10] JVT H.264/AVC Reference Software JM 9.3.