EVC編譯TCPMP的過程
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外掛編譯後並不能正常使用,看來上述改faad2的acc外掛的方法是行不通的,最方便的方法是到網上下載個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.0和6.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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 編譯器的編譯基本過程編譯
- 編譯過程編譯
- Javac編譯過程Java編譯
- 編譯核心過程編譯
- 編譯器的工作過程編譯
- 痛苦的過程,編譯glomap編譯
- 編譯連結過程編譯
- 編譯過程簡介編譯
- C++ 編譯過程C++編譯
- JavaScript的預編譯過程分析JavaScript編譯
- 編譯C++ 程式的過程編譯C++
- ios底層 編譯過程iOS編譯
- .NET 程式碼編譯過程編譯
- glade 編譯過程 (轉)編譯
- vlc-android 的編譯過程Android編譯
- 編譯器的工作過程和原理編譯
- GCC編譯過程(預處理->編譯->彙編->連結)GC編譯
- GCC編譯和連結過程GC編譯
- go語言編譯過程概述Go編譯
- 預編譯過程(AO+GO)編譯Go
- C程式編譯過程淺析C程式編譯
- Android 專案編譯過程Android編譯
- Android Makefile 編譯過程分析Android編譯
- Hive SQL 編譯過程詳解HiveSQL編譯
- C語言編譯全過程C語言編譯
- 儲存過程編譯時卡死儲存過程編譯
- iOS編譯過程的原理和應用iOS編譯
- 初探 Go 的編譯命令執行過程Go編譯
- ASPNet_Compiler的編譯過程Compile編譯
- CMM編譯器和C編譯器過程呼叫實現的比較編譯
- Hive SQL的底層編譯過程詳解HiveSQL編譯
- Vue.js 1.0 的 DOM 編譯過程解析Vue.js編譯
- 淺談Android的資源編譯過程Android編譯
- [轉]:xmake編譯配置過程詳解編譯
- 詳解Linux 程式編譯過程Linux編譯
- 3- C語言編譯過程C語言編譯
- C語言編譯過程簡介C語言編譯
- oracle 儲存過程重新編譯方法Oracle儲存過程編譯