陳焯淼,陳志峰,陳 建,汪家華
(福州大學(xué) 物理與信息工程學(xué)院,福建 福州 350108)
當(dāng)前,基于超高清視頻的多媒體娛樂需求快速增長,對視頻編碼技術(shù)提出了更高的要求。高效視頻編碼(High Efficiency Video Coding,HEVC)是視頻編碼專家組(Video Coding Experts Group,VCEG)和運動圖像專家組(Moving Picture Expert Group,MPEG)組成的視頻編碼聯(lián)合協(xié)作組(JCT-VC)共同開發(fā)的一種視頻編碼標(biāo)準(zhǔn)[1]。與現(xiàn)有的H.264/AVC標(biāo)準(zhǔn)相比,HEVC標(biāo)準(zhǔn)在相同的視覺質(zhì)量下,降低了50%的比特率[2]。塊效應(yīng)是基于塊的視頻壓縮存在的最為明顯的偽影問題,這是因為圖像塊的變換和量化是相互獨立的。為此,H.265/HEVC標(biāo)準(zhǔn)沿用了H.264/AVC標(biāo)準(zhǔn)的環(huán)路濾波技術(shù),采用去方塊濾波器來改善主客觀視頻質(zhì)量。由于必須對塊邊界附近的所有像素進行濾波,HEVC標(biāo)準(zhǔn)中的去方塊濾波算法仍然有很高的計算復(fù)雜度,約占HEVC視頻解碼器計算復(fù)雜度的20%[3]。因此,新的視頻編碼標(biāo)準(zhǔn)的硬件實現(xiàn)對于行業(yè)應(yīng)用來說非常重要。
文獻[4]—文獻[10]中,已有學(xué)者提出了一些關(guān)于去方塊濾波硬件實現(xiàn)的研究工作。HSU等人提出一種新穎的內(nèi)存結(jié)構(gòu)和數(shù)據(jù)訪問形式,設(shè)計了一個雙行DBF濾波器[4]。TANG等人提出一種具有兩個垂直和兩個水平邊界的8×8塊的無SRAM去方塊濾波架構(gòu)[5]。CHRISTOPHER等人提出一種用于去方塊濾波器的高效資源共享硬件架構(gòu)。該架構(gòu)利用四個邊緣濾波器并行過濾8×8塊的兩個邊緣[6]。AYADI等人針對亮度32×32編碼塊內(nèi)的所有塊邊界提出了一種新的DBF硬件架構(gòu)[7]。SHEN等人提出一種基于1/4LCU的隔行存儲組織來解決DF垂直和水平過濾之間的數(shù)據(jù)依賴性,并實現(xiàn)了去方塊濾波與SAO聯(lián)調(diào)[8]。文獻[9]設(shè)計了一個單邊緣去方塊濾波器,每幀視頻被分成32×32個塊,通過流水線的方式再將其分割成8×32個像素的塊來處理,但是大幅度增加了外部存儲帶寬。文獻[10]提出一種高通量、低功耗的DBF架構(gòu)。該架構(gòu)每個時鐘能夠處理64個樣本,在兩條并行數(shù)據(jù)路徑中處理亮度和色度分量。
上述一些研究工作為了追求高并行、高效率而大大增加了面積。本文重點研究一種高效的去方塊濾波器在現(xiàn)場可編程邏輯門陣列(Field Programmable Gate Array,F(xiàn)PGA)上的實現(xiàn),它以極少的資源消耗,通過流水線的形式來提高工作效率;重復(fù)利用重構(gòu)RAM來輸入輸出數(shù)據(jù),按濾波順序進行濾波。經(jīng)計算,處理一個最大編碼單元(Largest Coding Unit, LCU)共需要907個周期。
去方塊濾波過程共分為4個步驟,其流程如圖1所示,詳細(xì)介紹如下。
圖1 去方塊濾波流程
(1)確定濾波邊界。去方塊濾波只對8×8的PU(Prediction Unit,預(yù)測單元)或TU(Transform Unit,變換單元)塊邊界進行濾波,因此需遍歷每個CU(Coding Unit編碼單元),檢查每個CU中的8×8邊界是否是PU或者TU的邊界。每個邊界都有一個濾波標(biāo)志,根據(jù)PU,TU的劃分模式,將需要濾波的邊界置為1。
(2)計算邊界強度(Boundary Strength,BS)。根據(jù)編碼參數(shù)初步判斷,邊界強度有0,1,2三種。實際濾波垂直邊界是以8×4為基本單位,水平以4×8為基本單位。根據(jù)每4×4塊的編碼參數(shù)來確定邊界的濾波強度。
(3)濾波開關(guān)決策。根據(jù)邊界兩邊像素值的變化程度判斷邊界是否需要濾波。若邊界兩邊區(qū)域像素本身就不平坦,則在邊界處像素的跳躍自然被認(rèn)為正常的,因此不需要濾波。而濾波強弱選擇則根據(jù)邊界兩邊像素值的變化率來判斷濾波強度。
(4)濾波。濾波分為亮度分量的強濾波、亮度分量的弱濾波以及色度分量的濾波。亮度分量的強濾波,需對邊界兩邊各3個像素進行修正;亮度分量的弱濾波,需對邊界兩邊1~2個像素進行修正;色度分量的濾波是指,當(dāng)獲取邊界強度模塊判定BS=2時,色度分量需要進行濾波操作,需對邊界兩邊各1個像素進行修正。
DBF的總體架構(gòu)如圖2所示。整體可分為主控制模塊、濾波模塊及數(shù)據(jù)緩存模塊。主控模塊包括狀態(tài)機控制和地址生成模塊。其中,狀態(tài)機協(xié)調(diào)整個DBF模塊的工作過程,控制流水線的翻轉(zhuǎn)信號(Is_ver)、亮度/色度轉(zhuǎn)換信號(Is_luma)及空閑/工作狀態(tài)信號,地址生成模塊根據(jù)狀態(tài)機狀態(tài)以及計數(shù)器的計數(shù)值生成像素和編碼參數(shù)在存儲器中的地址。
圖2 去方塊濾波硬件架構(gòu)
濾波模塊包括編碼參數(shù)計算、邊界強度計算、濾波決策及選擇性濾波等子模塊。其中,濾波決策子模塊根據(jù)編碼參數(shù)計算出的邊界處像素值差別的判決門限(tc)、濾波開關(guān)的判決門限(β)和邊界強度計算出的BS,判斷是否需要進行強、弱濾波,還是不濾波;選擇性濾波子模塊對來自輸入緩存(buffer)的P和Q像素塊,同時進行強濾波、弱濾波或不濾波操作。該設(shè)計的濾波順序為:亮度垂直→亮度水平→色度垂直→色度水平,并根據(jù)濾波決策結(jié)果選擇對應(yīng)的濾波種類或未濾波數(shù)據(jù)輸出。
數(shù)據(jù)緩存模塊又可以分為像素緩存(data_ram)和編碼參數(shù)(param_ram)緩存。其中,data_ram用來存放像素,做完垂直濾波后的像素將重新寫回data_ram中,用于下一階段的水平濾波;param_ram用來存放編碼參數(shù),在輸入像素的同時輸入編碼參數(shù),用于計算閾值和邊界處像素值差別的判決門限以及邊界強度BS。
去方塊濾波架構(gòu)中,邊界判斷和邊界強度計算模塊是較復(fù)雜的計算單元,在濾波數(shù)據(jù)準(zhǔn)備好前就需要得到邊界強度的值。而由第1節(jié)內(nèi)容可知,計算邊界強度前還需要確定濾波邊界,具體的電路結(jié)構(gòu)如圖3所示。
圖3 邊界判斷&邊界強度計算電路結(jié)構(gòu)
首先,將cu、tu和pu的劃分結(jié)構(gòu)都整合到查找表中,然后根據(jù)輸入的cu_depth(cu深度)、tu_depth(tu深度)、pu_partition(pu劃分方式)和Q塊的地址來判斷該4×4塊是否有濾波邊界。值得注意的是,Q塊的邊界情況與對應(yīng)的P塊是一致的,因此只需要判斷一個4×4塊的邊界情況即可。然后,根據(jù)濾波邊界結(jié)果來計算對應(yīng)的BS值。對于沒有邊界的塊,BS直接置0;對于有濾波邊界的塊,還需根據(jù)P塊和Q塊對應(yīng)的預(yù)測模式(pred_mode_p和pred_mode_q)、非零變換系數(shù)標(biāo)志位(cbf_p和cbf_q)和運動矢量(mv_p和mv_q)來進一步計算BS的值。
以64×64的編碼樹單元(Coding Tree Unit,CTU)的DBF處理為例,數(shù)據(jù)輸入、編碼參數(shù)計算、濾波操作、數(shù)據(jù)輸出組成的四級流水線如圖4所示。去方塊的數(shù)據(jù)處理單元通常是4×4大小的P塊和Q塊,為了處理方便,每個時鐘周期讀取一個P塊或一個Q塊數(shù)據(jù),即每個時鐘能讀取16個像素,讀取一個P塊和Q塊的數(shù)據(jù)共需要花費2個時鐘。
圖4 流水線示意圖
在讀取像素的同時讀取編碼參數(shù),并在一個時鐘內(nèi)計算得到在濾波階段所需要的參數(shù)(BS、β、tc)。在濾波階段獲取到參數(shù)之后,消耗2個時鐘得到濾波后的數(shù)據(jù)并更新到P,Q塊輸出寄存器中。由于P,Q塊輸出寄存器中的數(shù)據(jù)是同時更新,需再等待一個時鐘后寄存器的數(shù)據(jù)按輸入順序串行輸出。這樣輸入到輸出共花了5個時鐘。為了節(jié)省資源消耗,將垂直濾波后的像素根據(jù)地址生成模塊中的地址重新寫回重構(gòu)RAM中,用于下一階段的水平濾波,做完水平濾波后再輸出到外部。
本文提出的DBF硬件架構(gòu)是在Verilog中設(shè)計的,并使用Altera FPGA開發(fā)平臺進行綜合與時序分析。其中,選用QuartusⅡ16.1為EDA開發(fā)工具,所選擇的器件型號為Altera Arria10 10AS066N3F40E2SG。通過RTL仿真對并行體系結(jié)構(gòu)進行了測試和驗證,得到了仿真結(jié)果,完全符合軟件代碼的結(jié)果。表1將實驗結(jié)果與之前的工作進行了對比。首先,所提出的硬件架構(gòu)能夠達到215 MHz的工作主頻,在907個時鐘周期內(nèi)實現(xiàn)了去方塊濾波器的所有功能。文獻[4]在768個時鐘周期內(nèi)僅實現(xiàn)了BS計算和濾波操作,而文獻[7]花費了2 252個時鐘周期僅實現(xiàn)了亮度濾波操作;其次,所提架構(gòu)僅消耗了5 212個查找表和1 291個寄存器,與文獻[4]和[7]相比,架構(gòu)在邏輯資源利用上有更大的優(yōu)勢,查找表和寄存器資源不到文獻[7]的十分之一。
表1 與先前工作的比較(CTU尺寸64×64)
本文提出了一種高效的HEVC去方塊濾波器的硬件架構(gòu)。因其采用垂直濾波和水平濾波模塊的共用結(jié)構(gòu),復(fù)用了數(shù)據(jù)存儲結(jié)構(gòu),合理利用了FPGA片上資源,在提高系統(tǒng)吞吐量的同時,大大縮減了資源消耗。實驗綜合結(jié)果表明,本文的設(shè)計可以以215 MHz的時鐘頻率對1 080p@60fps視頻實現(xiàn)實時去方塊濾波,但吞吐率并不是最優(yōu)。如何提高該架構(gòu)的吞吐率,是下一步的研究目標(biāo)。