《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 業(yè)界動態(tài) > 基于ADI BF533的MPEG-4解碼系統(tǒng)的實現(xiàn)

基于ADI BF533的MPEG-4解碼系統(tǒng)的實現(xiàn)

2008-05-08
作者:汪 林, 劉 宇, 代金良,

  摘 要:介紹了一種在ADI公司開發(fā)板" title="開發(fā)板">開發(fā)板Ez-kit Lite上開發(fā)的基于ADI BF533的MPEG-4解碼系統(tǒng)。該系統(tǒng)在600MHz的工作頻率下,可以對D1格式的ASP碼流實時解碼,并轉(zhuǎn)換為PAL制式的模擬信號在電視上顯示。詳細(xì)討論了系統(tǒng)的硬件平臺設(shè)計和軟件實現(xiàn),并對系統(tǒng)的性能進(jìn)行了測試。實驗結(jié)果表明,BF533在嵌入式多媒體應(yīng)用方面具有很大潛力。
  關(guān)鍵詞: MPEG-4 數(shù)字信號處理器 Blackfin 視頻解碼算法" title="解碼算法">解碼算法


  隨著網(wǎng)絡(luò)和多媒體應(yīng)用的日益廣泛,人們對視頻的傳輸速率和圖像的質(zhì)量有了更高的要求。MPEG-4標(biāo)準(zhǔn)是由國際運動圖像專家組于2000年10月發(fā)布的一種面向多媒體應(yīng)用的視頻壓縮標(biāo)準(zhǔn),它以高質(zhì)量、低傳輸率的特點在一定程度上解決了視頻多媒體的壓縮和傳輸問題,廣泛應(yīng)用于網(wǎng)絡(luò)多媒體、視頻會議和多媒體監(jiān)控等圖像傳輸系統(tǒng)中。但由于多數(shù)播放器都是基于PC機的,MPEG-4的應(yīng)用范圍受到了很大的限制,因而研制和開發(fā)一種嵌入式的MPEG-4終端解碼系統(tǒng)具有重要的現(xiàn)實意義和實用價值。
  BF533是ADI公司最新開發(fā)的基于微信號體系結(jié)構(gòu)的DSP。它集信號處理與控制功能于一體,具有雙MAC結(jié)構(gòu)和正交的類似RISC的微處理指令集,使單指令多數(shù)據(jù)和多媒體操作都引入了單指令結(jié)構(gòu),且運算速度最高可達(dá)1.5GMAC/s;可以方便地擴展SPI、SPORT、PPI、UART等接口;具有先進(jìn)的Cache管理機制和強大的DMA功能。這些特點決定了BF533非常適用于各種視頻、音頻和通信領(lǐng)域。本文以BF533為核心處理器,以ADI公司提供的開發(fā)板EZ-kit Lite為開發(fā)平臺實現(xiàn)了MPEG-4解碼系統(tǒng)。該系統(tǒng)可以對D1(720×576)格式的ASP(Advanced Simple Profile)碼流實時解碼,并轉(zhuǎn)化為PAL制式(25fps)的模擬信號在電視上顯示。下面詳細(xì)介紹該系統(tǒng)的設(shè)計原理、硬件及軟件實現(xiàn)。
