Arbeiten mit DMO-Medienpuffern
Eingabedaten werden mithilfe von Medienpuffern an die Codec-DMOs übergeben. Ein Medienpuffer ist ein Objekt, das die IMediaBuffer-Schnittstelle implementiert. Sie können zu diesem Zweck eine Klasse implementieren, oder wenn Sie das Windows Media Format SDK in Ihrer Anwendung verwenden, können Sie die Pufferobjekte verwenden, die in diesem SDK definiert sind.
Wenn Sie Ihre eigene Pufferklasse implementieren, achten Sie darauf, wie der Pufferspeicher behandelt wird. Wenn Sie ein Eingabebeispiel übergeben, behält die DMO einen Verweis auf den Puffer bei, bis er mit dem Beispiel abgeschlossen ist. Sie können Ihren Verweis auf die IMediaBuffer-Schnittstelle sofort freigeben, aber Sie können nicht wissen, wann der Codec seinen Verweis nicht mehr benötigt. Um sicher zu sein, dass der Arbeitsspeicher freigegeben wird, wenn das Objekt selbst löscht, sollten Sie Ihre Klasse implementieren, damit sie den Speicher intern zuordnet und für den Puffer freigibt.
Da die DMOs Verweise auf Puffer für einen unbekannten Zeitraum beibehalten, ist es keine triviale Angelegenheit, einen begrenzten Pool von Puffern zu verwenden. Die einfachste Lösung besteht darin, jedem Beispiel einen neuen Puffer zuzuweisen, obwohl dies ineffizient ist.
Eine bessere Lösung besteht darin, ein Objekt zu implementieren, um einen Pool von Puffern zu verwalten. Schreiben Sie hierzu Code in die Release-Methode Ihrer IMediaBuffer-Implementierung , die eine Methode Ihres Puffer-Managers aufruft (anstatt sich selbst zu löschen), wenn die Verweisanzahl auf 0 sinkt. Der Puffer-Manager kann dann eine Liste von Zeigern auf zugeordnete Pufferobjekte verwalten. Erstellen Sie eine Methode in Ihrem Puffer-Manager, um die Liste der freien Puffer zu überprüfen und einen Zeiger zurückzugeben, damit Ihre Anwendung bei Bedarf auf Puffer zugreifen kann. Diese Methode sollte bei Bedarf neue Puffer erstellen und der Liste hinzufügen.
Zugehörige Themen