摘 要:介紹一種基于Blackfin系列處理器BF561實現的MPEG-4編碼器,根據BF561的特點提出了三種優化措施,得到一種新的優化編碼算法。通過標準測試序列和實時采集的數據對其進行性能測試,實驗結果表明,該編碼器優化效果明顯,可實現D1格式下的實時采集壓縮功能。
關鍵詞:視頻壓縮; MPEG-4; BF561; 優化; 性能測試
中圖分類號:TP391文獻標識碼:A
文章編號:1004-373X(2010)08-0194-03
Optimization of MPEG-4 Encoder Based on ADSP-BF561
HE Xin-hong
(PLA Military Representative Office in CNGC 203 Research Institute, Xi’an 710065, China)
Abstract:The implementation of MPEG-4 encoder based on the processor BF561 in Blackfin series is presented. Three optimal measures are proposed on the basis ofthe characteristics of BF561. A new optimal coding algorithm is obtained. The optimized encoder was tested with the standard test sequences and real-time collected data respectively. The experimental results prove that the encoder has better effects and can implement the functions ofreal-time acquisition and compression in D1 format.
Keywords:video compression; MPEG-4; BF561; optimization; performance testing
隨著網絡技術和多媒體技術的發展。視頻通信的需求逐漸增加。同時,最新的視頻壓縮標準不斷推出。MPEG-4 (Moving Pictures Expcrts Group-4)是國際運動圖像像編碼專家組(MPEG Moving Picture Experts Group)在1998年11月制定的。它提供了用于甚低速率的音視頻編碼,實現了基于內同的壓縮編碼,具有良好的兼容性、伸縮性和可靠性\\。以DSP為嵌入式圖像處理核心的系統,具有開發周期短,編程靈活的特點,因此DSP圖像處理系統成為了當前研究熱點\\。Blackfin系列處理器是ADI專門針對于通信和多媒體方面的應用而開發的定點DSP,在片上集成了一套通用的數字圖像處理外圍設備,為數字圖像處理和多媒體應用創建了一套完整的系統級片上解決方案。在此以該系列中BF561為平臺,研究實現MPET-4編碼算法,并對該算法進行優化。
1 ADSP-BF561結構特點
ADSP-BF561\\是采用對等的雙核結構,可以很好地執行兩種任務,且開發人員可以隨意分配任務來平衡雙核之間的負載。
如圖1所示,每一個Blackfin內核包含兩個乘/累加器(MAC),兩個40位的ALU,四個視頻專用8位ALU和一個40位移位器。運算單元處理來自寄存器組的8位、16位或者32位數據。每個MAC每周期可完成一個16位乘16位的乘法運算,并把結果累加到40位的累加器中,提供8位的精度擴展。ALU單元執行標準的算術和邏輯運算,由于兩個ALU具備對16位或32位數據操作的能力,因此運算單元具備的靈活性可以滿足各種應用中信號處理的要求。每個32位的輸入寄存器可以作為兩個16位的寄存器,因此每個ALU可以完成非常靈活的單16位算術運算。通過把寄存器當作兩個16位的操作數使用,雙16位或單32位操作可以在一個周期中完成。更好地利用第二個ALU,四個16位操作可以簡單地完成,加速了每個周期的吞吐量。強大的40位移位器功能豐富,可以對數據進行移位、循環移位、歸一化、提取和存儲等操作。運算單元所使用的數據來自具有16個16位操作數或8個32位操作數的寄存器組。
同時BF561把存儲器視為一個統一的4 GB地址空間,使用32位地址并采用分級存儲器結構。Level 1(L1)存儲器一般以全速運行,沒有或只有很少的延遲。Level 2(L2)/ Level 3(L3)分布在片內或片外,對它的訪問會耗費多個處理器周期。在L1級,指令存儲器只存放指令,兩個數據存儲器存放數據,一個專用的臨時數據存儲器存放堆棧和局部變量信息。在L2/L3級可以存放指令和數據。
2 編碼器整體結構
以BF561為核心構成的MPEG-4編碼器結構如圖2所示,其中BF561為編碼處理器,完成視頻采集控制以及基于MPEG-4的壓縮編碼等工作;與之相連的視頻解碼芯片選用ADI公司提供的ADV7183,它是10位ADC的增強型視頻解碼器,其內含三個精確模/數轉換器(ADCs)和完整的自動增益控制(AGC)電路。BF561與ADV7183之間通過其專用視頻接口PPI接口相連,并通過I2C總線協議完成對ADV7183內部寄存器的讀/寫操作。
圖1 BF561內部結構示意圖
圖2 MPEG-4編碼器結構
3 編碼器優化方案
3.1 基于Cache和DMA的優化
Blackfin系列DSP多級存儲結構,其代碼從內部L1指令存儲器運行、中間數據及常用參數從內部L1數據存儲器讀取或存放時,才能實現最佳性能。但是MPEG-4算法大量的算法導致代碼不可能放入L1指令存儲器中,大量的中間數據和參數也不可能僅存放在L1數據存儲器中,所以要考慮如何更好地利用處理器上的L1存儲器才能讓系統的性能達到最佳。指令Cache,數據DMA,這是目前最流行的系統模型,多數的嵌入式媒體處理器都是基于這樣的想法而設計的。
使用高速緩存機制允許編程者訪問大的、低成本的外部存儲器。它的工作方式是:在需要的時候自動將代碼讀入L1指令存儲器。這使編程者不必繁瑣地將代碼從內部存儲器移入移出。指令高速緩存有助于以更為有效的方式從外部存儲器預取指令。
相比于指令管理方面使用指令Cache,在數據管理上使用DMA顯得是自然而然的。但是在優化過程中還是注意了以下幾個問題:
(1) 由于BF561的外部總線是32位寬的,所以用32位DMA能最大程度地提高數據存取的性能。
(2) 基于寄存器的DMA和基于描述符的DMA兩種DMA工作方式的選取。基于寄存器的DMA中,處理器直接對DMA控制寄存器編程來初始化一個傳送。因為寄存器不必從內存中裝載,并且內核不必保存描述符,因此,基于寄存器的DMA提供了最好的DMA控制器性能。相反在基于描述符的DMA操作中,可以對一個DMA通道進行編程,以便在當前傳送隊列完成后,自動設置和重啟其他的DMA傳送過程。在管理一個系統的DMA過程時,基于描述符的模型可以提供最大的靈活性。基于上面的考慮,在視頻采集模塊中我們選了基于描述符的DMA控制方式,而在其他模塊中選取基于寄存器的DMA方式。
(3) 當數據在內部存儲器移動時,盡量不使用標準C語言中的memcpy()函數,而使用MemDMA的方式,這樣可以減少CPU等待時間。
3.2 存儲器管理策略優化
對于通常的嵌入式媒體處理器,片上存儲器都不夠存儲一個完整的視頻幀,因此系統必須依賴L3外部RAM來支持對大緩沖區進行相對較快的訪問。因此對片外存儲器的訪問必須精心設計,以保證較優的數據吞吐。以下是筆者在優化過程中總結的一些關鍵步驟:
(1) 分組類似傳送來減小存儲器總線出送方向切換的次數。
以相同的方向訪問外存是是最有效率的(如連續的讀或者寫)。例如,當訪問片外SDRAM時,16個讀16個寫總比單獨的16個讀/寫要快,這是由于先寫再讀而導致的延遲。對外存的隨機訪問會產生高概率的總線中轉。因此在給定的方向上充分利用控制傳輸數量的能力是重要的。
對于MemDMA流,當期望共享可用的DMA總線帶寬時,可編程的DMA控制器以輪流選擇每個數據流的方式進行固定數量的傳送。在每條DMA總線上,這個“方向控制”工具在DMA資源的優化使用方面是一個重要的考慮。通過分組同方向地傳送在一起,其提供了一種方法來管理DMA總線傳送方向的頻繁變動。當使用方向控制特性時,DMA控制器優先級保證在DMA或存儲器總線上,與前一次傳送據具有相同讀/寫方向的數據傳輸,直到方向控制計數器溢出,或停止傳送,或傳送過程中自己改變方向。當方向計數器歸零時,DMA控制器改變其優先選擇方向為相反的數據流動。
(2) 保持SDRAM的行打開及實現多次數據傳送。
每次訪問SDRAM都會花費幾個SCLK(系統時鐘周期),特別是如果需要的SDRAM的行還沒有被激活時。一旦一行是激活的,就能從一整行中讀取數據而不必每次訪問該行的時候再打開。或者可以這樣理解:每個SCLK周期訪問存儲器的任何位置都是可能的,只要這些位置在SDRAM的同一行中。關閉一行需要多個SDRAM時鐘周期,因此,連續的行關閉能嚴格限制SDRAM的吞吐量。
一個SDRAM的頁錯失可花費20~50個CCLK(核時鐘周期)。Blackfin系列DSP可以最多同時打開四個SDRAM行,從而減少設置時間。應用程序應當通過適當放置數據緩沖區和管理訪問來利用打開的SDRAM塊,原則就是把可能同一時間訪問的緩沖區分配到不同的SDRAM塊中。
3.3 基于雙核結構的優化
一片BF561內包含了兩個完全相同的Blackfin內核,這使其擁有比同系列芯片更為強勁的運算能力。因此想要充分發揮其能力就必須更具其結構特性為編碼器設定合適的整體構架。通常的方式有兩種,一種是非對稱的程序設計模式,另外一種為對稱的程序設計模式。顧名思義,非對稱模式就是兩個內核完成不同的處理任務,這種模式下,兩個內核好像是兩個單獨的處理器,它們之間不共享代碼,不共享或者只共享少量的數據。而對稱的程序設計模式比較適合于處理器任務較為單一,但運算量比較大的情況,更能發揮雙核在運算能力方面的優勢。
基于上面的分析,選擇了對稱的程序設計模式,而且是基于運算量考慮的對稱模型,即兩個核各負責半幀圖像的壓縮,另外A核還負責系統初始化以及輸入/輸出中斷的響應,B核還負責時間字符的疊加以及時間計算等,這樣最大程度上平衡了兩個核的工作量。此外,在L2存儲器中定義了兩個核都需要的變量,以及控制雙核同步的信號量等。雙核協作工作的過程以及同步方式如圖3所示。
4 編碼器測試
在此分別采用foreman.yuv和Brige_close.yuv兩個標準序列對編碼其性能進行測試,圖4~圖7為效果圖。
優化前后的兩種序列圖像的性能對比如表1所示。
表1 優化前后編碼器性能對比
序列優化前幀率 /(Frame/s)優化前信噪比 /dB優化后幀率 /(Frame/s)優化后信噪比 /dB
foreman9.828.652.435.2
Brige_close11.234.560.844.1
采用實時采集的圖像進行測試時,優化前圖像模糊、不連續,說明編碼速度小于采集速度;優化后圖像清晰連續,說明編碼器的編碼速度已經達到25 f/s以上,達到了D1格式實時采集壓縮的性能要求。
將優化后的編碼算法應用到實際視頻采集系統中,得到優化前后的圖像如圖8、圖9所示,實驗結果表明,本文優化后的編碼器可以得到很好的效果。
圖3 雙核協作工作流程
圖4 Foreman壓縮前的圖像(第1幀)
圖5 Foreman壓縮后的圖像(第1幀)
圖6 bridge_close壓縮前的圖像(第1幀)
圖7 bridge_close壓縮后的圖像(第1幀)
圖8 優化前實時采集壓縮效果圖
圖9 優化后實時采集壓縮效果圖
5 結 語
在此論述一款基于BF561 DSP的MPEG-4編碼器的優化方案,通過實驗驗證了編碼器的編碼效率達到了PAL制式25 f/s@D1的要求,可以充分滿足實時監控、視頻圖像存儲等方面的應用。
參考文獻
[1]余兆明, 李曉飛, 陳來春. MPEG標準及其應用[M]. 北京: 北京郵電大學出版社, 2002.
[2]王曉明. 一種MPEG-4視頻采集與傳輸系統的研究與實現\\. 微計算機信息, 2005, 21(35): 70-71.
[3]胡志強.MPEG-4實時編碼的Cache算法優化\\.中國傳媒大學學報: 自然科學版,2009,16(9): 58-63.
[4]王剛,王世剛.基于TMS320DM642 DSP的MPEG-4視頻編碼器優化\\.吉林大學學報: 信息科學版,2006,24(6): 590-593.
[5]曾明霞.基于DSP的MPEG-4視頻編碼器研究與實現\\.南京: 南京理工大學,2007.
[6]周雅赟,徐元欣,方健,等.基于TMS320DM642的MPEG-4編碼器設計和優化\\.電視技術,2005,29(6): 36-38.
[7]Conklin G J, GREENBAUM G S. Video coding for streaming media delivery on the internet\\. IEEE Trans. on Circuits and System for Video Technology, 2001, 3(11):560-564.
[8]Analog Devices. ADSP-BF561 Blackfin Processor Hardware Reference.Preliminary Revision 0. 3\\. \\.Analog Devices Inc., 2005.
[9]陳峰. Blackfin系列DSP原理與系統設計\\. 北京:電子工業出版社, 2003.