directshow安装

合集下载

DirectShow开发环境搭建(整理)

DirectShow开发环境搭建(整理)

DirectShow开发环境搭建(整理)directshow配置1. 下载安装 DirectX 9.0 SDK Update (February 2005) Extras。

2. 配置IDE环境中的include, lib路径 这步是为了以后更⽅便的做DSHOW开发,不⽤每次对每个⼯程都添加路径。

我的系统是32位win7+VS2010,需要到C:\Users\chef\AppData\Local\Microsoft\MSBuild\v4.0(chef是我的⽤户名)⽬录下修改er.props,这是⼀个XML⽂件,在节点IncludePath和LibraryPath分别添加上dshow sdk的include和lib路径就⾏了,不同路径间⽤分号隔离。

3. 编译baseclass 应该是对dshow的⼀个简单封装吧,据说⽤它开发⽐较⽅便。

到DirectX 9.0 SDK Update (February 2005) Extras\DirectShow\Samples\C++\DirectShow\BaseClasses下编译该⼯程。

貌似会出现⼀些for循环内定义变量的作⽤域、static定义变量省略了int类型等⼩问题,⼤家对照着错误提⽰修改⼀下就好了。

这⾥⽽外说⼀句,开源的东西拿过来⽤往往都会出现⼀些问题,这时不要⼼烦,不要急着到处问⼈,到处找⼈帮忙,应该积累看错误、改错误的经验,这也是初学者与有⼀定⼯作经验的程序员之间的⼀个显著区别吧。

4. 编译AMCap AMCap是⼀个通过摄像头采集视频并存成⽂件的⼯程,位置在DirectX 9.0 SDK Update (February 2005)Extras\DirectShow\Samples\C++\DirectShow\Capture\AMCap。

编译前先到项⽬属性的preprocessor definition中把WINVER、_WIN32_WINNT的值修改⼀下,这两个宏定义标志你使⽤的系统型号及版本, windows SDK中会根据这两个宏决定你是否能使⽤⼀些函数,我是改成0X0600了,之后应该就能成功编译了。

directshow配置总结

directshow配置总结

●dxtrans.h文件找不到(在qedit.h文件中包含dxtrans.h时出现的错误)solution:(1)这是VS2008里的在D:\Program Files\Microsoft Visual Studio 9.0搜索dxtrans.h复制到:\Program Files\Microsoft Visual Studio 9.0\VC\include(2) 或者在引用qedit.h 头文件的时候,加上这么几句:(此方法没有试验)#pragma include_alias( "dxtrans.h", "qedit.h" )#define __IDxtCompositor_INTERFACE_DEFINED__#define __IDxtAlphaSetter_INTERFACE_DEFINED__#define __IDxtJpeg_INTERFACE_DEFINED__#define __IDxtKey_INTERFACE_DEFINED__#include "Qedit.h"●error LNK2001: unresolved external symbol "void __stdcall FreeMediaType(struct _AMMediaType &)" (?FreeMe diaType@@YGXAAU_AMMediaType@@@Z)**.obj : error LNK2001: unresolved external symbol "void __stdcall FreeMediaType(struct_AMMediaType &)" (?FreeMediaType@@YGXAAU_AMMediaType@@@Z)**.obj : error LNK2001: unresolved external symbol "public: __thiscallCMediaType::~CMediaType(void)" (??1CMediaType@@QAE@XZ)**.obj : error LNK2001: unresolved external symbol "public: void __thiscallCMediaType::SetSubtype(struct _GUID const *)"(?SetSubtype@CMediaType@@QAEXPBU_GUID@@@Z)**.obj : error LNK2001: unresolved external symbol "public: void __thiscallCMediaType::SetType(struct _GUID const *)"(?SetType@CMediaType@@QAEXPBU_GUID@@@Z)**.obj : error LNK2001: unresolved external symbol "public: __thiscallCMediaType::CMediaType(void)" (??0CMediaType@@QAE@XZ)**.obj : error LNK2001: unresolved external symbol "int __stdcall lstrlenWInternal(unsigned short const *)" (?lstrlenWInternal@@YGHPBG@Z)编译DirectShow\Samples\C++\DirectShow\BaseClasses工程,并在自己的程序中链接生成的lib文件。

工业相机驱动安装操作指南

