zoukankan      html  css  js  c++  java
  • ffmpeg Win8移植记(一)

    最近和同事一起合作,移植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:srcwin8include。 但是configure之后不能马上make,需要再config.mak 文件中找到--extra-cflags 选项,把-ID:srcwin8include 路径加上双引号-I ”D:srcwin8include“

    关于windows phone的移植,我们还没有开始,我猜大概和ARM的差不多。等做到了,我再回来补上。

    听说VS13直接支持C99那ffmpeg或许直接就可以用VS编译了。

  • 相关阅读:
    datanode报错Problem connecting to server
    使用命令查看hdfs的状态
    Access denied for user root. Superuser privilege is requ
    ElasticSearch默认的分页参数 size
    SparkStreaming Kafka 维护offset
    【容错篇】Spark Streaming的还原药水——Checkpoint
    251 Android 线性与相对布局简介
    250 Android Studio使用指南 总结
    249 如何解决项目导入产生的中文乱码问题
    248 gradle更新问题
  • 原文地址:https://www.cnblogs.com/zjjcy/p/3384517.html
Copyright © 2011-2022 走看看