Condividi tramite


Specifica di un Allocator-Presenter personalizzato per VMR-7

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, IMFMediaEngine 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, IMFMediaEngine e Audio/Video Capture in Media Foundation invece di DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

Il relatore allocatore è responsabile dell'allocazione delle superfici DirectDraw e della presentazione dei fotogrammi video per il rendering. Nella maggior parte degli scenari, la funzionalità del relatore allocatore predefinito sarà più che sufficiente per le esigenze di un'applicazione. Ma collegando un relatore allocatore personalizzato, un'applicazione può ottenere l'accesso diretto ai bit video e controllare completamente il processo di rendering. Il compromesso per questa maggiore potenza è che l'applicazione deve gestire la complessità aggiuntiva della gestione della superficie DirectDraw.

uso di un allocatore personalizzato

La figura precedente mostra le interfacce di comunicazione usate da VMR e dallo allocatore-relatore. Un relatore allocatore personalizzato che esegue l'override di tutte le funzionalità di allocazione e presentazione predefinite deve implementare le interfacce IVMRImagePresenter e IVMRSurfaceAllocator e, facoltativamente, IVMRWindowlessControl.

Per sostituire l'allocatore-relatore predefinito, un'applicazione chiama il metodo IVMRSurfaceAllocatorNotify::AdviseSurfaceAllocator e passa un puntatore al nuovo allocatore-relatore. In risposta a questa chiamata, vmR chiamerà il metodo IVMRSurfaceAllocator::AdviseNotify per fornire il puntatore all'interfaccia IVMRSurfaceAllocatorNotify di VMR. Il relatore allocator userà questo puntatore a interfaccia quando si passano eventi a VMR con il metodo IVMRSurfaceAllocatorNotify::NotifyEvent .

Come soluzione alternativa, un'applicazione può usare il proprio allocatore-relatore e il relatore allocatore predefinito. In questo scenario, l'allocatore-relatore personalizzato gestisce solo le chiamate in cui è necessaria la funzionalità personalizzata e passa il resto delle chiamate dalla macchina virtuale al relatore allocatore predefinito. In molti casi, è necessario eseguire l'override dell'interfaccia IVMRImagePresenter .

uso di due relatori allocatori

Per usare sia un allocatore-relatore personalizzato che l'allocatore predefinito, un'applicazione chiamerà prima IVMRSurfaceAllocatorNotify::AdviseSurfaceAllocator per fornire un puntatore al nuovo allocatore-relatore. In questo modo l'allocatore predefinito viene eliminato definitivamente, quindi l'applicazione deve crearne un'altra chiamando QueryInterface in VMR e richiedendo l'interfaccia IVMRSurfaceAllocator . Come illustrato nella figura precedente, l'allocatore-relatore personalizzato esegue l'override dei metodi di interfaccia IVMRImagePresenter e passa semplicemente tutte le chiamate all'interfaccia IVMRSurfaceAllocator tramite l'implementazione predefinita. La figura mostra anche l'interfaccia IVMRWindowlessControl implementata nel relatore allocatore.

Specifica di un Allocator-Presenter personalizzato per VMR-9

Modalità di riproduzione senza rendering di VMR (allocator-relatori personalizzati)