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


Настройка качества видео

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

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

Параметры ProcAmp

Видеокамеры модели windows Driver Model (WDM) могут поддерживать свойства, управляющие качеством изображения:

  • Компенсация подсветки
  • Brightness
  • Контраст
  • Получить
  • Gamma
  • Оттенок
  • Насыщенность
  • Резкость
  • Баланс белого

Управление этими свойствами осуществляется с помощью интерфейса IAMVideoProcAmp . Используйте этот интерфейс следующим образом:

  1. Вызовите QueryInterface в фильтре записи для интерфейса IAMVideoProcAmp .
  2. Для каждого свойства, которое требуется задать, вызовите метод IAMVideoProcAmp::GetRange . Свойства задаются перечислением VideoProcAmpProperty . Если метод GetRange завершается сбоем , это означает, что камера не поддерживает это конкретное свойство.
  3. Если GetRange завершается успешно, он возвращает диапазон поддерживаемых значений для свойства, значение по умолчанию и минимальный приращение.
  4. Чтобы получить текущее значение свойства, вызовите IAMVideoProcAmp::Get.
  5. Чтобы задать свойство, вызовите метод IAMVideoProcAmp::Set . Чтобы восстановить значение свойства по умолчанию, вызовите Метод GetRange , чтобы найти значение по умолчанию и передать это значение в метод Set .

При установке свойств не нужно останавливать граф фильтров.

Следующий код настраивает элемент управления trackbar, чтобы его можно было использовать для задания яркости. Диапазон трекбара соответствует диапазону яркости, который поддерживается устройством, а положение трекбара соответствует начальной настройке яркости устройства.

HWND hTrackbar; // Handle to the trackbar control. 
// Initialize hTrackbar (not shown).

// Query the capture filter for the IAMVideoProcAmp interface.
IAMVideoProcAmp *pProcAmp = 0;
hr = pCap->QueryInterface(IID_IAMVideoProcAmp, (void**)&pProcAmp);
if (FAILED(hr))
{
    // The device does not support IAMVideoProcAmp, so disable the control.
    EnableWindow(hTrackbar, FALSE);
}
else
{
    long Min, Max, Step, Default, Flags, Val;

    // Get the range and default value. 
    hr = m_pProcAmp->GetRange(VideoProcAmp_Brightness, &Min, &Max, &Step,
        &Default, &Flags);
    if (SUCCEEDED(hr))
    {
        // Get the current value.
        hr = m_pProcAmp->Get(VideoProcAmp_Brightness, &Val, &Flags);
    }
    if (SUCCEEDED(hr))
    {
        // Set the trackbar range and position.
        SendMessage(hTrackbar, TBM_SETRANGE, TRUE, MAKELONG(Min, Max));
        SendMessage(hTrackbar, TBM_SETPOS, TRUE, Val);
        EnableWindow(hTrackbar, TRUE);
    }
    else
    {
        // This property is not supported, so disable the control.
        EnableWindow(hTrackbar, FALSE);
    }
}

Параметры камеры

Интерфейс IAMCameraControl аналогичен интерфейсу IAMVideoProcAmp, но управляет различными настройками на самой камере:

  • Экспозиция
  • Фокус
  • Ирисы
  • Сдвиг
  • Roll
  • Наклона
  • Zoom

Чтобы использовать этот интерфейс, выполните те же действия, что и для IAMVideoProcAmp:

  1. Запросите фильтр записи для IAMCameraControl.
  2. Вызовите IAMCameraControl::GetRange , чтобы найти поддерживаемые параметры и возможный диапазон для каждого из них.
  3. Вызовите IAMCameraControl::Get , чтобы получить текущее значение параметра.
  4. Вызовите IAMCameraControl::Set , чтобы задать значение.

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