Informazioni sugli esempi multimediali e sugli allocatori
[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.
I filtri recapitano i dati tra connessioni pin. I dati vengono spostati dal pin di output di un filtro al pin di input di un altro filtro. Il modo più comune per il pin di output per recapitare i dati consiste nel chiamare il metodo IMemInputPin::Receive sull'input, anche se esistono anche alcuni altri meccanismi.
A seconda del filtro, la memoria per i dati multimediali può essere allocata in diversi modi: nell'heap, in una superficie DirectDraw, usando la memoria GDI condivisa o usando un altro meccanismo di allocazione. L'oggetto responsabile dell'allocazione della memoria è denominato allocatore, ovvero un oggetto COM che espone l'interfaccia IMemAllocator .
Quando due pin si connettono, uno dei pin deve fornire un allocatore. DirectShow definisce una sequenza di chiamate al metodo usate per stabilire quale pin fornisce l'allocatore. I pin concordano anche sul numero di buffer che verranno creati dall'allocatore e sulle dimensioni dei buffer.
Prima dell'inizio del flusso, l'allocatore crea un pool di buffer. Durante lo streaming, il filtro upstream riempie i buffer con i dati e li recapita al filtro downstream. Tuttavia, il filtro upstream non assegna i puntatori non elaborati del filtro downstream ai buffer. Usa invece oggetti COM denominati campioni multimediali, che l'allocatore crea per gestire i buffer. Gli esempi multimediali espongono l'interfaccia IMediaSample . Un esempio di supporto contiene:
- puntatore al buffer sottostante
- timestamp
- vari flag
- facoltativamente, un tipo di supporto
Il timestamp definisce l'ora di presentazione usata dal filtro del renderer per pianificare il rendering. I flag indicano elementi come se si è verificato un'interruzione nei dati dopo l'esempio precedente. Il tipo di supporto consente ai filtri di modificare i formati a metà flusso. In genere, l'esempio non ha alcun tipo di supporto, che indica che il formato non è stato modificato rispetto all'esempio precedente.
Mentre un filtro usa un buffer, contiene il conteggio dei riferimenti nell'esempio. L'allocatore usa il conteggio dei riferimenti per determinare quando può riutilizzare il buffer. Ciò impedisce a un filtro di sovrascrivere un buffer che un altro filtro sta ancora utilizzando. Un esempio non torna al pool di campioni disponibili dell'allocatore finché non viene rilasciato da ogni filtro.
Per altre informazioni, vedere gli argomenti seguenti:
- L'argomento Esempi e allocatori fornisce una descrizione più dettagliata del funzionamento degli allocatori.
- L'argomento Flusso di dati nel grafico dei filtri offre una panoramica generale del flusso di dati in DirectShow.
Gli argomenti seguenti sono destinati agli sviluppatori che scrivono filtri personalizzati:
Argomenti correlati