Freigeben über


CBaseAllocator.GetBuffer-Methode

[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde von MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation abgelöst. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code mediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet, wenn möglich. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, so umgeschrieben wird, dass nach Möglichkeit die neuen APIs verwendet werden.]

Die GetBuffer -Methode ruft ein Medienbeispiel ab, das einen Puffer enthält. Diese Methode implementiert die IMemAllocator::GetBuffer-Methode .

Syntax

HRESULT GetBuffer(
   IMediaSample   **ppBuffer,
   REFERENCE_TIME *pStartTime,
   REFERENCE_TIME *pEndTime,
   DWORD          dwFlags
);

Parameter

ppBuffer

Empfängt einen Zeiger auf die IMediaSample-Schnittstelle des Puffers. Der Aufrufer muss die Schnittstelle freigeben.

pStartTime

Zeiger auf die Startzeit des Beispiels.

pEndTime

Zeiger auf die Endzeit des Beispiels.

dwFlags

Bitweise Kombination von 0 oder mehr Flags. Die Basisklasse unterstützt das folgende Flag.

Wert Bedeutung
AM_GBF_NOWAIT
Warten Sie nicht, bis ein Puffer verfügbar ist.

Rückgabewert

Gibt einen der folgenden HRESULT-Werte zurück.

Rückgabecode Beschreibung
S_OK
Erfolg.
VFW_E_NOT_COMMITTED
Die Zuweisung wurde nicht committet.
VFW_E_TIMEOUT
Timeout.

Bemerkungen

Sofern der Aufrufer das AM_GBF_NOWAIT-Flag in dwFlags nicht angibt, blockiert diese Methode, bis das nächste Beispiel verfügbar ist.

Das abgerufene Medienbeispiel verfügt über einen gültigen Zeiger auf den zugeordneten Puffer. Der Aufrufer ist dafür verantwortlich, alle anderen Eigenschaften im Beispiel festzulegen, z. B. die Zeitstempel, die Medienzeiten oder die Synchronisierungspunkteigenschaft. Weitere Informationen finden Sie unter IMediaSample.

In der Basisklasse werden die Parameter pStartTime und pEndTime ignoriert. Abgeleitete Klassen können diese Werte verwenden. Beispielsweise verwendet die Zuweisung für den Video Renderer-Filter diese Werte, um den Wechsel zwischen DirectDraw-Oberflächen zu synchronisieren.

Wenn die Methode auf ein Beispiel warten muss, erhöht sie die Anzahl der wartenden Objekte (CBaseAllocator::m_lCount) und ruft die WaitForSingleObject-Funktion auf dem Semaphor (CBaseAllocator::m_hSem) auf. Wenn ein Beispiel verfügbar wird, ruft es die CBaseAllocator::ReleaseBuffer-Methode auf dem Allocator auf, wodurch die Semaphoranzahl um m_lCount erhöht wird (wodurch die wartenden Threads freigegeben werden) und m_lCount wieder auf Null festgelegt wird.

Anforderungen

Anforderung Wert
Header
Amfilter.h (streams.h einschließen)
Bibliothek
Strmbase.lib (Einzelhandelsbuilds);
Strmbasd.lib (Debugbuilds)

Siehe auch

CBaseAllocator-Klasse