2007年12月12日 星期三

Porting MPlayer on PXA270

期末專題要在PXA270上實做一個播放器, 為了要能播mp3而且支援stream的形式選擇MPlayer. (MADPlayer 不支援stream, VLC太過複雜). 移植過程供大家參考.

Target: Create XScale-PXA270
Kernel: 2.6.15.3
Cross-Compiler: gcc-4.0.2
MPlayer-1.0rc2
libmad-0.15.1b (MAD: MPEG Audio Decoder用來mp3解碼)

事前工作:
toolchain路徑加入$PATH
編譯kernel時把audio相關的module一起編入
在target上建立device node (此為OSS預設的device)
mknod /dev/dsp c 14 3
ln -s /dev/dsp /dev/sound/dsp

編譯libmad
CC=arm-unknown-linux-gnu-gcc ./configure --host=arm-linux --prefix=$LIBMAD
make; make install
$LIBMAD為安裝library的目錄

編譯MPlayer
./configure --cc=arm-unknown-linux-gnu-gcc --host-cc=gcc --enable-cross-compile --target=arm-linux --enable-linux-devfs --disable-dvdread --disable-libdvdcss-internal --enable-fbdev --disable-mencoder --enable-liba52 --enable-mad --disable-libmpeg2 --disable-mp3lib --enable-static --disable-dvb --disable-dvbhead --disable-live --with-extraincdir=$LIBMAD/include --with-extralibdir=$LIBMAD/lib 2>&1 | tee logfile
make
--enable-static 用靜態編譯, 避免安裝library到板子上麻煩.
--enable-mad 採用mad的codec
--with-extraincdir 指向libmad的include
--with-extralibdir 指向libmad的lib
因為我只需要播放mp3的功能, 其他configure的參數就沒太理會, 其實大多可以disable. 只是過程可能會遇到error, 大部分都可以找的解決方法.
make 完之後在目錄下產生mplayer執行檔, 大概7mb, 可以用strip在將其大小縮減.

放到板子上測試
./mplayer -ao oss -ac mad test.mp3
./mplayer -ao oss -ac mad http://192.168.0.1/test.mp3
-ao指定device
-ac指定codec
經測試後播放時delay很嚴重,使用mad library來解碼,將浮點運算轉成整數運算,以滿足沒有浮點數運算的cpu,理論上應該很順才對.

補充: PXA270上對應的audio device node是/dev/dsp 需自行建立.

參考資料:
摩托學園討論區-embedded system
最新版本mplayer移植pxa270成功
MPlayer播放選項

4 意見:

匿名 提到...

Good. After completed, come to my office and make one on my car. I will give you some bonus ♡

匿名 提到...

您好 我在移植到270上有出現錯誤 可是我查不到 不知道您可不可以寄您完成的檔案
我所用的cpu是intel xscale PXA270 這片板子的麻煩您了我的信箱foreverbaby99@yahoo.com.tw
以下是我的錯誤訊息 麻煩您幫我一下


make[1]: *** [ad_libmad.o] Error 1
make[1]: Leaving directory `/penguin/MPlayer-1.0rc2/libmpcodecs'
make: *** [libmpcodecs/libmpcodecs.a] Error 2

potter 提到...

哈囉,我也有做相關專題,非常需要您的協助,希望你能幫助我!!c855088@hotmail.com 這是我的msn 拜託囉!!

匿名 提到...

補充: PXA270上對應的audio device node是/dev/dsp 需自行建立???
能具体说一下建立的方法吗?