Compartilhar 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 na 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 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 do Renderizador de Vídeo é um renderizador de vídeo robusto para todos os fins.

Nota

No Windows XP e posterior, o renderizador de vídeo padrão é o Filtro do Renderizador de Combinação 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 odo Renderizador Correto.

 

O Renderizador de Vídeo usa DirectDraw e superfícies de sobreposição, se a placa de vídeo der 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 do 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 versão final chamada para o Renderizador de Vídeo, que ocorre quando o Gerenciador de Grafo de Filtro é desligado. Caso contrário, o aplicativo poderá ficar em deadlock.

     

Etiqueta Valor
Interfaces de filtro IBaseFilter, IBasicVideo, IBasicVideo2, IDirectDrawVideo, IKsPropertyIMediaPosition, IMediaSeeking, IQualityControl, IQualProp, IVideoWindow
Tipos de mídia de pino de entrada Formatos de vídeo não compactados.
Interfaces de pin 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
de Mérito Windows XP e posterior: MERIT_UNLIKELY
de categoria de filtro de CLSID_LegacyAmFilterCategory

 

Observações

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.

As seguintes observações são destinadas a desenvolvedores de filtro:

O Renderizador de Vídeo aceita formatos YUV se a placa gráfica de vídeo dá suporte a superfícies de sobreposição YUV. No entanto, quando ele se conecta ao filtro upstream pela primeira vez, 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 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 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 encontrar dois monitores em um sistema de vários monitores ou se o retângulo de vídeo estiver completamente obscurecido por outra janela.

Nota

O Renderizador de Combinação 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, 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 valorNULL não, 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 comuns de YUV. 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 se 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.

de Filtros do DirectShow