VS2005 VS2010 编译 Media Player Classic

最近研究播放器的源码,发现要配置的东西好多,首先是DirectX9.0b SDK,其次要一次编译射手播放器的Samples的工程生成lib库,以下是我在网上找到的可用的步骤:

1. 安装DirectX SDK

DirectX SDK开发包 在opencv的CVCAM模块中有重要作用

 

第一步 下载directX SDK 9.0b 大约200MB 注意要下9.0b 而不是9.0C哈

地址如下

http://down.gougou.com/down?cid=BEB35A9E0D3DA62C8DB04E1B62AFF22FDC2B8A34

第二步

安装 C:\DXSDK

第三步

在文件夹C:\DXSDK\Samples\C++\DirectShow\BaseClasses中找到BaseClasses.dsw

第四步

在VC6.0下运行在组建|批组建(build|batch)下选中debug 和release 复选框 然后选择(全部重建)rebuild all 即可生成

库文件 库文件有两个 一个是在C:\DXSDK\Samples\C++\DirectShow\BaseClasses\debug 中的strmbasd.lib  ;另一个是在C:\DXSDK\Samples\C++\DirectShow\BaseClasses\Release 中的STRMBASE.lib 将这两个文件复制到C:\DXSDK\lib中

第五步

将DirectX SDK库的路径和头文件加入到VC6.0的路径设置里。Tools|Options 菜单Directions标签,在showdirectories for

下拉菜单下列表中选择Include files

在其中加入

C:\DXSDK\Include

C:\DXSDK\Samples\C++\Common\Include

C:\DXSDK\Samples\C++\DirectShow\BaseClasses

第六步

Tools|Options 菜单Directions标签,在showdirectories for 下拉菜单下列表中选择library files

添加路径C:\DXSDK\lib

2. 开发环境搭建

也就是包含一下刚刚提到的SDK目录,下载安装所需SDK,由于源代码的文档中提到

“you may need to add "Debug Unicode" and "Release Unicode" configs to the project file of the directshow baseclasses”所以需要先编译DirectShow中的BaseClasses程序。

编译时需要在VS2005的包含文件里添加

X:\DXSDK\Include

X:\DXSDK\Samples\C++\DirectShow\BaseClasses

步骤:工具=>选项=>项目和解决方案=>VC++目录=>包含文件

因为BaseClasses代码中都是用<>包含的头,所以我把本身的路径加到了系统中。

编译BaseClasses时大概会发生三类错误:

1. 提示POINTER_64未定义

原因:这是由于PlatformSDK和DirectXSDK中的同名头文件basetsd.h冲突造成的,PlatformSDK中的定义了POINTER_64而DirectXSDK没有定义却默认先编译,导致winnt.h中找不到POINTER_64。

解决办法:在刚提到的包含文件中确保系统文件在上边,然后

右键=>工程=>属性=>C/C++=>常规中清空附加包含目录(因为会优先编译这里的路径)。

2. 返回值默认不为int

原因:VS2005相对于VS2003和VC6编译相对严格,函数无返回值不能默认为int

解决方法:将提示错误的operator=(LONG);加返回值int,因为我没找到此重载的实现,返回什么无所谓了。或者右键=>工程=>属性=>C/C++=>命令行中附加选项添加/wd4430使其默认返回int

3. 未定义的局部变量

原因:也是由于VS2005之前版本在for中定义的变量看做是for外定义可以拿到循环以外使用,而VS2005不可以。

解决方法:将其报错地方的定义,拿到for外定义。或者右键=>工程=>属性=>C/C++=>语言中的强制for循环范围中的一致性选否。还有一处static变量加上DWORD定义就可以了。

这样基本就可以编译通过了。

然后将Debug Unicode 和 Release Unicode目录包含到系统中。

步骤:工具=>选项=>项目和解决方案=>VC++目录=>包含库

然后还需要包含几个文件和库,具体如下图





为了以后方便DirectShow的开发我把可能用到的都加在了里边。

 

 

3. 编译Media Player Classic

