Поделиться через


Отображение диалоговых окон захвата VFW

[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код использовал MediaPlayer, IMFMediaEngine и аудио- и видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, использующий устаревшие API, чтобы по возможности использовать новые API.]

Устройство захвата, которое по-прежнему использует драйвер Видео для Windows (VFW), может поддерживать любое из следующих трех диалоговых окон, которые используются для настройки устройства.

. Описание
Источник видео Используется для выбора видеовхода и настройки параметров устройства, таких как яркость или контрастность изображения.
Формат видео Используется для выбора размеров изображения и битовой глубины.
Видеотрансляции Используется для управления внешним видом отображаемого видео.

 

Чтобы отобразить одно из этих диалоговых окон, выполните следующие действия.

  1. Остановите граф фильтров.
  2. Запросите фильтр записи для интерфейса IAMVfwCaptureDialogs . Если QueryInterface завершается успешно, это означает, что устройство захвата является устройством VFW.
  3. Вызовите IAMVfwCaptureDialogs::HasDialog, чтобы проверка, поддерживает ли драйвер диалоговое окно, которое требуется отобразить. Перечисление VfwCaptureDialogs определяет флаги для каждого из диалоговых окон VFW. HasDialog возвращает S_OK, если диалоговое окно поддерживается. В противном случае он возвращает S_FALSE, поэтому проверка для значения S_OK напрямую, а не с помощью макроса SUCCEEDED.
  4. Если диалоговое окно поддерживается, вызовите IAMVfwCaptureDialogs::ShowDialog для отображения диалогового окна.
  5. Перезапустите граф.

В следующем коде показаны следующие шаги для диалогового окна Источник видео:

pControl->Stop(); // Stop the graph.

// Query the capture filter for the IAMVfwCaptureDialogs interface.
IAMVfwCaptureDialogs *pVfw = 0;
hr = pCap->QueryInterface(IID_IAMVfwCaptureDialogs, (void**)&pVfw);
if (SUCCEEDED(hr))
{
    // Check if the device supports this dialog box.
    if (S_OK == pVfw->HasDialog(VfwCaptureDialog_Source))
    {
        // Show the dialog box.
        hr = pVfw->ShowDialog(VfwCaptureDialog_Source, hwndParent);
    }
}
pControl->Run();

Настройка устройства захвата видео