Control de calidad predeterminado

[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.

Las clases base directShow implementan algunos comportamientos predeterminados para el control de calidad de vídeo.

Los mensajes de calidad comienzan en el representador. La clase base para los representadores de vídeo es CBaseVideoRenderer, que tiene el siguiente comportamiento:

  1. Cuando el representador de vídeo recibe un ejemplo, compara la marca de tiempo del ejemplo con la hora de referencia actual.
  2. El representador de vídeo genera un mensaje de calidad. En la clase base, el miembro De proporción del mensaje de calidad se limita a un intervalo de 500 (50%) a 2000 (200%). Los valores fuera de este intervalo podrían dar lugar a cambios bruscos de calidad.
  3. De forma predeterminada, el representador de vídeo envía el mensaje de calidad al pin de salida ascendente (el pin conectado a su pin de entrada). Las aplicaciones pueden invalidar este comportamiento llamando al método SetSink .

Lo que sucede a continuación depende del filtro ascendente. Normalmente, se trata de un filtro de transformación. La clase base para los filtros de transformación es CTransformFilter, que usa las clases CTransformInputPin y CTransformOutputPin para implementar patillas de entrada y salida. Juntas, estas clases tienen el siguiente comportamiento:

  1. El método CTransformOutputPin::Notify llama a CTransformFilter::AlterQuality, un método privado en la clase base de filtro.
  2. Los filtros derivados pueden invalidar AlterQuality para controlar el mensaje de calidad. De forma predeterminada, AlterQuality omite el mensaje de calidad.
  3. Si AlterQuality no controla el mensaje de calidad, el pin de salida llama a CBaseInputPin::P assNotify, un método privado en el pin de entrada del filtro.
  4. PassNotify pasa el mensaje de calidad al lugar adecuado: el siguiente pin de salida ascendente o un administrador de calidad personalizado.

Suponiendo que ningún filtro de transformación controla el mensaje de calidad, el mensaje llega finalmente al pin de salida en el filtro de origen. En las clases base, CBasePin::Notify devuelve E_NOTIMPL. La forma en que un filtro de origen determinado controla los mensajes de calidad depende de la naturaleza del origen. Algunos orígenes, como la captura de vídeo en directo, no pueden realizar un control de calidad significativo. Otros orígenes pueden ajustar la velocidad a la que entregan muestras.

En el diagrama siguiente se muestra el comportamiento predeterminado.

control de calidad en las clases base

El representador de vídeo base implementa IQualityControl::Notify, lo que significa que puede pasar mensajes de calidad al propio representador. Si establece el miembro De proporción en un valor inferior a 1000, el representador de vídeo inserta un período de espera entre cada fotograma que representa, lo que ralentiza el representador. (Puede hacerlo para reducir el uso del sistema, por ejemplo). Para obtener más información, vea CBaseVideoRenderer::ThrottleWait. Establecer el miembro Proporción en un valor mayor que 1000 no tiene ningún efecto.

Administración de control de calidad