Mezcla no cuadrada
[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.
Este tema se aplica a Windows XP Service Pack 2 o posterior.
Cuando VMR-9 mezcla dos o más secuencias, hay dos puntos en los que el escalado puede producirse: cuando el mezclador compone los flujos de entrada y cuando el presentador asignador representa la imagen compuesta.
Las versiones anteriores de VMR-9 siempre complicó las secuencias de entrada mediante una relación de aspecto de píxeles cuadrada (1:1), incluso cuando solo había una secuencia de vídeo. Si el flujo de entrada tenía píxeles no cuadrados, esto provocó una operación de escalado innecesaria. El escalado debe evitarse tanto como sea posible, por supuesto, porque degrada la calidad final de la imagen.
A partir de Windows XP Service Pack 2, VMR-9 admite dos maneras diferentes de evitar el problema de doble escalado:
- Implemente un asignador-moderador personalizado y admita la interfaz IVMRSurfaceAllocatorEx9 .
- Use el modo de mezcla no cuadrada.
En esta sección se describe el modo de mezcla no cuadrada. Las aplicaciones pueden combinar ambas técnicas.
Cómo funciona la mezcla no cuadrada
En el modo de combinación no cuadrada, VMR-9 selecciona un flujo de entrada para que sea el tamaño de destino y PAR. El mezclador de VMR no escala el vídeo de esa secuencia ni de ninguna otra secuencia con el mismo tamaño de imagen y PAR. Las secuencias con un tamaño o una relación de aspecto diferentes se escalan para que coincidan con el par de destino y el cuadro de letras para ajustarse al tamaño final de la imagen de salida.
La elección de secuencias depende del modo de mezcla actual:
- El modo de mezcla YUV está restringido a una secuencia de vídeo en el pin 0. (Los otros pines pueden tener subpictura o subtítulo secuencias cerradas). Por lo tanto, VMR-9 siempre selecciona el pin 0 para el tamaño de la imagen de destino y PAR.
- En el modo de mezcla RGB, VMR selecciona la secuencia con el tamaño de imagen más grande. Si hay más de una, selecciona la que tiene el orden z más alto; y si todavía hay un empate, selecciona la secuencia con el número de patilla más bajo.
Ejemplos de operación
Ejemplo 1. Stream 0 es de 720 x 480 píxeles con una relación de aspecto de imagen de 16:9. Stream 1 es un 640 x 480 píxeles con una relación de aspecto de imagen de 4:3.
En este ejemplo, la secuencia 0 tiene el tamaño de imagen más grande, por lo que VMR elige esta secuencia, independientemente del modo de combinación RGB o del modo de combinación YUB. El PAR es 32:27 (16:9 / 720:480), lo que significa que la imagen debe estirarse horizontalmente por esta relación para generar la relación de aspecto de imagen correcta 16:9.
Para que coincida con el PAR de destino, el mezclador de VMR escala el flujo 1 por la relación inversa (27:32), lo que da como resultado una imagen de 540 x 480. A continuación, las dos secuencias se componen en una superficie. Para mostrar la imagen resultante correctamente, el moderador del asignador debe ajustar la imagen horizontalmente para ajustarse a la relación de aspecto de imagen 16:9.
Ejemplo 2. Stream 0 es de 720 x 480 píxeles con una relación de aspecto de imagen de 16:9. Stream 1 es un 1024 x 768 píxeles con una relación de aspecto de imagen de 4:3.
Si VMR-9 usa el modo de mezcla YUV, siempre selecciona la secuencia 0. Por lo tanto, amplía el flujo de 1 a 540 x 480 píxeles, para que coincida con el PAR de la secuencia 0.
Si VMR-9 usa el modo de mezcla RGB, selecciona la secuencia 1 como destino, ya que esa secuencia tiene el tamaño de imagen más grande. Amplía el flujo de 0 a un tamaño de imagen de 1024 x 576 píxeles. Tenga en cuenta que, en este caso, la imagen compuesta tiene un PAR de 1:1, por lo que el asignador-moderador no tiene que corregir para píxeles no cuadrados. (Es posible que deba ampliar el vídeo para tener en cuenta el rectángulo de destino).
Usar el modo de mezcla no cuadrada
Se recomienda el modo de mezcla no cuadrada si se cumple alguna de las condiciones siguientes:
- La aplicación nunca envía más de una secuencia de vídeo a VMR-9.
- La aplicación representa archivos dvd, televisión o ms-dvr. También debes usar el modo de mezcla YUV en este caso, si el hardware gráfico lo admite.
Si la aplicación mezcla varias secuencias de vídeo que pueden tener diferentes tamaños de imagen o relaciones de aspecto de píxeles, se recomienda el modo de combinación cuadrada predeterminado.
Para configurar el modo de mezcla no cuadrada, el gráfico de filtro debe detenerse y todas las patillas de entrada desconectadas en VMR-9. A continuación, llame a IVMRMixerControl9::SetMixingPrefs con la marca MixerPref9_NonSquareMixing:
DWORD dwPrefs;
pMixControl->GetMixingPrefs(&dwPrefs);
dwPrefs |= MixerPref9_NonSquareMixing;
pMixControl->SetMixingPrefs(dwPrefs);
Nota:
Si combina la marca de MixerPref9_NonSquareMixing con la marca de MixerPref9_ARAdjustXorY, VMR-9 omite la marca de MixerPref9_ARAdjustXorY.
Si la aplicación usa un presentador de asignador personalizado con modo de combinación no cuadrada, tenga en cuenta que la imagen compuesta puede tener un PAR no cuadrado. El asignador-moderador debe escalar la imagen a un par cuadrado (1:1).
Mapas de bits estáticos
Si usa la interfaz IVMRMixerBitmap9 para combinar un mapa de bits estático en el vídeo, debe considerar que el mapa de bits es una segunda secuencia de vídeo con fines del modo de mezcla de VMR.
VmR trata el mapa de bits como tener el mismo PAR que el destino. No escala el mapa de bits para ajustar la relación de aspecto de píxeles del destino. En la configuración predeterminada de VMR, el destino tiene un PAR 1:1, que coincide con la mayoría de los mapas de bits. En el modo de combinación no cuadrada, el destino podría tener píxeles no cuadrados. Para asegurarse de que el mapa de bits se muestra correctamente, la aplicación debe proporcionar una imagen cuyo PAR coincida con el PAR de destino.
Temas relacionados