Negociação do tipo de mídia EVR
[O componente descrito nesta página, Enhanced Video Renderer, é um recurso herdado. Ele foi substituído pelo Simple Video Renderer (SVR) exposto através do MediaPlayer e IMFMediaEngine componentes. 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 Windows 10 e Windows 11. A Microsoft recomenda enfaticamente 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 renderizador de vídeo avançado (EVR) valida tipos de mídia.
Para o filtro EVR do DirectShow, a negociação de tipo ocorre quando os pinos do filtro estão conectados.
Para o coletor de mídia EVR, os tipos de mídia são definidos através da interfaceIMFMediaTypeHandlernos 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 preferido. O cliente deve testar os 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 subfluxos.
Para o fluxo de referência, o misturador EVR obtém uma lista de formatos de destino de renderização compatíveis com DirectX Video Acceleration (DXVA). O apresentador EVR usa essa lista para selecionar o formato para a cadeia de permuta Direct3D. Se nenhum formato de destino de renderização compatível puder ser encontrado, o EVR rejeitará o tipo de mídia.
Para os subfluxos, o misturador EVR consulta se o dispositivo DXVA suporta esse formato de subfluxo em combinação com o formato de destino de renderização que foi selecionado para o fluxo de referência. Como resultado, os formatos de subfluxo disponíveis podem mudar dependendo do fluxo de referência.
Aqui está o processo em mais detalhes. Esses detalhes não são importantes para a maioria dos aplicativos, mas podem ser úteis se você estiver escrevendo um misturador ou apresentador personalizado.
Para o fluxo de referência, a negociação acontece da seguinte forma:
O EVR chama IMFTransform::SetInputType no misturador.
O misturador converte o tipo de mídia para uma descrição DXVA 2.0, usando a estrutura DXVA2_VideoDesc.
O mixer chama IDirectXVideoProcessorService::GetVideoProcessorDeviceGuids para obter uma lista de GUIDs do processador de vídeo.
Para cada GUID do processador de vídeo, o mixer chama IDirectXVideoProcessorService::GetVideoProcessorRenderTargets para obter os formatos de destino de renderização suportados.
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.
O apresentador chama IMFTransform::GetOutputAvailableType para obter uma lista de formatos de saída disponíveis do misturador. O misturador gera esta lista a partir dos formatos obtidos no passo 4.
O apresentador seleciona um formato e chama IMFTransform::SetOutputType no misturador.
Para subfluxos, o processo é mais simples:
O EVR chama IMFTransform::SetInputType no misturador.
O mixer chama IDirectXVideoProcessorService::GetVideoProcessorSubStreamFormats para obter uma lista de formatos de substream disponíveis.
Se o formato proposto estiver contido nesta lista, o EVR aceita o tipo de entrada.
Tópicos relacionados