Поделиться через


MFT_MESSAGE_COMMAND_DRAIN

Запрашивает преобразование Media Foundation (MFT) для очистки всех сохраненных данных.

Параметр сообщения

Нет.

Remarks

Чтобы отправить это сообщение, позвоните по телефону IMFTransform::P rocessMessage.

После отправки этого сообщения указанный входной поток не принимает входные данные, пока MFT не обработает все данные из предыдущих вызовов IMFTransform::P rocessInput.

Процесс очистки немного зависит от синхронных MFT и асинхронных MFT:

Синхронные MFT

  1. После отправки этого сообщения клиент вызывает IMFTransform::P rocessOutput в цикле, пока ProcessOutput не вернет код ошибки MF_E_TRANSFORM_NEED_MORE_INPUT.
  2. Пока MFT по-прежнему имеет данные для обработки, дальнейшие вызовы ProcessInput будут завершатся ошибкой. MFT продолжает создавать выходные данные, пока не будет использовать все сохраненные данные. MFT удаляет все данные, которые не могут быть обработаны в полный выходной пример. (Например, он должен удалить частичный видеокадр.)

Асинхронные MFT

  1. MFT продолжает отправлять события METransformHaveOutput , пока не будет больше данных для обработки. В течение этого времени он не отправляет события METransformNeedInput .
  2. После того как MFT отправляет последнее событие METransformHaveOutput , он отправляет событие METransformDrainComplete .
  3. После завершения очистки MFT не отправляет другое событие METransformNeedInput , пока не получит MFT_MESSAGE_NOTIFY_START_OF_STREAM сообщение от клиента.

После очистки MFT клиент может отправить дополнительные входные данные. Первый образец после операции очистки должен иметь атрибут разрыва (MFSampleExtension_Discontinuity атрибут).

Примечание

В более ранних версиях этой документации говорилось, что параметр события ulParam является членом перечисления _MFT_DRAIN_TYPE . Неверно. UlParam содержит идентификатор потока.

 

Реализация

После очистки асинхронный MFT всегда должен возвращать METransformDrainComplete .

Синхронный MFT может игнорировать это сообщение и возвращать S_OK, если выполняются следующие условия:

  • MFT никогда не хранит более одного входного примера за раз.
  • Каждый входной пример создает один выходной пример.

В противном случае это сообщение должно быть реализовано в синхронном MFT.

Требования

Требование Значение
Минимальная версия клиента
Windows Vista [только классические приложения]
Минимальная версия сервера
Windows Server 2008 [только классические приложения]
Заголовок
Mftransform.h

См. также раздел

MFT_MESSAGE_TYPE

Асинхронные MFT