MP2530F是韓國MagicEyes公司專門為嵌入式多媒體處理器MMSP2+設計的多媒體芯片。它可提供高性能媒體功能,具有低功耗的特點,集成ARM926EJ和ARM946E的雙核處理器(MMSP2+),支持多種視頻編解碼功能(如MPEG4和H.264.的解碼、MPEG4的編碼等);而且它帶有2D和3D的圖形加速器,能夠更為合理地區(qū)分和處理不同維度的數據,展現(xiàn)了在普通用戶界面操作下導航3D地圖的良好效果,同時還能在多圖層下支持視頻播放的顯示。另外,由于在核心增加了NTSC/PAL的編碼器,可以為該芯片輕松實現(xiàn)1路數字、1路模擬雙屏輸出的強大功能。
本文研究采用MagicEyes公司設計的AESOP—MP2530F作為開發(fā)平臺,實現(xiàn)該平臺下硬件解碼高清視頻(WVGA和D1分辨率)的媒體播放器,展現(xiàn)了1個高性能的車載多媒體終端方案。本文將從系統(tǒng)硬件結構和軟件移植開發(fā)兩方面來闡述該系統(tǒng)的實現(xiàn)。
1 系統(tǒng)硬件結構
1.1 總體硬件架構
如圖1所示,MP2530F在1個雙核32位CPU處理器的基礎上集成了視頻處理器,專門進行硬件編解碼視頻的處理;集成了1個顯示控制器來進行雙路顯示輸出;集成了1個Memory控制器(包含雙DDR控制器和NAND Flash/Static控制器),其中雙DDR控制器的設計極大地提高了內存讀/寫效率,而將不同模塊處理部分使用不同的內存區(qū)域,減少了內存讀/寫沖突的發(fā)生;集成了1個視頻輸入控制器,可以外接攝像頭,回顯模擬視頻流;集成了AC 97和I。S兩種方式的音頻控制器,提供更為豐富的音頻接口;集成了2D、3D圖形加速器和PWM脈沖寬度調制器等。
此外,MP2530F提供了豐富的外圍數據接口。其中包含:6路UART通道,目前1路作為調試接口,1路作為GPS模塊接口,其余4路空閑;USB 1.1 HOST、USB 2.ODEVICE、SD卡讀寫通道;以太網控制器等。
1.2 雙核硬件接口
MP2530F最大的特性是具有ARM926EJ和ARM946E的雙核處理器,主頻為360 MHz和300 MHz,兩個處理器都能獨立工作且共享部分內存區(qū)域。ARM926EJ是作為主CPU使用,而ARM946E主要作為協(xié)處理器來調用視頻處理器進行硬件視頻編解碼。雙核之間是不能直接通信的,必須通過雙核接口來發(fā)送命令和數據。因此,如何使得雙核協(xié)同工作來發(fā)揮芯片的最高效率就變得很重要。
如圖2所示,所謂的雙核接口其實為兩個處理器各自分配一組寄存器,包含中斷使能、數據寄存器、中斷清除等。
工作流程:系統(tǒng)啟動后,ARM926EJ作為主CPU在一開始就進行初始化,而ARM946E則是之后選擇一定的時機再處理。當ARM926EJ需要ARM946E協(xié)同工作時,通過I/O控制器將命令寫入雙核接口中的DUAL 946寄存器過程來實現(xiàn)。其步驟是:先打開ARM946E并設置好基地址,然后使能946中斷,再將數據命令寫入DU—AL 946的16組16位寄存器;寫入完畢后發(fā)一個中斷信號IRQ946到ARM946E,最后清除寄存器里的掛起信號,進入中斷處理。
ARM946E執(zhí)行完畢后,要發(fā)送回復命令給ARM926EJ。過程類似,只是ARM926EJ作為主CPU一直是開放狀態(tài),不需要再打開它和設置它的基地址,直接進入ARM926EJ中斷使能,之后步驟相同。
2 軟件移植開發(fā)
媒體播放是MP2530F平臺的核心功能,而充分利用雙核的高效性能硬件解碼播放高清視頻是該平臺最為突出的特點。下面詳細介紹在MP2530F平臺上實現(xiàn)硬件解碼播放器的原理。
2.1 Mplayer移植
Mplayer是Linux歷史上優(yōu)秀的多媒體播放器,源碼開放,具有可移植性,能使用眾多編解碼器,支持廣泛的輸出設備。最重要的是,Mplayer采用的是完全模塊化的結構,具有一個統(tǒng)一的解碼器插件接口和輸出設備接口,并且完全使用C/C++語言編寫。用戶可以根據需要來編寫自己的編解碼器,提高播放器的執(zhí)行效率。
通過直接對最新版Mplayer一1.O:re2進行配置和交叉編譯,移植到MP2530F平臺上,實現(xiàn)了基于主CPU核ARM926EJ的軟解碼播放功能,但發(fā)現(xiàn)兩點問題:
①用Mplayer自帶的基于浮點運算的mp3lib音頻解碼庫解碼效率很低,極度占用系統(tǒng)資源,所以改為使用基于定點運算的libmad音頻解碼庫來進行音頻解碼。
②用Mplayer自帶的ffmpeg解碼器解碼AVI高清視頻,由于軟解碼處理速度緩慢,無法達到音視頻同步,視頻播放明顯滯后于音頻。
2.2 硬件解碼器
由于AVI高清視頻所帶數據的大量性,只由主CPU進行軟解碼處理,不僅大大降低CPU的使用效率,同時視頻解碼速度滯后音頻,也不能達到影片聲音和圖像同步正常播放的效果。需要利用MP2530F本身的硬件特性完成一個解碼器。因為MP2530F本身是帶有一個MPEG視頻處理器,支持MPEG4.標準的視頻流而擁有各個功能模塊(如VLD/VLC、PCT/IDCT、量化器、預判器、運動估計、運動補償等),并由ARM946EJ控制使用。
另外,在系統(tǒng)內核驅動中專門劃分了一個內存區(qū)域,用于存儲需要解碼的媒體流數據。這樣主CPU每次分離出音視頻流,分別寫入指定內存空間,并在需要解碼視頻流時,發(fā)送一條解碼指令給ARM946E;而當ARM946E接到命令后,打開MPEG視頻處理器,并為視頻處理器解碼分配足夠的視頻幀緩沖區(qū)。由于媒體流存儲的內存空間對于兩個CPU是共享的,ARM946E可以直接從內存指定區(qū)域將需要解碼的視頻流讀取一幀下來,發(fā)送到視頻處理器,由視頻處理器進行硬件解碼;解碼完后的幀數據暫存在視頻緩沖區(qū),等待主CPU發(fā)送命令再寫入frame buffer播放幀數據;而每當寫完一幀數據到frame buffer,ARM946E就將幀緩沖區(qū)所存儲的這幀空間釋放,開始等待下一幀的解碼。如此,就完成了整個硬件解碼器。
2.3 Mplayer調用流程
Mplayer的播放過程,在它的核心主程序打開一個視頻文件后,會自動選擇對應文件格式的分離器來解析視頻頭,從而分離得到視頻流和音頻流,之后選擇特定的視頻和音頻解碼器處理分離出來的媒體流數據。而當視頻解碼器和音頻解碼器完成圖像和音頻的處理后,就將數據返回主程序,再由主程序指定的音視頻輸出設備播放數據。
基于Mplayer這樣分層和完全模塊化的架構,我們就可以根據上面硬件解碼器的實現(xiàn)流程和特性,參照Mplayer給出的解碼器書寫規(guī)則和應用接口,把硬件解碼器插入到主程序中,由Mplayer調用實現(xiàn)來達到硬件解碼的目的。實現(xiàn)流程如圖3所示。
由于硬件的關系,在進入解碼器前,系統(tǒng)需要ARM946E先打開MPEG視頻處理器并進行初始化,做好解碼MPEG4視頻流的準備。所以,我們在Mplayer使用分離器解析出AVI視頻媒體文件的音視頻流后,調用了ARM946E進行準備工作。
當主程序進入圖3(b)所示的解碼流程,每讀取一幀需要解碼的圖像后,使用先前打開的視頻處理器解碼媒體流數據,并把解碼完的幀數據返回到幀數據緩沖區(qū)(在初始化時分配好的緩沖區(qū)空間),等待主程序調用輸出到frame buffer播放圖像。
當主程序播放圖像后,每播完一幀后會判斷該幀是否為文件的結尾。如果不是,則轉回解碼器讀取下一幀圖像繼續(xù)解碼;如果是,就關閉輸出設備,關閉解碼器,結束播放。結果成功實現(xiàn)硬件解碼器的開發(fā)。
3 軟解碼和硬解碼比較
通過測試,經過優(yōu)化開發(fā)的硬件解碼器最高可以支持視頻:WVGA格式,幀速為30 fps,碼流為4 Mbps;D1格式,幀速為30 fps,碼流為6 Mbps。
軟硬解碼比較如表1所列。
比較軟解碼(ffmpeg解碼器)和硬解碼的性能如下:
①調用軟解碼解碼高清視頻時,由于未能合理分配使用內存空間,且過分依賴主核心解碼圖像數據,不僅過分占用系統(tǒng)資源(主CPU和內存),而且播放的效果也不理想,視頻播放嚴重緩慢,極不流暢。
②調用硬解碼器時,使用從處理器調用視頻處理器實現(xiàn)硬件解碼,并分配指定內存區(qū)域存儲媒體流數據,極大降低了CPU和內存的占用率,同時視頻播放流暢、清晰,效果理想。
結 語
本文介紹了MP2530F平臺的基本架構,分析了雙核處理器的調用流程,在MP2530F開發(fā)平臺上移植了Mplayer播放器,并在此基礎上開發(fā)基于該平臺的硬件解碼器,成功實現(xiàn)了解碼AVI高清視頻及播放,體現(xiàn)了一個多媒體芯片的重要功能。