Configurar la calidad del vídeo
[La característica asociada a esta página, DirectShow, es una característica heredada. Se ha reemplazado por MediaPlayer, IMFMediaEngine y Captura de audio/vídeo en Media Foundation. Esas características se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use MediaPlayer, IMFMediaEngine y Audio/Video Capture en Media Foundation en lugar de DirectShow, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.
En este tema se describe cómo una aplicación puede cambiar mediante programación la configuración de imagen y cámara en un dispositivo de captura de vídeo.
Configuración de ProcAmp
Las cámaras de vídeo del modelo de controlador de Windows (WDM) pueden admitir propiedades que controlan la calidad de la imagen:
- Compensación de retroiluminación
- Luminosidad
- Compare
- Ganar
- Gamma
- Matiz
- Saturación
- Nitidez
- Balance de blancos
Estas propiedades se controlan a través de la interfaz IAMVideoProcAmp . Use esta interfaz como se indica a continuación:
- Llame a QueryInterface en el filtro de captura para la interfaz IAMVideoProcAmp .
- Para cada propiedad que quiera establecer, llame al método IAMVideoProcAmp::GetRange . Las propiedades se especifican mediante la enumeración VideoProcAmpProperty . Si se produce un error en el método GetRange , significa que la cámara no admite esa propiedad en particular.
- Si GetRange se realiza correctamente, devuelve el intervalo de valores admitidos para la propiedad , el valor predeterminado y el incremento mínimo.
- Para obtener el valor actual de una propiedad, llame a IAMVideoProcAmp::Get.
- Para establecer una propiedad, llame al método IAMVideoProcAmp::Set . Para restaurar una propiedad en su valor predeterminado, llame a GetRange para buscar el valor predeterminado y pasar ese valor al método Set .
No es necesario detener el gráfico de filtros al establecer las propiedades.
El código siguiente configura un control de barra de seguimiento para que se pueda usar para establecer el brillo. El intervalo de la barra de seguimiento corresponde al rango de brillo que admite el dispositivo y la posición de la barra de seguimiento corresponde a la configuración de brillo inicial del dispositivo.
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);
}
}
Configuración de la cámara
La interfaz IAMCameraControl es similar a IAMVideoProcAmp, pero controla varios conjuntos en la propia cámara:
- Exposure
- Foco
- Iris
- Movimiento panorámico
- Balanceo
- Inclinación
- Zoom
Para usar esta interfaz, siga los mismos pasos que se usan para IAMVideoProcAmp:
- Consulte el filtro de captura para IAMCameraControl.
- Llame a IAMCameraControl::GetRange para buscar qué configuración se admite y el intervalo posible para cada configuración.
- Llame a IAMCameraControl::Get para obtener el valor actual de una configuración.
- Llame a IAMCameraControl::Set para establecer el valor.
Temas relacionados