工业相机驱动安装操作指南
系统要求
ArtCam Measure 2.0 运行于 Microsoft Windows XP 或者更高版本,包括 Microsoft Vista, Microsoft Windows 7。软件使用 DirectX 加速图像显示,对于 Windows XP 以及更高的系统, DirectX 已随系统默认安装。
进行处理。
上海图星电子科技有限公司
3、颜色调整
第一种方法:在菜单区域的“图像处理”选项里,可点击“颜色调整”如下图所示:
操作说明:在整体颜色看起来若偏绿、偏红等情况时,我们需要对图像对进行还原,也就是 做白平衡。
这时可点击

,此时画面的颜色将变为最真实状态。在做完颜
色白平衡后,再需点击
’当图像的颜色显示正确之后,需选择“取消白平衡”
使用相机
ArtCam Measure 2.0 软件支持 SDK 模式的相机和 DS(DirectShow)模式的 USB 相机。软件 启动时自动检测系统中已连接的 USB 和 SATA 相机。如果检测到多个相机,可以将多个相机一 起播放。如果在软件启动之后再连接相机,可以通过菜单项“[相机]->[检测相机]”来重新检测 相机。
去除自动白平衡,否则帧率会降低。在上面的白平衡设置界面中,除了自动白平衡方法之外,
还可以手动调节颜色分量的强度。
至于,其它颜色调整功能,可根据用户需求进行调整。对于 DirectShow 模式的相机而言,只 有“灰度均衡法”自动白平衡可用,对于 SDK 模式的相机,可以在不同情况下选择不同的白 平衡模式。灰度均衡法适用面比较广,但是在某些极端情况下,容易造成颜色失真,例如当画 面中全是红色等。这种情况下,适用色温白平衡方法会得到好的效果。
上海图星电子科技有限公司

基于DirectShow视频及图片捕获软件的开发

基于DirectShow视频及图片捕获软件的开发

我们知道目前很多工业相机的图像数据采集都是基于DirectShow的,常见的有映美精等。

DirectShow是微软公司提供的一套在Windows平台上进行流媒体处理的开发包,与DirectX开发包一起发布。

DirectShow为多媒体流的捕捉和回放提供了强有力的支持。

运用DirectShow,我们可以很方便地从支持WDM驱动模型的采集卡上捕获数据,并且进行相应的后期处理乃至存储到文件中。

它广泛地支持各种媒体格式,包括Asf、Mpeg、Avi、Dv、Mp3、Wave等等,使得多媒体数据的回放变得轻而易举。

另外,DirectShow还集成了DirectX其它部分(比如DirectDraw、DirectSound)的技术,直接支持DVD的播放,视频的非线性编辑,以及与数字摄像机的数据交换。

更值得一提的是,DirectShow提供的是一种开放式的开发环境,我们可以根据自己的需要定制自己的组件。

笔者使用visual studio 2005 来开发了基于DirectShow的视频捕获软件,并用开发的软件对映美精相机进行了测试。

本软件不但可以实现对相机的视频捕获,而且还可以抓取图像帧。

软件运行时自动搜索所连接的相机,预览后可以对相机参数进行设置。

下面是软件的主界面。

预览视频后可以对视频格式和图像参数进行设置。

开始预览时,捕获的视频是黑白的,我们将颜色空间设置为UYVY即可捕获彩色视频。

下面是捕获的一帧图像,图像质量虽然没有映美精自带的软件效果好,但已经实现了所需各项基本功能,接下来的工作将会进一步提高软件性能。

另外我们还可以捕获视频,点击“捕获视频”按钮,输入要保持的文件名,注意要以.avi后缀结尾,点确定就开始捕获视频。

从我们开发的软件可以看到,映美精的相机能够很好的支持DirectShow的驱动,我们的软件对映美精相机的识别是如此的容易。

接下来我们将继续开发基于其它驱动的图像捕获软件,为最终实现在一个软件中识别各种相机而努力。

wince下用DirectShow播放音频和视频

wince下用DirectShow播放音频和视频