1 MPEG-4算法原理簡述
  MPEG-4標(biāo)準(zhǔn)是一種基于對象的多媒體視頻壓縮標(biāo)準(zhǔn)。它在編碼前首先對視頻序列進(jìn)行分析,從原始圖像中分割出一個或多個視頻對象,然后再對各個視頻對象的形狀、運動和紋理信息分別編碼,并對不同的對象采取不同的編碼尺度,以達(dá)到高效壓縮的目的。MPEG-4視頻編碼可以粗略地分為模型編碼和熵編碼。模型是指運動圖像,運動圖像在時間和空間上都有冗余,可以被很好地壓縮。在二維空間上,圖像相鄰像素之間存在相關(guān)性,人眼對圖像的高頻分量不敏感,因此可以利用頻域變換,濾掉圖像的高頻分量進(jìn)行壓縮。運動圖像在時間上具有相關(guān)性,可以通過運動估計和運動補償去除時間上的相關(guān)性。熵編碼是與模型無關(guān)的純計算機編碼方法。解碼過程與編碼過程正好相反,解碼器的原理如圖1所示。為了適用于不同的應(yīng)用場合,MPEG-4提供了一系列稱之為Profile的工具集。這些工具集決定了解碼器所能完成的功能和計算復(fù)雜度,關(guān)于Profile功能的規(guī)定可以參見參考文獻(xiàn)[1][2]。本文設(shè)計的解碼器除了完成SP規(guī)定的一些基本功能外,還實現(xiàn)了部分的ASP的功能。具體地說,它實現(xiàn)的SP功能包括:IVOP、PVOP、4MV、無限制MV、DC/AC預(yù)測和VLC解碼;實現(xiàn)的ASP功能包括:BVOP和兩種量化方式。為了支持大分辨率圖像的應(yīng)用場合,該解碼器可以支持D1格式的解碼。


2 MPEG-4解碼系統(tǒng)的硬件設(shè)計
2.1 EZ-kit Lite開發(fā)板的結(jié)構(gòu)

  為了提高Blackfin的開發(fā)效率,ADI公司提供了EZ-kit Lite開發(fā)板,這樣就可以通過JTAG口對DSP程序進(jìn)行仿真[5]。開發(fā)板上有BF533處理器芯片、32MB的SDRAM、2MB的閃存、音頻編解碼芯片AD1836、視頻A/D解碼芯片ADV7183、視頻D/A編碼芯片ADV7171和ADM3202 RS-232線驅(qū)動器/接收器。開發(fā)板上還擴展了一些音頻和視頻輸入輸出接口,能方便地輸入輸出音視頻數(shù)據(jù)。這些特點都保證了EZ-kit Lite能夠用作BF533音頻和視頻應(yīng)用的開發(fā)。開發(fā)板還提供了4個開關(guān)SW4~SW7,連接到可編程引腳(Programmable Flag)PF8~PF11上,可以接收用戶的輸入,對程序進(jìn)行控制。
2.2 解碼系統(tǒng)的硬件設(shè)計
  用BF533芯片實現(xiàn)的MPEG-4解碼系統(tǒng)包括硬件平臺設(shè)計和軟件設(shè)計兩大部分。整個系統(tǒng)包括碼流接收單元、視頻解碼單元、邏輯控制單元、數(shù)據(jù)存儲單元、數(shù)模轉(zhuǎn)換單元和視頻顯示單元。由于整個系統(tǒng)是在EZ-kit Lite開發(fā)板上實現(xiàn)的,可以利用開發(fā)板上的現(xiàn)有模塊。數(shù)據(jù)存儲單元可用板上的32MB SDRAM代替,邏輯控制單元可用開關(guān)SW4~SW7對可編程引腳的控制來實現(xiàn),數(shù)模轉(zhuǎn)換單元可用D/A轉(zhuǎn)換器ADV7171來實現(xiàn),視頻顯示單元就是連到EZ-kit Lite開發(fā)板視頻接口上的電視,碼流接收單元可用事先存放到SDRAM上的碼流來模擬。整個系統(tǒng)的硬件結(jié)構(gòu)如圖2所示。


  解碼器從SDRAM讀入碼流后開始解碼,解出的YUV圖像信號轉(zhuǎn)換為ITU-R 656格式信號存放到SDRAM中,然后通過PPI口(并行外設(shè)接口)輸送到D/A轉(zhuǎn)換器ADV7171轉(zhuǎn)換為PAL制式的模擬信號在電視上顯示。整個系統(tǒng)是通過對可編程引腳的編程來控制系統(tǒng)的開始、暫停、繼續(xù)和結(jié)束的。