1. 编译顺序

  HowToCompile中提到要按照一定顺序编译才可以成功。

  而且在调试阶段我统一以Debug Unicode形式编译。

  顺序如下:

  1. deccs

  2. dsutil

  3. ui (run \lib\ui.bat to merge them)

  4. subpic

  5. subtitles

  6. filters (for mpc only build those configurations which output a lib, the rest outputs stand-   alone filters)

  7. apps\mplayerc

 

2. 编译时遇到的问题和解决方法

  按照编译顺序一一解决

  ① 编译deccs通过。在lib目录里生成decssDU.lib。

 

  ② 编译dsutil通过。在lib目录里生成dsutilDU.lib。

 

  ③ 编译ui通过。在lib目录里声称sizecbarDU.lib、ResizableLibDU.lib、CmdUIDU.lib、   TreePropSheetDU.lib。

 

  ④ 编译subpic通过。在lib目录里生成subpicDU.lib。

 

  ⑤ 编译 subtitles出现好多错误。查看源代码发现字符数组定义有问题,缺少 ' 。

  解决方法:在CCDecoder.cpp中第127行定义的static WCHAR charmap[0x60]把其初始化   中的?都补上右侧的 ' 。通过之后在lib目录里生成libssfDU.lib和subtitlesDU.lib。

 

  ⑥ 编译filters(Debug Unicode Lib形式) 失败。好多提示无法打开文件strmbaseDU.lib。还有许多关于Ap4文件没找到的错误。

解决方法:不知道为什么最新下载的MPC源代码会缺少以前的几个项目如图:




strmbaseDU.lib就是以前BaseClasses生成的,不过没关系这个应该和刚刚编译DirectShow中的BaseClasses是同样的,刚刚已经包含了Debug Unicode只不过那个生成文件名为strmbasd.lib,只要复制一份strmbaseDU.lib就可以了。其他版本的编译同理。

AP4文件那个需要把

X:\guliverkli\src\filters\parser\mp4splitter\AP4\Update\v0.6.3\Bento4_0.6.3-001.7z解压后把

Source文件夹拷贝到X:\guliverkli\src\filters\parser\mp4splitter\AP4\ 目录下。再用

X:\guliverkli\src\filters\parser\mp4splitter\AP4\Update\v0.6.3\Source文件夹去覆盖更新一下。

继续编译,FLVSplitter.h中出现两个错误提示找不到VP62.h和VP62.cpp。进入报错代码,注释着//comment this out if you don't have VP62.cpp/h,所以将此行注释掉就可以了,并在项目文件列表中将VP62.h和VP62.cpp从项目中移除。重新编译这个项目,通过。在lib目录中生成FLVSplitterDU.lib、TreePropSheetDU.lib、MP4SplitterDU.lib等等多个lib文件。

 

  ⑦编译mplayerc出现三个错误。一个是SubmitNotPlayFileDlg.cpp未找到,另两个是错误D3D9b_SDK_VERSION和MixerPref9_RenderTargetYUV未声明的标识符。

解决方法:找到mpayerc项目中的SubmitNotPlayFileDlg.cpp和SubmitNotPlayFileDlg.h从该项目移除。然后到vmr9.h中找到enum __MIDL___MIDL_itf_vmr9_0012_0001这个枚举在最后添加MixerPref9_RenderTargetYUV = 0x00002000。

最后在d3d9.h中加入#define D3D9b_SDK_VERSION 32  (常量有可能不准确)。

继续编译,提示无法打开文件RadGtSplitterDU.lib,由于这个项目已经没有了,所以去连接器中把包含去掉。步骤:右键mplayerc项目 工程=>属性=>连接器=>输入,在附加依赖项中把RadGtSplitterDU.lib去掉。

继续编译,成功。Mplayerc下的Debug Unicode目录会生成mplayerc.exe。

运行,会出现以下图示,到此Media Player Classic编译成功。

VS2005 VS2010 编译 Media Player Classic_第1张图片

你可能感兴趣的:(c,Build,include,library,tools,2010)