摘 要: 闡述了AVS視頻解碼器的總體框架,,詳細分析了幀內(nèi)預(yù)測的原理與算法,提出了一種可行的幀內(nèi)預(yù)測解碼器的硬件設(shè)計,, 給出了每一模塊的功能和結(jié)構(gòu)的詳細介紹,,并建立了一種高效的存儲機制。通過FPGA平臺的驗證,,表明本設(shè)計完全滿足AVS標清視頻的實時解碼要求,。
關(guān)鍵詞: 音視頻編碼標準;解碼器,;幀內(nèi)預(yù)測,; 現(xiàn)場可編程門陣列
?
隨著信息技術(shù)和計算機互聯(lián)網(wǎng)的飛速發(fā)展,多媒體信息已成為人類獲取信息的重要載體,。經(jīng)數(shù)字化處理后的多媒體信息具有易加密,、抗干擾、可再生等優(yōu)點,,但其數(shù)據(jù)量大的特點也對信息存儲設(shè)備及通信網(wǎng)絡(luò)均提出了很高要求,。因此,尋找更有效的編解碼技術(shù)已成為目前電子領(lǐng)域的主要研究問題之一,。
AVS(Audio Video Coding Standard)標準是由中國數(shù)字音視頻編解碼技術(shù)標準工作組(簡稱AVS工作組)提出,、具有自主知識產(chǎn)權(quán)的數(shù)字音視頻編解碼技術(shù)標準。AVS標準包括系統(tǒng)、視頻,、音頻,、移動視頻等9個部分,其中《第2部分 視頻》[1](簡稱AVS視頻)于2006年3月實施, 主要面向高清晰度和高質(zhì)量數(shù)字電視廣播,、數(shù)字存儲媒體和其他相關(guān)應(yīng)用,。它具有四個主要特點[2]:(1)先進性,以H.264標準為起點,,選用的技術(shù)具有國際前沿水平,;(2)性能高,編碼效率比MPEG-2高2倍以上,,與H.264的編碼效率相當(dāng),;(3)復(fù)雜度低,算法復(fù)雜度明顯低于H.264,;(4)專利授權(quán)模式簡單,,費用明顯低于同類標準。
本文就AVS解碼器的幀內(nèi)預(yù)測模塊的設(shè)計與實現(xiàn)進行討論,,介紹了AVS解碼器總體設(shè)計的架構(gòu)和各功能模塊,。在介紹了幀內(nèi)預(yù)測原理的基礎(chǔ)上,詳細描述了一種適于AVS幀內(nèi)預(yù)測解碼的硬件實現(xiàn)方法,,提出了可行的流水線并行操作與存儲機制,。最后給出了實驗數(shù)據(jù)與仿真波形。
1 解碼器總體設(shè)計結(jié)構(gòu)
解碼器的結(jié)構(gòu)[3]由系統(tǒng)控制模塊(System controller)和各功能模塊(Data processing)兩大部分組成,,如圖1所示,。
功能模塊之間的數(shù)據(jù)以8×8塊為單位流水處理,輸入的碼流經(jīng)過變長解碼模塊VLD(Variable Length Decoder)解析后,,一部分反饋給系統(tǒng)控制模塊,,該模塊可以接收標志信號,、轉(zhuǎn)換相應(yīng)控制狀態(tài)、發(fā)出使能信號,、并統(tǒng)一時序等,,控制各功能模塊之間的數(shù)據(jù)傳遞與通信;一部分經(jīng)過反掃描模塊IZZ(Inverse ZigZag),、反量化模塊IQ(Inverse Quantizer)和反變換模塊IT(Inverse Transformer)恢復(fù)原始殘差數(shù)據(jù);一部分經(jīng)過幀間預(yù)測(interframe prediction)或者幀內(nèi)預(yù)測IPRED(Intraframe PREDiction)模塊恢復(fù)預(yù)測值,,并與殘差值疊加,由環(huán)路濾波模塊LF(Loop Filter)處理, 重建的數(shù)據(jù)回寫入WB(Write Back)SDRAM,,為顯示(Display)輸出使用和后續(xù)的預(yù)測提供參考,。
2 幀內(nèi)預(yù)測模塊的原理與設(shè)計
幀內(nèi)預(yù)測技術(shù)是一項提高I幀壓縮性能的關(guān)鍵技術(shù)。幀內(nèi)預(yù)測的壓縮原理是利用圖像內(nèi)部特別是圖像平滑部分相鄰像素間的相關(guān)性來降低編碼碼率,,也就是通過減少空間冗余來實現(xiàn)壓縮的目的,。
2.1 幀內(nèi)預(yù)測原理
幀內(nèi)預(yù)測是利用當(dāng)前塊左邊和上邊可用的相鄰塊的邊緣像素進行預(yù)測,得到當(dāng)前塊的預(yù)測值,,再將預(yù)測值與實際的像素值相減得到預(yù)測殘差,。編碼時只對量值較小的預(yù)測殘差進行熵編碼,,以減少碼流的大小,這樣就可以達到既精確又高效的壓縮目的,。
解碼時用已解碼的相鄰塊邊緣像素值和當(dāng)前塊的預(yù)測模式求得當(dāng)前塊的預(yù)測值,,再與IT,、IQ處理后恢復(fù)的殘差值疊加,,即可重構(gòu)原始圖像像素值,。這里用作參考的像素值是沒有經(jīng)過環(huán)路濾波的數(shù)據(jù),,環(huán)路濾波過程要在一幀的數(shù)據(jù)預(yù)測完成時才進行,。
2.2 AVS幀內(nèi)預(yù)測算法
AVS解碼器的幀內(nèi)預(yù)測都是以8×8塊為單位,,分為亮度(luma)和色度(chroma)預(yù)測兩種,,如圖2所示。其中,,色度預(yù)測包括17個參考像素點,,有4種預(yù)測模式;亮度預(yù)測包括33個參考像素點,,有5種預(yù)測模式,。
亮度和色度的某些預(yù)測模式相同,綜合起來包括以下6種[1](其中,,r[i]和c[i](i=0~16)分別為上邊和左邊參考像素點(r,、c可表示亮度或色度),預(yù)測完成后得到一個8×8的預(yù)測樣本矩陣predMatrix):
(1)Vertical模式
若r[i](i=1~8)可用,,則利用上邊沿像素垂直預(yù)測:
predMatrix[x,,y]=r[x+1](x,y=0~7)
(2)Horizontal模式
若r[i](i=1~8)可用,則利用左邊沿像素水平預(yù)測:
predMatrix[x,,y]=c[x+1](x,,y=0~7)
(3)DC預(yù)測模式
(a)若r[i]、c[i](i=0~9)都可用,,則利用當(dāng)前像素值對應(yīng)上邊、左邊參考像素的低通濾波值預(yù)測:
predMatrix[x,y]=((r[x]+2×r[x+1]+r[x+2]+2)>>2+(c[y]+2×c[y+1]+c[y+2]+2)>>2)>>1(x,,y=0~7);否則
(b)若r[i](i=0~9)可用,,則利用當(dāng)前像素值對應(yīng)上邊參考像素的低通濾波值預(yù)測:
predMatrix[x,,y]=(r[x]+2×r[x+1]+r[x+2]+2)>>2
?。▁,,y=0~7),;否則
(c)若c[i](i=0~9)可用,,則利用當(dāng)前像素值對應(yīng)左邊參考像素的低通濾波值預(yù)測:
predMatrix[x,,y]=(c[y]+2×c[y+1]+c[y+2]+2)>>2
?。▁,,y=0~7),;否則
(d)predMatrix[x,,y]=128(x,,y=0~7),。
(4)Down_left預(yù)測模式
若r[i]、c[i](i=1~16)均可用,,則利用當(dāng)前像素所在的對應(yīng)連線兩端的參考像素的低通濾波值預(yù)測為:
? predMatrix[x,,y]=(r[x,y+1]+2×r[x,,y+2]+r[x,y+3]+2)>>2+(c[x,,y+1]+2×c[x,y+2]+c[x,,y+3]+2)>>2)>>1(x,y=0~7)
(5)Down_right預(yù)測模式
若r[i],、c[i](i=0~16)均可用,則利用當(dāng)前像素所在的對應(yīng)連線頂端的參考像素的低通濾波值預(yù)測:
如果x=y,,predMatrix[x,,y]=(c[1]+2×r[0]+r[1]+2)>>2
(x,,y=0~7);
如果x>y,,predMatrix[x,y]=(r[x-y+1]+2×r[x-y]+r[x-y-1]+2)>>2(x,y=0~7),;
如果y>x,,predMatrix[x,y]=(c[y-x+1]+2×c[y-x]+c[y-x-1]+2)>>2(x,,y=0~7),。
(6)Plane預(yù)測模式
若r[i],、c[i](i=1~8)均可用,,
? predMatrix[x,y]=Clip1((ia+(x-3)×ib+(y-3)×ic+16)>>5)(x,,y=0~7),。
???
2.3 幀內(nèi)預(yù)測的硬件設(shè)計
文中所設(shè)計的幀內(nèi)預(yù)測總體結(jié)構(gòu)如圖3所示。包括三部分:TopIICT模塊,、TopIntrapred模塊和Topcombination模塊,。TopIICT模塊完成經(jīng)過反整數(shù)余弦變換IICT(Inverse Integer Cosine Transformer)求得殘差數(shù)據(jù);TopIntrapred模塊完成由預(yù)測模式和相鄰參考值求得預(yù)測值,;Topcombination模塊完成對上述兩組數(shù)據(jù)的重建,恢復(fù)原始數(shù)據(jù)并存儲,。因為對于4:2:0采樣格式的視頻序列,,一個宏塊的亮度包含四個8×8塊,而兩個色度均只包含一個8×8塊的特點,,這就決定了一個宏塊的亮度和兩種色度預(yù)測是可以并行執(zhí)行的,,所以如圖3的總體結(jié)構(gòu)對亮度和色度均適用。其中加入FIFO的設(shè)計是為了緩沖兩路數(shù)據(jù),,并統(tǒng)一時序,,使系統(tǒng)能夠并行操作。
?
2.3.1 TopIICT子模塊結(jié)構(gòu)
TopIICT模塊是幀內(nèi)和幀間預(yù)測都會使用到的模塊,,并且由于其復(fù)雜的運算過程使得其耗時較多,,其他與之并行的模塊都要等待該模塊,以便統(tǒng)一時序進行下一步處理,。該模塊設(shè)計的效率偏低,,不僅會影響系統(tǒng)效率,還會造成存儲其他等待數(shù)據(jù)對空間的占用和浪費,。因此,,本文針對該模塊提出了如圖4所示的一種高效可行的并行流水操作的硬件設(shè)計方法,。
?
處理的數(shù)據(jù)以8×8塊為單位,,TopIICT模塊在第一個時鐘以8×16 bit并行接收一組8個像素的數(shù)據(jù),送入第一級的行處理子模塊row1,,并由EN1sign控制模塊控制行處理子模塊rowN(N=2~8),,對接下來7個時鐘依次接收的7組行數(shù)據(jù)流水處理。同樣,,由EN2sign控制模塊控制第二級的列處理子模塊colN(N=1~8),,對第一級的數(shù)據(jù)按列重分組后流水處理,最后由Rdsign控制模塊控制第二級的數(shù)據(jù)再次按行重分組,,從位寬8×9 bit的輸出端口經(jīng)過八個時鐘串行輸出,,完成對一個8×8塊的變換。由于設(shè)計中前兩級都采用了流水例化8個子模塊,,使得8組數(shù)據(jù)可以在系統(tǒng)中并行操作,,雖然硬件開銷有所增加,但實驗表明,,TopIICT模塊的運行速度顯著提高,。
2.3.2 TopIntrapred子模塊結(jié)構(gòu)
前面指出,由于亮度和色度預(yù)測模式具有相容性,,所以可以將兩種預(yù)測設(shè)計在一個模塊中,,如圖5所示,。
設(shè)計中,Blockjudge子模塊的功能是由系統(tǒng)計數(shù)的BlockNum變量判斷當(dāng)前塊在一幀圖像中的位置,,從而決定當(dāng)前塊的相鄰塊邊緣像素的可用性,,為下一子模塊提供參考像素。Intrapred子模塊的功能是利用參考像素值及其可用性,,結(jié)合解析出來的預(yù)測模式語法元素,,共同求得當(dāng)前塊的預(yù)測值。其中,,六種預(yù)測模式都已并行掛起,,某個塊具體解碼時由當(dāng)前塊的預(yù)測模式所決定。該部分設(shè)計同樣是以8×8塊為單位,,一個8×8塊的預(yù)測結(jié)束后,,位寬8×8bit的輸出端口由8個時鐘依次輸出得到的8組行數(shù)據(jù)。
2.3.3 Topcombination子模塊及存儲機制
該部分主要實現(xiàn)將預(yù)測值和殘差值兩組數(shù)據(jù)的疊加,,重建原始數(shù)據(jù)并存儲于RAM空間,。對處理完的數(shù)據(jù)存儲有兩條途徑:一是將所有數(shù)據(jù)存儲于外部RAM空間,以備幀間預(yù)測時用作參考像素,,或是一幀像素存儲完成后進行環(huán)路濾波,;二是將當(dāng)前塊的邊緣像素存儲于片內(nèi)RAM,以備當(dāng)前幀其他塊幀內(nèi)預(yù)測時用作參考像素,,避免因頻繁從外部RAM讀取數(shù)據(jù)造成的耗時,。以色度Cb的存儲機制為例介紹,如圖6所示,。
對于4:2:0采樣格式的視頻序列,,一個宏塊的亮度對應(yīng)一個8×8塊的色度,所以設(shè)計中開辟的片內(nèi)RAM空間位寬64 bit,,深度由一幀圖像以亮度宏塊為單位的長度LengthinMB決定,,大小為2×LengthinMB+1。其中,,地址addr0始終用來存儲每個色度塊的最右列的八個重建后的像素值,。由于重建的過程以行數(shù)據(jù)為基本單位,所以要等一個塊的最后一行數(shù)據(jù)重建完才能將每一行的最后一個重建值組成一個新的64 bit數(shù)據(jù)存入addr0,。由于每一個塊的最右列像素僅被其右邊的一個塊用作參考像素,,且右邊塊在解碼順序上又是緊接著當(dāng)前塊,所以每個預(yù)測完成塊的最右列都可以覆蓋前一塊的最右列的存儲地址,,使該空間重復(fù)利用以達到節(jié)省的目的,。而一幀圖像每一行最后一個塊的右邊緣不再存入addr0,而是以0x80代替,以便下一行第一個塊使用,。
地址addrN(N=2M-1,,M=1~LengthinMB)用來存儲一行LengthinMB個塊的每個塊最下列八個像素,以備下一行對應(yīng)塊用作參考,,且在下一行對應(yīng)塊最下列重建后被覆蓋,。因為當(dāng)前塊的最下列要等待一行的數(shù)據(jù)重建后才會被下一行的對應(yīng)塊用作參考像素。
而地址addrN(N=2M,,M=1~LengthinMB)則是用來存儲一行LengthinMB個塊的每塊右下一個像素,,以備下一行對應(yīng)塊的右邊塊用作左上參考值。由于該像素的特殊性,,對于這些數(shù)據(jù)的存儲也要特殊對待,。在當(dāng)前塊重建完成并存儲該像素點于對應(yīng)地址之前,先將對應(yīng)地址的原數(shù)據(jù)左移8位,,以備下一塊用作左上參考值,,再將當(dāng)前塊該像素存入對應(yīng)地址的低8位。當(dāng)重建一幀圖像的最后一行的塊時,,用0x80代替最下列和右下像素,,以便下一幀第一行塊的使用。
色度Cr的存儲機制與Cb完全相同,,且二者是順序執(zhí)行的,,而亮度也和色度的存儲機制基本一致,且與色度并行,。只是由于亮度預(yù)測需要更多的參考點,,RAM空間的深度也要相應(yīng)增加。這一片內(nèi)RAM存儲機制的建立,,大大減少了系統(tǒng)與外部RAM的數(shù)據(jù)通信,,縮短了系統(tǒng)的運行周期,,有助于實時性的提高,。
3 實驗結(jié)果
按此方案設(shè)計的幀內(nèi)預(yù)測解碼單元,在Xilinx的ISE環(huán)境下,,用Verilog HDL硬件描述語言實現(xiàn),,并采用Xst工具進行綜合, Modelsim工具進行仿真,,與C語言實現(xiàn)的AVS解碼器參考代碼 rm52j 的中間結(jié)果進行比較,,結(jié)果表明二者完全一致。該設(shè)計完全滿足幀內(nèi)預(yù)測解碼器的要求,,仿真結(jié)果如圖7所示,。
?
根據(jù)AVS幀內(nèi)預(yù)測的特點,提出了一種AVS幀內(nèi)預(yù)測解碼器的硬件結(jié)構(gòu),充分利用了流水線,、并行,、資源復(fù)用等設(shè)計思想,并盡可能少使用存儲器資源,,非常適合于ASIC設(shè)計,。用Xilinx公司的Virtex4系列的XC4VSX35型FPGA,綜合出來的頻率達到133 MHz,,完全滿足AVS標準清晰度(720×576,,30 f/s)視頻的實時解碼要求。
參考文獻
[1] 數(shù)字音視頻編碼技術(shù)標準工作組.信息技術(shù) 先進音視頻編碼 第2部分:視頻(GB/T 200090.2-2006).中國國家標準化管理委會,,2006.
[2] 生濱.AVS視頻編解碼芯片關(guān)鍵部件的體系結(jié)構(gòu)研究與設(shè)計博士畢業(yè)論文.
[3] 胡倩,,張珂,虞露.AVS 視頻解碼器的一種結(jié)構(gòu)設(shè)計與硬件實現(xiàn)[J].浙江大學(xué)工學(xué)報,,2006(12).
[4] 高文,,黃鐵軍.信源編碼標準AVS及其在數(shù)字電視中的應(yīng)用[J].電視技術(shù),2003(11).
[5] 王爭,劉佩林.AVS幀內(nèi)預(yù)測算法及其解碼器的硬件實現(xiàn)[J].計算機工程與應(yīng)用,,2006(19).