• 编译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如何在播放器里面一步一步用起来,我还要研究与探索。呵呵

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

  • 相关阅读:
    利用Python和webhook实现自动提交代码
    Python threading 单线程 timer重复调用函数
    Python requests 使用心得
    openresty实现接口签名安全认证
    使用jedis面临的非线程安全问题
    记一次线上升级openresty中kafka版本产生的多版本兼容问题
    mysql中走与不走索引的情况汇集(待全量实验)
    Elasticsearch深分页以及排序查询问题
    IO多路复用:Redis中经典的Reactor设计模式
    Netty在Dubbo中的使用过程源码分析
  • 原文地址:https://www.cnblogs.com/mr-nop/p/3226783.html
Copyright © 2020-2023  润新知