ffmpeg Win8移植记(一)

时间:2024-01-19 16:49:44

最近和同事一起合作,移植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编译了。