CBaseInputPin.Receive-Methode

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
Pin wird gerade geleert. Das Beispiel wurde abgelehnt.
_E-ZEIGER
NULL-Zeigerargument.
VFW _ E _ INVALIDMEDIATYPE
Ungültiger Medientyp.
VFW _ _ E-LAUFZEITFEHLER _
Laufzeitfehler.
VFW _ E _ WRONG _ STATE
Die Stecknadel wird beendet.

Bemerkungen

Der Upstreamausgabepin ruft diese Methode auf, um ein Beispiel an den Eingabepin zu übermitteln. Der Eingabepin muss einen der folgenden Schritte ausführen:

  • Verarbeiten Sie das Beispiel vor der Rückgabe.
  • Gibt zurück und verarbeitet das Beispiel in einem Arbeitsthread.
  • Lehnt das Beispiel ab.

Wenn der Pin einen Arbeitsthread zum Verarbeiten des Beispiels verwendet, fügen Sie dem Beispiel innerhalb dieser Methode einen Verweiszähler hinzu. Nachdem die Methode zurückgegeben wurde, gibt der Upstream-Pin das Beispiel frei. Wenn der Verweiszähler der Stichprobe 0 (null) erreicht, kehrt das Beispiel zur erneuten Verwendung zur Zuweisung zurück.

Diese Methode ist synchron und kann blockiert werden. Wenn die -Methode blockiert werden kann, 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 der Pin jetzt Beispiele verarbeiten kann. Wenn dies beispielsweise nicht dere ist, schlägt die -Methode fehl, wenn die Stecknadel 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, um eine Formatänderung zu erhalten:

In der Basisklasse verarbeitet diese Methode das Beispiel nicht. Die abgeleitete Klasse muss diese Methode überschreiben, um die Verarbeitung durchzuführen. (Dies hängt vollständig vom Filter ab.) Die abgeleitete Klasse sollte die Basisklassenmethode aufrufen, um nach den zuvor beschriebenen Fehlern zu suchen.

Anforderungen

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

Weitere Informationen

CBaseInputPin-Klasse