wince下用DirectShow播放音频和视频wince下用DirectShow播放音频和视频虽然网上关于wince下如何使用DirectShow播放多媒体文件的资料不多,但WinCE毕竟还属于windows,而桌面系统的DirectShow例子网上信手拈来,并且其中DirectShow的功能方法与之WinCE下差别不大,又本人实在没有信心比他们的轮子造得更为华丽,所以这篇文章就直接切入正题,不介绍DirectShow 的结构功能,直接来看看怎么用吧.(其实还是自己懒惰的原因大一些,恩,不过这个和本文的主题没多大关系:-)).为了方便代码的移植,所以我将DirectShow的操作封装成CMedia类,只要直接调用该类,就可以相当简便地调用DirectShow来播放多媒体文件了好,闲话至此,我们以具体代码看看是如何: //获取CMedia的实例CMedia *m_pMedia = CMedia::GetInstance();//设置播放的窗口m_pMedia->SetVideoWindow(hWnd);//打开媒体文件m_pMedia->Open(TEXT("A.AVI"));//播放m_pMedia->Play();...//播放结束后,调用Close释放资源m_pMedia->Open();没错,就是六行代码,就这么简单,可以顺利播放媒体文件.在这里要说一下的是,因为我们播放的是视频,需要有一个窗口显示,所以需要调用SetVideoWindow()函数来设置播放窗口.这个播放视频的窗口,可以是普通的窗口,也可以是Picture控件.当然咯,如果是播放音频文件,那么则完全可以无视这个函数.还有一个最值得注意的地方,当调用Open()成功之后,一定要调用Close()来释放资源,然后才能打开另一个媒体文件.否则,不释放的资源可能会导致很多莫名其妙的后果哦.等等,代码似乎还不完美,比如说,我想在文件播放之后再接着播放另外一个文件,那么我如何知道什么时候文件已经播放完毕了呢?这时候我们就需要请出SetNotifyWindow().该函数的作用是设置一个接受消息的窗口,当DirectShow有事件变更时,就会发送指定的消息到指定的窗口,原型如下:SetNotifyWindow(HWND hWnd, UINT wMsg,long lInstanceData)hWnd:接收消息的窗口句柄.wMsg:指定的自定义消息lInstanceData:消息的参数.那么,现在以接收一个视频播放结束事件的代码片段为例子: //自定义一个消息 #define WM_GRAPHNOTIFY (WM_USER + 13)//设置接收消息窗口和消息m_pMedia->SetVideoWindow(hWnd,WM_GRAPHNOTIFY,NULL);...//这个是消息循环函数LRESULT CMainWnd::WndProc(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam) ...{switch(wMsg)...{...case WM_GRAPHNOTIFY:...{LONG evCode,evParam1,evParam2;//获取此时的DirectShow事件if(m_pMedia->GetEvent(&evCode,&evParam1,&evParam2) == TRUE)...{if(evCode == EC_COMPLETE)...{MessageBox(NULL,TEXT("播放完毕"),TEXT(""),MB_OK);}}return 0;}}...}好了,知道播放完毕,就这么简单.恩,还很复杂..?呵呵,我觉得已经很简单了.文章的最后,让我们再来看看CMedia的其它几个有用的函数吧:CheckVisibility()描述:判断文件的种类当返回值为TRUE时,为视频文件;反之为只是音频文件.SetVolume(LONG lVolume, LONG lBalance)描述:设置音量.lVolume:设置音量的大小,范围为–10,000 到 0.lBalance:设置左右音量的均衡,范围是–10,000 到 10,000,默认是0.SetDisplayMode(DISPLAYMODE mode)描述:设置播放模式.DISP_FIT:按比例拉伸至视屏窗口.DISP_STRETCH:不按比例拉伸至视屏窗口.DISP_NATIVE:如果视频原本尺寸小于屏幕,则以原视频文件大小播放.否则,将和DISP_FIT相同 DISP_FULLSCREEN:全屏/**////////////////////////////////////////////////////////////////////////Media.h: interface for the CMedia class.////Version:// 1.2.0//Date:// 2007.05.08/**///////////////////////////////////////////////////////////////////////#ifndef MEDIA_H#define MEDIA_H#include <mmsystem.h>#include <streams.h>//--------------------------------------------------------------------//Macro define//The volume value#define MAX_VOLUME 0#define MIN_VOLUME -10000//The balance value#define MAX_BALANCE 10000#define MIN_BALANCE -10000//--------------------------------------------------------------------//Enum valueenum DISPLAYMODE...{//Fit to the play window size. How wide (height) the window is, how//is the move. Keep aspect ratio.DISP_FIT,//Stretch to the play window size. Don't keep the aspect ratio.DISP_STRETCH,//Full screen play.DISP_FULLSCREEN,//When the size of video is smaller than the play window, it displayes//as the video size. If it's bigger , it just like the DISP_FIT mode.DISP_NATIVE};//--------------------------------------------------------------------//The media file propertytypedef struct...{//The volume range is –10,000 to 0.//Divide by 100 to get equivalent decibel value (for example –10,000 = –100 dB).LONG lVolume;//The value from –10,000 to 10,000 indicating the stereo balance//As with the Volume property, units correspond to .01 decibels (multiplied by –1 when plBalance is a positive value).//For example, a value of 1000 indicates –10 dB on the right channel and –90 dB on the left channel.LONG lBalance;//Width of the videoLONG lWidth;//Height of the videoLONG lHeight;//Approximate bit rateLONG lBitRate;}MEDIAPROPERTY,*PMEDIAPROPERTY;//--------------------------------------------------------------------class CMedia...{public:BOOL GetEvent(LONG *plEvCode, LONG *plParam1, LONG *plParam2);BOOL SetNotifyWindow(HWND hWnd, UINT wMsg,long lInstanceData);BOOL SetVolume(LONG lVolume, LONG lBalance = 0);BOOL SetDisplayMode(DISPLAYMODE mode);BOOL GetMediaProperty(PMEDIAPROPERTY pOutProperty);static CMedia * GetInstance();void Close();BOOL CheckVisibility();void SetVideoWindow(HWND hWndVideo);BOOL Open(TCHAR * pszFileName);BOOL Stop();BOOL Pause();BOOL Play();virtual ~CMedia();protected:CMedia();// Collection of interfacesIGraphBuilder *m_pGB;IMediaControl *m_pMC;IMediaEventEx *m_pME;IVideoWindow *m_pVW;IBasicAudio *m_pBA;IBasicVideo *m_pBV;IMediaSeeking *m_pMS;TCHAR m_szFileName[MAX_PATH];HWND m_hWndVideo; //The window play videoHWND m_hWndNotify; //The window notifyBOOL m_bExitThrd;BOOL m_bThrdRunning;static CMedia * m_pInstance;DISPLAYMODE m_DispMode;};#endif //#ifndef MEDIA_H/**///////////////////////////////////////////////////////////////////////// Media.cpp: implementation of the CMedia class.///**///////////////////////////////////////////////////////////////////////#include "stdafx.h"#include "Media.h"//----------------------------------------------------------------------------------------------//Macro define//Default play mode#define DEFAULT_DISPLAY_MODE DISP_NATIVE//----------------------------------------------------------------------//InitializeCMedia *CMedia::m_pInstance = NULL;//------------------------------------------------------------------------/**/////////////////////////////////////////////////////////////////////// // Construction/Destruction/**/////////////////////////////////////////////////////////////////////// CMedia::CMedia():m_pGB(NULL),m_pMC(NULL),m_pME(NULL),m_pVW(NULL),m_pBA(NULL),m_pBV(NULL),m_pMS(NULL),m_hWndVideo(NULL),m_bExitThrd(TRUE),m_bThrdRunning(FALSE),m_DispMode(DEFAULT_DISPLAY_MODE),m_hWndNotify(NULL)...{memset(m_szFileName,0,sizeof(m_szFileName));}CMedia::~CMedia()...{if(m_pInstance != NULL)...{delete m_pInstance;m_pInstance = NULL;}}//------------------------------------------------------------//Description:// Play the media file// When you call the function,you should call Open() before.////-------------------------------------------------------------BOOL CMedia::Play()...{// Run the graph to play the media fileif(m_pMC == NULL)...{return FALSE;}m_pMC->Run();return TRUE;}//------------------------------------------------------------//Description:// Pause.// When you call the function,you should call Open() before.////-------------------------------------------------------------BOOL CMedia::Pause()...{if(m_pMC == NULL)...{return FALSE;}m_pMC->Pause();return TRUE;}//------------------------------------------------------------//Description:// Stop.// When you call the function,you should call Open() before.////-------------------------------------------------------------BOOL CMedia::Stop()...{if(m_pMC == NULL || m_pMS == NULL)...{return FALSE;}m_pMC->Stop();m_pMS->SetPositions(0, AM_SEEKING_AbsolutePositioning,NULL,AM_SEEKING_NoPositioning);return TRUE;}//--------------------------------------------------------------------------//Description:// Open the media file. When succeed in calling the function ,//you should call the Close() to release the resource////-------------------------------------------------------------------------BOOL CMedia::Open(TCHAR *pszFileName)...{BOOL bResult = FALSE;if(_tcslen(pszFileName) >= MAX_PATH)...{goto END;}else...{_tcscpy(m_szFileName,pszFileName);//Check the file existingHANDLE hdFile =CreateFile(m_szFileName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,NULL,NULL);if(hdFile == INVALID_HANDLE_VALUE)...{//The file doesn't existgoto END;}else...{CloseHandle(hdFile);}}// Initialize COMif(CoInitializeEx(NULL, COINIT_MULTITHREADED) != S_OK)...{goto END;}// Get the interface for DirectShow's GraphBuilderif(CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&m_pGB) != S_OK)...{goto END;}// Have the graph construct its the appropriate graph automaticallyif(m_pGB->RenderFile(m_szFileName, NULL) != NOERROR)...{goto END;}// QueryInterface for DirectShow interfacesif(m_pGB->QueryInterface(IID_IMediaControl, (void **)&m_pMC) != NOERROR)...{goto END;}if(m_pGB->QueryInterface(IID_IMediaEventEx, (void **)&m_pME) != NOERROR)...{goto END;}if(m_pGB->QueryInterface(IID_IMediaSeeking, (void **)&m_pMS) != NOERROR)...{goto END;}// Query for video interfaces, which may not be relevant for audio filesif(m_pGB->QueryInterface(IID_IVideoWindow, (void **)&m_pVW) != NOERROR)...{goto END;}if(m_pGB->QueryInterface(IID_IBasicVideo, (void **)&m_pBV) != NOERROR)...{goto END;}// Query for audio interfaces, which may not be relevant for video-only files if(m_pGB->QueryInterface(IID_IBasicAudio, (void **)&m_pBA) != NOERROR)...{goto END;}// Is this an audio-only file (no video component)?if (CheckVisibility() == TRUE)...{if(m_pVW->put_Owner((OAHWND)m_hWndVideo) != NOERROR)...{goto END;}if(m_pVW->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN) != NOERROR) ...{goto END;}}//Set play modeSetDisplayMode(m_DispMode);bResult = TRUE;END:if(bResult == FALSE)...{//Release the resourceClose();}return bResult;}//------------------------------------------------------------//Description:// This method sets an owning parent for the video window.////Parameters:// hWnd : [in] Handle of new owner window.////----------------------------------------------------------void CMedia::SetVideoWindow(HWND hWndVideo)...{m_hWndVideo = hWndVideo;}//------------------------------------------------------------//Description:// Check the file visibility// When you call the function,you should call Open() before.////Parameters:// TRUE: Video// FALSE: It's not the video////------------------------------------------------------------BOOL CMedia::CheckVisibility()...{if (!m_pVW)...{//No VideoWindow interface. Assuming audio/MIDI file or unsupported video codec return FALSE;}if (!m_pBV)...{//No BasicVideo interface. Assuming audio/MIDI file or unsupported video codec. return FALSE;}// If this is an audio-only clip, get_Visible() won't work.//// Also, if this video is encoded with an unsupported codec,// we won't see any video, although the audio will work if it is// of a supported format.long lVisible;if(m_pVW->get_Visible(&lVisible) != NOERROR)...{return FALSE;}return TRUE;}//------------------------------------------------------------//Description:// Release the resource which opened in the Open()////------------------------------------------------------------void CMedia::Close()...{// Relinquish ownership (IMPORTANT!) after hidingif(m_pVW)...{m_pVW->put_Visible(OAFALSE);m_pVW->put_Owner(NULL);}if(m_pMC != NULL)...{m_pMC->Release();m_pMC = NULL;}if(m_pME != NULL)...{m_pME->SetNotifyWindow(NULL,NULL,NULL); m_pME->Release();m_pME = NULL;}if(m_pMS != NULL)...{m_pMS->Release();m_pMS = NULL;}if(m_pBV != NULL)...{m_pBV->Release();m_pBV = NULL;}if(m_pBA != NULL)...{m_pBA->Release();m_pBA = NULL;}if(m_pVW != NULL)...{m_pVW->Release();m_pVW = NULL;}if(m_pGB != NULL)...{m_pGB->Release();m_pGB = NULL;}// Finished with COMmemset(m_szFileName,0,sizeof(m_szFileName));CoUninitialize();}//------------------------------------------------------------ //Description:// Get the instance of object////------------------------------------------------------------ CMedia * CMedia::GetInstance()...{if(m_pInstance == NULL)...{m_pInstance = new CMedia();}return m_pInstance;}//------------------------------------------------------------ //Description:// Get the media file property.// When you call the function,you should call Open() before. ////------------------------------------------------------------ BOOL CMedia::GetMediaProperty(PMEDIAPROPERTY pOutProperty) ...{MEDIAPROPERTY prop = ...{0};if(m_pBA == NULL || m_pBV == NULL)...{return FALSE;}//Get the audio propertym_pBA->get_Volume(&prop.lVolume);m_pBA->get_Balance(&prop.lBalance);//Get the video propertyif(CheckVisibility() == TRUE)...{m_pBV->get_BitRate(&prop.lBitRate);m_pBV->GetVideoSize(&prop.lWidth,&prop.lHeight);}*pOutProperty = prop;return TRUE;}//------------------------------------------------------------//Description:// Set the display mode.// When you call the function,you should call Open() before.////------------------------------------------------------------BOOL CMedia::SetDisplayMode(DISPLAYMODE mode)...{if(m_pVW == NULL)...{return FALSE;}m_DispMode = mode;if(mode == DISP_FULLSCREEN)...{m_pVW->put_FullScreenMode(OATRUE);}else...{//Restore to the normal modem_pVW->put_FullScreenMode(OAFALSE);RECT rcWnd = ...{0};GetClientRect(m_hWndVideo,&rcWnd);LONG lWndWidth = rcWnd.right - rcWnd.left;LONG lWndHeight = rcWnd.bottom - rcWnd.top;MEDIAPROPERTY prop = ...{0};GetMediaProperty(&prop);if(mode == DISP_FIT || mode == DISP_NATIVE)...{LONG lDispLeft,lDispTop,lDispWidth,lDispHeight;if(mode == DISP_NATIVE && lWndWidth >= prop.lWidth && lWndHeight >= prop.lHeight) ...{lDispLeft = (lWndWidth - prop.lWidth) / 2;lDispTop = (lWndHeight - prop.lHeight) / 2;lDispWidth = prop.lWidth;lDispHeight = prop.lHeight;}else...{if(prop.lWidth * lWndHeight > lWndWidth * prop.lHeight)...{lDispWidth = lWndWidth;lDispHeight = (LONG)((float)lDispWidth / (float)prop.lWidth * prop.lHeight); lDispLeft = 0;lDispTop = (lWndHeight - lDispHeight) / 2;}else if(prop.lWidth * lWndHeight < lWndWidth * prop.lHeight)...{lDispHeight = lWndHeight;lDispWidth = (LONG)((float)lDispHeight / (float)prop.lHeight * prop.lWidth); lDispLeft = (lWndWidth - lDispWidth) / 2;lDispTop = 0;}else...{lDispWidth = lWndWidth;lDispHeight = lWndHeight;lDispLeft = 0;lDispTop = 0;}}m_pVW->put_Left(lDispLeft);m_pVW->put_Top(lDispTop);m_pVW->put_Width(lDispWidth);m_pVW->put_Height(lDispHeight);}else if(mode == DISP_STRETCH)...{m_pVW->put_Left(0);m_pVW->put_Top(0);m_pVW->put_Width(lWndWidth);m_pVW->put_Height(lWndHeight);}}return TRUE;}//------------------------------------------------------------//Description:// Set the volume.// When you call the function,you should call Open() before.////Parameters:// lVolume:[in] The volume (amplitude) of the audio signal.// Range is –10,000 to 0.// lBalance:[in] The balance for the audio signal. Default value is 0.// The value from –10,000 to 10,000 indicating the stereo balance.////------------------------------------------------------------BOOL CMedia::SetVolume(LONG lVolume, LONG lBalance)...{if(m_pBA == NULL)...{return FALSE;}if(lVolume < MIN_VOLUME && lVolume > MAX_VOLUME && lBalance < MIN_BALANCE && lBalance > MAX_BALANCE)...{return FALSE;}m_pBA->put_Volume(lVolume);m_pBA->put_Balance(lBalance);return TRUE;}//----------------------------------------------------------------------//Description:// Registers a window that will handle messages when a specified event occurs.////Parameters:// hWnd:[in] Handle of window to notify. Pass NULL to stop notification.// wMsg:[in] Window message to be passed as the notification.// lInstanceData:[in] Value (instance data) to be passed as the lParam parameter for the lMsg message.////-----------------------------------------------------------------------------BOOL CMedia::SetNotifyWindow(HWND hWnd, UINT wMsg,long lInstanceData)...{if(m_pME == NULL)...{return FALSE;}m_pME->SetNotifyWindow((OAHWND)hWnd,wMsg,lInstanceData);return TRUE;}//---------------------------------------------------------------------- //Description:// This method retrieves the notification event.////----------------------------------------------------------------------- BOOL CMedia::GetEvent(LONG *plEvCode, LONG *plParam1, LONG *plParam2) ...{if(m_pME == NULL)...{return FALSE;}LONG evCode, evParam1, evParam2;if(m_pME->GetEvent(&evCode, &evParam1, &evParam2, 0) == NOERROR)...{*plEvCode = evCode;*plParam1 = evParam1;*plParam2 = evParam2;// Spin through the eventsm_pME->FreeEventParams(evCode, evParam1, evParam2);}else...{return FALSE;}return TRUE;}本文来自CSDN博客,转载请标明出处:/norains/archive/2007/05/14/1609118.aspx。

