CBaseInputPin.Receive-Methode

Die Receive Methode empfängt das nächste Medienbeispiel im Datenstrom. 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
Die 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
Die Pin wird beendet.

Bemerkungen

Die vorgeschaltete Ausgabeheft ruft diese Methode auf, um ein Beispiel an den Eingabehefter zu liefern. Der Eingabeheft muss eine der folgenden Aktionen ausführen:

  • Verarbeiten Sie das Beispiel vor der Rückgabe.
  • Zurückgeben und Verarbeiten des Beispiels in einem Arbeitsthread
  • Ablehnen des Beispiels.

Wenn der Pin einen Workerthread zum Verarbeiten des Beispiels verwendet, fügen Sie dem Beispiel innerhalb dieser Methode eine Verweisanzahl hinzu. Nachdem die Methode zurückgegeben wurde, gibt der Upstream-Pin das Beispiel frei. Wenn die Referenzanzahl des Beispiels null erreicht, wird das Beispiel zur erneuten Verwendung an den Allocator zurückgegeben.

Diese Methode ist synchron und kann blockieren. Wenn die Methode möglicherweise blockiert wird, sollte die CBaseInputPin::ReceiveCanBlock-Methode 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 die Methode beispielsweise nicht beendet wird, schlägt die Methode fehl.
  2. Ruft die Beispieleigenschaften ab und überprüft, ob das Format geändert wurde (siehe unten).
  3. Wenn das Format geändert wurde, 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 eine Formatänderung wie folgt:

  • Wenn das Beispiel die IMediaSample2-Schnittstelle unterstützt, überprüfen Sie das dwSampleFlags-Element der AM_SAMPLE2_PROPERTIES Struktur. Wenn das AM_SAMPLE_TYPECHANGED Flag vorhanden ist, hat sich das Format geändert.
  • Wenn das Beispiel IMediaSample2 nicht unterstützt, rufen Sie die IMediaSample::GetMediaType-Methode auf. Wenn die Methode einen Wert ohne NULL zurückgibt, hat sich das Format geändert.

In der Basisklasse verarbeitet diese Methode das Beispiel nicht. Die abgeleitete Klasse muss diese Methode außer Kraft setzen, um die Verarbeitung auszuführen. (Was dies bedeutet, hängt vollständig vom Filter ab.) Die abgeleitete Klasse sollte die Basisklassenmethode aufrufen, um nach den zuvor beschriebenen Fehlern zu suchen.

Requirements (Anforderungen)

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

Siehe auch

CBaseInputPin-Klasse