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