EVC編譯TCPMP的過程

honwsn發表於2010-02-28
EVC編譯TCPMP的過程[@more@]

1.tcpmp下載網址:
下載的壓縮包tcpmp.src.0.72RC1.tar.bz2

2.編譯環境:
Microsoft eMbedded C++ 4.0 (sp4) -- win32(wce armv4i) debug -- wince5.0 SDK
只編譯了debug版。Arm彙編器是EVC安裝目錄下Microsoft eMbedded C++ 4.0/EVC/wce500/bin中的。

3.編譯過程:
1)編譯common工程

出現以下連結錯誤:
error LNK2019: unresolved external symbol CPUSpeedClk referenced in function CPUSpeed
在幾個asm彙編檔案上加上編譯選項以告訴編譯器編譯規則:
armasm -32 -cpu xscale "$(InputPath)" "$(IntDir)/$(InputName).obj" -list "$(IntDir)/$(InputName).lst"
輸出增加:$(IntDir)/$(InputName).obj
需要Common工程的宏定義中加上ZLIB_DLL,以便匯出zlib庫的相關介面,供其它庫使用。連結庫加上ole32.lib。
這樣就可編譯連線透過。


2)編譯amr工程:
可以從下面2個網址下載amr的解碼器的原始碼:


並且分別複製到amr目錄下的26104和26204中。


3) ac3工程可以順利編譯透過
4) asap工程:
需要加上ASAP宏定義,還要加上標頭檔案目錄
“./,./asap,./atari800/src” 這樣也可以順利編譯透過了。

5)ati3200 carmera intel2700g interface matroska network splitter template wavpack
工程可以順利編譯透過


6) libmad工程:
增加個FPM_DEFAULT宏定義即可順利編譯透過.


7) mpc工程
增加宏定義:MPC_FIXED_POINT,MPC_LITTLE_ENDIAN增加標頭檔案路徑“./libmusepack/include”
就編譯透過了。


8) speex工程:
增加標頭檔案路徑“./speex/include/speex,./speex/include”
增加宏定義inline=__inline。 編譯完成。


9) vorbishq工程:
增加宏定義BIG_ENDIAN=0,BYTE_ORDER=1,LITTLE_ENDIAN=1編譯透過


10) vorbislq工程:
增加宏定義BIG_ENDIAN=0,BYTE_ORDER=1,LITTLE_ENDIAN=1,編譯透過


11) flac工程:
增加宏定義:FLAC_API_EXPORTS
增加標頭檔案路徑:./,./flac/include,./flac/src/libFLAC/include


12) ffmpeg工程:
增加宏定義:EMULATE_INTTYPES,CONFIG_H264_DECODER,TCPMP,inline=__inline,FFMPEG_EXPORTS
增加標頭檔案路徑:./,./libavcodec,./libavutil
下載msinttypes-r24.zip,解壓出inttypes.h stdint.h到ffmpeg根目錄下
並在libavutil目錄中common.h的124行 保證有# include "stdint.h"。
將工程libavcodec目錄下dsputil_arm.c 檔案“exclude file from build”。編譯透過,測試發現還是能夠播放mpg影片檔案的。


13) aac工程:
tcpmp.src.0.72RC1中的aac工程根本無法編譯透過。
原因是ic_stream結構體定義有問題。最後只好在sourceforge上下載faac庫faad2。
為了儘量使版本一致,下的是faad2-2.5版。將其中的libfaad原始碼內容複製到aac/faad2/libfaad目錄下。
其實aac工程所做的是把faad2整理為一個符合tcpmp的外掛。
在faad2-2.5的工程裡可以看到faad2已經為多個播放器如(QCD mpeg4ip)整理好外掛,
但是沒有tcmp的。完成上述工作後,發現編譯有點問題,是faad2版本的問題。
aac工程外圍程式碼faad.c 87行有個FAAD_FMT_INTERNAL宏,在faad2-2.5版本中沒有被定義了,所以將改FAAD_FMT_FIXED。不知道這樣修改AAC的播放有沒有問題了。


14)player_ce3工程
這是最後的工程了。直接編譯完成最後的工作。

總之,做了上述修改後,所有的工程都能編譯透過了。

後記:

發現acc外掛編譯後並不能正常使用,看來上述改faad2acc外掛的方法是行不通的,最方便的方法是到網上下載個tcpmp_aac_plugin.windows_mobile.0.66.zip。解壓後提取aac.ARM.CAB,複製到wince5.0安裝。安裝之後會生成aac.plg。將其複製出來,我們就可以使用了。經測試,這個外掛在wince5.0 wince6.0上都可以使用。其實我們編譯TCPMP時,使用EVC + wince5.0 SDK 編譯出來的庫在5.06.0的機器都可以使用的。這一點測試透過。 不過在播放asf檔案時,估計是WMV WMA編碼的,微軟自己的格式,需要OS提供WMA WMV解碼庫(WMVDMOD.dll WMADMOD.dll WMSDMOD.DLL),至於5.0 6.0的版本,大家可以到網上淘找一下。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23410886/viewspace-1031515/,如需轉載,請註明出處,否則將追究法律責任。

相關文章