基于DirectShow获取音频视频输入设备列表

Codesys—Modbus RTU称重变送器通讯案例 Codesys控制器使用标准的Modbus库,与支持ModbusRTU的称重变送器进行通讯的案例 阅读详情


摘自:秦建辉的专栏

个人独立博客:http://www.firstsolver.com/wordpress/


开发工具:

Visual Studio v2010

Windows SDK v7.1

版本历史:

V1.0 2010年10月09日

  • 完成正式版本。

功能描述:

获取音频视频输入设备列表

 

接口函数:

DS_GetAudioVideoInputDevices

 

下载地址:

DS_AudioVideoDevices.zip

源代码:

DS_AudioVideoDevices.h

  1. /* ---------------------------------------------------------- 
  2. 文件名称:DS_AudioVideoDevices.h 
  3.  
  4. 作者:秦建辉 
  5.  
  6. MSN:splashcn@msn.com 
  7.  
  8. 版本历史: 
  9.     V1.0    2010年10月09日 
  10.             完成正式版本。 
  11.  
  12. 功能描述: 
  13.     获取音频视频输入设备列表 
  14.  
  15. 接口函数: 
  16.     DS_GetAudioVideoInputDevices 
  17.  ------------------------------------------------------------ */  
  18. #pragma once  
  19.   
  20. #include <windows.h>  
  21. #include <vector>  
  22. #include <dshow.h>  
  23.   
  24. #ifndef MACRO_GROUP_DEVICENAME  
  25.     #define MACRO_GROUP_DEVICENAME  
  26.   
  27.     #define MAX_FRIENDLY_NAME_LENGTH    128  
  28.     #define MAX_MONIKER_NAME_LENGTH     256  
  29.   
  30.     typedef struct _TDeviceName  
  31.     {  
  32.         WCHAR FriendlyName[MAX_FRIENDLY_NAME_LENGTH];   // 设备友好名  
  33.         WCHAR MonikerName[MAX_MONIKER_NAME_LENGTH];     // 设备Moniker名  
  34.     } TDeviceName;  
  35. #endif  
  36.   
  37. #ifdef __cplusplus  
  38. extern "C"  
  39. {  
  40. #endif  
  41.   
  42. /* 
  43. 功能:获取音频视频输入设备列表 
  44. 参数说明: 
  45.     vectorDevices:用于存储返回的设备友好名及Moniker名 
  46.     guidValue: 
  47.         CLSID_AudioInputDeviceCategory:获取音频输入设备列表 
  48.         CLSID_VideoInputDeviceCategory:获取视频输入设备列表 
  49. 返回值: 
  50.     错误代码 
  51. 说明: 
  52.     基于DirectShow 
  53.     列表中的第一个设备为系统缺省设备 
  54.     capGetDriverDescription只能获得设备驱动名 
  55. */  
  56. HRESULT DS_GetAudioVideoInputDevices( std::vector<TDeviceName> &vectorDevices, REFGUID guidValue );  
  57.   
  58. #ifdef __cplusplus  
  59. }  
  60. #endif  
    

DS_AudioVideoDevices.cpp

  1. #include "DS_AudioVideoDevices.h"  
  2.   
  3. #pragma comment(lib, "Strmiids.lib")  
  4.   
  5. HRESULT DS_GetAudioVideoInputDevices( std::vector<TDeviceName> &vectorDevices, REFGUID guidValue )  
  6. {  
  7.     TDeviceName name;   
  8.     HRESULT hr;  
  9.   
  10.     // 初始化  
  11.     vectorDevices.clear();  
  12.   
  13.     // 初始化COM  
  14.     hr = CoInitializeEx( NULL, COINIT_APARTMENTTHREADED );  
  15.     if (FAILED(hr))  
  16.     {  
  17.         return hr;  
  18.     }  
  19.       
  20.     // 创建系统设备枚举器实例  
  21.     ICreateDevEnum *pSysDevEnum = NULL;  
  22.     hr = CoCreateInstance( CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER, IID_ICreateDevEnum, (void **)&pSysDevEnum );  
  23.     if (FAILED(hr))  
  24.     {  
  25.         CoUninitialize();  
  26.         return hr;  
  27.     }  
  28.   
  29.     // 获取设备类枚举器  
  30.     IEnumMoniker *pEnumCat = NULL;  
  31.     hr = pSysDevEnum->CreateClassEnumerator( guidValue, &pEnumCat, 0 );  
  32.     if (hr == S_OK)   
  33.     {  
  34.         // 枚举设备名称  
  35.         IMoniker *pMoniker = NULL;  
  36.         ULONG cFetched;  
  37.         while(pEnumCat->Next( 1, &pMoniker, &cFetched ) == S_OK)  
  38.         {  
  39.             IPropertyBag *pPropBag;  
  40.             hr = pMoniker->BindToStorage( NULL, NULL, IID_IPropertyBag, (void **)&pPropBag );  
  41.             if (SUCCEEDED(hr))  
  42.             {  
  43.                 // 获取设备友好名  
  44.                 VARIANT varName;  
  45.                 VariantInit( &varName );  
  46.   
  47.                 hr = pPropBag->Read( L"FriendlyName", &varName, NULL );  
  48.                 if (SUCCEEDED(hr))  
  49.                 {  
  50.                     StringCchCopy( name.FriendlyName, MAX_FRIENDLY_NAME_LENGTH, varName.bstrVal );  
  51.                       
  52.                     // 获取设备Moniker名  
  53.                     LPOLESTR pOleDisplayName = reinterpret_cast<LPOLESTR>(CoTaskMemAlloc(MAX_MONIKER_NAME_LENGTH * 2));  
  54.                     if (pOleDisplayName != NULL)  
  55.                     {  
  56.                         hr = pMoniker->GetDisplayName( NULL, NULL, &pOleDisplayName );  
  57.                         if (SUCCEEDED(hr))  
  58.                         {  
  59.                             StringCchCopy( name.MonikerName, MAX_MONIKER_NAME_LENGTH, pOleDisplayName );  
  60.                             vectorDevices.push_back( name );  
  61.                         }  
  62.   
  63.                         CoTaskMemFree( pOleDisplayName );  
  64.                     }  
  65.                 }  
  66.   
  67.                 VariantClear( &varName );  
  68.                 pPropBag->Release();                       
  69.             }  
  70.   
  71.             pMoniker->Release();  
  72.         } // End for While  
  73.   
  74.         pEnumCat->Release();  
  75.     }  
  76.   
  77.     pSysDevEnum->Release();  
  78.     CoUninitialize();  
  79.   
  80.     return hr;  
  81. }  
   

