Renderizador de vídeo avançado

[O componente descrito nesta página, Renderizador de Video Avançado, é um recurso herdado. Ele foi substituído pelo Renderizador de Video Simples (SVR) exposto por meio dos componentes MediaPlayer e IMFMediaEngine. Para reproduzir conteúdo de vídeo, você deve enviar dados para um desses componentes e permitir que eles instanciem o novo renderizador de vídeo. Esses componentes foram otimizados para o Windows 10 e o Windows 11. A Microsoft recomenda fortemente que o novo código use o MediaPlayer ou as APIs do IMFMediaEngine de nível inferior para reproduzir mídia de vídeo no Windows em vez do EVR, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]

O renderizador de vídeo avançado (EVR) é um componente que exibe vídeo no monitor do usuário. Há duas versões de EVR:

  • O coletor de mídia EVR, para aplicativos do Media Foundation.
  • O filtro EVR, para aplicativos DirectShow.

Ambas as versões usam os mesmos objetos internos para renderizar vídeo e compartilham muitas das mesmas interfaces.

O EVR pode misturar até 16 fluxos de vídeo. O primeiro fluxo de entrada é chamado de fluxo de referência. O fluxo de referência sempre aparece primeiro na ordem z. Todos os fluxos adicionais são chamados de subfluxos e são misturados sobre o fluxo de referência. O aplicativo pode alterar a ordem z dos subfluxos, mas nenhum subfluxo pode ser o primeiro na ordem z.

O driver gráfico determina quais formatos de vídeo têm suporte, mas normalmente estão limitados ao seguinte:

  • Fluxo de referência: YUV progressivo ou entrelaçado sem alfa por pixel (como NV12 ou YUY2); ou RGB progressivo.
  • Subfluxos: YUV progressivo com alfa por pixel, como AYUV ou AI44.

Os formatos de subfluxo disponíveis podem depender do formato do fluxo de referência. Para obter mais informações, confira Negociação de tipo de Mídia EVR.

Internamente, o EVR usa um objeto chamado mixer para compor os quadros dos fluxos de entrada em uma superfície para renderização. O mixer também realiza desentrelaçamento e correção de cores. A saída do mixer é o quadro de vídeo composto final. Um segundo objeto chamado apresentador renderiza o quadro do vídeo na tela. O apresentador agenda quando os quadros são renderizados e gerencia o dispositivo Direct3D. Um aplicativo pode fornecer uma implementação personalizada do mixer ou do apresentador.

A taxa de quadros de saída está bloqueada no fluxo de referência. Sempre que os subfluxos recebem novos quadros, o mixer os mantém. Quando o fluxo de referência recebe um novo quadro, o mixer compõe esse quadro com os quadros do subfluxo. (Se o fluxo de referência estiver entrelaçado, um quadro de referência completo pode exigir mais de uma amostra de mídia.) É possível que um subfluxo receba mais de um quadro enquanto o mixer aguarda um quadro de referência. Nesse caso, o mixer simplesmente descarta o quadro do subfluxo anterior.

Como o apresentador cria o dispositivo Direct3D, ele também é responsável por compartilhar o dispositivo com outros objetos de pipeline que precisam acessar os serviços de Aceleração de Vídeo DirectX (DXVA). Em particular, o mixer EVR usa os serviços de processamento de vídeo DXVA para desentrelaçar e mixar o vídeo. Externamente ao EVR, os softwares decodificadores podem usar DXVA para decodificação de vídeo acelerada. O apresentador compartilha o dispositivo Direct3D por meio do Gerenciador de Dispositivos do Direct3D. O diagrama a seguir mostra a arquitetura interna do EVR. (O software decodificador, sombreado em cinza, não faz parte do EVR.)

architectural diagram showing the evr.

Interfaces do EVR

O EVR dá suporte às interfaces a seguir. Algumas dessas interfaces são implementadas pelo mixer ou pelo apresentador. Para cada interface, o tópico de referência descreve como obter um ponteiro para a interface.

Interface Descrição
IEVRFilterConfig Define o número de marcadores de entrada no filtro EVR (somente DirectShow).
IEVRFilterConfigEx Configura o filtro EVR (somente DirectShow).
IEVRTrustedVideoPlugin Habilita um plug-in EVR para renderizar o vídeo protegido.
IMFDesiredSample Permite que o apresentador do EVR solicite um quadro específico do mixer.
IMFQualityAdvise Permite que o gerente de qualidade ajuste a qualidade do vídeo EVR.
IMFTopologyServiceLookup Permite que um mixer ou apresentador personalizado obtenha ponteiros de interface do EVR.
IMFVideoDeviceID Retorna o identificador do dispositivo de um mixer ou apresentador do EVR.
IMFVideoDisplayControl Controla como o EVR exibe o vídeo.
IMFVideoMixerBitmap O Alpha combina uma imagem de bitmap estática com o vídeo.
IMFVideoMixerControl Controla como o Renderizador de Video Avançado (EVR) mistura os subfluxos do vídeo.
IMFVideoMixerControl2 Controla as preferências para desentrelaçamento do vídeo.
IMFVideoPositionMapper Mapeia uma posição em um fluxo de vídeo de entrada para a posição correspondente em um fluxo de vídeo de saída.
IMFVideoPresenter Exposto pelo apresentador do EVR.
IMFVideoProcessor Controla o processamento de vídeo, incluindo ajustes, filtros de ruído e filtros de detalhes.
IMFVideoRenderer Define um mixer ou apresentador no EVR.
IMFVideoSampleAllocator Aloca exemplos de vídeo.

 

Nesta seção

Tópico Descrição
Usando o Filtro EVR do DirectShow Como usar o EVR em um aplicativo DirectShow.
Usando o Coletor de Mídia EVR Como usar o EVR em um aplicativo do Media Foundation.
Usando os Controles de Exibição de Vídeo Como controlar a forma como o EVR exibe o vídeo dentro da janela do aplicativo.
Usando os Controles do Mixer de Vídeo Como controlar a forma como o mixer EVR opera.
Negociação de Tipo de Mídia do EVR Descreve como o EVR determina quais formatos de vídeo pode aceitar como entrada.
Mixers Personalizados Como gravar um mixer personalizado para o EVR.
Como gravar um apresentador do EVR Como gravar um apresentador personalizado para o EVR.

 

Reprodução de áudio/vídeo