ffmpeg Win8移植记(二)
接着上回说,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/
接着说说编译过程
- 把这些文件覆盖到 ffmpeg-2.1
- 用管理员运行VS2013 ARM的console,然后用这个console运行msys
- 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移植记(二)的更多相关文章
- ffmpeg Win8移植记(一)
最近和同事一起合作,移植ffmepg到Win8平台上. Windows Store 要求3个架构X86 X64 ARM, 我们主要做的就是X86和ARM的平台, X86的平台移植的文章已经很多了.我推 ...
- FFMPEG内存操作(二)从内存中读取数及数据格式的转换
相关博客列表: FFMPEG内存操作(一) avio_reading.c 回调读取数据到内存解析 FFMPEG内存操作(二)从内存中读取数及数据格式的转换 FFmpeg内存操作(三)内存转码器 在雷神 ...
- u-boot 移植(二)创建新平台的板级支持
u-boot 移植(二)创建新平台的板级支持 soc:s3c2440 board:jz2440 uboot:u-boot-2016.11 toolchain:gcc-linaro-7.4.1-2019 ...
- ffmpeg之移植到ARM
移植方法分为两种:第一种手工移植,第二种buildroot移植. 第一种手工移植: 优点:灵活性高 缺点:重复工作多 一.配置 ./configure --enable-memalign-hack - ...
- FFmpeg 结构体学习(二): AVStream 分析
在上文FFmpeg 结构体学习(一): AVFormatContext 分析我们学习了AVFormatContext结构体的相关内容.本文,我们将讲述一下AVStream. AVStream是存储每一 ...
- linux4.10.8 内核移植(二)---初步裁剪、分区修改和文件系统
一.初步裁剪 在内核根目录下 执行: make menuconfig 1.1 system type裁剪 选择 SAMSUNG S3C24XX SoCs Support 进入其中,这里是配置我们的单板 ...
- opencv移植(二)
原文:https://blog.csdn.net/Guet_Kite/article/details/78667175?utm_source=copy 版权声明:本文为博主原创文章,转载请附上博文链接 ...
- h5 录音 自动生成proto Js语句 UglifyJS-- 对你的js做了什么 【原码笔记】-- protobuf.js 与 Long.js 【微信开发】-- 发送模板消息 能编程与会编程 vue2入坑随记(二) -- 自定义动态组件 微信上传图片
得益于前辈的分享,做了一个h5录音的demo.效果图如下: 点击开始录音会先弹出确认框: 首次确认允许后,再次录音不需要再确认,但如果用户点击禁止,则无法录音: 点击发送 将录音内容发送到对话框中.点 ...
- FFmpeg 参数详解(二)
https://blog.csdn.net/yizhizouxiaqu/article/details/52233673 5.参数选项 如果没有特殊声明,所有的数字参数都以一个字符串代表数字的形式作为 ...
随机推荐
- 【树上主席树】BZOJ2588-Count on a tree
[题目大意] 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastans和v这两个节点间第K小的点权.其中lastans是上一个询问的答案,初始为0,即第 ...
- 如何使用DotNet 2.0中的应用程序配置 Settings.settings
对于桌面应用程序,常常会需要记录一些用户配置信息,早期的做法一般是使用读写INI文件的办法. 对于.NET应用程序,并没有提供直接操作INI文件的类,需要调用Win32API,具体办法可以参考: ...
- lwIP Memory Management
http://lwip.wikia.com/wiki/Lwipopts.h Memory management (RAM usage) /** * MEM_LIBC_MALLOC==1: Use ma ...
- 富文本编辑器、日期选择器、软件天堂、防止XSS攻击、字体icon、转pdf
[超好用的日期选择器] Layui:http://www.layui.com/laydate/ 备注:日期选择器,用过很多很多,自己也写过一些:相信这个简单而又不简单的选择器,能够给你多些美好的时光 ...
- N个富文本编辑器/基于Web的HTML编辑器
转自:http://www.cnblogs.com/lingyuan/archive/2010/11/15/1877447.html 基于WEB的HTML 编辑器,WYSIWYG所见即所得的编辑器,或 ...
- 获取音视频文件AVMetadata数据
获取音视频文件AVMetadata数据 问题来源: http://stackoverflow.com/questions/16318821/extracting-mp3-album-artwork-i ...
- 2013年,移动App设计的13大精髓
摘要:在 过去的一年里,移动成主流也让众多的移动应用如雨后春笋般层出不穷,在众多开发者从中获利的同时竞争也愈演愈烈,如何才能保证自己立于不败之地?用户是上 帝,一切还得从应用说起.本文总结了新一年里A ...
- faked 一个用于 mock 后端 API 的轻量工具
一.简介 faked 是一个在前端开发中用于 mock 服务端接口的模块,轻量简单,无需要在本地启动 Server 也无需其它更多的资源,仅在浏览器中完成「请求拉截」,配合完整的「路由系统」轻而易举的 ...
- HTML学习要点
目标 掌握HTML基本语法,了解HTML Document结构,能熟练使用HTML Element对象. 要点 基本概念:什么是HTML.HTML标签? 熟悉常用的HTML标签含义以及应用场合. ht ...
- iOS:ASIHttpRequest虽不更新,但仍值得详细了解
一.使用ASIHTTPRequest可以很方便的进行一下操作:同步/异步方式下载数据,定义下载队列,让队列中的任务按指定的并发数来下载(队列下载必须是异步的),提交表单,文件上传,处理cookie,设 ...