DirectShow插件使用手册

DirectShow插件使用手册

DirectShow插件使用手册【摘要】本文档介绍了DirectShow连接相机时的插件使用,通过本套插件可连接海康的工业相机。

一、环境配置1.相机环境配置打开MVS,若PC与相机不在同一网段,则配置IP,设置好相机参数。

确保相机能在MVS上正常取流。

2.注册和注销插件在客户端MVS安装完成后,不会默认注册此插件,需要用户手动用管理员权限运行register.bat脚本注册此插件,插件脚本存放在Development\ThirdPartyPlatformAdapter\DirectShow文件夹内。

可用graphedt.exe程序查看是否注册成功,插件注册在Video Capture Source项内,如图1。

图1用管理员权限运行unregister.bat文件可注销已注册的DShow插件。

3.环境检测(1)在graphedt.exe程序中打开菜单Graph-Insert Filters…;(2)在Video Capture Source项内选择MvCamera DirectShow Source;(3)选中MvCamera DirectShow Source并右键打开Filter Properties…进行相机选择和参数获取和设置等操作,如图2;(4)在DirectShow Filters中选择Video Renderer,并将Video Out与Input相连接,如图3;(5)菜单Graph-Play进行预览;图2 属性页图3 连接页二、参考示例提供DirectShowDisplay示例程序供用户参考,对示例做简要介绍:DirectShowDisplay示例为控制台程序,路径为Development\Samples\DirectShow\DirectShowDisplay,支持Render播放。

