Gestione delle modifiche al formato dal renderer video
[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, IMFMediaEnginee cattura audio/video in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice utilizzi MediaPlayer, IMFMediaEngine e l' acquisizione audio/video con 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.
Questa sezione descrive in che modo un filtro decodificatore o un filtro di trasformazione deve gestire le modifiche al formato dal renderer video.
filtro del renderer video
Quando il vecchio Filtro di rendering video si connette, richiede un formato RGB che corrisponda al formato di visualizzazione del monitor primario. In questo modo è possibile usare GDI per il rendering se DirectDraw non è disponibile. All'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 sul pin di output del filtro upstream. Se il filtro upstream accetta il nuovo formato, il metodo QueryAccept restituisce S_OK. Il renderer video cambia i formati collegando un tipo di supporto con il nuovo formato al successivo campione multimediale restituito dal relativo allocatore. Il filtro upstream deve verificare la presenza di modifiche al formato chiamando IMediaSample::GetMediaType in ogni esempio. Il Renderer video può passare dal formato originale al nuovo formato in qualsiasi momento durante lo streaming. Non chiama QueryAccept dopo il primo cambio di formato. Una volta che il filtro upstream ha accettato il nuovo formato, deve essere in grado di passare avanti e indietro.
Il filtro upstream può rifiutare la modifica del formato restituendo S_FALSE da QueryAccept. In tal caso, il Renderer video continua a usare GDI con il formato originale.
filtro del renderer di miscelazione video
Il filtro del renderer di combinazione 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 potrebbe richiedere un intervallo di superficie maggiore rispetto alla larghezza dell'immagine. In tal caso, VMR richiede un nuovo formato chiamando QueryAccept. Segnala lo stride di superficie nel membro biWidth del 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 campione, il formato rimane costante; VMR non cambierà i formati mentre il grafico è in esecuzione.
Renderizzazione Video Avanzata (EVR)
EVR usa sempre Direct3D per il rendering. Se è necessario uno stride di superficie più grande, l'EVR utilizza lo stesso meccanismo di QueryAccept del VMR.
Argomenti correlati