文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2015)05-0028-04
中文引用格式:任鵬飛,于鴻洋.AVS 3D實(shí)時(shí)解碼器在FPGA/SoC平臺(tái)上的設(shè)計(jì)與實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2015,41(05):28-31.
0 引言
AVS[1](audio video coding standard)是《信息技術(shù) 先進(jìn)音視頻編碼》系列標(biāo)準(zhǔn)的簡(jiǎn)稱(chēng),是我國(guó)具有自主知識(shí)產(chǎn)權(quán)的第二代信息編解碼標(biāo)準(zhǔn),。2008年底,,AVS標(biāo)準(zhǔn)工作組開(kāi)始起草雙目立體編解碼方案[2]。該方案采用雙目拼接算法,,所用視頻序列由基線相互平行的兩攝像機(jī)采集,,將左、右視點(diǎn)信息合成為一個(gè)碼流進(jìn)行傳輸,;而在解碼端恢復(fù)出左,、右兩路圖像數(shù)據(jù)。
但目前,,尚沒(méi)有針對(duì)AVS 3D標(biāo)準(zhǔn)的FPGA/SoC軟硬協(xié)同平臺(tái)實(shí)現(xiàn),。本文以Xilinx公司的ZYNQ 7020開(kāi)發(fā)板為平臺(tái),它是內(nèi)部具有兩個(gè)M9處理(Processing System,,PS)硬核核心的片上系統(tǒng)芯片,,該平臺(tái)具有芯片集成度高、控制能力強(qiáng),、軟件通用性好的優(yōu)點(diǎn),。本文采用一個(gè)主PS作為頂層控制,,完成3D ES流的外部接口通信和解碼圖像顯示控制;另一個(gè)從PS以及部分硬件加速模塊(包括ES流的語(yǔ)法解析,、算術(shù)碼解碼,、變長(zhǎng)碼解碼等硬件加速模塊)共同完成AVS雙目拼接解碼算法。兩個(gè)PS協(xié)同工作,,在FPGA/SoC平臺(tái)上實(shí)現(xiàn)了AVS 3D實(shí)時(shí)解碼器,。
1 AVS 3D解碼器的算法流程
AVS 3D解碼器采用雙目拼接算法。AVS 3D ES流同時(shí)含有左,、右視點(diǎn)的兩路信息,。3D解碼器的算法設(shè)計(jì)流程圖如圖1所示。讀入3D ES流,,以幀為單位解碼,,其解碼原理與AVS單路解碼器相似。
視點(diǎn)分離得到的左,、右視點(diǎn)基本層圖像存在水平維度的分辨率減半,。由于基本層圖像和增強(qiáng)層圖像存在很強(qiáng)的空間相關(guān)性,故對(duì)基本層圖像進(jìn)行水平維度的上采樣插值濾波,,預(yù)測(cè)得到分辨率提升的增強(qiáng)層圖像,。為保證增強(qiáng)層圖像質(zhì)量,需要對(duì)上采樣濾波器核向量進(jìn)行設(shè)置[3],,其原理如式(1)所示:
視點(diǎn)分離得到的基本層圖像分辨率為M/2×N,,需要在水平維度上進(jìn)行上采樣插值濾波。在具有水平關(guān)系的兩個(gè)基本層像素點(diǎn)xi,,j和xi,,j+1之間插入半像素點(diǎn)vi。通過(guò)水平插值,,從分辨率為M/2×N的基本層圖像預(yù)測(cè)得到分辨率為M×N的增強(qiáng)層圖像,。
2 語(yǔ)法元素解析的CABAC和CAVLC硬件加速模塊的設(shè)計(jì)
本文通過(guò)硬件加速模塊實(shí)現(xiàn)拼接碼流的語(yǔ)法解析工作,AVS標(biāo)準(zhǔn)中的熵解碼主要采用CABAC[4]和CALVC[5]兩種方式實(shí)現(xiàn),。語(yǔ)法元素解析模塊的硬件加速模塊設(shè)計(jì)框圖如圖2所示,。
碼流輸入管理模塊的主要任務(wù)是讀入ES原始碼流。其中indata[7:0]存儲(chǔ)原始ES流的8 bit數(shù)據(jù),;avail_n檢測(cè)輸入數(shù)據(jù)的可得字節(jié)數(shù),;strobe表示輸入碼流有效性;當(dāng)讀入的數(shù)據(jù)解析完成后,,req通知ES流繼續(xù)讀入,。
語(yǔ)法元素輸出模塊主要控制熵解碼后語(yǔ)法元素的數(shù)據(jù)輸出,。其中n_bits表示請(qǐng)求讀取語(yǔ)法數(shù)據(jù)的bit數(shù),;req為請(qǐng)求讀取語(yǔ)法信息;req_type為當(dāng)前語(yǔ)法元素所需采用的熵解碼方式,根據(jù)req_type的不同,,對(duì)當(dāng)前元素采用CABAC或CAVLC解析算法,;outdata[31:0]為熵解碼后的數(shù)據(jù);del_ready指示當(dāng)前語(yǔ)法解析模塊是否準(zhǔn)備好接受外部請(qǐng)求,;strobe為當(dāng)前請(qǐng)求輸出語(yǔ)法信息有效性,。
核心語(yǔ)法解析單元運(yùn)行CABAC或CAVLC的解析算法,涉及模型索引號(hào)產(chǎn)生,、模型自適應(yīng)更新,、反二進(jìn)制化等過(guò)程。在AVS標(biāo)準(zhǔn)中,,CABAC主要用于解析宏塊類(lèi)型,、亮度色度預(yù)測(cè)模式、變換系數(shù)等數(shù)據(jù),;CAVLC主要用于解析亮度和色度殘差數(shù)據(jù),。
AVS的碼流數(shù)據(jù)結(jié)構(gòu)及層次關(guān)系從高到低依次為:序列、圖像,、條帶,、宏塊和塊,在解碼過(guò)程中,,需要從高到低依次解析出每一層次中的語(yǔ)法元素?cái)?shù)據(jù),。將硬件加速模塊解析得到的數(shù)據(jù)賦值給相應(yīng)的語(yǔ)法元素變量,利用得到的語(yǔ)法元素變量在,,恢復(fù)出左,、右視點(diǎn)的重建圖像。
3 AVS 3D實(shí)時(shí)解碼器在SoC片上系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
本文采用Xilinx公司ZYNQ 7020開(kāi)發(fā)板,,ZYNQ 7020采用雙核設(shè)計(jì),,擁有兩片Cortex-M9芯片,一片用作主處理系統(tǒng),,一片用作核心AVS算法解碼,,兩片M9可以共享內(nèi)存和外圍設(shè)備。針對(duì)AVS 3D解碼器,,本文采用Master-Slave主從控制設(shè)計(jì)模式,。采用MASTER M9作為頂層控制,完成ES 3D碼流的外部接口通信,、解碼圖像顯示控制等功能,;SLAVE M9及語(yǔ)法解析硬件加速模塊共同完成AVS 3D核心解碼算法; MASTER M9和 SLAVE M9協(xié)同工作,,最終實(shí)現(xiàn)AVS 3D實(shí)時(shí)解碼器SoC片上系統(tǒng)設(shè)計(jì)[6],。
3.1 AVS 3D解碼器在ZYNQ 7020的啟動(dòng)過(guò)程
在啟動(dòng)AVS雙目解碼器的SoC片上系統(tǒng)時(shí),,首先在ZYNQ 7020上進(jìn)行時(shí)鐘配置,之后在MASTER M9上執(zhí)行BootROM啟動(dòng)代碼,。BootROM是整個(gè)SoC系統(tǒng)上最先運(yùn)行的程序,,當(dāng)SLAVE M9等待解碼啟動(dòng)指令時(shí),BootROM已經(jīng)在MASTER M9上運(yùn)行,。BootROM的主要功能是配置整個(gè)雙目解碼器的SoC系統(tǒng)的串口信息,,并將第一階啟動(dòng)程序(First Stage Boot Loader,F(xiàn)SBL)從啟動(dòng)設(shè)備復(fù)制到MASTER M9的片上內(nèi)存,。由FSBL初始化SLAVE M9的Xilinx硬件配置信息,,并通過(guò)讀入BootHeader頭文件通知MASTER M9是否啟動(dòng)運(yùn)行。在FBSL運(yùn)行的過(guò)程中,,BootROM會(huì)先將SLAVE M9設(shè)置為事件等待模式,,MASTER M9啟動(dòng)后,由MASTER M9通知SLAVE M9是否啟動(dòng)AVS雙目立體解碼程序,。整個(gè)啟動(dòng)流程如圖3所示,。
3.2 AVS 3D解碼器在ZYNQ 7020的設(shè)計(jì)原理
AVS雙目立體解碼器在SoC片上系統(tǒng)的整體方案設(shè)計(jì)如圖4所示。在各個(gè)模塊的交互過(guò)程中,,通過(guò)AXI LITE傳送信息量較小的數(shù)據(jù),;通過(guò)AXI VDMA傳遞解碼圖像數(shù)據(jù)等信息量較大的數(shù)據(jù);通過(guò)AXI CON傳送交互頻繁的數(shù)據(jù),。
MASTER M9是整個(gè)AVS 3D解碼器在SoC片上系統(tǒng)的頂層控制單元,。其功能主要包括:(1)從以太層獲取用于網(wǎng)絡(luò)傳輸?shù)?D TS碼流;(2)與TS碼流語(yǔ)法解析模塊進(jìn)行信息交互,,通知SLAVE M9啟動(dòng)解碼過(guò)程,。SLAVE M9根據(jù)碼流中解析標(biāo)志位的不同,調(diào)用硬件加速模塊采用CALVC或是CABAC的熵解碼方式對(duì)碼流中的語(yǔ)法元素進(jìn)行解析,,并與狀態(tài)信息模塊交互,,將熵解碼方式標(biāo)志位、緩存大小,、解析完成標(biāo)志位等信息返回給MASTER M9,;(3)管理解碼圖像數(shù)據(jù)及參考幀的位置指針,并將相應(yīng)數(shù)據(jù)送往DDR MEMORY不同存儲(chǔ)位置,。
SLAVE M9運(yùn)行AVS 3D解碼器的核心算法,。解碼算法包括AVS雙目拼接算法和AVS單路解碼算法兩部分。AVS雙目拼接算法如第1節(jié)所述,。單路解碼器算法主要包括:起始碼檢測(cè),、序列及圖像頭讀取、熵解碼,、宏塊數(shù)據(jù)獲取,、反變換,、反量化、幀內(nèi)及幀間預(yù)測(cè),、1/4像素運(yùn)動(dòng)向量插值、圖像殘差恢復(fù),、環(huán)路濾波等模塊,。將實(shí)現(xiàn)AVS 3D解碼功能的C語(yǔ)言代碼寫(xiě)至相應(yīng)的軟件開(kāi)發(fā)平臺(tái),由硬件加速模塊將語(yǔ)法元素解析模塊得到的語(yǔ)法元素?cái)?shù)值輸入各個(gè)層級(jí)的解碼函數(shù),,從而通過(guò)SLAVE M9上實(shí)現(xiàn)AVS 3D解碼算法,。最終將解碼得到的拼接圖像序列和左、右視點(diǎn)圖像序列寫(xiě)入DDR MEMORY的不同地址空間,。
解碼圖像信息交換模塊是MASTER M9和SLAVE M9在解碼過(guò)程中圖像信息交互的中介,。在SLAVE M9解碼過(guò)程中會(huì)產(chǎn)生3種圖像指針類(lèi)型:(1)參考幀指針(針對(duì)I、P幀圖像),,該指針指向的圖像作為幀間預(yù)測(cè)的參考值,,并不會(huì)立即顯示;(2)顯示幀指針(針對(duì)B幀圖像),,該指針指向的圖像在解碼后直接放入顯示序列中,;(3)寫(xiě)入位置指針,SLAVE M9解碼一幀圖像后,,將解碼數(shù)據(jù)寫(xiě)入在該指針指向的DDR MEMORY地址中,。通過(guò)該模塊,SLAVE M9將圖像指針的狀態(tài)和數(shù)值傳送給MASTER M9,,MASTER M9又與DDR MEMORY交互,,保證正確的圖像解碼順序和顯示順序。
在DDR MEMORY中采用乒乓存儲(chǔ)設(shè)計(jì),,設(shè)置兩塊數(shù)據(jù)緩存區(qū),,每塊數(shù)據(jù)緩存區(qū)為拼接圖像、左視點(diǎn)圖像,、右視點(diǎn)圖像各分配5幀內(nèi)存空間,。當(dāng)緩存區(qū)1向HDMI接口傳輸數(shù)據(jù)時(shí),緩存區(qū)2從SLAVE M9接收數(shù)據(jù),;當(dāng)緩存區(qū)1從SLAVE M9接收數(shù)據(jù)時(shí),,緩存區(qū)2向HDMI接口傳輸數(shù)據(jù);如此循環(huán)工作,,通過(guò)兩塊緩存區(qū)的交替工作,,提高DDR MEMORY的工作效率。其中每塊緩存區(qū)中的數(shù)據(jù)讀寫(xiě)位置均由MASTER M9管理,,保證DDR MEMORY以正確的顯示順序?qū)D像內(nèi)容送往HDMI接口,。
4 實(shí)驗(yàn)結(jié)果及分析
本文中,,AVS 3D解碼器的SoC片上系統(tǒng)設(shè)計(jì)在Xilinx ZYNQ 7020開(kāi)發(fā)板上實(shí)現(xiàn)。通過(guò)在AVS單路軟件解碼器RM52k上增加視點(diǎn)分離模塊,、層間上采樣濾波模塊實(shí)現(xiàn)AVS 3D解碼算法,,將代碼改寫(xiě)至Xilinx SDK 2014.2嵌入式軟件平臺(tái),并加載FreeRTOS操作系統(tǒng)用于內(nèi)存分配和外圍設(shè)備初始化,。AVS雙目立體解碼參數(shù)配置如表1所示,。
將AVS 3D ES流打包成為用于網(wǎng)絡(luò)傳輸?shù)腡S流,根據(jù)Xilinx的LWIP準(zhǔn)則進(jìn)行TCP連接,,經(jīng)IP QAM調(diào)制器最終從以太層將碼流輸入ZYNQ 7020的MASTER M9模塊,。通過(guò)硬件加速模塊實(shí)現(xiàn)語(yǔ)法元素解析,結(jié)合SoC片上系統(tǒng)進(jìn)行AVS雙目立體解碼算法處理,,最終通過(guò)HDMI接口將視頻數(shù)據(jù)輸出到三維電視,,在三維電視上可以得到左、右視點(diǎn)信息的拼接視頻,,通過(guò)視點(diǎn)分離和層間上采樣插值,,恢復(fù)出左、右視點(diǎn)的增強(qiáng)層圖像,。經(jīng)視點(diǎn)交織處理后,,得到最終的3D視頻,可以觀察到解碼得到的3D視頻具有明顯的深度信息,,AVS 3D解碼器的效果如圖5所示,。這說(shuō)明了AVS 3D實(shí)時(shí)解碼器在FPGA/SoC平臺(tái)的有效性。
5 結(jié)束語(yǔ)
本文通過(guò)在AVS原有單路解碼器的基礎(chǔ)上進(jìn)行功能的擴(kuò)充,,實(shí)現(xiàn)了基于AVS標(biāo)準(zhǔn)的3D解碼器的設(shè)計(jì),。結(jié)合語(yǔ)法元素解析的硬件加速模塊,在Xilinx ZYNQ 7020開(kāi)發(fā)板上創(chuàng)新性地實(shí)現(xiàn)了AVS 3D實(shí)時(shí)解碼器的FPGA/SoC協(xié)同平臺(tái)實(shí)現(xiàn),。將解碼后的視頻輸入三維顯示設(shè)備,,通過(guò)視點(diǎn)交織觀察到3D視頻的視點(diǎn)差異和深度信息,驗(yàn)證了該AVS 3D實(shí)時(shí)解碼器在FPGA/SoC平臺(tái)設(shè)計(jì)的有效性,。
參考文獻(xiàn)
[1] 侯金亭,,馬思偉,高文.AVS標(biāo)準(zhǔn)綜述[J].計(jì)算機(jī)工程,,2009,,35(8):247-249,252.
[2] 馬茜,,李棟,,汪啟扉,等.AVS立體視頻編碼標(biāo)準(zhǔn)[J].上海大學(xué)學(xué)報(bào)(自然科學(xué)版),2013,,19(3):225-228.
[3] 王樟,,柳健,嚴(yán)國(guó)萍.簡(jiǎn)單高效地用于SVC標(biāo)準(zhǔn)中的層間上采樣濾波方案[J].通信學(xué)報(bào),,2008,,29(4):8-12.
[4] MARPE D,SCHWARZ H,,WIEGAND T.Context-based adaptive binary arithmetic coding in the H.264/AVC video compression standard[J].IEEE Transactions on Circuits and Systems for Video Technology,,2003,13(7):620-636.
[5] ALLE M,,BISWAS J,,NANDY S K.High performance VLSI architecture design for H.264 CAVLC decoder[C].ASAP 2006:11-13.
[6] 郭煒,,郭箏,,謝憬,等.SOC設(shè)計(jì)方法與實(shí)現(xiàn)[M].北京:電子工業(yè)出版社,,2007.