在头文件MvDSSource.h内列出相机列表获取、参数获取、参数设置等接口供外部调用。

此示例程序可编译x86和x64版本,分别对应插件的x86和x64版本。

DirectShow使用大全

DirectShow使用大全

DirectShow使用大全一.使用directshow时应该添加lib文件Strmiids.lib、Quartz.lib 、Strmbase.lib 具体添加那个见下面的说明Header FilesAll DirectShow applications use the Dshow.h header file. Some DirectShow interfaces require additional header files. These requirements are noted in the interface reference.Library FilesThe following table shows the library files DirectShow uses.Library file DescriptionQuartz.lib Exports the AMGetErrorText function. If you do not call this function, this library is not required.Strmbase.lib If you do not use the DirectShow base classes, this library is not required. For information about the difference between Strmbase.lib and Qtzbase.lib, see Building DirectShow Filters Strmiids.lib Exports class identifiers (CLSIDs) and interface identifiers (IIDs). All DirectShow applications require this library.In your build environment, the SDK Include and Lib directories should be the first directories in the search path. This ensures that you are using the most recent versions of these files.二DirectShow初探可能到现在为止,还没有哪个玩过游戏的人没有接触过Microsoft的DirectX 的。

(MatLab、Labview)通过Directshow接口访问相机参数设置方法

