林衡芝 ,張文軍 ,高志勇,陳穎琪 ,毛 韌
(1.上海交通大學 電子工程系 圖像通信與信息處理研究所,上海 200240;2.上海市數(shù)字媒體處理與傳輸重點實驗室,上海 200240)
H.264[1]和AVS[2]標準編解碼環(huán)路中都引入了去塊效應環(huán)路濾波模塊,用于平滑由于運動補償、變換及量化產生的虛假邊界,從而提高圖像質量。H.264的環(huán)路濾波基于4×4塊邊界濾波,先從左到右對垂直邊界濾波,再從上到下對水平邊界濾波。為適應高清視頻應用,H.264采用了宏塊級幀場自適應(MBAFF)、8×8變換編碼等新技術以提高編碼質量,但同時也增加了視頻編解碼實現(xiàn)的難度[3]。當采用MBAFF技術時,環(huán)路濾波以宏塊對為單位,對當前宏塊對濾波時,需要用到其左側宏塊對和上鄰宏塊對作為參考數(shù)據(jù),并且當前宏塊對與參考宏塊對的編碼方式可能不同。這不僅極大地增加了數(shù)據(jù)組織安排的難度,而且當上鄰宏塊對為場編碼而當前宏塊對為幀編碼時,當前宏塊對頂宏塊的水平宏塊邊界需要濾波2次。當宏塊采用8×8變換編碼時,只對宏塊內的8×8塊邊界濾波。AVS采用和H.264相同的濾波順序對宏塊內8×8塊邊界濾波。
近年來,關于環(huán)路濾波器硬件實現(xiàn)的研究很多。文獻[4]采用2個較大的SRAM存儲參考數(shù)據(jù)和中間數(shù)據(jù),并按標準規(guī)定的濾波順序實現(xiàn)AVS的環(huán)路濾波。文獻[5-7]實現(xiàn)了H.264 BP的環(huán)路濾波。文獻[5]采用二維的改進濾波順序以減少片上緩存,提高濾波速度。文獻[6]采用混合的濾波順序和宏塊分割等策略,以提高濾波中間數(shù)據(jù)重用率,減小片上緩存。文獻[7]采用GoP(Group of Pixel)的數(shù)據(jù)組織策略,以避免數(shù)據(jù)的轉置操作。文獻[8]使用4個LoP(Line of Pixel)的一維濾波器并行處理,以邏輯資源換取濾波速度。文獻[9-10]采用有效的Buffer管理機制,并將8×8塊邊界分割為2個4×4邊界處理,從而實現(xiàn)對MBAFF技術和8×8變換技術的支持。文獻[9]實現(xiàn)了H.264 BP/MP/HP的環(huán)路濾波,而文獻[10]支持AVS,H.264,VC-1的環(huán)路濾波。
本文通過調整宏塊濾波邊界和合理地組織數(shù)據(jù),實現(xiàn)了AVS與H.264環(huán)路濾波的復用;并通過優(yōu)化濾波順序和宏塊分割等策略提高中間數(shù)據(jù)重用率,減少片上緩存;使用并行和流水處理技術提高濾波速度和最高工作頻率。
H.264與AVS都以宏塊為單位作環(huán)路濾波,但在不同情況下,宏塊需要濾波的邊界不盡相同。為實現(xiàn)濾波結構和濾波順序的復用,對宏塊的濾波邊界作了規(guī)整。
對于AVS標準,所有的圖像邊界和條帶邊界不濾波;而對于H.264標準,所有圖像邊界和濾波禁用標志等于2時的條帶邊界不需要濾波。置圖像邊界和不需要濾波的條帶邊界對應的濾波強度Bs=0,采用相同的濾波結構和濾波順序處理包含圖像邊界或條帶邊界的宏塊。
對于采用8×8變換的宏塊,H.264和AVS的環(huán)路濾波都僅對宏塊內的8×8塊邊界濾波。把8×8塊邊界分割成2條4×4塊邊界處理,并置8×8塊內部的4×4塊邊界的Bs=0,采用相同的濾波結構和濾波順序處理8×8變換編碼的宏塊。
定義當前宏塊為幀編碼而其上鄰宏塊為場編碼的宏塊為特殊宏塊;除特殊宏塊之外的所有宏塊為標準宏塊。則通過宏塊規(guī)整后,每個標準宏塊有48條4×4邊界需要濾波,其中包括32條亮度邊界和16條色度邊界;而每個特殊宏塊有56條4×4邊界需要濾波,其中包括36條亮度邊界和20條色度邊界。
H.264和AVS采用相同的濾波順序。對每個宏塊,先從左到右對垂直邊界濾波,再從上到下對水平邊界濾波。結合本設計的特點,本文提出了一種新穎的混合濾波順序。圖1給出了標準宏塊的濾波順序,圖2給出了特殊宏塊的濾波順序。采用這種濾波順序,能夠有效地簡化設計,提高濾波中間數(shù)據(jù)的重用率,提高濾波效率。
為了減少片上緩存同時簡化設計,本文將一個宏塊分割為3個16×8塊處理。如圖3所示,將亮度塊分割為2個16×8塊,并將2個色度塊合并為1個16×8塊來處理。
經過宏塊分割后,標準宏塊的LumTop,LumBot,Chroma以及特殊宏塊的LumBot這4個16×8塊的濾波順序一樣,濾波方法也類似,而且其中2個LumBot的濾波完全相同;特殊宏塊的LumTop和Chroma這2個16×8塊的濾波順序和濾波方法也很相似。采用宏塊分割策略后,可將環(huán)路濾波分為宏塊級、16×8塊級和邊界級3個級別實現(xiàn)分級控制,整體結構清晰,易于設計與維護。
本文提出的去塊效應環(huán)路濾波器的總體結構如圖4所示,圖中主要描述了濾波的數(shù)據(jù)通路。
整個去塊效應環(huán)路濾波器主要由以下7個子模塊組成:
1)環(huán)路濾波主控(LFCtrl)
LFCtrl是整個環(huán)路濾波的主控系統(tǒng),它實現(xiàn)宏塊級和16×8塊級的數(shù)據(jù)控制,并協(xié)調各個模塊間的工作。
2)參數(shù)計算(PMCal)
PMCal計算濾波強度Bs、濾波裁減閾值α和β、濾波裁減參數(shù)Tc0。
3)濾波運算(LF_Core)
LF_Core是整個環(huán)路濾波器的核心模塊,它從RecBuf模塊、RefBuf模塊和PMCal模塊分別獲得待濾波數(shù)據(jù)、參考數(shù)據(jù)和濾波參數(shù),經環(huán)路濾波運算模塊濾波后,將濾波后的數(shù)據(jù)存儲到FilteredBuf模塊以便回寫到幀存儲器中。濾波運算模塊的內部結構如圖5所示,它由數(shù)據(jù)流控制器DataFlowCtrl、一維濾波器OneDFilter、臨時存儲器TempBuffer、復用選通MuxP和MuxQ、轉置直通TransDirP和TransDirQ、輸出接口OutputIF等8個子模塊構成。
DataFlowCtrl是濾波運算模塊的數(shù)據(jù)流控制器,實現(xiàn)邊界級的數(shù)據(jù)控制。OneDFilter是濾波處理的運算單元。它由2個LoP(Line of Pixels)的一維濾波器組成,并行處理2行像素的濾波;而每個LoP濾波器采用AVS標準濾波、AVS強濾波、H.264標準濾波、H.264強濾波和不濾波5種濾波模式的并行結構,并使用4節(jié)拍的流水處理。TempBuffer使用2個8×64 bit的雙口RAM以存儲16×8塊的濾波中間數(shù)據(jù),并設置了輸入輸出數(shù)據(jù)轉接口以實現(xiàn)數(shù)據(jù)的幀場格式轉換功能。MuxP和MuxQ用于OneDFilter的P端口和Q端口數(shù)據(jù)選通。TransDirP和TransDirQ依據(jù)濾波的需要對濾波后的數(shù)據(jù)作轉置或直通到下一子模塊處理。OutputIF是濾波運算模塊與其他模塊的輸出接口,實現(xiàn)數(shù)據(jù)格式轉換的功能。
4)重建參數(shù)緩存(RecBuf)
RecBuf采用乒乓Buffer的形式存儲從重建模塊接收的待濾波數(shù)據(jù),并在主控LFCtrl控制下將待濾波數(shù)據(jù)送往LF_Core模塊濾波。環(huán)路濾波基于宏塊進行,同時考慮到模塊間的流水,重建參數(shù)緩存RecBuf的大小為2×48×64 bit。
5)參考數(shù)據(jù)緩存(RefBuf)
RefBuf存儲左側宏塊(對)和上鄰宏塊(對)的參考數(shù)據(jù),并在主控LFCtrl控制下將參考數(shù)據(jù)送往LF_Core模塊參與濾波。
對于AVS和H.264的非MBAFF情況,左側參考數(shù)據(jù)為左側宏塊右側的8個4×4小塊(包括4個亮度塊和4個色度塊);對于H.264的MBAFF情況,濾波基于宏塊對進行,左側參考數(shù)據(jù)為左側宏塊對右側的16個4×4小塊。當前宏塊(對)作為下一宏塊(對)參考數(shù)據(jù)部分,在濾波后直接存儲于左側參考數(shù)據(jù)緩存中。由于當前宏塊對和左側宏塊對的編碼方式可能不同,為方便數(shù)據(jù)讀取采用128 bit的寬度存儲數(shù)據(jù),另外,為實現(xiàn)流水處理采用乒乓Buffer,故左側參考數(shù)據(jù)緩存大小為32×128 bit。
對于AVS和H.264的非MBAFF情況,上鄰參考數(shù)據(jù)為上鄰宏塊底部的8個4×4小塊(包括4個亮度塊和4個色度塊);對于H.264的MBAFF模式,濾波以宏塊對為單位,上鄰參考數(shù)據(jù)與上鄰宏塊對和當前宏塊對的編碼方式有關,圖6給出了field/field,field/frame,frame/field和frame/frame這4種不同情況下的上鄰參考數(shù)據(jù)。因此,上鄰參考數(shù)據(jù)需要存儲上鄰宏塊對的16個4×4小塊。上鄰參考數(shù)據(jù)由濾波模塊向幀存儲器申請獲得,或者為當前宏塊對的頂宏塊濾波后數(shù)據(jù)。由于本文濾波按16×8塊進行,上鄰參考數(shù)據(jù)緩存同時也作為部分數(shù)據(jù)的中間數(shù)據(jù)存儲器。為實現(xiàn)流水處理,同樣采用乒乓Buffer實現(xiàn),上鄰參考數(shù)據(jù)緩存大小為2×16×128 bit。
6)濾波后數(shù)據(jù)緩存(FilteredBuf)
FilteredBuf用于存儲濾波后的數(shù)據(jù),包括當前宏塊(對)和上鄰參考數(shù)據(jù)。
7)數(shù)據(jù)回寫接口(StoreIF)
StoreIF為濾波模塊和幀存儲器的接口模塊。
本文將系統(tǒng)分為宏塊級、16×8塊級和邊界級3個不同級別,使用LFCtrl和DataFlowCtrl控制器實現(xiàn)三級控制,其中LFCtrl實現(xiàn)宏塊級和16×8塊級的控制,而LF_Core中DataFlowCtrl實現(xiàn)每個16×8塊的邊界級控制。在宏塊級,將濾波過程分為數(shù)據(jù)準備、參數(shù)計算與濾波運算、數(shù)據(jù)回寫3個部分并行流水處理;在16×8塊級,環(huán)路濾波將每個宏塊分為3個16×8塊來處理,標準宏塊通過實現(xiàn)LumTopNor,LumBot和ChromaNor這3個16×8塊完成濾波,特殊宏塊通過實現(xiàn)LumTopSpe,LumBot和ChromaSpe這3個16×8塊完成濾波;LF_Core完成對每個16×8塊的濾波,邊界級的控制由其中的DataFlowCtrl子模塊實現(xiàn)。
下面主要以LumTopSpe為例介紹濾波的過程。通過算法分析,對于特殊宏塊的水平宏塊邊界需要濾波2次。按照圖2的濾波順序對LumTopSpe塊濾波,首先對垂直邊界0~7濾波,邊界0~1的左側參考數(shù)據(jù)從RefBuf中取得,而邊界2~7的左側參考數(shù)據(jù)為邊界0~5右側數(shù)據(jù)濾波后的中間數(shù)據(jù);邊界右側數(shù)據(jù)為從RecBuf中獲得的待濾波數(shù)據(jù)。垂直邊界濾波后,左側參考數(shù)據(jù)輸出到FilteredBuf中,而待濾波數(shù)據(jù)經TransDir轉置后暫存至TempBuffer。當垂直邊界濾波完成后,開始對水平宏塊邊界8~15濾波,水平宏塊邊界的上鄰參考數(shù)據(jù)從Ref-Buf讀取,而其下鄰待濾波數(shù)據(jù)為轉置后的場格式4×4小塊。轉置由TransDir模塊實現(xiàn),數(shù)據(jù)的幀場格式互換由TempBuffer中的輸入輸出數(shù)據(jù)轉接口控制實現(xiàn),由于待濾波數(shù)據(jù)在垂直邊界濾波完成后為幀格式,而水平宏塊邊界用到的待濾波數(shù)據(jù)為場格式,因此在這里使用了幀到場的格式變換。水平宏塊邊界濾波完成后,上鄰參考數(shù)據(jù)經轉置后輸出,而當前宏塊的濾波中間數(shù)據(jù)再次存儲于TempBuffer中。最后,對宏塊內部的水平邊界16~19濾波,邊界兩邊數(shù)據(jù)均從TempBuffer中讀取。Temp-Buffer中的數(shù)據(jù)為場格式,而宏塊內部水平邊界使用的數(shù)據(jù)為幀格式,因此待濾波數(shù)據(jù)讀取的同時作了場格式到幀格式的轉換。濾波完成后,將作為下一宏塊左側參考數(shù)據(jù)和下一個16×8塊的上鄰參考數(shù)據(jù)部分存儲到RefBuf中,其余部分輸出到FilteredBuf。
使用Verilog語言實現(xiàn)RTL級的設計;使用Synopsys Design Compier工具,用65 nm CMOS工藝庫,在200 MHz的工作頻率下進行綜合,電路規(guī)模大約為43 k門,片上緩存為1 152 byte。
采用64 bit的帶寬,待濾波數(shù)據(jù)的讀入需要48個時鐘周期,參考數(shù)據(jù)的申請需要32個時鐘周期,宏塊對及其上鄰參考數(shù)據(jù)的回寫需要128個時鐘周期。而1個標準宏塊的濾波時間為131個時鐘周期,其中有效濾波為96個時鐘周期;1個特殊宏塊的濾波時間為147個時鐘周期,其中有效濾波為112個時鐘周期。Bs的計算用了35個時鐘周期。本設計采用了并行流水策略,故完成1個標準宏塊的濾波需要166個時鐘周期,完成1個特殊宏塊的濾波需要182個時鐘周期。最壞情況下,每4個宏塊有1個宏塊為特殊宏塊,其他3個宏塊為標準宏塊,此時1個宏塊平均濾波時間為170個時鐘周期。當工作在200 MHz時,本文的結構能夠支持2路H.264或AVS的1 080p@60 f/s的實時解碼。
將本設計與參考文獻中的幾種濾波器的性能進行了對比,數(shù)據(jù)見表1。文獻[4-9]僅能支持一個標準的濾波,而本設計能夠同時支持AVS標準和H.264標準的濾波;與文獻[10]支持多標準的濾波器相比,本設計在系統(tǒng)資源增加不多的情況下,極大地提高了濾波的速度,具有更大的數(shù)據(jù)吞吐量。注意:濾波面積不包含輸入緩存、輸出緩存、Bs計算以及片上緩存面積;片上緩存不包含輸入緩存和輸出緩存;N為一宏塊行的行塊數(shù)。
表1 幾種濾波器的性能對比
本文提出了一種支持H.264 BP/MP/HP和AVS的高效去塊效應環(huán)路濾波器的硬件實現(xiàn)結構。通過調整宏塊濾波邊界和合理地組織數(shù)據(jù),實現(xiàn)了H.264 BP/MP/HP和AVS的環(huán)路濾波結構的復用,并通過優(yōu)化濾波順序、宏塊分割、并行流水處理等技術減小片上緩存,提高了濾波效率。
[1]International Telecommunication Union.ITU-T recommendation H.264:advanced video coding for generic audiovisual services[S].2005.
[2]GB/T 20090.2——2006.信息技術先進音視頻編碼第2部分:視頻[S].2006.
[3]于小燕,趙不賄,鄭博,等.基于FPGA的H.264幀內預測算法研究[J].電視技術,2010,34(5):40-43.
[4]SHENG B,GAO W,WU D.A platform-based architecture of loop filter for AVS[EB/OL].[2010-08-20].http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=1452726.
[5]SHENG B,GAO W,WU D.An implemented architecture of de-blocking filter for H.264/AVC[EB/OL].[2010-08-20].http://www.jdl.ac.cn/doc/2004/An%20Implemented%20Architecture%20of%20Deblocking%20Filter.pdf.
[6]LIU T,LEE W,LIN T,et al.A memory-efficient deblocking filter for H.264/AVC video coding[J].IEEE International Symposium on Circuits and Systems,2005,3:2140-2143.
[7]LIN H,YANG J,LIU B,et al.Efficient deblocking filter architecture for H.264 video coders[EB/OL].[2010-08-20].http://www.arnetminer.org/viewpub.do?pid=430041.
[8]LOUKIL H,BEN ATITALLAH A,MASMOUDI N.Hardware architecture for H.264/AVC deblocking filter algorithm[EB/OL].[2010-08-20].http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=4956713.
[9]CHIEN C,CHANG H,GUO J.A high throughput in-loop de-blocking filter supporting H.264/AVC BP/MP/HP video coding[C]//Proc.IEEE APCCAS.Macao,China:IEEE Press,2008:312-315.
[10]CHIEN C,CHANG H,GUO J.A high throughput de-blocking filter design supporting multiple video coding standards[C]//Proc.2009 IEEE International Symposium on Circuits and Systems.[S.l.]:IEEE Press,2009:2377-2380.