CBaseInputPin.Receive-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 Receive -Methode empfängt das nächste Medienbeispiel im Stream. Diese Methode implementiert die IMemInputPin::Receive-Methode .

Syntax

HRESULT Receive(
   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.
S_FALSE
Der Pin wird derzeit geleert; das Beispiel wurde abgelehnt.
E_POINTER
NULL-Zeigerargument.
VFW_E_INVALIDMEDIATYPE
Ungültiger Medientyp.
VFW_E_RUNTIME_ERROR
Ein Laufzeitfehler ist aufgetreten.
VFW_E_WRONG_STATE
Der Pin wird beendet.

Bemerkungen

Der Upstream Ausgabepin ruft diese Methode auf, um ein Beispiel an den Eingabenadel zu übermitteln. Der Eingabenadel muss eine der folgenden Aktionen ausführen:

  • Verarbeiten Sie das Beispiel vor der Rückgabe.
  • Zurückgeben und Verarbeiten des Beispiels in einem Workerthread.
  • Lehnen Sie das Beispiel ab.

Wenn der Pin einen Workerthread zum Verarbeiten des Beispiels verwendet, fügen Sie dem Beispiel in dieser Methode eine Verweisanzahl hinzu. Nachdem die Methode zurückgegeben wurde, gibt der Upstream Pin das Beispiel frei. Wenn die Verweisanzahl der Stichprobe null erreicht, kehrt das Beispiel zur Wiederverwendung an den Zuweisungsator zurück.

Diese Methode ist synchron und kann blockiert werden. Wenn die Methode möglicherweise blockiert wird, sollte die CBaseInputPin::ReceiveCanBlock-Methode des Pins S_OK zurückgeben.

In der Basisklasse führt diese Methode die folgenden Schritte aus:

  1. Ruft die CBaseInputPin::CheckStreaming-Methode auf, um zu überprüfen, ob die Pin jetzt Beispiele verarbeiten kann. Wenn dies beispielsweise nicht der Fehler ist, schlägt die Methode fehl, wenn der Pin beendet wird.
  2. Ruft die Beispieleigenschaften ab und überprüft, ob sich das Format geändert hat (siehe unten).
  3. Wenn sich das Format geändert hat, ruft die Methode die CBasePin::CheckMediaType-Methode auf, um zu bestimmen, ob das neue Format akzeptabel ist.
  4. Wenn das neue Format nicht akzeptabel ist, ruft die Methode die CBasePin::EndOfStream-Methode auf, sendet ein EC_ERRORABORT-Ereignis und gibt einen Fehlercode zurück.
  5. Wenn keine Fehler aufgetreten sind, gibt die Methode S_OK zurück.

Testen Sie, wie folgt, auf eine Formatänderung:

In der Basisklasse verarbeitet diese Methode das Beispiel nicht. Die abgeleitete Klasse muss diese Methode überschreiben, um die Verarbeitung auszuführen. (Was dies bedeutet, hängt ganz vom Filter ab.) Die abgeleitete Klasse sollte die Basisklassenmethode aufrufen, um auf die zuvor beschriebenen Fehler zu überprüfen.

Anforderungen

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

Siehe auch

CBaseInputPin-Klasse