(MatLab、Labview)通过Directshow接口访问相机参数设置方法

DirectShow接口访问相机参数设置方法本文档适用于所有适用directshow接口访问相机的程序,例如MATLAB 和Labview的ImaqDx接口、Halcon的Directshow接口等。

MATLAB中,可以通过如下界面设置相机参数:Labview的NIMAX中可以通过如下界面设置相机参数:下面以Labview为例,介绍Labview中如何通过ImaqDx接口访问迈德威视工业相机。

目前,我们提供三种方式,在Labview中访问我们的相机:1.GigeVision接口。

仅我司GigE相机支持该方式访问。

2.直接基于SDK的DLL文件调用的方式。

该方式支持我们所有型号相机。

例程在安装目录的DEMO/LABVIEW/USEDLL文件夹中。

3.通过ImaqDx使用Directshow接口访问相机。

该方式支持我们所有型号相机。

Directshow接口是windows系统上的音视频标准接口,定义了一些预先约定好的协议,但是由于协议定义时间比较早,也没有为工业摄像头考虑参数接口,所以接口的参数配置上,没有像使用我们的SDK那样灵活。

我们针对此问题,做了一些特殊处理,扩展了Dircetshow接口中Camera Atrributes的“White Balance”属性,目前可以该方式进行如下操作:1.设置相机工作模式(连续采集、软触发、硬触发)方法:在Camera Atrributes中,设置“White Balance”属性的Value值●为0,则相机进入连续工作模式;●设置为1,则相机进入软触发工作模式;●设置为2则相机进入硬触发工作模式。

