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.]
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:
- Rufen Sie die CBaseAllocator::SetProperties-Methode auf, um die Pufferanforderungen anzugeben, einschließlich der Anzahl der Puffer und der Größe der einzelnen Puffer.
- Rufen Sie die CBaseAllocator::Commit-Methode auf, um die Puffer zuzuweisen.
- Rufen Sie die CBaseAllocator::GetBuffer-Methode auf, um Medienbeispiele abzurufen. Diese Methode blockiert, bis das nächste Beispiel verfügbar wird.
- 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.
- 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 |
|
Bibliothek |
|