最近和同事一起合作,移植ffmepg到Win8平台上。
Windows Store 要求3個架構X86 X64 ARM, 我們主要做的就是X86和ARM的平台,
X86的平台移植的文章已經很多了。我推薦這篇文章
http://blog.sina.com.cn/s/blog_47612ff10101mri6.html
但這樣編譯出來的庫並不能在WinRT平台上使用。ffmepg引用了很多WinRT的禁止的API,編譯是可以過的,但是通過不了WACK,也不能上傳到store上面。
解決這個問題,一方面要減少ffmepg的功能,另一個方面要改寫一些源代碼。好在ffmpeg是一個跨平台的庫,這些API都可以找到方法去替代。
另外如果只做本地播放,可以禁止ffmepg的網絡,然后再寫一個流的protocol注冊到ffmpeg里面。
最后的configure 是這樣的
./configure --toolchain=msvc --prefix=/home/Jessejiang/Output/ --disable-network --disable-programs --disable-protocols --extra-ldflags=-DWINAPI_FAMILY=WINAPI_FAMILY_APP --disable-dxva2
這樣編譯之后,還有一些log的API,這個需要找到他們,改一下源碼就好。
ARM平台還是有些麻煩的。
首先,我們需要用 “VS201 ARM兼容工具命令提示”,從這個里面啟動msys.
關鍵的一步是在configure 里面加入宏_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE 和_M_ARM
最后加上交叉編譯和Link的選項-MACHINE:ARM
最后的configure 是這樣的
./configure --toolchain=msvc --disable-programs --disable-network--disable-protocols --extra-cflags="-D_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE -D_M_ARM -DWINAPI_FAMILY=WINAPI_FAMILY_APP" --enable-cross-compile --target-os=win32 --arch=win32 --extra-ldflags="-MACHINE:ARM" --disable-dxva2 --prefix=/home/Jessejiang/Output/
這里用沒有對ARM代碼進行匯編的優化,因為我試過指定arch平台,但是CPU的架構版本我沒辦法定義。
最后,如果大家需要引用頭文件到ffmpeg里面,需要用-I 像這樣-ID:\src\win8\include。 但是configure之后不能馬上make,需要再config.mak 文件中找到--extra-cflags 選項,把-ID:\src\win8\include 路徑加上雙引號-I ”D:\src\win8\include“
關於windows phone的移植,我們還沒有開始,我猜大概和ARM的差不多。等做到了,我再回來補上。
聽說VS13直接支持C99那ffmpeg或許直接就可以用VS編譯了。