CBaseAllocator-Klasse

[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde durch MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation ersetzt. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code nach Möglichkeit MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet. Microsoft schlägt vor, vorhandenen Code, der die Legacy-APIs verwendet, um nach Möglichkeit die neuen APIs zu verwenden.]

cbaseallocator-Klassenhierarchie

Die CBaseAllocator-Klasse ist eine abstrakte Basisklasse, die eine Zuweisung implementiert. Allocators machen die IMemAllocator-Schnittstelle verfügbar.

Ein Zuweisungsobjekt ist ein Objekt, das Speicherpuffer zuordnet. Der Zuteilungsgeber verwaltet eine Liste der verfügbaren Puffer. Wenn ein Client (in der Regel ein Filter) einen Puffer anfordert, ruft der Zuteilungsgeber einen aus der Liste ab. Der Client füllt den Puffer mit Daten und übergibt den Puffer möglicherweise an ein anderes Objekt. Schließlich wird der Puffer freigegeben, und der Zuweisungsgeber gibt ihn in die Liste der verfügbaren Puffer zurück.

Jeder Puffer wird von einem Objekt gekapselt, das als Medienbeispiel bezeichnet wird. Medienbeispiele sind eine Möglichkeit, Zeiger auf Speicherblöcke innerhalb des COM-Frameworks (Component Object Model) zu packen. Medienbeispiele machen die IMediaSample-Schnittstelle verfügbar und werden mithilfe der CMediaSample-Klasse implementiert. Ein Medienbeispiel enthält einen Zeiger auf den zugeordneten Puffer, auf den durch Aufrufen der IMediaSample::GetPointer-Methode zugegriffen werden kann. Weitere Informationen finden Sie unter Beispiele und Zuteilungen.

Führen Sie die folgenden Schritte aus, um diese Klasse zu verwenden:

  1. Rufen Sie die CBaseAllocator::SetProperties-Methode auf, um die Pufferanforderungen anzugeben, einschließlich der Anzahl der Puffer und der Größe der einzelnen Puffer.
  2. Rufen Sie die CBaseAllocator::Commit-Methode auf, um die Puffer zuzuweisen.
  3. Rufen Sie die CBaseAllocator::GetBuffer-Methode auf, um Medienbeispiele abzurufen. Diese Methode blockiert, bis das nächste Beispiel verfügbar wird.
  4. Wenn Sie mit jedem Beispiel fertig sind, rufen Sie die IUnknown::Release-Methode für das Beispiel auf. Das Beispiel wird nicht gelöscht, wenn die Referenzanzahl 0 erreicht. Stattdessen kehrt das Beispiel zur kostenlosen Liste des Zuteilungsgebers zurück.
  5. Wenn Sie mit dem Allocator fertig sind, rufen Sie die CBaseAllocator::D ecommit-Methode auf, um den Arbeitsspeicher für die Puffer freizugeben.

Die Commit-Methode ruft die virtuelle Methode CBaseAllocator::Alloc auf, die den Arbeitsspeicher für die Puffer zuordnet. Die Decommit-Methode ruft die reine virtuelle Methode CBaseAllocator::Free auf, wodurch der Arbeitsspeicher freigegeben wird. Abgeleitete Klassen müssen diese beiden Methoden außer Kraft setzen.

Die CMemAllocator-Basisklasse wird von CBaseAllocator abgeleitet. Die Filterbasisklassen verwenden die CMemAllocator-Klasse .

Geschützte Membervariablen BESCHREIBUNG
m_lFree Zeiger auf eine Liste der verfügbaren (kostenlosen) Medienbeispiele.
m_hSem Semaphor, das signalisiert wird, wenn ein Beispiel verfügbar wird.
m_lWaiting Anzahl der Threads, die auf Beispiele warten.
m_lCount Anzahl der bereitzustellenden Puffer.
m_lAllocated Anzahl der derzeit zugewiesenen Puffer.
m_lSize Größe jedes Puffers.
m_lAlignment Ausrichtung jedes Puffers.
m_lPrefix Präfix jedes Puffers.
m_bChanged Flag, das angibt, ob sich die Pufferanforderungen geändert haben.
m_bCommitted Flag, das angibt, ob der Zuteilungsgeber festgelegt wurde.
m_bDecommitInProgress Flag, das angibt, ob ein Vorgang zum Aufheben der Aussetzung ausgeführt wird.
m_pNotify Zeiger auf eine Rückrufschnittstelle, die aufgerufen wird, wenn Beispiele freigegeben werden.
m_fEnableReleaseCallback Flag, das angibt, ob der Releaserückruf aktiviert ist.
Geschützte Methoden BESCHREIBUNG
Alloc Ordnet arbeitsspeicher für die Puffer zu. Virtuellen.
Öffentliche Methoden BESCHREIBUNG
CBaseAllocator Konstruktormethode.
~ CBaseAllocator Destruktormethode.
SetNotify Veraltet.
GetFreeCount Ruft die Anzahl der Medienbeispiele ab, die nicht verwendet werden.
NotifySample Gibt alle Threads frei, die auf Beispiele warten.
SetWaiting Erhöht die Anzahl der wartenden Threads.
Reine virtuelle Methoden BESCHREIBUNG
Kostenlos Gibt den gesamten Pufferspeicher frei.
IMemAllocator-Methoden BESCHREIBUNG
SetProperties Gibt die Anzahl der zuzuordnenden Puffer und die Größe der einzelnen Puffer an.
GetProperties Ruft die Anzahl von Puffern ab, die der Zuteilungsgeber erstellt, und die Puffereigenschaften.
Commit Ordnet den Speicher für die Puffer zu.
Aufheben der Aussetzung Löscht die Puffer.
GetBuffer Ruft ein Medienbeispiel ab, das einen Puffer enthält.
ReleaseBuffer Gibt ein Medienbeispiel in die Liste der kostenlosen Medienbeispiele zurück.

Anforderungen

Anforderung Wert
Header
Amfilter.h (include Streams.h)
Bibliothek
Strmbase.lib (Einzelhandelsbuilds);
Strmbasd.lib (Debugbuilds)

Siehe auch

Bereitstellen einer benutzerdefinierten Zuordnung