Partilhar via


MFT_MESSAGE_COMMAND_DRAIN

Solicita uma MFT (transformação do Media Foundation) para esvaziar todos os dados armazenados.

Parâmetro message

Nenhum.

Comentários

Para enviar essa mensagem, chame IMFTransform::P rocessMessage.

Depois que essa mensagem é enviada, o fluxo de entrada especificado não aceita entrada até que o MFT processe todos os dados de chamadas anteriores para IMFTransform::P rocessInput.

O processo de drenagem varia ligeiramente entre MFTs síncronos e MFTs assíncronos:

MFTs síncronos

  1. Depois que o cliente envia essa mensagem, ele chama IMFTransform::P rocessOutput em um loop, até que ProcessOutput retorne o código de erro MF_E_TRANSFORM_NEED_MORE_INPUT.
  2. Desde que o MFT ainda tenha dados a serem processados, novas chamadas para ProcessInput falharão. O MFT continua a produzir saída até usar todos os dados armazenados. O MFT descarta todos os dados que não podem ser processados em um exemplo de saída completo. (Por exemplo, ele deve remover um quadro de vídeo parcial.)

MFTs assíncronos

  1. O MFT continua a enviar eventos METransformHaveOutput até que não tenha mais dados para processar. Ele não envia eventos METransformNeedInput durante esse tempo.
  2. Depois que o MFT envia o último evento METransformHaveOutput , ele envia um evento METransformDrainComplete .
  3. Após a conclusão da drenagem, o MFT não envia outro evento METransformNeedInput até receber uma mensagem MFT_MESSAGE_NOTIFY_START_OF_STREAM do cliente.

Depois que o cliente tiver esvaziado o MFT, o cliente poderá enviar mais dados de entrada. O primeiro exemplo após a operação de esvaziamento deve ter o atributo de descontinuidade (atributo MFSampleExtension_Discontinuity ).

Observação

Versões anteriores desta documentação afirmavam que o parâmetro de evento ulParam é um membro da enumeração _MFT_DRAIN_TYPE . Incorreto. O ulParam contém um identificador de fluxo.

 

Implementação

Um MFT assíncrono sempre deve retornar METransformDrainComplete depois de ser drenado.

Um MFT síncrono pode ignorar essa mensagem e retornar S_OK se as seguintes condições forem verdadeiras:

  • O MFT nunca armazena mais de uma amostra de entrada por vez.
  • Cada exemplo de entrada produz um único exemplo de saída.

Caso contrário, um MFT síncrono deve implementar essa mensagem.

Requisitos

Requisito Valor
Cliente mínimo com suporte
Windows Vista [somente aplicativos da área de trabalho]
Servidor mínimo com suporte
Windows Server 2008 [somente aplicativos da área de trabalho]
Cabeçalho
Mftransform.h

Confira também

MFT_MESSAGE_TYPE

MFTs assíncronos