用Visual C++ 6.0编译xvid

0.xvid简介
Xvid(旧称为XviD)是一个开放源代码的MPEG-4视频编解码器,它是基于OpenDivX而编写的。
Xvid的主要竞争对手是DivX。但Xvid是开放源代码的,而DivX则只有免费(不是自由)的版本和商用版本。
详见百度百科:http://baike.baidu.com/view/30246.htm?fr=ala0_1
 
1.下载xvid源码
官方网站:http://www.xvid.org/
目前最新版本是Xvid 1.2.2 stable release(今天:2010年4月24日)
 
2.编译环境的设置
 
2.1 下载安装nasm汇编器(因为xvid的部分程序是用汇编写的)
下载地址:http://sourceforge.net/projects/nasm/
最新版本是nasm-2.07-installer.exe(今天:2010年4月24日)
这里将其安装在D:/NASM下
 
2.2 安装新版的Windows SDK(编译)
这里安装的是Microsoft Platform SDK for Windows XP SP2
下载地址:http://www.microsoft.com/msdownload/platformsdk/sdkupdate/XPSP2FULLInstall.htm
 
2.3 安装DirectX SDK(包括DirectShow SDK)
参见《 DirectShow.1 最简单的DirectShow应用程序 — 播放视频》
 
2.4 设置Visual C++ 6.0
 
a.Include files(添加在最前面)
D:/DXSDK/Include
D:/DXSDK/Samples/C++/DirectShow/BaseClasses
D:/Program Files/Microsoft Platform SDK for Windows XP SP2/Include
 
b.Library files(添加在最前面)
D:/DXSDK/Lib
D:/DXSDK/Samples/C++/DirectShow/BaseClasses/lib
 
c.Executable files(最后面)
D:/NASM
 
3.开始编译
 
3.1 几个VC++的project分别是
a.xvidcore-1.2.2/xvidcore/build/win32/xvidcore.dsw
  包括:
    libxvidcore.dsp
    libxvidcore_static.dsp
    xvid_bench.dsp
    xvid_decraw.dsp
    xvid_decraw_static.dsp
    xvid_encraw.dsp
    xvid_encraw_static.dsp
b.xvidcore-1.2.2/xvidcore/dshow/dshow.dsp
c.xvidcore-1.2.2/xvidcore/vfw/vfw.dsp
 
依次编译他们即可。
 
3.2 遇到错误的处理方法
 
a.提示xvidcore-1.2.2/xvidcore/src/plugins/plugin_2pass2.c(497) : error C2520: conversion from unsigned __int64 to double not implemented, use signed __int64
 
修改如下文件:
xvidcore-1.2.2/xvidcore/src/portab.h
行57:# define uint64_t unsigned __int64改为
# define uint64_t  __int64
 
b.提示xvidcore-1.2.2/xvidcore/vfw/src/status.c(246) : error C2520: conversion from unsigned __int64 to double not implemented, use signed __int64
修改如下文件:
xvidcore-1.2.2/xvidcore/vfw/src/status.h
行9:# define uint64_t unsigned __int64改为
# define uint64_t __int64

4.备注
调用压缩功能时会显示一个状态窗口,要让它不显示的话,需要在编译vfw工程时,修改
xvidcore-1.2.2/xvidcore/vfw/src/config.c的297行为:
{"display_status", &reg.display_status, 0},
 

你可能感兴趣的:(C++,windows,汇编,Microsoft,XP,2010)