版权声明:本文为博主原创文章,未经博主允许不得转载。

基于ESP32和OV5640的目标检测系统 本文详细介绍了基于ESP32-S3和OV5640摄像头构建目标检测系统的完整方案。系统采用YOLOv8-Nano轻量级模型,通过INT8量化实现边缘部署,在UXGA分辨率下达到25fps帧率。文章从硬件选型、图像采集优化、模型量化部署、实时推理流水线构建等维度展开,重点解决了内存管理、电源稳定性和异常处理等嵌入式系统关键问题。该方案在资源受限条件下实现了150ms以内的端到端延迟,为物联网视觉应用提供了低成本、低功耗的解决方案,适用于智能家居、工业检测等多个场景。 阅读详情

相关推荐

RK3588+TRL8367s四网口千兆交换机硬件调试与DTS配置实战

本文详细介绍了基于RK3588处理器与RTL8367S交换机芯片构建四网口千兆交换设备的硬件调试与DTS配置实战。文章深入对比了MDIO与SMI两种通讯方式的配置差异,提供了详尽的设备树代码示例,并总结了常见问题的排查思路,旨在帮助开发者高效完成嵌入式网络设备的软硬件集成与调试工作。

weixin_28308325的博客 467

基于Media Foundation获取音频视频输入设备列表

