Compartilhar via


Negociação de tipo de mídia EVR

[O componente descrito nesta página, renderizador de vídeo avançado, é um recurso herdado. Ele foi substituído pelo SVR (Simple Video Renderer) exposto por meio dos componentes MediaPlayer e IMFMediaEngine. Para reproduzir o 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 Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use mediaplayer ou o nível inferior IMFMediaEngine APIs 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.]

Este tópico descreve como o EVR (renderizador de vídeo) aprimorado valida tipos de mídia.

  • Para o filtro EVR do DirectShow, a negociação de tipo ocorre quando os pinos do filtro são conectados.

  • Para o coletor de mídia EVR, os tipos de mídia são definidos por meio da interfaceIMFMediaTypeHandler nos coletores de fluxo. Normalmente, o carregador de topologia negocia os tipos de mídia, embora o aplicativo também possa definir os tipos de mídia diretamente.

O EVR não relata nenhum tipo de mídia preferencial. O cliente deve testar tipos de mídia até encontrar um tipo aceitável. O tipo de mídia para o fluxo de referência deve ser definido antes que os tipos possam ser definidos em qualquer um dos substreams.

Para o fluxo de referência, o mixer EVR obtém uma lista de formatos de destino de renderização DXVA (Aceleração de Vídeo DirectX) compatíveis. O apresentador do EVR usa essa lista para selecionar o formato da cadeia de troca do Direct3D. Se nenhum formato de destino de renderização compatível puder ser encontrado, o EVR rejeitará o tipo de mídia.

Para os substreams, o mixer EVR consulta se o dispositivo DXVA dá suporte a esse formato de substream em combinação com o formato de destino de renderização selecionado para o fluxo de referência. Como resultado, os formatos de substream disponíveis podem ser alterados dependendo do fluxo de referência.

Aqui está o processo com mais detalhes. Esses detalhes não são importantes para a maioria dos aplicativos, mas podem ser úteis se você estiver escrevendo um mixer ou apresentador personalizado.

Para o fluxo de referência, a negociação ocorre da seguinte maneira:

  1. O EVR chama IMFTransform::SetInputType no mixer.

  2. O mixer converte o tipo de mídia em uma descrição DXVA 2.0 usando a estrutura DXVA2_VideoDesc.

  3. O mixer chama IDirectXVideoProcessorService::GetVideoProcessorDeviceGuids para obter uma lista de GUIDs do processador de vídeo.

  4. Para cada GUID do processador de vídeo, o mixer chama IDirectXVideoProcessorService::GetVideoProcessorRenderTargets para obter os formatos de destino de renderização com suporte.

  5. O EVR chama IMFVideoPresenter::P rocessMessage no apresentador com a mensagem MFVP_MESSAGE_INVALIDATEMEDIATYPE. Essa mensagem faz com que o apresentador selecione um novo formato.

  6. O apresentador chama IMFTransform::GetOutputAvailableType para obter uma lista de formatos de saída disponíveis do mixer. O mixer gera essa lista a partir dos formatos obtidos na etapa 4.

  7. O apresentador seleciona um formato e chama IMFTransform::SetOutputType no mixer.

Para substreams, o processo é mais simples:

  1. O EVR chama IMFTransform::SetInputType no mixer.

  2. O mixer chama IDirectXVideoProcessorService::GetVideoProcessorSubStreamFormats para obter uma lista de formatos de substream disponíveis.

  3. Se o formato proposto estiver contido nesta lista, o EVR aceitará o tipo de entrada.

do renderizador de vídeo aprimorado