设备模式
[与此页面关联的功能 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 接口来获取当前模式。 如果设备支持,还可以使用此接口以编程方式切换模式。
相关主题