接着上回说,http://www.cnblogs.com/zjjcy/p/3384517.html

上回移植了ffmpeg在ARM上面,只是纯C的代码,没有做汇编的优化。因为ffmpeg的ARM汇编是GNU风格的,微软自带的汇编编译器armasm不支持这样风格的汇编语法。

于是就想到两个解决方案,一种是改写GNU风格的汇编到标准的ARM汇编格式,二是用GCC工具编译,然后再转换编译后的文件,由elf格式到微软支持的COFF格式。

我对GCC不是很熟,就采用了第一种方案,第一种也是最麻烦的方案

特别感谢 这位大神 http://www.cnblogs.com/zcmmwbd/p/windows-phone-8-armasm-guide.html#2842650 他全程指导了我如何迁移,我本来不懂汇编,大神很耐心的给我讲解,让我甚为感动。

因此,我觉得应该把迁移的结果公开出去,俗话说积德行善,我也图个新年的好彩头,大家请在这个地址下载

https://ffmpegwinrtarm.codeplex.com/

接着说说编译过程

  1. 把这些文件覆盖到 ffmpeg-2.1
  2. 用管理员运行VS2013 ARM的console,然后用这个console运行msys
  3. Config 的命令

./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=arm \

--as=armasm \

--cpu=armv7 \

--disable-yasm \

--extra-ldflags="-MACHINE:ARM"\

--disable-dxva2

--disable-inline-asm

4. 修改config.mak 和config.h文件

启用 HAVE_NEON

5. make

    在make的过程中会遇到 AS libavocodec/arm/aacpdsp_neon.o 类似的错误,这个是因为armasm不能接受额外的参数。

    这个时候要用   VS13 ARM的console cd到对应文件夹libavocodec/arm 然后运行 build.bat

    运行成功后继续 make, 在libavutil 和 libswresample 也会遇到同上的问题。

   6. 最后编译成功make install

第二种方案,我没有试过,是ARM给出的解决方案,objcopy 可以帮助转换,就是先用linux的工具编译出这些neon的.o文件,然后转一下,然后再链接到winrt的ffmpeg里面。

这里说说我所修改的地方,首先config文件里面有会as的检查,但是armasm不能完成这样的检查,我就把对应的代码注释掉了。在编译的时候,工具链会给armasm传很多参数,这些参数都是不支持的,但是中途会停掉,然后调用build的脚本,这个脚本的目的就是把汇编的代码编译成.o文件,有了这些.o文件的话,再去make,编译器就可以链接进去了。

在代码转换的过程中,一个是对应指令,对应语法的转换,这个大家可以参照我转换的结果来看,另一方面就是数据的对齐。大神说,在THUMB语法中,数据的对对齐被自动+1,所以数据段要放在 AREA .rodata, DATA, ARM下面,这样编译才能正确。

最后,今天是2013年的最后一天,我也很高兴能在今天搞定这个问题,可以过一个好年。也祝大家在新的一年里,家庭圆满,事业有成。