开发工具:Visual Studio v2010Windows SDK v7.1版本历史:V1.0 2010年10月09日完成正式版本。功能描述:获取音频视频输入设备列表接口函数:MF_GetAudioVideoInputDevices 下载地址:MF_AudioVideoDevices.zip源代码:MF_AudioVideoDevices.h/* ---------------------------------------------------------- 文件名称:MF_AudioVideoD

秦建辉的专栏 4526

用RFSoC ZU47DR搭建软件无线电原型:从零配置Vivado到生成第一个射频信号

本文详细介绍了如何使用Xilinx RFSoC ZU47DR开发板搭建软件无线电原型系统,从Vivado环境配置到生成首个射频信号的全流程。通过整合ARM处理器、FPGA逻辑和高速ADC/DAC,该平台为通信算法验证提供了高效解决方案,特别适合SDR开发者和通信工程师快速实现原型设计。

weixin_26763955的博客 587

Windows下用DirectShow查找摄像头(含分辨率)和麦克风

在视频聊天、视频会议、在线监控和视频展台等项目中,需要查找出本地电脑上连接的所有摄像头,网上流传比较多的方式是ffmpeg的方式,这种方式可以跨平台,不同的平台下调用不同的库。这种方式在控制台直接打印了摄像头的信息,无法(或者说我暂时没找到)在内存中获取,因此直接采用了DirectShow的方式,DirectShow枚举IMoniker和Ipin。因为网上的文档,不是特别详尽,所以...

架构和代码 8868

ComfyUI实战:AnimateDiff与ControlNet结合,打造无缝风格化视频转绘

本文详细介绍了如何利用ComfyUI平台,结合AnimateDiff与ControlNet插件,实现高质量的视频风格化转绘。通过搭建节点工作流、调整关键参数,有效解决画面闪烁与失真问题,并分享了进阶玩法与常见问题解决方案,帮助用户轻松打造流畅、风格统一的动态视觉效果。

weixin_29039773的博客 334

《玩儿起来吧》MATLAB 实时图像处理系列(一二三四)

大家学了图像处理之后,是不是就想学以致用。而要用于生活中,最好的方式就是和摄像头搭配,实现实时图像处理。今天就给大家分享MATLAB实时图像处理的基础方法,希望能帮你快速入门。

HPC_ZY 1万+

音频视频解决方案:GStreamer/ffmpeg/ffdshow/directshow/vfw

<br />音频视频编程相关:GStreamer/ffmpeg/directshow/vfw<br />linux和window下几种流行的音频视频编程框架作一个总结,防止自己迷惘,免于晕头转向。<br /><br />一、GStreamer<br /><br />GStreamer is a library that allows the construction of graphs of media-handling components, ranging from simple Ogg/Vorbis

1554

OD图 arcgis曲线制作插件 od图曲线 路径图曲线制作插件 航线图曲线制作插件

在ArcGIS 10.2 中导入节点数据,打开插件,选择输入起始节点和目标节点的节点文件Point,以Name字段(地名)为连接线的起始字段和目标字段,(Input Table File)选择连接关系表格SDLine.csv,(Origin Column 和 Destination Column)为起始节点和目标节点,(Output Path)为输出路径,应选择.gdb数据库路径,否则容易报错,(Chord Coefficient)为连线的曲率,数值越大,曲率越高。运行环境:ArcGIS10.2。...

JData_Engineer的博客 2669

DirectShow介绍-1

1. DirectShow介绍 DirectShow是一个windows平台上的流媒体框架,提供了高质量的多媒体流采集和回放功能。它支持多种多样的媒体文件格式,包括ASF、MPEG、AVI、MP3和WAV文件,同时支持使用WDM驱动或早期的VFW驱动来进行多媒体流的采集。DirectShow整合了其它的DirectX技术,能自动地侦测并使用可利用的音视频硬件加速,也能支持没有硬件加速的系统。 DirectShow大大简化了媒体回放、格式转换和采集工作。但与此同时,它也为用户自定义的解决方...

顺其自然~专栏 2598

WOFOST作物模型(1):PCSE环境配置

get_summary_output() 方法通常用于在 PCSE 模拟过程结束后,获取模拟结果的摘要信息,例如模拟期间的总产量、总水分需求等。它可以提供对模拟结果的快速总结,方便用户进行后续的分析和处理。用.get_output来获取过程参数,并将这些参数转为dataframe显示。用run_till_terminate()代表终止。安装好之后,打开jupyter notebook。也可以指定运行时间,并获取最后一天的参数。首先还是打开之前建好的gee虚拟环境。

所有专家都曾始于新手 681

ABAP 百科全书的阅读目录(2024版)

909 篇 ABAP 技术文章的目录

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 4242

DirectX、Directshow及Wince Directshow

1、DirectX是什么 DirectX(简称:DX)是微软推出的一套基于Windows系统的多媒体应用程式接口APIs函式。在开发中,DX分为两个部分,一个是运行库,通过DX编译出来的程式必须要有运行库的支持,另外一个是开发库,也就是常说的SDK,这部分是在编译DX程序中是必

尚钦 1767

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

directshow播放mpeg

// CDXGraph.h//#ifndef __H_CDXGraph__#define __H_CDXGraph__// Filter graph notification to the specified window#define WM_GRAPHNOTIFY  (WM_USER+20)#include "Dshow.h"#include "amstream.h"#include "Qedi

huntsman的专栏 1003

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

音频视频解决方案:GStreamer-ffmpeg-ffdshow-directshow-vfw

linux和window下几种流行的音频视频编程框架作一个总结,防止自己迷惘,免于晕头转向。一、GStreamerGStreamer is a library that allows the construction of graphs of media-handlingcomponents, ranging from simple Ogg/Vorbis playback to complex a

深之JohnChen的专栏 6487

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

DirectX、Directshow介绍

1、DirectX是什么 DirectX(简称:DX)是微软推出的一套基于Windows系统的多媒体应用程式接口APIs函式。在开发中,DX分为两个部分,一个是运行库,通过DX编译出来的程式必须要有运行库的支持,另外一个是开发库,也就是常说的SDK,这部分是在编译DX程序中是必需的。 DirectX是一种图形应用程序接口(API),简单的说它是一个辅助软件,一个提高系统性能的加速软件,微软创建...

weixin_30532837的博客 648

转贴--音频视频解决方案:GStreamer/ffmpeg/ffdshow/directshow/vfw

本文转自http://hi.baidu.com/gaomanyi/blog/item/f5d172598107572c2934f048.html 音频视频编程相关:GStreamer/ffmpeg/directshow/vfwlinux和window下几种流行的音频视频编程框架作一个总结,防止自己迷惘,免于晕头转向。一、GStreamerGStreamer is a l

Donkey Vision 3467
上一篇: 基于Media Foundation获取音频视频输入设备列表
下一篇: 常用设备接口类GUID
xiaojun11-
博客等级 码龄15年 373粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值