MFT_MESSAGE_COMMAND_DRAIN

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

Параметр message

Нет.

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