Gestione delle modifiche del formato dal renderer video

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

In questa sezione viene descritto come un filtro decodificatore o un filtro di trasformazione deve gestire le modifiche di formato dal renderer video.

Filtro del renderer video

Quando il vecchio filtro Renderer video si connette, richiede un formato RGB corrispondente al formato di visualizzazione del monitor primario. Ciò consente di usare GDI per il rendering se DirectDraw non è disponibile. Al momento dell'avvio della riproduzione, il Renderer video può passare a un formato compatibile con DirectDraw. Per verificare se il filtro upstream può supportare il nuovo formato, il renderer video chiama IPin::QueryAccept nel pin di output del filtro upstream. Se il filtro upstream accetta il nuovo formato, il metodo QueryAccept restituisce S_OK. Il renderer video commuta i formati associando un tipo di supporto al nuovo formato al successivo esempio multimediale restituito dal relativo allocatore. Il filtro upstream deve controllare le modifiche del formato chiamando IMediaSample::GetMediaType in ogni esempio. Il Renderer video può tornare indietro e indietro tra il formato originale e il nuovo formato in qualsiasi momento durante lo streaming. Non chiama QueryAccept dopo la modifica del primo formato. Dopo aver accettato il nuovo formato, il filtro upstream deve essere in grado di tornare indietro e indietro.

Il filtro upstream può rifiutare la modifica del formato restituendo S_FALSE da QueryAccept. In questo caso, il Renderer video continua a usare GDI con il formato originale.

Filtro del renderer di mix video

Il filtro Del renderer di mix video (VMR-7 e VMR-9) si connetterà a qualsiasi formato supportato dall'hardware grafico nel sistema. VmR-7 usa sempre DirectDraw per il rendering e alloca le superfici DirectDraw sottostanti quando il filtro upstream si connette. VmR-9 usa sempre Direct3D per il rendering e alloca le superfici Direct3D sottostanti quando il filtro upstream si connette.

L'hardware grafico può richiedere una superficie più grande rispetto alla larghezza dell'immagine. In tal caso, vmR richiede un nuovo formato chiamando QueryAccept. Segnala lo stride di superficie nel membro biWidth di BITMAPINFOHEADER nel formato video. Se il filtro upstream non restituisce S_OK da QueryAccept, vmR rifiuta il formato e tenta di connettersi usando il formato successivo annunciato dal filtro upstream. VmR collega il tipo di supporto con il nuovo formato al primo esempio multimediale. Dopo il primo esempio, il formato rimane costante; vmR non cambierà i formati mentre il grafico è in esecuzione.

Rendering video avanzato (EVR)

EVR usa sempre Direct3D per il rendering. Se è necessario uno stride di superficie più grande, EVR usa lo stesso meccanismo QueryAccept della VMR.

QueryAccept (Upstream)