Uso dei buffer multimediali DMO

I dati di input vengono passati ai codec DMO usando i buffer multimediali. Un buffer multimediale è un oggetto che implementa l'interfaccia IMediaBuffer . È possibile implementare una classe per questo scopo o, se si usa Windows Media Format SDK nell'applicazione, è possibile usare gli oggetti buffer definiti in tale SDK.

Se si implementa la propria classe buffer, prestare attenzione a come viene gestita la memoria del buffer. Quando si passa un esempio di input, DMO mantiene un riferimento al buffer finché non viene completato con l'esempio. È possibile rilasciare immediatamente il riferimento all'interfaccia IMediaBuffer , ma non è possibile sapere quando il codec non necessita più del riferimento. Per essere certi che la memoria venga liberata quando l'oggetto si elimina, è necessario implementare la classe in modo che alloca e libera la memoria per il buffer internamente.

Poiché i DMO mantengono riferimenti ai buffer per un periodo di tempo sconosciuto, non è una questione semplice usare un pool limitato di buffer. La soluzione più semplice consiste nell'allocare un nuovo buffer per ogni esempio, anche se ciò è inefficiente.

Una soluzione migliore consiste nell'implementare un oggetto per gestire un pool di buffer. A tale scopo, scrivere codice nel metodo Release dell'implementazione di IMediaBuffer che chiama un metodo della gestione buffer (anziché eliminarlo) quando il conteggio dei riferimenti scende a zero. Gestione buffer può quindi mantenere un elenco di puntatori agli oggetti buffer allocati. Creare un metodo nella gestione buffer per controllare l'elenco di buffer gratuiti e restituire un puntatore in modo che l'applicazione possa accedere ai buffer quando necessario. Questo metodo deve creare nuovi buffer in base alle esigenze e aggiungerli all'elenco.

Uso di CODEC DMO