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.
Argomenti correlati
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per