Compartilhar via


Alterações de formato dinâmico

[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.]

Quando dois filtros se conectam, eles concordam com um tipo de mídia, que descreve o formato dos dados que o filtro upstream fornecerá. Na maioria dos casos, o tipo de mídia é corrigido durante a conexão. No entanto, o DirectShow oferece suporte limitado para filtros alterarem o tipo de mídia. Quando um filtro alterna tipos de mídia, ele é chamado de alteração de formato dinâmico. Se você estiver escrevendo um filtro DirectShow, deverá estar ciente dos mecanismos para alterações de formato dinâmico. Mesmo que o filtro não dê suporte a essas alterações, ele deverá responder corretamente se outro filtro solicitar um novo formato.

O DirectShow define vários mecanismos distintos para alterações de formato dinâmico, dependendo do estado do grafo de filtro e do tipo de alteração necessário.

  • Se o grafo for interrompido, os pinos poderão se reconectar e renegociar o tipo de mídia. Para obter mais informações, consulte Reconectando pinos.
  • Alguns filtros podem reconectar pinos mesmo quando o grafo está ativo (em execução ou pausado). Para obter mais informações sobre esse mecanismo, consulte Reconexão dinâmica.

Caso contrário, se o grafo estiver ativo, mas os filtros em questão não derem suporte a reconexões dinâmicas de pin, haverá três mecanismos possíveis para alterar o formato:

  • QueryAccept (Downstream) é usado quando se um pino de saída propõe uma alteração de formato para seu par downstream, mas somente se o novo formato não exigir um buffer maior.
  • QueryAccept (Upstream) é usado quando um pin de entrada propõe uma alteração de formato para seu par upstream. O novo formato pode ter o mesmo tamanho ou pode ser maior.
  • ReceiveConnection é usado quando um pin de saída propõe uma alteração de formato para seu par downstream e o novo formato requer um buffer maior.

Manipulando alterações de formato do renderizador de vídeo