设备模式
[与此页面关联的功能(DirectShow)是一项旧功能。 它已被 MediaPlayer、IMFMediaEngine取代,并在媒体基金会 音频/视频捕获。 这些功能已针对 Windows 10 和 Windows 11 进行了优化。 Microsoft强烈建议新代码尽可能使用 MediaPlayer、IMFMediaEngine 和 Media Foundation 中的音频/视频捕获,而不是 DirectShow。 Microsoft建议重写使用旧 API 的现有代码,以尽可能使用新 API。]
IEEE 1394 和 USB 摄像机可以在相机模式和视频录音机(VTR)模式之间切换。 当 IEEE 1394 摄像机切换模式时,设备重置,应用程序必须再次枚举它。 应用程序无法以编程方式切换模式。 另一方面,USB 摄像机可以在相机和 VTR 模式之间切换,而无需重置,应用程序可以更改模式。
MSDV 驱动程序
若要在 IEEE 1394 设备上获取当前模式,请使用值ED_DEVCAP_DEVICE_TYPE调用 IAMExtDevice::GetCapability 方法。 如果该方法返回值ED_DEVTYPE_VCR,则设备处于 VTR 模式,并且具有暂停、停止、快速转发和回退等功能。 否则,如果方法返回ED_DEVTYPE_CAMERA,则设备处于相机模式。 以下代码示例演示如何查询设备类型:
if (MyDevCap.bHasDevice)
{
LONG lDeviceType = 0;
MyDevCap.pDevice->GetCapability(ED_DEVCAP_DEVICE_TYPE, &lDeviceType, 0);
if (lDeviceType == ED_DEVTYPE_VCR)
{
// Device is a VTR. Enable all VTR functions.
}
else
{
// Device is a camera.
// Enable record and record-pause; disable other functions.
}
}
如果摄像机脱机,则应在下次可用时再次查询它。 筛选器图形管理器在删除设备时发布 EC_DEVICE_LOST 事件。
UVC 驱动程序
由于 USB 视频设备可以在不重置的情况下切换模式,因此前面的示例中显示的代码对于 USB 设备来说并不可靠。 请改用 ISelector 接口来获取当前模式。 如果设备支持模式,还可以使用此接口以编程方式切换模式。
相关主题