Freigeben über


IMFSourceReaderEx::AddTransformForStream-Methode (mfreadwrite.h)

Fügt einem Datenstrom eine Transformation hinzu, z. B. einen Audio- oder Videoeffekt.

Syntax

HRESULT AddTransformForStream(
  [in] DWORD    dwStreamIndex,
  [in] IUnknown *pTransformOrActivate
);

Die Parameter

[in] dwStreamIndex

Der zu konfigurierende Datenstrom. Der Wert kann eine der folgenden Sein:

Wert Bedeutung
0–0xFFFFFFFB
Der nullbasierte Index eines Datenstroms.
MF_SOURCE_READER_FIRST_VIDEO_STREAM
0xFFFFFFFC
Der erste Videostream.
MF_SOURCE_READER_FIRST_AUDIO_STREAM
0xFFFFFFFD
Der erste Audiodatenstrom.

[in] pTransformOrActivate

Ein Zeiger auf einen der folgenden Optionen:

Rückgabewert

Diese Methode kann einen dieser Werte zurückgeben.

Rückgabecode Description
S_OK
Erfolg.
MF_E_INVALIDMEDIATYPE
Die Transformation unterstützt das aktuelle Datenstromformat nicht, und es war keine Konvertierung möglich. Weitere Informationen finden Sie in den Anmerkungen.
MF_E_INVALIDREQUEST
Ungültige Anforderung.
MF_E_INVALIDSTREAMNUMBER
Der dwStreamIndex-Parameter ist ungültig.

Bemerkungen

Diese Methode versucht, die Transformation am Ende der aktuellen Verarbeitungskette hinzuzufügen.

Um diese Methode zu verwenden, führen Sie die folgende Abfolge von Aufrufen aus:

  1. Rufen Sie IMFSourceReader::SetCurrentMediaType auf, um den gewünschten Ausgabetyp für den Datenstrom festzulegen. In diesem Schritt können Sie einen Medientyp angeben, der nur die Haupttyp- und Untertyp-GUIDs enthält. Um beispielsweise eine RGB-Ausgabe mit 32 Bit abzurufen, legen Sie einen Haupttyp von MFMediaType_Video und einen Untertyp von MFVideoFormat_RGB32 fest. (Weitere Informationen finden Sie unter Medientyp-GUIDs.)
  2. Rufen Sie AddTransformForStream auf. Wenn der Quellleser die Transformation erfolgreich verbindet, wird der Ausgabetyp für die Transformation festgelegt.
  3. Rufen Sie IMFSourceReader::GetCurrentMediaType auf, um den Ausgabetyp aus der Transformation abzurufen. Diese Methode gibt einen Medientyp mit einer vollständigen Formatbeschreibung zurück.
  4. Wenn Sie den Ausgabetyp ändern möchten, rufen Sie optional erneut IMFSourceReader::SetCurrentMediaType auf, um einen vollständigen Medientyp für die Transformation festzulegen.
Die AddTransformForStream-Methode fügt keinen Decoder in die Verarbeitungskette ein. Wenn das systemeigene Streamformat codiert ist und für die Transformation ein nicht komprimiertes Format erforderlich ist, rufen Sie SetCurrentMediaType auf, um das nicht komprimierte Format festzulegen (Schritt 1 in der vorherigen Liste). Die Methode fügt jedoch bei Bedarf einen Videoprozessor ein, um zwischen RGB- und YUV-Formaten zu konvertieren.

Die Methode schlägt fehl, wenn der Quellleser mit den Attributen MF_READWRITE_DISABLE_CONVERTERS oder MF_SOURCE_READER_ENABLE_VIDEO_PROCESSING konfiguriert wurde.

Im asynchronen Modus schlägt die Methode auch fehl, wenn eine Beispielanforderung aussteht. Warten Sie in diesem Fall, bis der OnReadSample-Rückruf aufgerufen wird, bevor Sie die Methode aufrufen. Weitere Informationen zur Verwendung des Quelllesers im asynchronen Modus finden Sie unter IMFSourceReader::ReadSample.

Sie können während des Streamings jederzeit eine Transformation hinzufügen. Die Methode löscht die Pipeline jedoch nicht, bevor Sie die Transformation einfügen. Wenn sich die Daten also bereits in der Pipeline befinden, ist das nächste Beispiel nicht garantiert, dass die Transformation angewendet wird.

Anforderungen

Anforderung Wert
Mindestens unterstützter Client Windows 8 [Desktop-Apps | UWP-Apps]
Mindestanforderungen für unterstützte Server Windows Server 2012 [Desktop-Apps | UWP-Apps]
Zielplattform Fenster
Header mfreadwrite.h

Siehe auch

IMFSourceReaderEx-

Quellleser