所有想学习ffmpeg的网友有福了,大名鼎鼎的ffmpeg,移植到Windows的VC6版本全部开源,编译环境为VC6+SP5+VCPP5。别忘记了顶贴哦。

移植ffmpeg到windows,主要的修改是ffmpeg中VC6不支持C99语法,简单移植步骤如下:

1:首先装好Linux、VMware和SDL,配置好smb,在Linux下编译通过,验证能正确的Run。

2:把Linux下相应目录的所有文件通过smb拖到Windows,以后的修改移植都在Windows下进行。

3:对照所有同名的.c文件和.o文件,如果有.c文件没有对应的同名.o文件,说明此.c文件没有编译,是多余的,可直接删除。不过我的习惯是在此文件后加.old后缀来标示,这类文件有几十个。注意有几个.c文件是被include在其他.c文件中,因此没有.o文件,不可删除,我的习惯是把这类文件加.inc后缀,并且修改相应include的文件名。这类文件共计有 jpeg_ls.c.inc,mdec.c.inc,motion_est_template.c.inc,svq3.c.inc和wmv2.c.inc。

4:修改config.h文件,关闭掉MMX/SSE2等汇编加速开关。定义CONFIG_WIN32标示目标系统为WIN32。

5:删掉目录下所有Linux编译生成的中间文件,包括.o文件,.d文件,还有Linux下的可执行文件。 如果怕删错了,就做好备份。

6:现在用VC6建一个工程文件,把所有文件的.c和.h文件加入到工程中,不包括ffmpeg.c/ffserver.c文件,不包括改了后缀名的.old文件和.inc文件。

注意在libavcodec和libavformat目录下有些同名的.c文件,为区别同名.c文件,我的习惯是libavcodec目录下的文件名加_codec,libavformat目录下的文件名加_format。

7:为避免思维过多的切换,一次只处理一个方面的内容。首先搜查所有的AVCodec,对照.h文件中的定义改C99语法,通常是填一些NULL或0之类的值,接着搜查并处理所有的AVInputFormat,最后搜查并处理所有的AVOutputFormat。

8:搜查并处理所有AVRational语法。

9:至此,基本上主要的修改已经完成,剩下的主要有 动态数组和一些数组初始化,函数实参初始化等。

10:一维的动态数组比较好改,多维的动态数组比较困难,但是多维的动态数组多半用于编码,如果只要解码可以简单的注释掉。

11:数组初始化和函数实参初始化只需要多加一个临时变量,很简单的修改。

12:有些.h文件在VC6中找不到,有些可以从Linux中拷贝,也可以自己简单定义。最后编译修改.c文件的时候,一个一个的编译,一个一个的修改,没必要全部编译。

最后祝大家好运,移植顺利。开源的ffmpeg 是 51.8.0的版本,我大约修改了5天左右。

http://files.cnblogs.com/mcodec/ffmpeg.51.8_vc6.rar

from:http://www.cnblogs.com/mcodec/articles/1659671.html

移植ffmpeg到VC环境心得的更多相关文章

  1. 【应用笔记】【AN003】VC++环境下基于以太网的4-20mA电流采集

    简介 4-20mA电流环具有广泛的应用前景,在许多行业中都发挥着重要作用.本文主要介绍了以太网接口的4-20mA电流采集模块在VC++环境下进行温度采集,实现WINDOWS平台对数据的采集.分析及显示 ...

  2. 安装软件配置VC++环境时常出现的问题--Error 1935.安装程序集

    装很多软件是都要配置VC++环境的,但由于系统注册表限制,很多时候软件安装过程中会报如下错误 安装 vc++2005 运行库 Error 1935.安装程序集 Microsoft.vc80.atl,t ...

  3. VC环境下编译OpenSSL(仅仅是个示例,网上还有许多相关文章)

    VC环境OpenSSL安装以及编程过程 SSL就是Secure Sockets Layer,是一种安全套接字协议,详情请参考链接中的介绍. 配置过程中需要生成一些mak文件,这些生成代码用perl脚本 ...

  4. VC++环境下单文档SDI与OpenGL多视图分割窗口的实现-类似3DMAX的主界面

    本文主要讲述如何在VC++环境下实现单文档SDI与OpenGL多视图分割窗口,最终的界面类似3DMAX的主界面.首先给出我实现的效果图: 整个实现过程网络上有很多零散的博文,请各位自行搜索,在基于对话 ...

  5. 检测客户pc电脑端VC++环境并安装

    CefSharp 是一个非常不错的cef封装.但它依赖于VC++环境. 具体如下: Branch CEF Version VC++ Version .Net Version Status master ...

  6. 关于禅道提示未安装VC++环境的问题(做个记录)

    明明安装了VC++环境,总是提示未安装,这个问题有可能是你的mysql或其他服务开启影响的,关闭服务就可以了! 我这边是这个问题,把mysql和其他一些服务停止就好了.

  7. Arm-Linux 移植 FFMPEG库 + x264

      背景: ffmpeg 中带有264的解码,没有编码,需要添加x264.libx264是一个自由的H.264编码库,是x264项目的一部分,使用广泛,ffmpeg的H.264实现就是用的libx26 ...

  8. Ubuntu 移植 ffmpeg + x264

    背景 直接编译移植的ffmpeg是与 arm-linux 下类似的. 详情参考: arm linux 移植 FFMPEG库 + x264 host平台 :Ubuntu 16.04 x264 :2017 ...

  9. android 移植ffmpeg后so库的使用

    今天折腾了一天,可算是有所收获,成功的用jni调用了libffmpeg中的一个方法-----avcodec_version(),至于avcodec_version()是干什么用的我不大清楚,应该是获取 ...

