次の方法で共有


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 を返します。 有効な値を次の表に示しますが、これ以外にもあります。

リターン コード 説明
S_OK
メソッドが成功しました。
E_INVALIDARG
引数が無効です。
MF_E_INVALIDSTREAMNUMBER
ストリーム識別子が無効です。
MF_E_NO_SAMPLE_DURATION
入力サンプルには、有効なサンプル期間が必要です。 期間を設定するには、 IMFSample::SetSampleDuration を呼び出します。

一部の MFT では、入力サンプルに有効な期間が必要です。 一部の MFT では、サンプル期間は必要ありません。

MF_E_NO_SAMPLE_TIMESTAMP
入力サンプルにはタイム スタンプが必要です。 タイム スタンプを設定するには、 IMFSample::SetSampleTime を呼び出します。

一部の MFT では、入力サンプルに有効なタイム スタンプが必要です。 一部の MFT では、タイム スタンプは必要ありません。

MF_E_NOTACCEPTING
変換では、この時点でそれ以上の入力を処理できません。
MF_E_TRANSFORM_TYPE_NOT_SET
メディアの種類が 1 つ以上のストリームに設定されていません。
MF_E_UNSUPPORTED_D3D_TYPE
メディアの種類は、DirectX ビデオ アクセラレーション (DXVA) ではサポートされていません。 DXVA 対応デコーダーは、このエラー コードを返す場合があります。
 
メモDirectX Media Object (DMO) を MFT に変換する場合は、IMediaObject::P rocessInput メソッドとは異なり、S_FALSEIMFTransform::P rocessInput の有効なリターン コードではないことに注意してください。
 

注釈

ほとんどの場合、メソッドが成功した場合、MFT はサンプルを格納し、 IMFSample ポインターの参照カウントを保持します。 MFT によってサンプルがリリースされるまで、サンプルを再利用しないでください。 ただし、MFT では、サンプルを格納する代わりに、サンプル データを新しいバッファーにコピーする場合があります。 その場合、MFT は IMFTransform::GetInputStreamInfo メソッドで MFT_INPUT_STREAM_DOES_NOT_ADDREF フラグを設定する必要があります。

MFT に出力サンプルを生成するのに十分な入力データが既にある場合、新しい入力データは受け入れず、 ProcessInputMF_E_NOTACCEPTINGを返します。 その時点で、クライアントは次のいずれかの操作を行って、保留中の入力データをクリアする必要があります。

この規則の例外は 、MFT_OUTPUT_STREAM_LAZY_READ フラグです。 このフラグが存在する場合、より多くの入力を与えると、変換によって格納されているサンプルが破棄されます。 詳細については、「 IMFTransform::GetOutputStreamInfo」を参照してください。 変換では、正しい出力を生成するために必要な入力データ以上の入力データをキューに入れることはしないでください。

MFT では、 ProcessInput メソッドで入力データを処理できます。 ただし、ほとんどの MFT は、クライアントが ProcessOutput を呼び出すまで待機します。

クライアントがすべてのストリームで有効なメディアの種類を設定した後、MFT は常に 2 つの状態のいずれかである必要があります。より多くの入力を受け入れるか、より多くの出力を生成できます。 両方の状態にすることも、どちらの状態にすることもしないでください。 MFT では、少なくとも 1 つの出力サンプルを生成するために必要な量の入力のみを受け入れる必要があり、その時点で ProcessInputMF_E_NOTACCEPTINGを返します。 ProcessInputMF_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

こちらもご覧ください

IMFTransform

Media Foundation の変換