简化MFC版amcap

本文档介绍如何将DirectShow的AMCap范例简化并应用于MFC对话框程序,实现预览、位图捕获、AVI捕获等功能。同时,讨论了热插拔设备的处理和设备变更时的重新枚举策略,适用于多视频设备切换场景。
摘要由CSDN通过智能技术生成

一、问题的提出

开始学习并熟悉DirectShow,最好的范例就是AMCap,因为它提供了两套Dshow最基本的代码模型:预览与捕获,并实现了显示设备属性页和流控等一系列技术,并且很多硬件捕获把它附加为软件,以便可以察看自己硬件的预览效果。

AMCapDirectX安装包内,安装后的路径为:XXX:/DXSDK/Samples/C++/DirectShow/Capture/AMCap

AMCap是基于Win32的,很多代码实现与MFC不同,并且测试实例是基于对话框,所以需要对代码做一些改动。

 

二、效果图

三、示例实现与实现功能

实现:

1.    预览

2.    捕获为位图

3.    捕获为AVI

4.    视频源

5.    视频格式

6.   

amcap源代码,visual studio 亲测通过,打开摄像头设备。 // File: AMCap.h // // Desc: DirectShow sample code - audio/video capture. // // Copyright (c) Microsoft Corporation. All rights reserved. //------------------------------------------------------------------------------ // Macros #define SAFE_RELEASE(x) { if (x) x->Release(); x = NULL; } // device notification definitions #if (WINVER < 0x0500) #define DBT_DEVTYP_DEVICEINTERFACE 0x00000005 // device interface class #define DEVICE_NOTIFY_WINDOW_HANDLE 0x00000000 typedef PVOID HDEVNOTIFY; #endif extern "C" { typedef BOOL (/* WINUSERAPI */ WINAPI *PUnregisterDeviceNotification)( IN HDEVNOTIFY Handle ); typedef HDEVNOTIFY (/* WINUSERAPI */ WINAPI *PRegisterDeviceNotificationA)( IN HANDLE hRecipient, IN LPVOID NotificationFilter, IN DWORD Flags ); typedef HDEVNOTIFY (/* WINUSERAPI */ WINAPI *PRegisterDeviceNotificationW)( IN HANDLE hRecipient, IN LPVOID NotificationFilter, IN DWORD Flags ); } #ifdef UNICODE #define PRegisterDeviceNotification PRegisterDeviceNotificationW #else #define PRegisterDeviceNotification PRegisterDeviceNotificationA #endif // !UNICODE #if (WINVER < 0x0500) typedef struct _DEV_BROADCAST_DEVICEINTERFACE_A { DWORD dbcc_size; DWORD dbcc_devicetype; DWORD dbcc_reserved; GUID dbcc_classguid; char dbcc_name[1]; } DEV_BROADCAST_DEVICEINTERFACE_A, *PDEV_BROADCAST_DEVICEINTERFACE_A; typedef struct _DEV_BROADCAST_DEVICEINTERFACE_W { DWORD dbcc_size; DWORD dbcc_devicetype; DWORD dbcc_reserved; GUID dbcc_classguid; wchar_t dbcc_name[1]; } DEV_BROADCAST_DEVICEINTERFACE_W, *PDEV_BROADCAST_DEVICEINTERFACE_W; #ifdef UNICODE typedef DEV_BROADCAST_DEVICEINTERFACE_W DEV_BROADCAST_DEVICEINTERFACE; typedef PDEV_BROADCAST_DEVICEINTERFACE_W PDEV_BROADCAST_DEVICEINTERFACE; #else typedef DEV_BROADCAST_DEVICEINTERFACE_A DEV_BROADCAST_DEVICEINTERFACE; typedef PDEV_BROADCAST_DEVICEINTERFACE_A PDEV_BROADCAST_DEVICEINTERFACE; #endif // UNICODE #endif // WINVER
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值