Negociación de tipos de medios EVR
[El componente descrito en esta página, Enhanced Video Renderer es una característica heredada. Se ha reemplazado por Simple Video Renderer (SVR) que se expone mediante los componentes MediaPlayer y IMFMediaEngine. Para reproducir contenido de vídeo, debe enviar datos a uno de estos componentes y permitirles crear instancias del nuevo representador de vídeo. Estos componentes se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use MediaPlayer o las API de IMFMediaEngine de nivel inferior para reproducir elementos multimedia de vídeo en Windows en lugar de EVR, 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 el representador de vídeo mejorado (EVR) valida los tipos de medios.
Para el filtro DirectShow EVR, la negociación del tipo se produce cuando se conectan los elementos del filtro.
Para el receptor de medios EVR, los tipos de medios se establecen a través de la interfaz IMFMediaTypeHandler en los receptores de secuencia. Normalmente, el cargador de topología negocia los tipos multimedia, aunque la aplicación también puede establecer los tipos multimedia directamente.
El EVR no notifica ningún tipo de medio preferido. El cliente debe probar los tipos de medios hasta que encuentre un tipo aceptable. Debe establecerse el tipo de medios para la secuencia de referencia antes de poder establecer los tipos en cualquiera de las secuencias secundarias.
Para la secuencia de referencia, el mezclador de EVR obtiene una lista de formatos de destino de representación compatibles con la aceleración de vídeo DirectX (DXVA). El moderador de EVR usa esta lista para seleccionar el formato de la cadena de intercambio de Direct3D. Si no se encuentra ningún formato de destino de representación compatible, el EVR rechaza el tipo de medio.
Para las secuencias secundarias, el mezclador de EVR consulta si el dispositivo DXVA es compatible con ese formato de secuencia secundaria en combinación con el formato de destino de representación que se seleccionó para la secuencia de referencia. En consecuencia, los formatos de secuencias secundarias disponibles pueden cambiar en función de la secuencia de referencia.
A continuación le detallamos el proceso. Estos detalles no son importantes para la mayoría de las aplicaciones, pero puede ser útil si está escribiendo un mezclador personalizado o presentador.
Para la secuencia de referencia, la negociación se produce de la siguiente manera:
El EVR llama a IMFTransform::SetInputType en el mezclador.
El mezclador convierte el tipo de medio en una descripción de DXVA 2.0, utilizando la estructura DXVA2_VideoDesc.
El mezclador llama a IDirectXVideoProcessorService::GetVideoProcessorDeviceGuids para obtener una lista de GUID del procesador de vídeo.
Para cada GUID del procesador de vídeo, el mezclador llama a IDirectXVideoProcessorService::GetVideoProcessorRenderTargets para obtener los formatos de destino de representación admitidos.
El EVR llama a IMFVideoPresenter::ProcessMessage en el presentador con el mensaje MFVP_MESSAGE_INVALIDATEMEDIATYPE. Este mensaje hace que el presentador seleccione un nuevo formato.
El presentador llama a IMFTransform::GetOutputAvailableType para obtener una lista de los formatos de salida disponibles del mezclador. El mezclador genera esta lista a partir de los formatos obtenidos en el paso 4.
El presentador selecciona un formato y llama a IMFTransform::SetOutputType en el mezclador.
Para las secuencias secundarias, el proceso es más sencillo:
El EVR llama a IMFTransform::SetInputType en el mezclador.
El mezclador llama a IDirectXVideoProcessorService::GetVideoProcessorSubStreamFormats para obtener una lista de los formatos de secuencia secundaria disponibles.
Si el formato propuesto está incluido en esta lista, el EVR acepta el tipo de entrada.
Temas relacionados