3 基于MPEG-4解碼算法的軟件設(shè)計
  為了能夠?qū)崿F(xiàn)實時解碼,結(jié)合BF533的特點對程序進(jìn)行優(yōu)化是非常必要的。除了一些傳統(tǒng)的優(yōu)化方法以外[6~8],根據(jù)解碼算法的運算復(fù)雜度,主要從以下幾個方面進(jìn)行優(yōu)化。
3.1 算法優(yōu)化
3.1.1 程序的定點化
  由于BF533是32位定點DSP,只適合做加乘運算,而對浮點運算和除法運算的效率則較低,所以要對程序中的浮點運算和除法運算做定點化。算法中的除法運算主要存在于反量化" title="反量化">反量化和反DC/AC預(yù)測兩個模塊中。這兩個模塊的情況很類似,都是(a+b/2)/b類型的運算??梢韵葘⑺硎緸閍·65536/b+32786,然后再右移16位計算出結(jié)果(這里取Q16),其中65536/b可以通過查表的方法得到。這樣可以將原來的定點除法運算用乘加和移位來實現(xiàn),從而提高了運算速度。
3.1.2 VLC解碼算法
  VLC碼屬于變長Huffman碼。由于碼長不固定,所以解碼時采用逐位查找的方法,效率很低。MPEG-4算法中有兩種變長碼:常規(guī)的VLC碼和可逆的VLC碼(RVLC)。系統(tǒng)采用的解碼算法不支持RVLC碼,只支持VLC碼。標(biāo)準(zhǔn)中VLC碼的最大長度為12位。根據(jù)Huffman碼是前置碼的特點,在解碼前先制定一個大表,表長為212,表中的每一組元素對應(yīng)以該組元素在表中的索引位置為Huffman碼時解出的符號。解碼時,解碼器每次從碼流中讀取12個比特,并以這組數(shù)的十進(jìn)制值作為索引值從表中查取應(yīng)該解出的符號以及碼的長度。這樣只需一步運算就能解出一個VLC碼,減少了運算量。
3.1.3 IDCT算法
  IDCT運算是MPEG-4算法的核心過程之一。該算法被頻繁調(diào)用,在整個解碼過程中占用很大比重。在優(yōu)化時,一般采用陳氏快速算法[9],該方法類似于FFT算法,采用分步運算,基本單位為蝶形結(jié)。同時根據(jù)Blackfin提供的矢量操作指令和循環(huán)緩沖技術(shù),可以對算法進(jìn)行匯編優(yōu)化。Blackfin還提供了IDCT的匯編庫函數(shù),可以直接調(diào)用。
3.1.4 反量化算法的優(yōu)化
  反量化在解碼算法中屬于運算量比較大的模塊。在標(biāo)準(zhǔn)中,需要對每個塊中的64個系數(shù)都進(jìn)行一次反量化操作。通過觀察,發(fā)現(xiàn)它有一個特點,就是對零值反量化以后還將得到零值。利用這個特性,將反量化和游程解碼、Z掃描放在一塊完成。在每解出一個非零值后,就立刻對它進(jìn)行反量化操作,最后進(jìn)行Z掃描。由于紋理系數(shù)經(jīng)過游程解碼以后出現(xiàn)了大量的零值,所以大大減少了運算量和內(nèi)存讀寫時間。對于非零系數(shù)的反量化,可以用統(tǒng)一的公式表示,以減少程序的判斷。如第二種反量化方法可以表示為:
  F′′ [v][u]=QF [v][u]*C1+sign(QF [v][u])*C2      (1)
  式中,F(xiàn)′′ [v][u]是反量化系數(shù),QF [v][u]是量化系數(shù),C1和C2在一個塊中而且是常數(shù),函數(shù)sign(x)為:
  
