Partilhar via


Filtro do Renderizador de Vídeo

[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation em vez de DirectShow, 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 filtro do Renderizador de Vídeo é um renderizador de vídeo robusto para todas as finalidades.

Observação

No Windows XP e posterior, o renderizador de vídeo padrão é o Filtro do Renderizador de Mixagem de Vídeo 7 (VMR-7). A VMR-7 e o Renderizador de Vídeo têm o nome amigável "Renderizador de Vídeo". Em plataformas anteriores, o Renderizador de Vídeo é o renderizador padrão. Consulte Escolhendo o renderizador correto.

 

O Renderizador de Vídeo usa DirectDraw e superfícies de sobreposição, se o vídeo cartão dá suporte a elas. O Gerenciador de Grafo de Filtro expõe a interface IVideoWindow , que permite que os aplicativos definam e recuperem propriedades no Renderizador de Vídeo. Com as placas de vídeo mais recentes, o Renderizador de Vídeo dá suporte à renderização em tela inteira. Caso contrário, o Gerenciador de Grafo de Filtro alterna automaticamente para o filtro Renderizador de Tela Inteira para o modo de tela inteira. Consulte IVideoWindow::p ut_FullScreenMode para obter mais informações.

  • ! [Importante]

    Normalmente, a janela de vídeo desse filtro processa mensagens em um thread de trabalho criado pelo Gerenciador de Grafo de Filtro. Howerver, se um aplicativo criar diretamente o filtro usando CoCreateInstance, a janela de vídeo processará mensagens no thread do aplicativo. Nesse caso, o thread do aplicativo deve ter um loop de mensagem para enviar mensagens para a janela de vídeo. Além disso, o thread não deve sair até que a chamada de Versão final para o Renderizador de Vídeo, que ocorre quando o Gerenciador de Grafo de Filtro é desligado. Caso contrário, o aplicativo poderá ter deadlock.

     

Rótulo Valor
Interfaces de filtro IBaseFilter, IBasicVideo, IBasicVideo2, IDirectDrawVideo, IKsPropertySet, IMediaPosition, IMediaSeeking, IQualityControl, IQualProp, IVideoWindow
Tipos de mídia de pino de entrada Formatos de vídeo descompactados.
Interfaces de pino de entrada IMemInputPin, IOverlay, IPin, IPinConnection, IQualityControl
Tipos de mídia de pino de saída Não aplicável.
Interfaces de pino de saída Não aplicável.
Filtrar CLSID CLSID_VideoRenderer
CLSID da página de propriedades Nenhuma página de propriedades.
Executável quartz.dll
Mérito Windows XP e posterior: MERIT_UNLIKELY
Categoria de Filtro CLSID_LegacyAmFilterCategory

 

Comentários

Na versão de depuração do Quartz.dll, se o nível de depuração LOG_TRACE estiver definido como 5 ou superior, o Renderizador de Vídeo exibirá os carimbos de data/hora de cada quadro na janela de vídeo. Esses números não aparecem na versão de varejo da DLL. Para obter mais informações, consulte Depurar funções de saída.

Os seguintes comentários destinam-se a desenvolvedores de filtros:

O Renderizador de Vídeo aceita formatos YUV se os elementos gráficos de vídeo cartão dão suporte a superfícies de sobreposição YUV. No entanto, quando ele se conecta pela primeira vez ao filtro upstream, o Renderizador de Vídeo requer um formato RGB que corresponda à profundidade de cor das configurações atuais do monitor. Por exemplo, se a configuração de exibição atual for uma cor de 24 bits, o filtro upstream deverá ser capaz de fornecer vídeo RGB de 24 bits. Quando o grafo de filtro alterna para um estado de execução, o Renderizador de Vídeo negocia uma alteração de formato dinâmico para o espaço de cor YUV apropriado.

Ao se conectar com um tipo RGB, o Renderizador de Vídeo garante que ele possa usar a GDI caso o DirectDraw não esteja disponível. Ele mudará para GDI se outro aplicativo estiver usando a memória de vídeo, se o retângulo de vídeo ultrapassar dois monitores em um sistema de vários monitores ou se o retângulo de vídeo estiver completamente obscurecido por outra janela.

Observação

O Renderizador de Combinação de Vídeos não executa esse tipo de alteração de formato dinâmico e não requer um tipo de mídia RGB, pois nunca usa GDI para renderização.

 

Para negociar uma alteração de formato, o Renderizador de Vídeo chama IPin::QueryAccept com o novo tipo de mídia. Se o filtro upstream retornar S_OK, o Renderizador de Vídeo anexará a nova mídia ao próximo exemplo. O filtro upstream deve chamar IMediaSample::GetMediaType em cada exemplo. Se GetMediaType retornar um valor não NULL, ele indicará uma alteração de formato e o filtro upstream deverá responder alternando os tipos de saída. (Não alterne tipos no método QueryAccept.) O filtro upstream deve aceitar pelo menos os principais tipos RGB e, idealmente, deve dar suporte aos tipos YUV comuns. Durante o streaming, o Renderizador de Vídeo pode alternar entre tipos YUV e RGB várias vezes. O Renderizador de Vídeo não aceita alterações de formato dinâmico iniciadas pelo filtro upstream.

Quando o Renderizador de Vídeo desenha em uma superfície de sobreposição do DirectDraw, ele aloca um único buffer para seu pino de entrada. Se o filtro upstream tentar forçar uma conexão usando vários buffers, o Renderizador de Vídeo não poderá usar a superfície de sobreposição.

Filtros do DirectShow