Xvid在Windows下的编译方法(VS2013)

来源:互联网 发布:sql用到表中的字段 编辑:程序博客网 时间:2024/05/01 05:46

   ###Date: 2017/3/31

   ###Author: SoaringLee


        时间过得真快,一晃就3月底了,离毕业也就3个月了。前段时间在大华实习的时候,主要是在学习Mpeg4解码库的编译维护的东西。后来通过对Mpeg4标准的深入学习,基本上了解了这个标准的基本内容。Mpeg4标准的核心就是基于对象的编码,但是由于对象提取技术一直没有进展,所以实际上Mpeg4实际上和之前的Mpeg2,H.263一样仍然是对矩形帧进行编码。现在实际使用的是Simple Profile(SP)和Advanced Simple Profile(ASP)这两个Profile。

     在学习和分析Mpeg4解码库源码的过程中,一直发现xvid这个词,于是去网上查了下,才知道,原来Xvid是开源的Mpeg4编解码器,于是打算学习一下这个库的相关内容。

    下面介绍一下Xvid在VS2013下编译的方法。

     (1)首先看一下xvidcore这个工程目录,其中包括了源码src,文档doc,编译文件夹build,还有2个文件夹不太清楚(dshow和vfw)。我们知道dshow和vfw是微软公司在 不同时期的音视频处理封装库,这两个文件夹中应该是对xvid的封装。

    (2)进入到buid——win32文件夹中,可以看到里面是VC6的工程,需要将其转换到VS2010。打开libxvidcore.sln,可以看到在这个解决方案下有3个工程,libxvidcore,xvid_encraw和xvid_decraw。

    libxvidcore这个工程是源码文件的工程;

    xvid_encraw是编码器demo工程,xvid_decraw是解码器demo工程。

    (3)现在对源码工程libxvidcore进行编译,会提示nasm不是定义的命令。因为在源码中存在汇编文件,需要汇编器nasm。nasm的下载可以从官网http://www.nasm.us/上下载,也可以从sourceforge上下载(http://sourceforge.net/projects/nasm)。下载后安装nasm后,将汇编器nasm.exe拷贝到VS2013的安装路径下的VC/bin目录中。这样这个问题就可以解决了。

   (4)再次对源码工程进行编译,编译成功了。此时生成的库文件为xvidcore.dll.a和xvidcore.dll。其中xvidcore.dll.a是动态库文件对应的静态库。为了生成xvidcore.lib,只需要将项目libxvidcore,属性-配置属性-高级-导入库中,将bin\xvidcore.dll.a修改为bin\xvidcore.lib。

   (5)接下来,编译编码器demo和解码器demo。

首先,需要将解码器demo属性中的附加依赖项进行修改:将xvidcore.dll.a修改为xvidcore.lib。然后将解码器工程xvid_decraw选为启动项目,编译运行,成功,得到xvid_decraw.exe。


编码器demo的编译过程同上,编译成功,得到xvid_encraw.exe


 至此,Xvid在VS2013下的编译就完成了。接下来就需要对Xvid的源码进行剖析了。

另外,由于我的实验室电脑上安装的是VS2015版本的,于是在VS2015上也进行了编译运行,但是编译xvid_encraw项目时出现一个bug:


从截图中可以看出,这是编译xvid_encraw.c后发生的链接错误,具体原因是SetRect和CoInitializeEx这两个函数不能解析。这两个函数是Windows中包含的,为什么不能解析还没有弄明白?

又因为这两个函数是用在设置AVI输出文件中的,对编译mpeg4编码器demo影响不大,因此可以通过关掉下面的宏来成功编译。

//#define XVID_AVI_INPUT
//#define XVID_AVI_OUTPUT

OK,现在可以在VS2015上成功编译了。


0 0