3.2 匯編優(yōu)化
  BF533寄存器的特點使它具有良好的對稱性和雙核乘加運算能力。此外BF533還提供了大量的視頻操作指令和矢量操作指令,可以用一個指令完成多數(shù)據(jù)操作[4]。如BYTEOP16P實現(xiàn)四個對應(yīng)單元的加,BYTEOP16M實現(xiàn)四個對應(yīng)單元的減,BYTEOP1P實現(xiàn)四個對應(yīng)單元的平均,這些指令可以用于解碼中的插值運算。高低位互換、位截取和拼接等指令在數(shù)據(jù)的壓縮和解壓時可以方便地對數(shù)據(jù)讀寫。
  在經(jīng)過對算法的C語言優(yōu)化后,再對算法中計算量較大的模塊使用匯編級別的優(yōu)化。最終算法中C語言和匯編語言優(yōu)化的比重大致為2:8,除上層調(diào)度外,算法中的大部分基礎(chǔ)模塊都是用匯編語言實現(xiàn)的。
3.3 提高外存使用效率
  解碼算法要處理大量的視頻數(shù)據(jù),而BF533的片內(nèi)數(shù)據(jù)存儲器只有64KB,絕大部分的數(shù)據(jù)要放在片外存儲器上。雖然片外存儲器容量大,但是DSP對其訪問的速度很慢,如果直接對片外空間進(jìn)行訪問,會嚴(yán)重影響處理速度,不能實現(xiàn)實時解碼。為了提高外存使用效率,采取了以下兩種方法。
3.3.1 Cache的配置
  提高外存使用效率一般有兩種方法,一是使用Cache,二是使用DMA。DMA方式在固定位置的大數(shù)據(jù)量的數(shù)據(jù)交換時效果較好,而Cache則更加靈活。Cache的基本原理是將要使用的外存中的指令或數(shù)據(jù)先緩存到內(nèi)存中的特定區(qū)域中,這樣對外存數(shù)據(jù)的訪問就可以在內(nèi)存中進(jìn)行,從而提高了外存使用的效率。BF533提供了強大而靈活的Cache管理機制。BF533的內(nèi)存可以劃分為指令區(qū)和數(shù)據(jù)區(qū)兩部分[3]。指令區(qū)的大小為80KB,其中有16KB可以配置為指令SRAM或指令Cache,由于解碼程序不是很大,把指令區(qū)全部配置為指令SRAM,不使用指令Cache。數(shù)據(jù)區(qū)一共有64KB,其中有兩個16KB的區(qū)間可以配置為數(shù)據(jù)SRAM或數(shù)據(jù)Cache,將這兩個區(qū)間都配置為數(shù)據(jù)Cache。將外存中可以映射到Cache的區(qū)域配置好,啟動Cache,在程序運行時,外存的數(shù)據(jù)會事先調(diào)入Cache中以備使用,這樣就提高了運行速度。
3.3.2 開辟專門的內(nèi)存緩沖區(qū)
  雖然Cache的使用提高了外存數(shù)據(jù)的使用效率,但程序的運行速度仍然沒有使用內(nèi)存數(shù)據(jù)時快。所以在一些內(nèi)外存數(shù)據(jù)交換比較頻繁的地方,專門開辟一定大小的內(nèi)存緩沖區(qū),將要同外存交換的數(shù)據(jù)緩存在這些緩沖區(qū)中,等運算結(jié)束后再一起拷到外存中去。這樣,大部分?jǐn)?shù)據(jù)交換都可以在內(nèi)存中完成,不但減輕了Cache的壓力,而且提高了運算速度。例如在解一個宏塊" title="宏塊">宏塊時可以先在內(nèi)存開辟一塊宏塊大小的數(shù)組,用來存放中間數(shù)據(jù)。
