Режим устройства
[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код использовал MediaPlayer, IMFMediaEngine и аудио- и видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, использующий устаревшие API, чтобы по возможности использовать новые API.]
Видеокамеры IEEE 1394 и USB могут переключаться между режимом камеры и видеомагнитофона (VTR). Когда видеокамера IEEE 1394 переключает режимы, устройство сбрасывается, и приложение должно перечислить его снова. Приложение не может переключить режим программным способом. С другой стороны, USB-видеокамеры могут переключаться между режимами камеры и VTR без сброса, а приложение может изменить режим.
Драйвер MSDV
Чтобы получить текущий режим на устройстве IEEE 1394, вызовите метод IAMExtDevice::GetCapability со значением ED_DEVCAP_DEVICE_TYPE. Если метод возвращает значение 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 для получения текущего режима. Этот интерфейс также можно использовать для программного переключения режимов, если устройство поддерживает его.
Связанные темы