在vs2008+Vista中DirectShow的使用

最近想用OpenCV库进行视频处理,但十分不幸的是新买的笔记本装的是Vista,对网络摄像机只能用DirectShow*方式控制,而不能用在XP里还能使用的vfw方式,而大多数OpenCV的例程都用vfw方式实现的,得自己去转变成 DirectShow的方式。当然了,DirectShow 也将要被Media Foundationt淘汰了。但分析一下,在XP/ Vista/ Windows7 时代还是会被保留的。

DirectShow在DirectX9.0b之前都包括在这个库中,在DX9.0c开始,则被独立成库,要另外安装**。(注,在XP(sp2)中默认安装了DX9.0c而Vista默认安装了DX10。)后来MS又把DirectShow放入了WindowsSDK中。在vs2008 中的 WinSDK6.0a 已经包含了DirectShow,但在vs2005中的WinSDK则没有。

由于懒得重装XP系统,所以就直接给本本装了个vs2008,尝试使用DirectShow。在http://www.opencv.org.cn/index.php/%E4%BD%BF%E7%94%A8DirectShow%E9%87%87%E9%9B%86%E5%9B%BE%E5%83%8F 中下载了个例程,解压,打开工程文件,F5直接编译,接着~~~~

碰到了经典的 error C2146: syntax error : missing ';' before identifier 'PVOID64' 错误。上网查了好久,终于明白就是库连接有问题,找不到相应的.h文件,解决方法就是装DX(和DS),和改头文件连接路径。看了看,项目的目录,发现,在Debug目录下已经有个叫DirectShow的目录,里面已经包含了相关的头文件和库文件了。而vs2008已经把WinSDK安装好了,就是说DS也已经安装好了。但是由于原配的DirectShow目录中的文件是针对DX9的DS,而实际Vista中安装的是DX10和WinSDK6.0a,所以编译出错。
因此,在Project->Settings->Settings for:(All configurations)的C/C++和Link中,把所有的DirectShow/Include,变成 $(FrameworkSDKDir)Include;把所有的DirectShow/Lib,变成 $(FrameworkSDKDir)Lib。
改动的有:
...C/C++->Common->Additional include directories
...Link->Common->Additional library directories

检查编译命令,看看是否已经包括新的目录。

F5,再次编译。

还是告诉在.../DirectShow/Include/dxtrans.h 头文件中,不能打开d3d.h。在次看看d3d.h 在啊,但认真看看只是在原配的DirectShow目录中,而新的WinSDK6.0a没有,那这么办???
咦~~~!怎么还是在原来的DirectShow目录找dxtrans.h,看看文件CameraDS.h:
#include <atlbase.h>
#include "DirectShow/Include/qedit.h"
#include "DirectShow/Include/dshow.h"
#include <windows.h>
#include <cxcore.h>

啊,得把引用 "DirectShow/Include/qedit.h" 改成 <qedit.h> ,把引用 "DirectShow/Include/dshow.h" 改成 <dshow.h>。 存盘后,编译,再次出现错误:

1>CameraDS.cpp
1>c:/program files/microsoft sdks/windows/v6.0a/include/qedit.h(498) : fatal error C1083: File (Include) can not open: "dxtrans.h": No such file or directory

一查看,没在WinSDK的目录上找到dxtrans.h,上网一查,新的DS不在包含这个文件。上网找到了解决方案。
http://www.cnblogs.com/pcmax/archive/2008/11/22/1338989.html
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2617687&SiteID=1

现在采用的是第二种方法:

在调用 包含qedit.h 的命令前加入四句:
#define __IDxtCompositor_INTERFACE_DEFINED__ 再修改qedit.h 中引用 dxtrans.h 的部分,要求注释掉
#include "oaidl.h"
#include "ocidl.h"
//#include "dxtrans.h"
#include "amstream.h"

再编译运行,成功!! 选择设置摄像头,视频显示,点击q键,退出。

参考:

*DirectShow: http://msdn.microsoft.com/en-us/library/ms783323(VS.85).aspx
**DirectX(Feb 2005): http://dev.csdn.net/article/62/62941.shtm

#define __IDxtAlphaSetter_INTERFACE_DEFINED__

#define __IDxtJpeg_INTERFACE_DEFINED__

#define __IDxtKey_INTERFACE_DEFINED__

#include <qedit.h>

(0)

相关推荐

  • Vista中所有的.exe可执行程序都无法运行的解决方法

    前几天,论坛有用户反映Vista中所有的.exe可执行程序都无法运行了,提示”文件没有与之关联的程序来执行“。即使在运行窗口中输入要运行的程序也显示“不支持的接口”。初步估计是被病毒改了exe文件的关 ...

  • Office 2007在Windows Vista中出现的反常字体问题的解决办法

    有时候,在Windows Vista中使用Office2007/2003打开原来写的文章,很多字体不能正常显示了:仿宋和楷体的文字莫名其妙地变动,文章行距增大,而且排版也出现了错误,本来在本页显示的文 ...

  • win7/vista中没有立体声混音选项(声卡没有或不支持混音驱动导致)

    问:Win7/vista中无法找到立体声混音选项怎么办? 答:无法找到立体声混音选项,一般是声卡没有装立体声混音驱动或电脑厂商不支持立体声混音驱动。 解决方法如下: 1、下载驱动精灵,更新最新的声卡驱 ...

  • 加快Vista中多线程下载速度

    在Windows Vista中,微软为TCP/IP引入了名为“Auto Tuning”的新特性,从理论上说,“Auto Tuning”能够根据网络应用情况调整、优化,从而提高网络传输速率。在Windo ...

  • 设置和使用Windows Vista中的Windows会议室

    本文将带你浏览怎样设置并使用Windows 会议室 Windows 会议室是Windows Vista中的一个新特性,它能帮用户轻松地为共享文件及在线协作创建安全会话。 在本文中,我也将向管理员讲解怎 ...

  • 关于要不要关闭Vista中的IPv6功能的问题

    事实是,IPv6在Vista中是默认启用的。由于几乎没有人真正使用IPv6,这就提出了这样一个问题:为什么不关闭IPv6呢? 为什么不关闭IPv6? 反对和支持关闭IPv6功能的人实际上都有充分的理由 ...

  • Win 7和Vista中USB驱动器RAM

    使用微软的ReadyBoost技术,我们可以增加我们的电脑的主记忆体,快闪记忆体(USB存储器)转换为虚拟主内存。此功能可在Windows Vista和Windows 7。 使用这个功能,我们可以加速 ...

  • Win7/vista中无法找到立体声混音选项怎么办?

    问:Win7/vista中无法找到立体声混音选项怎么办? 答:无法找到立体声混音选项,一般是声卡没有装立体声混音驱动或电脑厂商不支持立体声混音驱动。 解决方法如下: 1、下载驱动精灵,更新最新的声卡驱 ...

  • 解释在Windows Vista中为什么没有Thumb.db

    有不少网友问起 Thumb.db 是什么文件.有些对 Windows XP 等操作系统有所了解的朋友知道 Thumb.db 是干什么用的,但为什么在 Windows Vista 里面这个文件没有了.下 ...