2.执行一次软触发方法:在Camera Atrributes中,设置“White Balance”属性的Value 值为3,则相机进行一次软触发,如果要多次软触发,则重复设置“White Balance”属性的Value值为3即可,每设置一次,进行一次软触发。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Visual范例宝典中采用的DirectX SDK为Microsoft Show SDK(April 2006),Direct Show SDK为DirectX SDK Extras Frebruary 2005
在这里和大家分享下DirectShow9
DirectX9.0c已经将DShow分离出去了,下载时请选DirectX9.0b或者一下一个单独的,地址为:
/SDK/DX9SDK.rar
下面是配置过程:
1,使用VC向导生成一个具体项目,如Win32 Dynamic-Link;
2,包含头文件streams.h;
3,在VC的菜单中选择Project|Settings|C/C++,在弹出的对话框中的Category中选择Code generation,然后在Calling convention中选择_stdcall;
4,使用多线程语言运行时库,即在VC的菜单中选择Project|Settings|C/C++,在弹出的对话框中的Category中选择Code generation,然后在Use run-time library中,Debug版选择Debug Multithreaded,Release版选择Multithreaded。

5,配置必要的链接库文件,即在VC的菜单中选择Project|Settings|Link,在弹出的对话框中的Category 中选择General,然后在Object/library modules中输入如下代码:
Debug版本strmbasd.lib, msvcrtd.lib, winmm.lib
Release版本strmbase.lib, msvcrt.lib, winmm.lib
并且选中Ignore all default libraries。

