IMFTransform::GetOutputAvailableType-Methode (mftransform.h)

Ruft einen verfügbaren Medientyp für einen Ausgabedatenstrom in dieser Media Foundation-Transformation (MFT) ab.

Syntax

HRESULT GetOutputAvailableType(
  [in]  DWORD        dwOutputStreamID,
  [in]  DWORD        dwTypeIndex,
  [out] IMFMediaType **ppType
);

Parameter

[in] dwOutputStreamID

Ausgabedatenstrombezeichner. Um die Liste der Streambezeichner abzurufen, rufen Sie IMFTransform::GetStreamIDs auf.

[in] dwTypeIndex

Index des Medientyps, der abgerufen werden soll. Medientypen werden von Null indiziert und in ungefährer Reihenfolge der Einstellung zurückgegeben.

[out] ppType

Empfängt einen Zeiger auf die IMFMediaType-Schnittstelle . Der Anrufer muss die Schnittstelle freigeben.

Rückgabewert

Die Methode gibt ein HRESULT zurück. Mögliches Werte (aber nicht die Einzigen) sind die in der folgenden Tabelle.

Rückgabecode BESCHREIBUNG
S_OK
Die Methode wurde erfolgreich ausgeführt.
E_NOTIMPL
Die MFT verfügt nicht über eine Liste der verfügbaren Ausgabetypen.
MF_E_INVALIDSTREAMNUMBER
Ungültiger Streambezeichner.
MF_E_NO_MORE_TYPES
Der dwTypeIndex-Parameter ist außerhalb des Bereichs.
MF_E_TRANSFORM_TYPE_NOT_SET
Sie müssen die Eingabetypen festlegen, bevor Sie die Ausgabetypen festlegen.

Hinweise

Die MFT definiert eine Liste der verfügbaren Medientypen für jeden Ausgabedatenstrom und bestellt sie nach Einstellung. Mit dieser Methode werden die verfügbaren Medientypen für einen Ausgabedatenstrom aufgezählt. Um die verfügbaren Typen aufzählen zu können, wird dwTypeIndex inkrementiert, bis die Methode MF_E_NO_MORE_TYPES zurückgibt.

Das Festlegen des Medientyps auf einem Datenstrom kann die verfügbaren Typen für einen anderen Stream ändern (oder die Einstellungsreihenfolge ändern). Eine MFT ist jedoch nicht erforderlich, um die Liste der verfügbaren Typen dynamisch zu aktualisieren. Die einzige garantierte Möglichkeit, zu testen, ob Sie einen bestimmten Eingabetyp festlegen können, ist das Aufrufen von IMFTransform::SetOutputType.

In einigen Fällen kann ein MFT keine Liste der Ausgabetypen zurückgeben, bis eine oder mehrere Eingabetypen festgelegt sind. Wenn ja, gibt die Methode MF_E_TRANSFORM_TYPE_NOT_SET zurück.

Ein MFT ist nicht erforderlich, um diese Methode zu implementieren. Die meisten MFTs sollten diese Methode jedoch implementieren, es sei denn, die unterstützten Typen sind einfach und können über die MFTGetInfo-Funktion ermittelt werden.

Diese Methode kann einen teiliellen Medientyp zurückgeben. Ein Teilmedientyp enthält eine unvollständige Beschreibung eines Formats und wird verwendet, um einen Hinweis auf den Anrufer bereitzustellen. Beispielsweise kann ein Teiltyp nur den Haupttyp und die Untertyp-GUIDs enthalten. Nachdem der Client jedoch die Eingabetypen auf dem MFT festgelegt hat, sollte der MFT im Allgemeinen mindestens einen vollständigen Ausgabetyp zurückgeben, der ohne weitere Änderung verwendet werden kann. Weitere Informationen finden Sie unter vollständigen und teilweisen Medientypen.

Einige MFTs können keine genaue Liste der Ausgabetypen bereitstellen, bis der MFT das erste Eingabebeispiel empfängt. Beispielsweise muss der MFT den ersten Paketheader lesen, um das Format zu deduziert. Ein MFT sollte diese Situation wie folgt behandeln:

  1. Bevor die MFT alle Eingaben empfängt, bietet sie eine Liste einer oder mehrerer Ausgabetypen an, die sie möglicherweise produzieren könnte. Beispielsweise kann ein MPEG-2-Decoder einen Medientyp zurückgeben, der das MPEG-2-Hauptprofil/hauptebene beschreibt.
  2. Der Client wählt eine dieser Typen (im Allgemeinen zuerst) aus, und legt ihn im Ausgabestrom fest.
  3. Der Client liefert das erste Eingabebeispiel durch Aufrufen von IMFTransform::P rocesInput.
  4. Wenn der Ausgabetyp nicht den Eingabedaten entspricht, signalisiert die Transformation eine Formatänderung in der ProcessOutput-Methode . Weitere Informationen zu Formatänderungen finden Sie unter IMFTransform::P rocessOutput.
  5. Die Aufrufe GetOutputAvailableType erneut. An diesem Punkt sollte die Methode eine aktualisierte Liste der Typen zurückgeben, die die Eingabedaten widerspiegeln.
  6. Der Client wählt einen neuen Ausgabetyp aus dieser Liste aus und ruft SetOutputType auf.
Wenn MFT_UNIQUE_METHOD_NAMES vor dem Einschließen von mftransform.h definiert ist, wird diese Methode umbenannt MFTGetOutputAvailableType. Siehe Erstellen von Hybrid-DMO/MFT-Objekten.

Implementierungsnotizen

Wenn der MFT einen Medientyp intern speichert, sollte der MFT einen Klon des Medientyps zurückgeben, kein Zeiger auf den ursprünglichen Typ. Andernfalls kann der Aufrufer den Typ ändern und den internen Zustand des MFT ändern.

Anforderungen

   
Unterstützte Mindestversion (Client) Windows Vista [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2008 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile mftransform.h
Bibliothek Mfuuid.lib

Siehe auch

IMFTransform

Media Foundation-Transformationen