天天看點

TCPMP編譯方法

    本文主要講解TCPMP播放器到WINDOWS CE平台的移植編譯過程,硬體平台以ARMV4為主,結束部分會講解到ARMV4I編譯中需要注意的問題

    這幾天為公司一個項目做準備,準備編譯移植來自linux系統的超級開源媒體播放器TCPMP(商業版名稱:The Core Player)到Windwos CE平台,tcpmp是目前支援最多可以用在嵌入式裝置中多媒體播放器.除了rm,rmvb等少數幾種格式不支援外,其它常見視、音頻格式幾乎都支援。好東西是好定西,可是編譯起來十分麻煩,網上關于這方面編譯的文章很少,多半針對自己的環境粗略的講一下,系統性不強。今天TCPMP媒體播放器正式編譯成功,将經驗總結一下:

開發環境:windows xp sp2 + EVC4.0(SP4)

目标平台:Windows CE5.0(ARMV4)

1.下載下傳源碼,可以去http://picard.exceed.hu/tcpmp/下載下傳TCPMP源代碼。我下載下傳的源碼版本是0.72RC1。

2.編譯環境.我安裝的是evc4.2(SP4)+standard sdk+Win32(WCE ARMV4) Release.如果是編譯x86或者Emulator版本的.要下載下傳一個nasm彙編工具.這點在readme.txt裡面提到.nasm的下載下傳位址http://nasm.sourceforge.net/.否則的話會因為缺少彙編器而報大量的錯誤。

3.下載下傳下來的源碼包中不包含ARM的解碼器源碼,可以從下面2個網址下載下傳AMR的解碼器的源代碼:http://www.3gpp.org/ftp/Specs/archive/26_series/26.104/26104-610.zip

http://www.3gpp.org/ftp/Specs/archive/26_series/26.204/26204-600.zip

并且分别拷貝到AMR目錄下的26104和26204中。同樣,這個資訊在readme.txt中提到。            

4.準備ARM的彙編器,根據實踐經驗,從ARM官網上面下載下傳下來的彙編器編譯時會報錯,不适合使用,建議使用VS2005的ARM彙編器ARMASM.EXE,将其拷貝到C:/Microsoft eMbedded C++ 4.0/EVC/WCE400/BIN下面。

5.編譯的時候切勿rebuild all,否則會報大量的錯誤,從Project—-Dependencies下來框裡選擇player_ce3(主項目),可以看到子項目間的互相依賴關系,是以player_ce3是最後一個編譯的項目。随便在下拉框中選擇一個子項目,在依賴項中都會發現common項目,說明該項目應該是首先需要進行編譯的,下面我們首先從common項目入手。

6.将player_ce3項目set as active project,編譯版本直接選擇Win32 (WCE ARMV4) Release。這個項目将最後一個進行編譯,最終生成一個player_ce3.exe的應用程式,那我們的目标也就達成了。但編譯這個程式依賴許多的庫。這些庫就是其他的project編譯後提供的。

7.在EVC左邊的檔案檢視模式裡首先選擇common files,右鍵菜單Build(selection only)進行common項目的編譯,會很順利的過去。接下來由上而下順序為子項目進行編譯,當然,在Project—-Dependencies中沒有關聯的項目不需要進行編譯(總共6項:player_ce2、sample_ce3、setup_ce2、setup_ce3、template、vorbislq),其它的把asap、flac、player_ce3三項放下來最後處理,這三項需要對編譯器進行額外配置,否則會報大量錯誤。不出意外的話,都會順利編譯過去。接下來我們需要處理剩下來的3個項目。

8.編譯asap項目。右鍵點asap files –>settings–>c/c++–>Category–>Preprocessor在Additional include directories:中增加項目路徑(注意這個是相對路徑,以下所有需添加内容都不包括引号)”.,asap,atari800/src”.不然一堆頭檔案會找不到.在Preprocessor definitions:中增加一個宏定義”,ASAP”當然這2步動作也可以在源代碼中修改.如此設定完畢後,asap files project就可以正确編譯了.

9.編譯flac項目。同8,打開flac的settings到相同界面.在Additional include directories:中增加路徑”flac/include,flac/src/libFLAC/include”,不然一堆頭檔案找不到。然後,在Preprocessor definitions添加”,FLAC__NO_DLL”。增加這個定義避免使用_declspec(dllexport)定義函數造成的一大堆c2491錯誤.如此設定後,flac project應該可以正确編譯.

10.同理修改player_ce3項目,在Additional include directories中增加路徑 ”../asap/asap,../asap,../asap/atari800/src,flac/include,flac/src/libFLAC/include”。然後在Preprocessor difinitions:增加”,ASAP”。這是最後一個項目檔案,也是主項目檔案,成功編譯player_ce3.exe。

11. 拷貝包含player_ce3.exe在内所有的生成檔案到目标闆上(所有檔案必須放在同一個目錄中),可以運作!但是菜單沒有顯示正确。主要原因是現實語言配置檔案沒有加載上去,可以将源碼lang目錄下面的多國語言支援檔案拷貝到目标闆同一個目錄下面。如果隻需要簡體中文和英文的,隻要拷貝lang_std.txt lang_en.txt,lang_chs.txt,lang_ca.def四個檔案(四個語言配置檔案一定要和應用程式放在同一個目錄)就可以了,打開後預設顯示是英語,你可以更改到簡體中文,前提是你的CE平台支援簡體中文。

我是在VS2005中用開發平台的模拟器跑的,一切正常,就是播放不流暢,後期需要對這塊進行優化。

我也嘗試将其編譯到ARMV4I平台上,結果也是可行的,不過由于的平台的特殊性,有部配置設定置需要改動,也有部分插件不被支援,不過不影響使用,大體總結如下:

1.經驗總結表明在ARMV4I平台的編譯工作中,TCPMP有部分子產品不被支援,編譯提示缺少相應檔案。由于該部分不被支援的子產品不影響播放器的正常使用,可以在Project–Dependenties中下拉框中選擇player_ce3,然後将以下幾項前面的勾拿掉:ffmpeg、mpc、speex 這三項可以不必編譯。

2.Win32 (WCE ARMV4I) Debug及Release版本需要自己手動建立。在Build–Configurations裡為每個子項目選擇ADD(上面提到的3項,和依賴項中不需要編譯的6項不必添加),CPU選擇Win32 (WCE ARMV4I),在Copy settings from裡選擇Win32 (WCE ARMV4) Release,然後選擇OK,你就為該子項目添加了相應編譯版本。

3.右擊需要編譯的子項目,選擇Settings–Link,在Category中選擇General,然後再下面Project Options裡将最後一行語句:/MACHINE:ARM 改成 /MACHINE:THUMB (每個項目都必須要改)

4.其它步驟按照按照上文ARMV4的過程來就可以了,相應的修改也是需要的,先從common開始,以player_ce3結束。

經過以上過程,你就可以定制自己專用的TCPMP播放器了,可以在interface項目中更改TCPMP的外觀,當然,重頭工作還在于對于特定平台的一些優化工作:)

注:如果上面給出網址的解碼器包下載下傳不了,可以在本站軟體專區的windows ce工具中下載下傳ARM彙編器(VS2005提取出)和解碼器包

繼續閱讀