3.4 DMA的使用
3.4.1 DMA的使用特點

  DMA是DSP中用于快速數(shù)據(jù)交換的重要技術(shù),它可以在存儲空間之間或存儲空間和外設(shè)之間傳遞數(shù)據(jù),并且DMA和CPU的工作是可以并行進(jìn)行的。在實時圖像處理系統(tǒng)中,由于大量數(shù)據(jù)需要頻繁出入CPU,因此是影響實時處理的瓶頸之一。利用DMA后臺數(shù)據(jù)傳輸能力,在不影響或基本不影響CPU處理能力的情況下對數(shù)據(jù)作并行傳輸,可以有效地解決這個問題。DMA一般比較適合在數(shù)據(jù)傳輸方式比較固定時使用。
  BF533提供了強大的DMA功能。它提供了兩對Memory DMA(MDMA)和八組外設(shè)DMA,并且專門針對視頻應(yīng)用提供了二維DMA功能[3],使數(shù)據(jù)傳遞的方式更加靈活。DMA的傳遞方式有兩種,一種是基于描述符" title="描述符">描述符的,另一種是基于自動緩沖的?;诿枋龇腄MA傳送是Blackfin控制DMA傳送的常用方法。使用該方法時,DMA通道需要一組稱之為DMA描述符的參數(shù),該參數(shù)存儲在存儲器中。每個描述符包含特定的DMA傳送序列所需要的信息??梢詫⒈硎径鄠€傳送的多組描述符放入存儲器中,構(gòu)成一個鏈表。鏈表生成后,DMA通道就有了完成多個傳送序列所需的信息,這些傳送序列不需要處理器的干預(yù)。利用這種方法可以很方便地完成數(shù)據(jù)傳輸和數(shù)據(jù)重排。
  例如解碼輸出的YUV圖像為4:2:0格式,每幀圖像中的每個像素的Y、Cr、Cb參數(shù)都按順序分別存放在不同的數(shù)據(jù)塊中;而D/A轉(zhuǎn)換所需的數(shù)據(jù)格式是分上下場存放的ITU-R656格式,圖像中每行像素的Y、Cr、Cb參數(shù)是按CrYCbY的4:2:2格式存放的。所以,在將解碼數(shù)據(jù)輸出之前先將數(shù)據(jù)重新排列成所需的格式。如果用CPU完成數(shù)據(jù)重排,將會浪費大量的讀寫時間,而且CPU強大的計算優(yōu)勢不能得到充分利用,會造成DSP資源的極大浪費。所以,用二維DMA來完成這個功能,只需將DMA鏈表的參數(shù)設(shè)置好,就能在CPU工作的同時在后臺完成數(shù)據(jù)的傳輸與重排功能,從而提高處理器的效率。
3.4.2 視頻數(shù)據(jù)的輸出
  在將解碼后的數(shù)據(jù)轉(zhuǎn)換為所要求的ITU-R 656格式的數(shù)據(jù)以后,還需要將數(shù)據(jù)通過DMA傳送到PPI口(并行外設(shè)接口),由ADV7171轉(zhuǎn)換為模擬信號后才能在電視上顯示。在大量數(shù)據(jù)搬移(尤其是D1格式)的情況下,如果直接將外存的數(shù)據(jù)搬移到PPI,則會引起DMA和CPU對總線資源的競爭,而在對外存資源的使用上CPU的優(yōu)先級是高于DMA的優(yōu)先級的,這樣就有可能引起PPI傳輸中斷,從而影響圖像的顯示效果。為避免這種情況,可以在內(nèi)存中開辟兩處乒乓緩沖區(qū),先將圖像的一行數(shù)據(jù)用MDMA搬移到緩沖區(qū),再從緩沖區(qū)由DMA搬移到PPI。


  解碼系統(tǒng)的數(shù)據(jù)流程如圖3所示。A、B、C、D為四幀ITU-R 656格式圖像數(shù)據(jù)緩沖區(qū),E、F、G、H為四幀參考幀圖像數(shù)據(jù)緩沖區(qū),I為碼流數(shù)據(jù)緩沖區(qū),這些緩沖區(qū)都位于外存SDRAM。J、K為宏塊數(shù)據(jù)乒乓緩沖區(qū),M、N為行數(shù)據(jù)乒乓緩沖區(qū),它們都位于內(nèi)存。處理器從I處讀入碼流后解碼,將解出的一個宏塊的數(shù)據(jù)保存到宏塊數(shù)據(jù)緩沖區(qū),然后分別使用拷貝(由CPU完成)和MDMA的方法將宏塊數(shù)據(jù)搬移到重建幀緩沖區(qū)和ITU-R 656格式數(shù)據(jù)緩沖區(qū),并按規(guī)定格式放好,同時對下一個宏塊解碼。一幀圖像解完后,使用MDMA將656格式的圖像逐行搬移到行緩沖區(qū),再用PPI DMA 傳輸?shù)絇PI口,同時對下一幀圖像解碼。為了不引起PPI傳輸中斷,用優(yōu)先級較高的MDMA0實現(xiàn)行數(shù)據(jù)的搬移,而用優(yōu)先級較低的MDMA1實現(xiàn)宏塊數(shù)據(jù)的搬移。為了使處理器和DMA能并行工作,使用了乒乓緩沖區(qū)。
