VMR com vários fluxos (modo de mistura)
[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 VMR pode renderizar vários fluxos de entrada. Nessa configuração, chamada de modo de mistura, o VMR carrega seu mixer e compositor para executar a mistura e a mistura antes da renderização. O modo de mistura pode ser usado enquanto o VMR está no modo de janela ou no modo sem janela.
O modo de mistura requer que o driver gráfico suporte os sinalizadores de capacidade DDCAPS_BLTFOURCC e DDCAPS_BLTSTRETCH (conversão de espaço de cor e blitting de alongamento, respectivamente). Quase todos os novos drivers gráficos têm esses recursos. Além disso, o driver deve suportar a criação de destinos de renderização Direct3D para a profundidade de pixel da tela atual. Alguns dispositivos não suportam operações Direct3D quando o ecrã está definido para 24 bits por pixel. Para obter mais informações, consulte a documentação do DirectX Graphics SDK.
Observação
Quando o VMR mistura vários fluxos de vídeo, o gráfico de filtro não procura corretamente. Se você precisar procurar vários fluxos de vídeo, deverá criar gráficos de filtro separados que compartilhem o mesmo objeto alocador-apresentador personalizado.
Configurando o VMR-7 para vários fluxos
Para renderizar vários fluxos de entrada com o VMR-7, faça o seguinte:
- Antes de conectar qualquer um dos pinos de entrada do VMR, chame o IVMRFilterConfig::SetNumberOfStreams método com o número de fluxos. Isso faz com que o VMR carregue o mixer e o compositor e crie o número especificado de pinos de entrada.
- Chame IVMRFilterConfig::SetRenderingPrefs para especificar várias preferências de renderização.
- Ligue os pinos aos filtros a montante. 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 no VMR não conseguirem concordar com uma conexão, uma nova instância do 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 deve sempre verificar se a instância correta do 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.
- Use o interface IVMRMixerControl no VMR para controlar parâmetros para cada fluxo, como o valor alfa, a ordem Z e o retângulo de saída.
- Execute o gráfico de filtro.
Configurando o VMR-9 para vários fluxos
Por padrão, o VMR-9 cria quatro pinos de entrada. Se você quiser misturar mais de quatro fluxos de vídeo, ligue IVMRFilterConfig9::SetNumberOfStreams antes de conectar qualquer pino de entrada. Use o interface de IVMRMixerControl9 para definir os parâmetros de fluxo, como alfa, ordem Z e posição.
Tópicos relacionados