Freigeben über


IMFTransform::P rocessInput-Methode (mftransform.h)

Übermittelt Daten an einen Eingabestream für diese Media Foundation-Transformation (MFT).

Syntax

HRESULT ProcessInput(
  [in] DWORD     dwInputStreamID,
  [in] IMFSample *pSample,
  [in] DWORD     dwFlags
);

Parameter

[in] dwInputStreamID

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

[in] pSample

Zeiger auf die IMFSample-Schnittstelle des Eingabebeispiels. Das Beispiel muss mindestens einen Medienpuffer enthalten, der gültige Eingabedaten enthält.

[in] dwFlags

Reserviert. Muss Null sein.

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_INVALIDARG
Ungültiges Argument.
MF_E_INVALIDSTREAMNUMBER
Ungültiger Streambezeichner.
MF_E_NO_SAMPLE_DURATION
Für das Eingabebeispiel ist eine gültige Stichprobendauer erforderlich. Um die Dauer festzulegen, rufen Sie IMFSample::SetSampleDuration auf.

Einige MFTs erfordern, dass Eingabebeispiele eine gültige Dauer haben. Einige MFTs erfordern keine Stichprobendauer.

MF_E_NO_SAMPLE_TIMESTAMP
Für das Eingabebeispiel ist ein Zeitstempel erforderlich. Um den Zeitstempel festzulegen, rufen Sie IMFSample::SetSampleTime auf.

Einige MFTs erfordern, dass Eingabebeispiele über gültige Zeitstempel verfügen. Einige MFTs erfordern keine Zeitstempel.

MF_E_NOTACCEPTING
Die Transformation kann derzeit nicht mehr Eingaben verarbeiten.
MF_E_TRANSFORM_TYPE_NOT_SET
Der Medientyp ist nicht für einen oder mehrere Streams festgelegt.
MF_E_UNSUPPORTED_D3D_TYPE
Der Medientyp wird für die DirectX-Videobeschleunigung (DXVA) nicht unterstützt. Ein DXVA-fähiger Decoder gibt diesen Fehlercode möglicherweise zurück.
 
Hinweis Wenn Sie ein DirectX Media Object (DMO) in ein MFT konvertieren, beachten Sie, dass S_FALSE im Gegensatz zur IMediaObject::P rocessInput-Methode kein gültiger Rückgabecode für IMFTransform::P rocessInput ist.
 

Hinweise

Wenn die Methode erfolgreich ist, speichert die MFT in den meisten Fällen das Beispiel und enthält eine Verweisanzahl für den IMFSample-Zeiger . Verwenden Sie das Beispiel erst wieder, wenn das Beispiel vom MFT freigegeben wird. Anstatt das Beispiel zu speichern, kopiert ein MFT die Beispieldaten jedoch möglicherweise in einen neuen Puffer. In diesem Fall sollte der MFT das flag MFT_INPUT_STREAM_DOES_NOT_ADDREF in der IMFTransform::GetInputStreamInfo-Methode festlegen.

Wenn der MFT bereits über genügend Eingabedaten verfügt, um ein Ausgabebeispiel zu erstellen, akzeptiert er keine neuen Eingabedaten, und ProcessInput gibt MF_E_NOTACCEPTING zurück. An diesem Punkt sollte der Client die ausstehenden Eingabedaten löschen, indem er eine der folgenden Aktionen ausführt:

Eine Ausnahme von dieser Regel ist das flag MFT_OUTPUT_STREAM_LAZY_READ . Wenn dieses Flag vorhanden ist, verwirft die Transformation gespeicherte Beispiele, wenn Sie ihr mehr Eingaben geben. Weitere Informationen finden Sie unter IMFTransform::GetOutputStreamInfo. Eine Transformation sollte niemals mehr Eingabedaten in die Warteschlange stellen, als erforderlich sind, um die richtige Ausgabe zu erzeugen.

Ein MFT kann die Eingabedaten in der ProcessInput-Methode verarbeiten. Die meisten MFTs warten jedoch, bis der Client ProcessOutput aufruft.

Nachdem der Client gültige Medientypen für alle Streams festgelegt hat, sollte sich der MFT immer in einem von zwei Zuständen befinden: Mehr Eingaben akzeptieren oder mehr Ausgabe erzeugen können. Es sollte sich niemals in beiden Zuständen oder in keinem zustand befinden. Ein MFT sollte nur so viele Eingaben akzeptieren, wie erforderlich sind, um mindestens ein Ausgabebeispiel zu generieren. An diesem Punkt gibt ProcessInputMF_E_NOTACCEPTING zurück. Wenn ProcessInputMF_E_NOTACCEPTING zurückgibt, kann der Client davon ausgehen, dass der MFT bereit ist, eine Ausgabe zu erzeugen.

Wenn bei einem MFT ein nicht schwerwiegender Fehler in den Eingabedaten auftritt, kann er die Daten einfach löschen und versuchen, eine Wiederherstellung zu versuchen, wenn die mehr Eingabedaten abgerufen werden. Um weitere Eingabedaten anzufordern, gibt MFT MF_E_TRANSFORM_NEED_MORE_INPUT von der IMFTransform::P rocessOutput-Methode zurück. Wenn der MFT Daten löscht, sollte das attribut MFSampleExtension_Discontinuity im nächsten Ausgabebeispiel festgelegt werden, um den Aufrufer darüber zu informieren, dass im Datenstrom eine Lücke vorhanden ist.

Wenn MFT_UNIQUE_METHOD_NAMES vor dem Einschließen von mftransform.h definiert ist, wird diese Methode in MFTProcessInput umbenannt. Weitere Informationen finden Sie unter Erstellen von DMO/MFT-Hybridobjekten.

Asynchrone Verarbeitung

In den vorherigen Anmerkungen wird das synchrone Verarbeitungsmodell beschrieben. Informationen zur Unterstützung der asynchronen Verarbeitung finden Sie unter Asynchrone MFTs.

Anforderungen

Anforderung Wert
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

Weitere Informationen

IMFTransform

Media Foundation-Transformationen