MFT_MESSAGE_COMMAND_DRAIN

格納されているすべてのデータをドレインするように Media Foundation 変換 (MFT) を要求します。

Message パラメーター

[なし] :

解説

このメッセージを送信するには、 IMFTransform::P rocessMessage を呼び出します。

このメッセージが送信されると、指定された入力ストリームは、 MFT が IMFTransform::P rocessInput への以前の呼び出しからのすべてのデータを処理するまで、入力を受け入れません。

ドレイン プロセスは、同期 MFT と非同期 MFT の間で若干異なります。

同期 MFT

  1. クライアントはこのメッセージを送信した後、ProcessOutput がエラー コード MF_E_TRANSFORM_NEED_MORE_INPUTを返すまで、ループ内で IMFTransform::P rocessOutput を呼び出します。
  2. MFT に処理するデータが残っている限り、 ProcessInput のそれ以上の呼び出しは失敗します。 MFT は、格納されているすべてのデータを使用するまで、出力を生成し続けます。 MFT は、完全な出力サンプルに処理できないデータを破棄します。 (たとえば、ビデオ フレームの一部を削除する必要があります)。

非同期 MFT

  1. MFT は、処理するデータがなくなったまで METransformHaveOutput イベントを送信し続けます。 この間 、METransformNeedInput イベントは送信されません。
  2. MFT は、最後の METransformHaveOutput イベントを送信した後、 METransformDrainComplete イベントを送信します。
  3. ドレインが完了すると、MFT は、クライアントからMFT_MESSAGE_NOTIFY_START_OF_STREAM メッセージを受信するまで、別の METransformNeedInput イベントを送信しません。

クライアントが MFT をドレインした後、クライアントはより多くの入力データを送信できます。 ドレイン操作の後の最初のサンプルには、不連続性属性 (MFSampleExtension_Discontinuity 属性) が必要です。

注意

このドキュメントの以前のバージョンでは、 ulParam イベント パラメーターが _MFT_DRAIN_TYPE 列挙体のメンバーであることを示しています。 不正解です。 ulParam にはストリーム識別子が含まれています。

 

実装

非同期 MFT は、ドレイン後に 常に METransformDrainComplete を返す必要があります。

同期 MFT は、このメッセージを無視し、次の条件が満たされている場合はS_OKを返すことができます。

  • MFT では、一度に複数の入力サンプルが格納されることはありません。
  • 各入力サンプルでは、1 つの出力サンプルが生成されます。

それ以外の場合は、同期 MFT でこのメッセージを実装する必要があります。

必要条件

要件
サポートされている最小のクライアント
Windows Vista [デスクトップ アプリのみ]
サポートされている最小のサーバー
Windows Server 2008 [デスクトップ アプリのみ]
ヘッダー
Mftransform.h

こちらもご覧ください

MFT_MESSAGE_TYPE

非同期 MFT