Partilhar via


Filtro do renderizador de vídeo

[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEnginee Audio/Video Capture in Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda vivamente que o novo código utilize MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo no 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 Video Renderer é um renderizador de vídeo robusto e polivalente.

Observação

No Windows XP e versões posteriores, o renderizador de vídeo padrão é o Video Mixing Renderer Filter 7 (VMR-7). O VMR-7 e o renderizador de vídeo têm o nome amigável "Video Renderer". Em plataformas anteriores, o renderizador de vídeo é o renderizador padrão. Consulte Escolhendo o renderizador certo.

 

O renderizador de vídeo usa DirectDraw e superfícies de sobreposição, se a placa de vídeo os suportar. O Filter Graph Manager expõe o interface IVideoWindow, que permite que os aplicativos definam e recuperem propriedades no renderizador de vídeo. Com placas de vídeo mais recentes, o renderizador de vídeo suporta renderização em tela cheia. Caso contrário, o Filter Graph Manager alterna automaticamente para o Renderizador de tela cheia filtro 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 gráficos de filtro. Howerver, se um aplicativo cria diretamente o filtro usando CoCreateInstance, a janela de vídeo processa mensagens no thread do aplicativo. Nesse caso, o thread do aplicativo deve ter um loop de mensagens, para enviar mensagens para a janela de vídeo. Além disso, o thread não deve sair até a chamada final do Release para o renderizador de vídeo, que ocorre quando o Gerenciador de gráficos de filtro é desligado. Caso contrário, o aplicativo pode ficar bloqueado.

     

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 não comprimidos.
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
Página de propriedade CLSID Nenhuma página de propriedade.
Executável quartz.dll
Mérito Windows XP e versões posteriores: 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 comercial da DLL. Para obter mais informações, consulte Debug Output Functions.

As seguintes observações destinam-se aos desenvolvedores de filtros:

O renderizador de vídeo aceita formatos YUV se a placa gráfica de vídeo suportar 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 cor de 24 bits, o filtro upstream deverá ser capaz de fornecer vídeo RGB de 24 bits. Quando o gráfico de filtro muda para um estado de execução, o renderizador de vídeo negocia uma alteração de formato dinâmico para o espaço de cores YUV apropriado.

Ao conectar-se com um tipo RGB, o renderizador de vídeo garante que ele possa usar GDI no caso de DirectDraw não estar disponível. Ele mudará para GDI se outro aplicativo estiver usando a memória de vídeo, se o retângulo de vídeo se estender por 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 mistura de vídeo não executa esse tipo de alteração de formato dinâmico e não requer um tipo de mídia RGB, porque 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 à próxima amostra. O filtro upstream deve chamar IMediaSample::GetMediaType em cada amostra. Se GetMediaType retornar um valor deNULL não, isso indica uma alteração de formato e o filtro upstream deve responder alternando 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 suportar os tipos YUV comuns. Durante o streaming, o renderizador de vídeo pode alternar entre os tipos YUV e RGB qualquer número de 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 para uma superfície de sobreposição 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 DirectShow