DirectShow SDK建议,DirectShow应用程序应该至少连接库文件strmiids.lib和quartz.lib。

前者定义了DirectShow标准的CLSID和IID,后者定义了导出函数AMGetErrorText(如果应用程序中没有使用到这个函数,也可以不连接这个库)。

如果程序里包含了头文件streams.h,则一般库文件还要连接strmbasd.lib、uuid.lib、winmm.lib。

6,将DirectX SDK的Include和Lib目录配置到VC的系统目录中去,并且放在标准的VC目录之前,以保证编译器能够拿到最新版本的源文件。

选择Tools|Options|Directories,在弹出的对话框中的Show directories for中选择Include files,配置如下(假设DirectX SDK安装在D:\\DXSDK目录下,VC安装在C:\\Program Files下):
D:\\DXSDK\\Include
D:\\DXSDK\\SAMPLES\\C++\\DIRECTSHOW\\BASECLASSES
D:\\DXSDK\\SAMPLES\\C++\\COMMON\\INCLUDE
C:\\Program Files\\Microsoft Visual Studio\\VC98\\INCLUDE
C:\\Program Files\\Microsoft Visual Studio\\VC98\\MFC\\INCLUDE
C:\\Program Files\\Microsoft Visual Studio\\VC98\\ATL\\INCLUDE
再在Show directories for中选择Library files,配置如下:
D:\\DXSDK\\Lib
D:\\DXSDK\\SAMPLES\\C++\\DIRECTSHOW\\BASECLASSES\\DEBUG
D:\\DXSDK\\SAMPLES\\C++\\DIRECTSHOW\\BASECLASSES\\RELEASE
C:\\PROGRAM FILES\\MICROSOFT SDK\\LIB
C:\\Program Files\\Microsoft Visual Studio\\VC98\\LIB
C:\\Program Files\\Microsoft Visual Studio\\VC98\\MFC\\LIB
7,因为DirectShow应用程序是一种COM客户程序,因此在调用任何COM函数之前调用CoInitialize()(或CoInitializeEx)函数进行COM库的初始化(一般是在应用程序启动的时候调用一次),在结束COM 库使用时调用CoUninitialize()函数进行反初始化(一般是在应用程序退出前调用一次)。

----------------------------
配置时的问题【一定要注意】
1。

include和lib的路径前后顺序一定要“非常严格按照上面顺序排列”,否则
1.1 DXSDK\\Include和VC98\\INCLUDE有头文件名是重名的,例如control.h,strmif.h。

所以要优先选择DXSDK的文件声明。

2.1 DXSDK\\Lib和VC98\\LIB对DWORD_PTR 这个数据类型的声明顺序出现编译上连接的歧异!!!!
2。

BASECLASSES\\DEBUG和BASECLASSES\\RELEASE目录和目录里面是内容是没有的,如果你
在应用程序中使用了BASECLASSES里面的class,function,filter,interface,就要先用VC编译baseclasses.dsw,编译时请分别选定DEBUG和RELEASE,因为baseclasses.dsw有4个版本,而且默认下都不是DEBUG和RELEASE。

编译后生成两个重要文件:strmbasd.lib(Debug),STRMBASE.lib (Release),在以后将用到。

相关文档
最新文档