Freigeben über


CBaseOutputPin.Deliver-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 Deliver -Methode übermittelt ein Medienbeispiel an den verbundenen Eingabenadel.

Syntax

virtual HRESULT Deliver(
   IMediaSample *pSample
);

Parameter

pSample

Zeiger auf die IMediaSample-Schnittstelle des Beispiels.

Rückgabewert

Gibt einen HRESULT-Wert zurück. Mögliche Werte sind die in der folgenden Tabelle aufgeführten Werte.

Rückgabecode BESCHREIBUNG
S_OK
Erfolg.
VFW_E_NOT_CONNECTED
Der Pin ist nicht verbunden.

Bemerkungen

Diese Methode ruft die IMemInputPin::Receive-Methode auf dem Eingabenadel auf. Receive kann blockiert werden, wenn die IMemInputPin::ReceiveCanBlock-Methode S_OK zurückgibt.

Lassen Sie das Beispiel nach dem Aufrufen dieser Methode los. Der Eingabenadel kann eine Verweisanzahl für das Beispiel enthalten, daher sollten Sie das Beispiel nicht wiederverwenden. Rufen Sie immer die CBaseOutputPin::GetDeliveryBuffer-Methode auf, um ein neues Beispiel zu erhalten.

Halten Sie den kritischen Abschnitt des Filters gedrückt, bevor Sie diese Methode aufrufen. Andernfalls wird die Verbindung während des Methodenaufrufs möglicherweise getrennt. Wenn der Filter einen Workerthread zum Übermitteln von Beispielen verwendet, halten Sie den kritischen Abschnitt gedrückt, wenn der Filter bereit ist, ein Beispiel zu liefern. Andernfalls können Sie den kritischen Abschnitt in der IMemInputPin::Receive-Methode des Filters halten, in der der Filter Beispiele verarbeitet.

Workerthreads können zu einem potenziellen Deadlock führen. Wenn der Thread den kritischen Abschnitt enthält, wartet er möglicherweise auf eine Zustandsänderung im Filter. Gleichzeitig wartet die Zustandsänderung möglicherweise auf den Abschluss des Threads. Um dies zu verhindern, sollte der Statusänderungscode ein Ereignis signalisieren, das den Thread beendet, und dann warten, bis der Thread den Abschluss signalisiert.

Anforderungen

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

Siehe auch

CBaseOutputPin-Klasse