Compartir a través de


Control de los cambios de formato del representador de 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 esta sección se describe cómo un filtro de descodificador o filtro de transformación debe controlar los cambios de formato del representador de vídeo.

Filtro de representador de vídeo

Cuando se conecta el filtro antiguo de Video Renderer , requiere un formato RGB que coincida con el formato de presentación del monitor principal. Esto le permite usar GDI para la representación si DirectDraw no está disponible. Cuando se inicia la reproducción, Video Renderer puede cambiar a un formato compatible con DirectDraw. Para comprobar si el filtro ascendente puede admitir el nuevo formato, Video Renderer llama a IPin::QueryAccept en el pin de salida del filtro ascendente. Si el filtro ascendente acepta el nuevo formato, el método QueryAccept devuelve S_OK. Video Renderer cambia los formatos adjuntando un tipo de medio con el nuevo formato al siguiente ejemplo multimedia devuelto por su asignador. El filtro ascendente debe comprobar si hay cambios de formato llamando a IMediaSample::GetMediaType en cada ejemplo. Video Renderer puede cambiar entre el formato original y el nuevo formato en cualquier momento durante el streaming. No llama a QueryAccept después del primer cambio de formato. Una vez que el filtro ascendente haya aceptado el nuevo formato, debe poder cambiar hacia atrás y hacia adelante.

El filtro ascendente puede rechazar el cambio de formato devolviendo S_FALSE de QueryAccept. En ese caso, Video Renderer sigue usando GDI con el formato original.

Filtro del representador de mezcla de vídeos

El filtro Representador de mezcla de vídeos (VMR-7 y VMR-9) se conectará con cualquier formato compatible con el hardware gráfico del sistema. VMR-7 siempre usa DirectDraw para la representación y asigna las superficies de DirectDraw subyacentes cuando se conecta el filtro ascendente. VmR-9 siempre usa Direct3D para la representación y asigna las superficies de Direct3D subyacentes cuando se conecta el filtro ascendente.

El hardware gráfico puede requerir un intervalo de superficie mayor que el ancho de la imagen. En ese caso, VMR solicita un nuevo formato mediante una llamada a QueryAccept. Informa del paso de superficie en el miembro biWidth del BITMAPINFOHEADER en el formato de vídeo. Si el filtro ascendente no devuelve S_OK de QueryAccept, VMR rechaza el formato e intenta conectarse con el siguiente formato anunciado por el filtro ascendente. VmR asocia el tipo de medio con el nuevo formato al primer ejemplo de medio. Después del primer ejemplo, el formato permanece constante; VMR no cambiará los formatos mientras se ejecuta el grafo.

Representación mejorada de vídeo (EVR)

El EVR siempre usa Direct3D para la representación. Si se necesita un intervalo de superficie mayor, el EVR usa el mismo mecanismo QueryAccept que el VMR.

QueryAccept (upstream)