Modifiche al formato dinamico

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation anziché DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

Quando due filtri si connettono, accettano un tipo di supporto, che descrive il formato dei dati che il filtro upstream verrà recapitato. Nella maggior parte dei casi, il tipo di supporto è fisso per la durata della connessione. DirectShow offre tuttavia un supporto limitato per i filtri per modificare il tipo di supporto. Quando un filtro commuta tipi di supporti, viene chiamato modifica del formato dinamico. Se si scrive un filtro DirectShow, è necessario essere consapevoli dei meccanismi per le modifiche al formato dinamico. Anche se il filtro non supporta tali modifiche, deve rispondere correttamente se un altro filtro richiede un nuovo formato.

DirectShow definisce diversi meccanismi distinti per le modifiche al formato dinamico, a seconda dello stato del grafico di filtro e del tipo di modifica necessario.

  • Se il grafico viene arrestato, i pin possono riconnettersi e rinegoziare il tipo di supporto. Per altre informazioni, vedere Riconnessione dei pin.
  • Alcuni filtri possono riconnettersi anche quando il grafico è attivo (in esecuzione o sospeso). Per altre informazioni su questo meccanismo, vedere Riconnessione dinamica.

In caso contrario, se il grafico è attivo, ma i filtri in questione non supportano le riconnessioni dinamiche dei pin, esistono tre possibili meccanismi per modificare il formato:

  • QueryAccept (Downstream) viene usato quando se un pin di output propone una modifica del formato al peer downstream, ma solo se il nuovo formato non richiede un buffer più grande.
  • QueryAccept (Upstream) viene usato quando un pin di input propone una modifica del formato al peer upstream. Il nuovo formato può essere la stessa dimensione oppure può essere maggiore.
  • ReceiveConnection viene usato quando un pin di output propone una modifica del formato al peer downstream e il nuovo formato richiede un buffer più grande.

Gestione delle modifiche del formato dal renderer video