歡迎您光臨本站 登入註冊首頁

基於SOPC的MPEG-4視頻播放器

admin @ 2014-03-26 , reply:0

概述

 多媒體技術實用化的關鍵技術之一,就是解決視頻、音頻數字化以後數據量大,與數字存儲媒體、通信網容量小的矛盾,其解決途徑就是壓縮。 為了支持低比特率視頻傳輸業務,MPEG(MovingPictureEx……

 多媒體技術實用化的關鍵技術之一,就是解決視頻、音頻數字化以後數據量大,與數字存儲媒體、通信網容量小的矛盾,其解決途徑就是壓縮。
 為了支持低比特率視頻傳輸業務,MPEG(Moving Picture Experts Group)推出了MPEG-4標準。於1999年正式成為國際標準的MPEG4是一個適合於低傳輸率的視頻、音頻解決方案,更注重於多媒體系統的交互性和靈活性。MPEG-4視頻壓縮標準提供了一種高度靈活、基於“內容”的編碼方法,解碼端可以“按需解碼”,還可以添加對象和信息。這種靈活性使得MPEG-4具有高效的編碼效率、基於內容的可擴展性以及在易受干擾環境下的魯棒性。
 MPEG-4的這些特性使得它十分適合於存儲容量有限的手持終端設備。但是MPEG-4視頻解碼中涉及的反量化(Inverse Quantization, IQ)、反離散餘弦變換(Inverse Discrete Cosine Transform,IDCT),運動補償(Motion Composition, MC)等技術均是典型的計算密集型變換,對於本身處理能力有限,功耗受限的手持終端設備而言,視頻解碼的實時性是一個很大的挑戰。
 本系統在Nios II和FPGA構成的SOPC平台上,使用NiosII的用戶自定義指令以硬體邏輯方式實現MPEG4解碼中的IQ、IDCT、 MC等計算複雜、高度耗時的功能模塊,極大地提高解碼速度。從而在以GPL協議發布的XviD Codec基礎上,實現Simple Profile視覺框架下,L1級、QCIF(177×144解析度)、25 fps的MPEG-4實時解碼,並通過DMA方式在LCD上加以顯示。

1  系統功能描述
 本系統從功能上可以分為視頻文件存取、視頻解碼器、YUV-RGB變換器和LCD控制模塊4個部分。
1.1  視頻文件存取
 要進行視頻文件的播放,首先需要對視頻文件進行方便地存儲和讀取。系統播放的MP4文件由XviD Codec在PC上對4∶2∶0的YUV文件壓縮得到。該MP4文件採用177×144解析度的QCIF格式,25幀/s。在下載模式,可以通過 JTAG介面將MP4文件寫入Flash存儲器中。在播放模式下,Nios II處理器將MP4文件從Flash存儲器中讀出,送入文件緩衝池中等待解碼器對其進行讀取並解碼。

1.2  視頻解碼器
 視頻解碼器是系統的核心。如圖1所示,視頻解碼器由熵解碼器、反量化、反離散餘弦變換、運動補償模塊和視頻幀緩存5個模塊組成。
 
 解碼時,首先對輸入碼流進行熵解碼,然後根據幀的頭信息判斷幀的類型。對於每個宏塊,熵解碼后首先經過IQ,再經過IDCT變換得到空間域的值。對於參考幀(R-Frame),由於不需要進行運動補償,變換后的結果直接輸出,同時還要將它存儲在視頻幀緩存中,留給後面的預測幀(P-Frame)做運動補償。對於預測幀,先通過熵解碼得到運動向量,根據運動向量搜索到相應的參考幀后,再將IDCT變換后的預測差值與之相加,合成最後的預測幀圖像。解碼后的預測幀同樣是一路輸出,一路存放於視頻幀緩存當中。
 視頻解碼如果採用純軟體方式實現,運算量太大,難以滿足實時性要求。利用NiosII的自定義指令,將IQ、IDCT和MC這3個主要的計算密集型解碼單元用硬體邏輯方式實現,以硬體邏輯的複雜性換取解碼的實時性。

1.3  YUV-RGB變換器
 解碼器解碼得到的YUV格式圖像不適合直接用於LCD顯示。要在LCD上顯示解碼得到的圖象必須將YUV格式的圖像轉換為RGB格式,兩者的轉換關係如下:
  R=1.164(Y-16)+1.569(V-128)
  G=1.164(Y-16)+0.813(V-128)+0.391(U-128)
  B=1.164(Y-16)+2.018(U-128)
 YUV到RGB格式的轉換是一個很佔用CPU資源的過程。本系統以查表的方式,採用硬體邏輯實現該轉換。
1.4  LCD控制模塊
 標準VGA LCD顯示模塊(640×480,@60 Hz)是一種逐行掃描設備。這種掃描是順序的,下一個掃描點能夠預知,從而可以將需要送出的像素信息排成一行,看作一個數據流(Streaming)。藉助於NiosII的Avalon流模式外設的設計方法,可以實現一個Avalon流模式的LCD控制器。利用DMA控制器在流模式的LCD控制器和系統SDRAM之間建立一條DMA傳送通道,由硬體完成像素信息的讀取和送出。NiosII只需要操作SDRAM中的相應區域就可完成顯示圖像的更新。

2  系統設計結構
2.1  系統硬體結構
 系統硬體結構如圖2所示。
 
 為了達到25 fps的實時解碼速度, IDCT、IQ、MC和YUV-GB轉換這4部分計算密集型的功能單元全部以用戶自定義指令的方式實現。

2.1.1  反量化
 係數的二維數組QF[v][u]被反量化,產生重構的DCT係數。該過程的實質是以量化步長為倍數的乘法運算。
 內部編碼塊DC係數的反量化過程不同於其他的AC係數。DC反量化係數由一個常數因子intra_dc與QF[0][0]相乘而得到。intra_dc與編碼精度有關,表1顯示的即為兩者對應關係。
 
表1  intra_dc與編碼精度對應表
 AC係數的反量化要用到兩個加權矩陣,分別用於內部子塊和非內部子塊。用戶也可以使用自定義的量化矩陣。
 如果用QDCT表示輸入已量化的AC係數,用DCT表示反量化后的AC係數,那麼AC係數的IQ變換公式如下:
 
式中,quantiser_scale為0~112之間的兩組數值,分別對應不同的比特流控制狀態。但是在本系統採用的XviD Codec版本中,比特流控制功能並沒有得到實現,所以這裡quantiser_scale的取值固定。
 反量化得到的結果通過飽和化,使其限制在[-2048,+2047]之間。
 IQ在FPGA上按照圖3的框圖進行硬體實現。
 
2.1.2  反離散餘弦變換
 IDCT是DCT的逆過程,用於還原DCT係數矩陣。
 IDCT過程可由下面的公式描述:
 
上式可視為一個2個8元向量的點積:
 
 將8元的輸入向量[X0, X1, X2, X3, X4, X5, X6, X7]分成奇元素[X1,X3, X5,X7]和偶元素[X0,X2,X4,X6],8×8矩陣則用2個4×4矩陣來代替,奇元素和偶元素分別與這2個矩陣v和u相乘,生成2個4×4向量p和q,通過加減向量p和q,可得到輸出向量x。
 演算法可以表示成下面的公式:
 
 
 基於8×8矩陣的IDCT演算法,在FPGA上按照圖4所示的結構加以硬體實現。
 
圖4  反離散餘弦變換的硬體實現結構

2.1.3  運動補償
 運動補償是一種大量、單調的運算。為了能實現運動補償,採用了多級、多個運算單元并行流水運算的方式,如圖5所示。
 
圖5  運動補償的硬體實現結構
 運動補償模塊的控制很複雜。實際設計時將它分成幾個子模塊:補償控制、補償地址產生、差分數據提供以及補償運算。這幾個子模塊直接採用硬體邏輯設計,運行時無需NiosII處理器干預。其中補償控制是完成整個運動補償的控制,提供輸入控制信號、輸出控制信號、緩存控制信號、預測數據和差分數據等;補償地址產生用於生成預測數據在幀緩存中的地址及補償結果的寫地址;差分數據負責接收IDCT的結果,通過緩存在適當時機提供補償使用;補償運算則完成最終預測數據的計算。

2.1.4  YUV-RGB轉換
 根據YUV到RGB色彩空間的轉換關係,對每個乘積項都預先做出結果,存放在ROM當中。對每一個YUV分量的輸入,由硬體邏輯產生存取地址,並進行加法運算,從而得到對應的結果。其實現結構如圖6所示。
 
圖6  YUV-RGB轉換實現結構

2.2  系統軟體工作流程
  本系統的軟體工作流程如圖7所示。
 

結語
 該系統採用基於Altera FPGA嵌入式軟核的SOPC平台實現,具有較低的硬體成本,IP核的大量使用,良好的系統擴展性的特點。


[admin via 研發互助社區 ] 基於SOPC的MPEG-4視頻播放器已經有6377次圍觀

http://cocdig.com/docs/show-post-43115.html