3.5 優(yōu)化結(jié)果
  經(jīng)過對程序的軟件優(yōu)化以后,程序已經(jīng)可以滿足實時運行的要求。表1所示為優(yōu)化前后對30fps幀頻的CIF格式圖像解碼時幾個基本模塊的運行指標(biāo)對比。從表中可以看出,插值和數(shù)據(jù)拷貝在解碼模塊中仍然占很大的比重,這是由于對外存訪問的效率低,雖然使用了Cache和DMA方法,但是這個問題仍然是軟件優(yōu)化的瓶頸。

?


4 實驗結(jié)果及結(jié)論
  整個系統(tǒng)用VisualDSP++ 3.5進(jìn)行開發(fā),用Ez-Kit Lite開發(fā)板通過JTAG口進(jìn)行仿真,BF533的主頻為600MHz。為了驗證系統(tǒng)的實時性,在1.5Mbps的碼率和30fps的幀頻下,對三種不同復(fù)雜度的D1碼流進(jìn)行解碼,測試結(jié)果如表2所示??梢钥闯觯词箤軓?fù)雜的碼流,系統(tǒng)也可以達(dá)到實時顯示的要求。
  實驗結(jié)果表明,用BF533芯片實現(xiàn)ASP功能的D1格式碼流的解碼并實時顯示的方案是可行的。如果在系統(tǒng)的輸入端加上一個網(wǎng)卡連到因特網(wǎng),將因特網(wǎng)上的碼流通過SPORT口傳輸?shù)綌?shù)據(jù)存儲區(qū),將構(gòu)成一個網(wǎng)絡(luò)電視終端的雛形。
參考文獻(xiàn)
1 ISO/IEC JTC1/SC29/WG11 N4668. Overview of MPEG-4 Standard, Mar. 2002
2 Information Technology-Gencric Coding for Audio-Visual Objects-Part 2: Visual, 14496-2.ISO/IEC. Oct. 2001
3 Blackfin DSP Hardware Reference Manual.AD Inc.,Nov.2001
4 Blackfin DSP Instruction Reference manual, AD Inc., June 2001
5 ADSP-BF533 EZ-KIT LITE Evaluation System Manual. AD Inc., May 2003
6 操 勇,胡志雄. MPEG4視頻編/解碼方案, 電子產(chǎn)品世界, 2003;(7):64~66
7龔劍明. MPEG-4標(biāo)準(zhǔn)視頻編碼器在Blackfin 21535 上的實現(xiàn), 電視技術(shù), 2003;(11):82~83
8 袁 潮,黃曉偉,李 川. 基于ADI公司Blackfin處理器的MPEG-4視頻編碼器的設(shè)計, 電子產(chǎn)品世界,2003;(5):11~13
9 Wen-Hsiung Chen, C Smith, S C Franlick. A fast csompu-tational algorithm for the discrete cosine transform. IEEE Transactions on Communications,1977;25(9):1004~1009

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。