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 |
---|---|
|
Erfolg. |
|
Der Pin wird derzeit geleert; das Beispiel wurde abgelehnt. |
|
NULL-Zeigerargument. |
|
Ungültiger Medientyp. |
|
Ein Laufzeitfehler ist aufgetreten. |
|
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:
- 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.
- 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, auf eine Formatänderung:
- Wenn das Beispiel die IMediaSample2-Schnittstelle unterstützt, überprüfen Sie den dwSampleFlags-Member der AM_SAMPLE2_PROPERTIES-Struktur . Wenn das flag AM_SAMPLE_TYPECHANGED vorhanden ist, hat sich 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, hat sich das Format geändert.
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 |
|
Bibliothek |
|