Freigeben über


MFT_MESSAGE_COMMAND_DRAIN

Fordert eine Media Foundation-Transformation (MFT) an, um alle gespeicherten Daten zu löschen.

Meldungsparameter

Keine.

Bemerkungen

Um diese Nachricht zu senden, rufen Sie IMFTransform::P rocessMessage auf.

Nachdem diese Nachricht gesendet wurde, akzeptiert der angegebene Eingabedatenstrom erst dann Eingaben, wenn der MFT alle Daten aus vorherigen Aufrufen von IMFTransform::P rocessInput verarbeitet.

Der Entwässerungsprozess variiert geringfügig zwischen synchronen MFTs und asynchronen MFTs:

Synchrone MFTs

  1. Nachdem der Client diese Nachricht gesendet hat, ruft er INFTransform::P rocessOutput in einer Schleife auf, bis ProcessOutput den Fehlercode MF_E_TRANSFORM_NEED_MORE_INPUT zurückgibt.
  2. Solange die MFT noch Daten zu verarbeiten hat, schlagen weitere Aufrufe von ProcessInput fehl. Das MFT erzeugt weiterhin die Ausgabe, bis alle gespeicherten Daten verwendet werden. Der MFT verwirft alle Daten, die nicht zu einem vollständigen Ausgabebeispiel verarbeitet werden können. (Es sollte z. B. ein teilweiser Videoframe gelöscht werden.)

Asynchrone MFTs

  1. Der MFT sendet weiterhin METransformHaveOutput-Ereignisse , bis keine weiteren Zu verarbeitenden Daten vorhanden sind. Während dieser Zeit werden keine METransformNeedInput-Ereignisse gesendet.
  2. Nachdem der MFT das letzte METransformHaveOutput-Ereignis gesendet hat, wird ein METransformDrainComplete-Ereignis gesendet.
  3. Nach Abschluss der Entleerung sendet der MFT erst dann ein weiteres METransformNeedInput-Ereignis , wenn es eine MFT_MESSAGE_NOTIFY_START_OF_STREAM-Nachricht vom Client empfängt.

Nachdem der Client die MFT entladen hat, kann der Client weitere Eingabedaten senden. Das erste Beispiel nach dem Entwässerungsvorgang muss über das Diskontinuitätsattribut (MFSampleExtension_Discontinuity Attribut) verfügen.

Hinweis

In früheren Versionen dieser Dokumentation wurde angegeben, dass der ereignisparameter ulParam ein Member der _MFT_DRAIN_TYPE-Enumeration ist. Diese Antwort ist falsch. UlParam enthält einen Streambezeichner.

 

Implementierung

Ein asynchroner MFT muss immer METransformDrainComplete zurückgeben, nachdem er geleert wurde.

Ein synchroner MFT kann diese Meldung ignorieren und S_OK zurückgeben, wenn die folgenden Bedingungen erfüllt sind:

  • Das MFT speichert nie mehr als ein Eingabebeispiel gleichzeitig.
  • Jedes Eingabebeispiel erzeugt ein einzelnes Ausgabebeispiel.

Andernfalls muss diese Nachricht von einem synchronen MFT implementiert werden.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client)
Windows Vista [nur Desktop-Apps]
Unterstützte Mindestversion (Server)
Windows Server 2008 [nur Desktop-Apps]
Header
Mftransform.h

Weitere Informationen

MFT_MESSAGE_TYPE

Asynchrone MFTs