MFT_MESSAGE_COMMAND_DRAIN

Demande une transformation Media Foundation (MFT) pour vider toutes les données stockées.

Paramètre de message

Aucun.

Notes

Pour envoyer ce message, appelez IMFTransform::P rocessMessage.

Une fois ce message envoyé, le flux d’entrée spécifié n’accepte pas l’entrée tant que le MFT ne traite pas toutes les données des appels précédents vers IMFTransform::P rocessInput.

Le processus de drainage varie légèrement entre les MFT synchrones et les MFT asynchrones :

MFT synchrones

  1. Une fois que le client envoie ce message, il appelle IMFTransform::P rocessOutput dans une boucle, jusqu’à ce que ProcessOutput retourne le code d’erreur MF_E_TRANSFORM_NEED_MORE_INPUT.
  2. Tant que le MFT a toujours des données à traiter, les appels supplémentaires à ProcessInput échouent. Le MFT continue de produire la sortie jusqu’à ce qu’elle utilise toutes les données stockées. MFT ignore toutes les données qui ne peuvent pas être traitées dans un exemple de sortie complet. (Par exemple, il doit supprimer une trame vidéo partielle.)

MFT asynchrones

  1. Le MFT continue d’envoyer des événements METransformHaveOutput jusqu’à ce qu’il n’ait plus de données à traiter. Il n’envoie pas d’événements METransformNeedInput pendant cette période.
  2. Une fois que le MFT envoie le dernier événement METransformHaveOutput , il envoie un événement METransformDrainComplete .
  3. Une fois le drain terminé, le MFT n’envoie pas d’autre événement METransformNeedInput tant qu’il ne reçoit pas de message MFT_MESSAGE_NOTIFY_START_OF_STREAM du client.

Une fois que le client a vidé le MFT, le client peut envoyer plus de données d’entrée. Le premier exemple après l’opération de drainage doit avoir l’attribut de discontinuité (MFSampleExtension_Discontinuity attribut).

Notes

Les versions antérieures de cette documentation ont indiqué que le paramètre d’événement ulParam est membre de l’énumération _MFT_DRAIN_TYPE . C’est inexact. L’ulParam contient un identificateur de flux.

 

Implémentation

Un MFT asynchrone doit toujours renvoyer METransformDrainComplete après son épuisement.

Un MFT synchrone peut ignorer ce message et retourner S_OK si les conditions suivantes sont vraies :

  • MFT ne stocke jamais plus d’un exemple d’entrée à la fois.
  • Chaque exemple d’entrée produit un seul exemple de sortie.

Sinon, un MFT synchrone doit implémenter ce message.

Spécifications

Condition requise Valeur
Client minimal pris en charge
Windows Vista [applications de bureau uniquement]
Serveur minimal pris en charge
Windows Server 2008 [applications de bureau uniquement]
En-tête
Mftransform.h

Voir aussi

MFT_MESSAGE_TYPE

MFT asynchrones