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 |
|---|---|
|
Erfolg. |
|
Pin wird gerade geleert. sample wurde abgelehnt. |
|
NULL-Zeigerargument. |
|
Ungültiger Medientyp. |
|
Es ist ein Laufzeitfehler aufgetreten. |
|
Die Stecknadel wird beendet. |
Hinweise
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:
- Ruft die CBaseInputPin::CheckStreaming-Methode auf, um zu überprüfen, ob die Pin jetzt Beispiele verarbeiten kann. Wenn dies beispielsweise nicht dere ist, schlägt die -Methode fehl, wenn der Stecknadel angehalten wird.
- Ruft die Beispieleigenschaften ab und überprüft, ob sich das Format geändert hat (siehe unten).
- Wenn sich das Format geändert hat, ruft die -Methode die CBasePin::CheckMediaType-Methode auf, um zu bestimmen, ob das neue Format akzeptabel ist.
- 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.
- Wenn keine Fehler aufgetreten sind, gibt die Methode S _ OK zurück.
Testen Sie wie folgt, um eine Formatänderung zu erhalten:
- Wenn das Beispiel die IMediaSample2-Schnittstelle unterstützt, überprüfen Sie den dwSampleFlags-Member der AM _ SAMPLE2 _ PROPERTIES-Struktur. Wenn das _ AM SAMPLE _ TYPECHANGED-Flag vorhanden ist, wurde das Format geändert.
- Wenn das Beispiel IMediaSample2 nicht unterstützt, rufen Sie andernfalls die IMediaSample::GetMediaType-Methode auf. Wenn die Methode einen Wert ungleich NULL zurückgibt, wurde das Format geändert.
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
| Anforderung | Wert |
|---|---|
| Header |
|
| Bibliothek |
|