VMR com vários fluxos (modo de mistura)

[O recurso associado a esta página, DirectShow, é um recurso herdado. Ele foi substituído por MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo 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 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.]

A VMR pode renderizar vários fluxos de entrada. Nessa configuração, chamada de modo de combinação, a VMR carrega seu mixer e compositor para executar a mistura e a mesclagem antes da renderização. O modo de combinação pode ser usado enquanto a VMR está no modo com janelas ou no modo sem janelas.

O modo de combinação requer que o driver de elementos gráficos dê suporte aos sinalizadores de funcionalidade DDCAPS_BLTFOURCC e DDCAPS_BLTSTRETCH (conversão de espaço de cor e ampliação, respectivamente). Quase todos os novos drivers gráficos têm esses recursos. Além disso, o driver deve dar suporte à criação de destinos de renderização Direct3D para a profundidade de pixel de exibição atual. Alguns dispositivos não dão suporte a operações Direct3D quando a exibição é definida como 24 bits por pixel. Para obter mais informações, consulte a documentação do SDK do DirectX Graphics.

Observação

Quando a VMR mistura vários fluxos de vídeo, o grafo de filtro não procura corretamente. Se você precisar buscar vários fluxos de vídeo, deverá criar grafos de filtro separados que compartilham o mesmo objeto alocador-apresentador personalizado.

 

Configurando a VMR-7 para vários fluxos

Para renderizar vários fluxos de entrada com a VMR-7, faça o seguinte:

  1. Antes de conectar qualquer um dos pinos de entrada da VMR, chame o método IVMRFilterConfig::SetNumberOfStreams com o número de fluxos. Isso faz com que a VMR carregue o mixer e o compositor e crie o número especificado de pinos de entrada.
  2. Chame IVMRFilterConfig::SetRenderingPrefs para especificar várias preferências de renderização.
  3. Conecte os pinos aos filtros upstream. A maneira mais fácil de fazer isso é chamar IGraphBuilder::RenderFile para cada fluxo de entrada. Se o pino de saída no filtro upstream (geralmente um decodificador) e o pino de entrada na VMR não puderem concordar com uma conexão, uma nova instância da VMR com configurações padrão será criada. Isso resultará em uma nova janela com "ActiveMovie" na barra de título. Para evitar que isso aconteça, o aplicativo sempre deve verificar se a instância correta da VMR está sendo usada chamando um método como IPin::ConnectedTo. Outra opção é adicionar o filtro de origem e, em seguida, conectar os pinos usando IGraphBuilder::Connect.
  4. Use a interface IVMRMixerControl na VMR para controlar parâmetros para cada fluxo, como o valor alfa, a ordenação Z e o retângulo de saída.
  5. Execute o grafo de filtro.

Configurando a VMR-9 para vários fluxos

Por padrão, a VMR-9 cria quatro pinos de entrada. Se você quiser misturar mais de quatro fluxos de vídeo, chame IVMRFilterConfig9::SetNumberOfStreams antes de conectar os pinos de entrada. Use a interface IVMRMixerControl9 para definir os parâmetros de fluxo, como alfa, ordem Z e posição.

Usando o modo de combinação VMR