Freigeben über


Arbeiten mit DMO-Medienpuffern

Eingabedaten werden mithilfe von Medienpuffern an den Codec-DMOs übergeben. Ein Medienpuffer ist ein Objekt, das die IMediaBuffer Schnittstelle implementiert. Sie können eine Klasse für diesen Zweck implementieren oder, wenn Sie das Windows Media Format SDK in Ihrer Anwendung verwenden, 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 das DMO einen Verweis auf den Puffer bei, bis es mit dem Beispiel fertig ist. Sie können Ihren Verweis sofort auf die IMediaBuffer Schnittstelle freigeben, aber Sie haben keine Möglichkeit zu wissen, wann der Codec seinen Verweis nicht mehr benötigt. Um sicherzustellen, dass der Speicher beim Löschen des Objekts selbst freigegeben wird, sollten Sie die Klasse implementieren, damit sie den Speicher für den Puffer intern zuordnet und freigibt.

Da die DMOs Verweise auf Puffer für einen unbekannten Zeitraum beibehalten, ist es keine triviale Angelegenheit, einen begrenzten Pufferpool zu verwenden. Die einfachste Lösung besteht darin, für jedes Beispiel einen neuen Puffer zuzuweisen, obwohl dies ineffizient ist.

Eine bessere Lösung besteht darin, ein Objekt zum Verwalten eines Pufferpools zu implementieren. Schreiben Sie dazu Code in der Release--Methode Ihrer IMediaBuffer Implementierung, die eine Methode des Puffer-Managers aufruft (anstatt sich selbst zu löschen), wenn die Verweisanzahl auf Null fällt. Der Puffer-Manager kann dann eine Liste von Zeigern für zugeordnete Pufferobjekte verwalten. Erstellen Sie eine Methode im 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.

Arbeiten mit Codec-DMOs