MFT_MESSAGE_COMMAND_DRAIN
格納されているすべてのデータをドレインするように Media Foundation 変換 (MFT) を要求します。
Message パラメーター
[なし] :
解説
このメッセージを送信するには、 IMFTransform::P rocessMessage を呼び出します。
このメッセージが送信されると、指定された入力ストリームは、 MFT が IMFTransform::P rocessInput への以前の呼び出しからのすべてのデータを処理するまで、入力を受け入れません。
ドレイン プロセスは、同期 MFT と非同期 MFT の間で若干異なります。
同期 MFT
- クライアントはこのメッセージを送信した後、ProcessOutput がエラー コード MF_E_TRANSFORM_NEED_MORE_INPUTを返すまで、ループ内で IMFTransform::P rocessOutput を呼び出します。
- MFT に処理するデータが残っている限り、 ProcessInput のそれ以上の呼び出しは失敗します。 MFT は、格納されているすべてのデータを使用するまで、出力を生成し続けます。 MFT は、完全な出力サンプルに処理できないデータを破棄します。 (たとえば、ビデオ フレームの一部を削除する必要があります)。
非同期 MFT
- MFT は、処理するデータがなくなったまで METransformHaveOutput イベントを送信し続けます。 この間 、METransformNeedInput イベントは送信されません。
- MFT は、最後の METransformHaveOutput イベントを送信した後、 METransformDrainComplete イベントを送信します。
- ドレインが完了すると、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 [デスクトップ アプリのみ] |
ヘッダー |
|
こちらもご覧ください