随机推荐

  1. zepto.js介绍(持续更新)

    前言: zepto是一个简化版的jQuery,主要针对移动端开发. 简化了jQuery里很多的浏览器兼容性代码,jQuery的很多方法都被拿掉了(eg:slideUp). WP设备兼容性很差. 官方链 ...

  2. 第1章 软件测试基本概念(Week1,3月3日)

    一.对软件的认识 1. 什么是软件 2. 软件的分类 3. 软件开发的生命周期模型 (1)瀑布模型 (2)Scrum 其实对用瀑布模型这种臃肿不堪.要求严格.而无法适应软件开发周期变化的开发模型,渐渐 ...

  3. React.js学习

    React.js学习之环境搭建 1 工欲善其事必先利其器:前端开发工具 1.1 WebStorm和Sublime Text Sublime Text:作为代码编辑器,Sublime Text的优点如下 ...

  4. git add --all 为啥不能添加空文件夹,这样设计的初衷是

    git add --all 为啥不能添加空文件夹,这样设计的初衷是? 好多项目还得弄个假文件在空文件夹里面占位 这个算设计失误吧,见 https://git.wiki.kernel.org/index ...

  5. 安全威胁无孔不入:基于Linux系统的病毒(转)

    虽然在Linux里传播的病毒不多,但也是存在一些.我从一些安全网站搜集了一些资料. 1.病毒名称: Linux.Slapper.Worm 类别: 蠕虫 病毒资料: 感染系统:Linux 不受影响系统: ...

  6. 立波 iphone3gs越狱教程:成功把iphone3gs手机升级成ios6.1.3系统,完美越狱,解决no service和耗电量大的问题

    前几天,老婆使用的iphone3gs摔地了,把手机里的连接电源的那个神马线给搞坏了,结果花了200多块大洋修好了: 修好后,老婆抱怨道:5年了,这手机好多软件都装不上,说手机版本号太低了, 我就说凑合 ...

  7. C#拖曳控件加载,bll报错问题

    C#拖曳控件加载,bll报错问题,加载时实例如化bll时加上一个判断 if (!(GetService(typeof(IDesignerHost)) != null            || Sys ...

  8. 在webform中调用JS的技巧

    一,执行删除操作,点击按钮时弹出对话框询问是否确认删除,点击确定,删除并在删除完成后弹出删除成功:点击取消不删除 1.在aspx源 代码中加入JavaScript代码 <script langu ...

  9. 《学习opencv》笔记——矩阵和图像操作——cvSetIdentity,cvSolve,cvSplit,cvSub,cvSubS and cvSubRS

    矩阵和图像的操作 (1)cvSetIdentity函数 其结构 void cvSetIdentity(//将矩阵行与列相等的元素置为1.其余元素置为0 CvArr* arr//目标矩阵 ); 实例代码 ...

  10. 【OpenCV】漫水填充

    漫水填充:也就是用一定颜色填充联通区域,通过设置可连通像素的上下限以及连通方式来达到不同的填充效果;漫水填充经常被用来标记或分离图像的一部分以便对其进行进一步处理或分析,也可以用来从输入图像获取掩码区 ...