posts - 12,  comments - 6,  trackbacks - 0

一 编译工具及环境

操作系统:Windows XP SP2、SP3

开发环境:Visual Studio 2005 Professional

版本控制工具:TortoiseSVN

说明:用来下载程序源代码,直接选检出,然后输入

https://guliverkli.svn.sourceforge.net/svnroot/guliverkli/trunk/guliverkli/

这个地址(源代码地址)把代码检出到本地。

SDK:

1. DirectX 9 SDK(需要DirectShow)

说明:DirectX SDK Summer 2004之后DirectShow不被整合到DirectX SDK中而是以Extras

的形式发布,它的最后一个版本为DirectX SDK Extras 2005,2 版。之后它被整合到Windows SDK中。而VS2005的WinSDK中不包含DirectShow。方便起见我下载的老版本DirectX 9.0b SDK。

地址:http://www.directshow.cn/SDK/DX9SDK.rar

2. Windows Media Format SDK 9

地址:http://download.microsoft.com/download/3/0/4/30451651-9e47-4313-89a3-5bb1db003c26/WMFormatSDK.exe

 

 

二 开发环境搭建

也就是包含一下刚刚提到的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的开发我把可能用到的都加在了里边。

 

 

三 编译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编译成功。

posted on 2010-07-22 21:22 vic.MINg 阅读(1401) 评论(0)  编辑 收藏 引用 所属分类: Open Source

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理



<2010年7月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

常用链接

留言簿(1)

随笔分类(13)

随笔档案(12)

搜索

  •  

最新评论

阅读排行榜

评论排行榜