ffmpeg Win8移植记(二)的更多相关文章

  1. ffmpeg Win8移植记(一)

    最近和同事一起合作,移植ffmepg到Win8平台上. Windows Store 要求3个架构X86 X64 ARM, 我们主要做的就是X86和ARM的平台, X86的平台移植的文章已经很多了.我推 ...

  2. FFMPEG内存操作(二)从内存中读取数及数据格式的转换

    相关博客列表: FFMPEG内存操作(一) avio_reading.c 回调读取数据到内存解析 FFMPEG内存操作(二)从内存中读取数及数据格式的转换 FFmpeg内存操作(三)内存转码器 在雷神 ...

  3. u-boot 移植(二)创建新平台的板级支持

    u-boot 移植(二)创建新平台的板级支持 soc:s3c2440 board:jz2440 uboot:u-boot-2016.11 toolchain:gcc-linaro-7.4.1-2019 ...

  4. ffmpeg之移植到ARM

    移植方法分为两种:第一种手工移植,第二种buildroot移植. 第一种手工移植: 优点:灵活性高 缺点:重复工作多 一.配置 ./configure --enable-memalign-hack - ...

  5. FFmpeg 结构体学习(二): AVStream 分析

    在上文FFmpeg 结构体学习(一): AVFormatContext 分析我们学习了AVFormatContext结构体的相关内容.本文,我们将讲述一下AVStream. AVStream是存储每一 ...

  6. linux4.10.8 内核移植(二)---初步裁剪、分区修改和文件系统

    一.初步裁剪 在内核根目录下 执行: make menuconfig 1.1 system type裁剪 选择 SAMSUNG S3C24XX SoCs Support 进入其中,这里是配置我们的单板 ...

  7. opencv移植(二)

    原文:https://blog.csdn.net/Guet_Kite/article/details/78667175?utm_source=copy 版权声明:本文为博主原创文章,转载请附上博文链接 ...

  8. h5 录音 自动生成proto Js语句 UglifyJS-- 对你的js做了什么 【原码笔记】-- protobuf.js 与 Long.js 【微信开发】-- 发送模板消息 能编程与会编程 vue2入坑随记(二) -- 自定义动态组件 微信上传图片

    得益于前辈的分享,做了一个h5录音的demo.效果图如下: 点击开始录音会先弹出确认框: 首次确认允许后,再次录音不需要再确认,但如果用户点击禁止,则无法录音: 点击发送 将录音内容发送到对话框中.点 ...

  9. FFmpeg 参数详解(二)

    https://blog.csdn.net/yizhizouxiaqu/article/details/52233673 5.参数选项 如果没有特殊声明,所有的数字参数都以一个字符串代表数字的形式作为 ...

随机推荐

  1. spark1.0.0 mllib机器学习库使用初探

    本文机器学习库使用的部分代码来源于spark1.0.0官方文档. mllib是spark对机器学习算法和应用的实现库,包括分类.回归.聚类.协同过滤.降维等,本文的主要内容为如何使用scala语言创建 ...

  2. bzoj 3585: mex && 3339: Rmq Problem -- 主席树

    3585: mex Time Limit: 20 Sec  Memory Limit: 128 MB Description 有一个长度为n的数组{a1,a2,...,an}.m次询问,每次询问一个区 ...

  3. BFS洪水

    试题描述: 已经连续下了几天雨,却还是没有停的样子.土豪CCY刚从外地赚完1e元回来,知道不久除了自己别墅,其他的地方都将会被洪水淹没. CCY所在的城市可以用一个N*M(N,M<=50)的地图 ...

  4. 五、python的练习题

    1.输入一行字符,分别统计出其中英文字母.空格.数字和其他字符的个数. #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/6/5 ...

  5. [转]ANDROID开发之SQLite详解

    SQLite简介 Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也非常的强大.SQLite具备下列特点: 1.轻量级 使用 SQLit ...

  6. apache 与 iis共存

    先装上了apache ,再装iis会出现错误.所以先关闭apache,再进行iis安装.iis安装完后修改iis80端口为8080端口, 同时使用命令 cd C:\Inetpub\AdminScrip ...

  7. sysbench 测试MYSQL

    http://imysql.cn/tag/%E5%8E%8B%E6%B5%8B http://imysql.cn/node/312 https://www.percona.com/blog/2013/ ...

  8. linux查找超过一定时间的文件,并批量删除

    1.find . -maxdepth 4  -name "*-*" -mtime 3 -maxdepth的值决定是否对下面的子目录进行递归查找 -mtime 3表示查找刚好3天的: ...

  9. iOS: FFmpeg的使用一

    现状:现在视频直播非常的火,所以在视频直播开发中,使用的对视频进行遍解码的框架显得尤为重要了,其实,这种框架蛮多的,这次主要介绍一下FFmpeg视频播放器的集成和使用,FFmpeg是视频编解码的利器. ...

  10. 数学图形(2.8)Viviani曲线

    维维亚尼(Viviani , Vincenzo)意大利数学家.1622年4月5日生于托斯卡纳大区佛罗伦萨:1703年9月22日卒于佛罗伦萨. 这是一个圆柱与一个球相交而生成的曲线. #http://w ...