Condividi tramite


elaborazione In-Place

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stato sostituito da MediaPlayer, IMFMediaEnginee Acquisizione 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 Acquisizione audio/video 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.

Alcune trasformazioni dei dati possono essere eseguite modificando direttamente i dati. Questa operazione viene chiamata elaborazione sul posto. Molti effetti audio e video possono essere eseguiti in questo modo. Se un DMO supporta l'elaborazione sul posto, espone l'interfaccia IMediaObjectInPlace. L'elaborazione sul posto è in genere più efficiente rispetto all'uso di buffer separati per l'output. Una delle eccezioni principali è quando il buffer risiede nella memoria video. In questo caso, le operazioni di lettura sono molto più lente rispetto alle operazioni di scrittura, quindi l'elaborazione sul posto non è consigliata.

Per elaborare i dati direttamente, il client effettua una singola chiamata al metodo IMediaObjectInPlace::Process, invece di effettuare chiamate separate a ProcessInput e ProcessOutput. Il metodo processo è sincrono; tutte le elaborazioni vengono eseguite all'interno della chiamata. Inoltre, l'elaborazione sul posto non usa oggetti IMediaBuffer. Il metodo Process prende direttamente un puntatore al buffer di memoria.

Un DMO che supporta l'elaborazione sul posto deve comunque implementare l'interfaccia IMediaObject, inclusi i metodi ProcessInput e ProcessOutput. Il client può scegliere se usare l'elaborazione sul posto o usare buffer separati. Tuttavia, non combinare i due tipi di elaborazione. Se chiami Process, non chiamare ProcessInput o ProcessOutpute viceversa.

Effetti Tails

Un DMO sul posto potrebbe creare un output aggiuntivo dopo l'arresto dell'input. Si tratta di una coda di effetto . Ad esempio, un effetto riverbero continua dopo che l'input raggiunge il silenzio. Se è presente una coda di effetti, il metodo Process restituisce S_FALSE. Dopo che l'applicazione ha elaborato tutti i dati, può generare l'effetto tail inviando buffer vuoti al metodo Process.

Ospitare direttamente un DMO