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 |
---|---|
|
Die Methode wurde erfolgreich ausgeführt. |
|
Ungültiges Argument. |
|
Ungültiger Streambezeichner. |
|
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. |
|
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. |
|
Die Transformation kann derzeit nicht mehr Eingaben verarbeiten. |
|
Der Medientyp ist nicht für einen oder mehrere Streams festgelegt. |
|
Der Medientyp wird für die DirectX-Videobeschleunigung (DXVA) nicht unterstützt. Ein DXVA-fähiger Decoder gibt diesen Fehlercode möglicherweise zurück. |
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:
- Generieren Sie eine neue Ausgabe, indem Sie IMFTransform::P rocessOutput aufrufen.
- Leeren Sie die Eingabedaten, indem Sie IMFTransform::P rocessMessage mit der nachricht MFT_MESSAGE_COMMAND_FLUSH aufrufen.
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 |