IMFTransform::P rocessInput メソッド (mftransform.h)
この Media Foundation 変換 (MFT) の入力ストリームにデータを配信します。
構文
HRESULT ProcessInput(
[in] DWORD dwInputStreamID,
[in] IMFSample *pSample,
[in] DWORD dwFlags
);
パラメーター
[in] dwInputStreamID
入力ストリーム識別子。 ストリーム識別子の一覧を取得するには、 IMFTransform::GetStreamIDs を呼び出します。
[in] pSample
入力サンプルの IMFSample インターフェイスへのポインター。 サンプルには、有効な入力データを含むメディア バッファーが少なくとも 1 つ含まれている必要があります。
[in] dwFlags
予約済み。 ゼロを指定してください。
戻り値
このメソッドは HRESULT を返します。 有効な値を次の表に示しますが、これ以外にもあります。
リターン コード | 説明 |
---|---|
|
メソッドが成功しました。 |
|
引数が無効です。 |
|
ストリーム識別子が無効です。 |
|
入力サンプルには、有効なサンプル期間が必要です。 期間を設定するには、 IMFSample::SetSampleDuration を呼び出します。
一部の MFT では、入力サンプルに有効な期間が必要です。 一部の MFT では、サンプル期間は必要ありません。 |
|
入力サンプルにはタイム スタンプが必要です。 タイム スタンプを設定するには、 IMFSample::SetSampleTime を呼び出します。
一部の MFT では、入力サンプルに有効なタイム スタンプが必要です。 一部の MFT では、タイム スタンプは必要ありません。 |
|
変換では、この時点でそれ以上の入力を処理できません。 |
|
メディアの種類が 1 つ以上のストリームに設定されていません。 |
|
メディアの種類は、DirectX ビデオ アクセラレーション (DXVA) ではサポートされていません。 DXVA 対応デコーダーは、このエラー コードを返す場合があります。 |
注釈
ほとんどの場合、メソッドが成功した場合、MFT はサンプルを格納し、 IMFSample ポインターの参照カウントを保持します。 MFT によってサンプルがリリースされるまで、サンプルを再利用しないでください。 ただし、MFT では、サンプルを格納する代わりに、サンプル データを新しいバッファーにコピーする場合があります。 その場合、MFT は IMFTransform::GetInputStreamInfo メソッドで MFT_INPUT_STREAM_DOES_NOT_ADDREF フラグを設定する必要があります。
MFT に出力サンプルを生成するのに十分な入力データが既にある場合、新しい入力データは受け入れず、 ProcessInput は MF_E_NOTACCEPTINGを返します。 その時点で、クライアントは次のいずれかの操作を行って、保留中の入力データをクリアする必要があります。
- IMFTransform::P rocessOutput を呼び出して、新しい出力を生成します。
- MFT_MESSAGE_COMMAND_FLUSH メッセージを使用 して IMFTransform::P rocessMessage を呼び出して、入力データを フラッシュします。
MFT では、 ProcessInput メソッドで入力データを処理できます。 ただし、ほとんどの MFT は、クライアントが ProcessOutput を呼び出すまで待機します。
クライアントがすべてのストリームで有効なメディアの種類を設定した後、MFT は常に 2 つの状態のいずれかである必要があります。より多くの入力を受け入れるか、より多くの出力を生成できます。 両方の状態にすることも、どちらの状態にすることもしないでください。 MFT では、少なくとも 1 つの出力サンプルを生成するために必要な量の入力のみを受け入れる必要があり、その時点で ProcessInput は MF_E_NOTACCEPTINGを返します。 ProcessInput がMF_E_NOTACCEPTINGを返すと、クライアントは MFT が出力を生成する準備ができていると想定できます。
MFT が入力データで致命的でないエラーを検出した場合、単にデータを削除し、より多くの入力データを取得したときに回復を試みることができます。 より多くの入力データを要求するために、MFT は IMFTransform::P rocessOutputメソッドからMF_E_TRANSFORM_NEED_MORE_INPUTを返します。 MFT がデータを削除した場合は、次の出力サンプルで MFSampleExtension_Discontinuity 属性属性を設定して、データ ストリームにギャップがあることを呼び出し元に通知する必要があります。
mftransform.h を含む前に MFT_UNIQUE_METHOD_NAMES が定義されている場合、このメソッドの名前は MFTProcessInput に変更されます。 「ハイブリッド DMO/MFT オブジェクトの作成」を参照してください。
非同期処理
前の解説では、 同期 処理モデルについて説明します。 非同期処理をサポートするには、「 非同期 MFT」を参照してください。要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Vista [デスクトップ アプリのみ | UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2008 [デスクトップ アプリ | UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | mftransform.h |
Library | Mfuuid.lib |