zoukankan      html  css  js  c++  java
  • 编译direct show 的filter项目

    最近搞windows编程,想学习一下direct show。编译了一下sdk里面的一个sample filter,做个笔记,记录一下。

    说来渐愧,vc也用了n久了,还没有自己动手建立一个正式的项目,都是在别人的项目里面增减东西,所以很多东西只能自己一步一步试探。

    学习filter本身可能不复杂,但是建立环境就非常恶心了,这里我写一点自己搭环境的过程,让需要的人可以少走点弯路。另外,一般需要建立这种工程的人,都是老程序员了,呵呵我这种新手,自然是没有机会弄,所以没弄过,我觉得也情有可原。哈哈。

    学习direct show,其实最基本的就是dxsdk sample里面baseclassed的学习。学好这个,才能进一步学习filter的编写。当前前提是你已经熟悉了多媒体编程的一些基本概念。

    废话少说,编译这些东西,出了一些问题,写一下解决这些问题的过程。

    编译环境vs2005

    1.编译baseclasses

    虽然sample里面已经提供好了工程项目,但是还是手痒想自己一步一步弄一下。

    首先先建立一个项目。文件->新建->项目

    选择如上图所示。

    然后在此解决方案上,添加项目。右键项目,添加新建项目,

    选择win32项目,

    项目属性选择如下图

    静态库,不要预编译头。不要mfc和atl.

    然后把dxsdk/sample/c++/directshow/baseclasses目录下面的.h与.cpp拷贝到自己的项目目录中。

    有一点要提醒一下。activex.ver与activex.rcv这两个,别忘记拷过来。而且要把这两个文件添加到头文件那里,不是资源也不是源文件。

    这时,按下f5

    好吧,出错了

    amextra.cpp(10) : fatal error C1083: 无法打开包括文件:“streams.h”

    找不到头文件,看看这东西在哪个目录下面,加进来。就在当前工作目录,所以

    右键属性,c/c++里面选常规,附加包含目录加个点号就好了。

    接着f5,编译一会,又出错了,这次是

    wxdebug.cpp(663) : error C2373: “DbgAssert”: 重定义;不同的类型修饰符

    wxutil.cpp(277) : error C2065: “COINIT_DISABLE_OLE1DDE”: 未声明的标识符

    这是工程属性不对,google了半天,查出答案了。

    第一个问题, 

    C/C++=>高级=》调用约定=》__stdcall (/Gz).

    该死的编译器,加上这些不规范的扩展,shit.

    第二个问题

    在预编译器定义上,加上_WIN32_DCOM这个宏。

    接着f5,发现编译通过了,o yes.呵呵。

    2.编译完了baseclasses,下面编译一个filter

    老规矩,在解决方案上右键,添加一个新项目。

    这次的工程属性依旧是win32项目,不过改成了dll项目,下面复选为空项目。

    这里选一个最简单的,DXSDKSamplesC++DirectShowFiltersDump就是他了,一看就知道是最入门的,没有功能的。

    把下面.h,.cpp,.def,.rc拷过来。这里要注意的是要把.rc文件,添加到源文件里面,而不是资源里面。

    f5编译,又出错了。

    dump.cpp(74) : fatal error C1083: 无法打开包括文件:“streams.h”

    又是该死的头文件。

    这次添加的路径改了,改成../base(我取的项目名叫base)

    再编译,又错

    dump.rc(13) : fatal error RC1015: cannot open include file 'activex.ver'.

    这个错,我查了n久,最后在msdn上找到答案了。这次的目录要添加下图的地方,shit.

    再编译,过了,不过出了一堆链接错误。

    因为我们还没有加依赖嘛,肯定会链接错误的。

    又是google大法,需要三个库,一个刚才自己编译出来的,另外两个就是platform sdk里面的了,不过这个sdk,vs2005安装时,就已经安装好了。不用管他

    在库依赖里面,加上../debug/baseclasses.lib strmiids.lib winmm.lib

    编译通过,o yes,我们可以看到自己的dll了。

    这个dll如何在播放器里面一步一步用起来,我还要研究与探索。呵呵

    剩下的事情就是仔细研究源代码了。

  • 相关阅读:
    78. Subsets
    93. Restore IP Addresses
    71. Simplify Path
    82. Remove Duplicates from Sorted List II
    95. Unique Binary Search Trees II
    96. Unique Binary Search Trees
    312. Burst Balloons
    程序员社交平台
    APP Store开发指南
    iOS框架搭建(MVC,自定义TabBar)--微博搭建为例
  • 原文地址:https://www.cnblogs.com/mr-nop/p/3226783.html
Copyright © 2011-2022 走看看