溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

在vs2008+Vista中DirectShow的用法

發(fā)布時(shí)間:2021-09-01 16:34:35 來源:億速云 閱讀:109 作者:chen 欄目:系統(tǒng)運(yùn)維

這篇文章主要講解了“在vs2008+Vista中DirectShow的用法”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“在vs2008+Vista中DirectShow的用法”吧!

最近想用OpenCV庫進(jìn)行視頻處理,但十分不幸的是新買的筆記本裝的是Vista,對(duì)網(wǎng)絡(luò)攝像機(jī)只能用DirectShow*方式控制,而不能用在XP里還能使用的vfw方式,而大多數(shù)OpenCV的例程都用vfw方式實(shí)現(xiàn)的,得自己去轉(zhuǎn)變成 DirectShow的方式。當(dāng)然了,DirectShow 也將要被Media Foundationt淘汰了。但分析一下,在XP/ Vista/ Windows7 時(shí)代還是會(huì)被保留的。

DirectShow在DirectX9.0b之前都包括在這個(gè)庫中,在DX9.0c開始,則被獨(dú)立成庫,要另外安裝**。(注,在XP(sp2)中默認(rèn)安裝了DX9.0c而Vista默認(rèn)安裝了DX10。)后來MS又把DirectShow放入了WindowsSDK中。在vs2008 中的 WinSDK6.0a 已經(jīng)包含了DirectShow,但在vs2005中的WinSDK則沒有。

由于懶得重裝XP系統(tǒng),所以就直接給本本裝了個(gè)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 中下載了個(gè)例程,解壓,打開工程文件,F(xiàn)5直接編譯,接著~~~~

碰到了經(jīng)典的 error C2146: syntax error : missing ';' before identifier 'PVOID64' 錯(cuò)誤。上網(wǎng)查了好久,終于明白就是庫連接有問題,找不到相應(yīng)的.h文件,解決方法就是裝DX(和DS),和改頭文件連接路徑??戳丝?,項(xiàng)目的目錄,發(fā)現(xiàn),在Debug目錄下已經(jīng)有個(gè)叫DirectShow的目錄,里面已經(jīng)包含了相關(guān)的頭文件和庫文件了。而vs2008已經(jīng)把WinSDK安裝好了,就是說DS也已經(jīng)安裝好了。但是由于原配的DirectShow目錄中的文件是針對(duì)DX9的DS,而實(shí)際Vista中安裝的是DX10和WinSDK6.0a,所以編譯出錯(cuò)。
因此,在Project->Settings->Settings for:(All configurations)的C/C++和Link中,把所有的DirectShow/Include,變成 $(FrameworkSDKDir)Include;把所有的DirectShow/Lib,變成 $(FrameworkSDKDir)Lib。
改動(dòng)的有:
...C/C++->Common->Additional include directories
...Link->Common->Additional library directories

檢查編譯命令,看看是否已經(jīng)包括新的目錄。

F5,再次編譯。

還是告訴在...\DirectShow\Include\dxtrans.h 頭文件中,不能打開d3d.h。在次看看d3d.h 在啊,但認(rèn)真看看只是在原配的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>。 存盤后,編譯,再次出現(xiàn)錯(cuò)誤:

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,上網(wǎng)一查,新的DS不在包含這個(gè)文件。上網(wǎng)找到了解決方案。
http://www.cnblogs.com/pcmax/archive/2008/11/22/1338989.html
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2617687&SiteID=1

現(xiàn)在采用的是第二種方法:

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

再編譯運(yùn)行,成功??! 選擇設(shè)置攝像頭,視頻顯示,點(diǎn)擊q鍵,退出。

感謝各位的閱讀,以上就是“在vs2008+Vista中DirectShow的用法”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)在vs2008+Vista中DirectShow的用法這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI