_MFT_INPUT_STREAM_INFO_FLAGS列挙 (mftransform.h)

Media Foundation 変換 (MFT) の入力ストリームについて説明します。

構文

typedef enum _MFT_INPUT_STREAM_INFO_FLAGS {
  MFT_INPUT_STREAM_WHOLE_SAMPLES = 0x1,
  MFT_INPUT_STREAM_SINGLE_SAMPLE_PER_BUFFER = 0x2,
  MFT_INPUT_STREAM_FIXED_SAMPLE_SIZE = 0x4,
  MFT_INPUT_STREAM_HOLDS_BUFFERS = 0x8,
  MFT_INPUT_STREAM_DOES_NOT_ADDREF = 0x100,
  MFT_INPUT_STREAM_REMOVABLE = 0x200,
  MFT_INPUT_STREAM_OPTIONAL = 0x400,
  MFT_INPUT_STREAM_PROCESSES_IN_PLACE = 0x800
} ;

定数

 
MFT_INPUT_STREAM_WHOLE_SAMPLES
値: 0x1
入力データの各メディア サンプル (IMFSample インターフェイス) には、完全で切り開かれていないデータ単位が含まれている必要があります。 データの単位の定義は、メディアの種類によって異なります: 圧縮されていないビデオの場合は、ビデオ フレーム。圧縮データの場合は、圧縮パケット。非圧縮オーディオの場合は、1 つのオーディオ フレーム。

非圧縮オーディオ形式の場合、このフラグは常に暗黙的に指定されます。 (フラグを設定することは有効ですが、必須ではありません)。圧縮されていないオーディオ フレームは、複数のメディア サンプルにまたがってはいけません。
MFT_INPUT_STREAM_SINGLE_SAMPLE_PER_BUFFER
値: 0x2
クライアントが入力として提供する各メディア サンプルには、MFT_INPUT_STREAM_WHOLE_SAMPLES フラグに定義されているデータの単位を 1 つだけ含める必要があります。

このフラグが存在する場合は、MFT_INPUT_STREAM_WHOLE_SAMPLES フラグも存在する必要があります。

非圧縮オーディオを処理する MFT では、このフラグを設定しないでください。 MFT は、効率を高める目的で、複数のオーディオ フレームを含むバッファーを受け入れる必要があります。
MFT_INPUT_STREAM_FIXED_SAMPLE_SIZE
値: 0x4
すべての入力サンプルは同じサイズである必要があります。
サイズは、MFT_INPUT_STREAM_INFO構造体の cbSize メンバーで指定されます。 MFT では、この値を指定する必要があります。 処理中に、MFT は入力サンプルのサイズを確認する必要があり、サイズが正しくないサンプルがドロップされる可能性があります。
MFT_INPUT_STREAM_HOLDS_BUFFERS
値: 0x8
MFT は、IMFTransform::P rocessOutput が呼び出された後に 1 つ以上の入力サンプルを保持する場合があります。 このフラグが存在する場合、MFT_INPUT_STREAM_INFO構造体の hnsMaxLatency メンバーは最大待機時間を提供し、cbMaxLookahead メンバーは先読みの最大バイト数を示します。
MFT_INPUT_STREAM_DOES_NOT_ADDREF
値: 0x100
IMFTransform::P rocessInput メソッドが戻った後、MFT は入力サンプルを保持しません。 ProcessInput メソッドが返される前にサンプルを解放します。

このフラグがない場合、 MFT は ProcessInput メソッドに渡されるサンプルの参照カウントを保持する可能性があります。 MFT がサンプルの IMFSample ポインターを解放するまで、クライアントはバッファー メモリを再利用または削除しないでください。

このフラグがない場合、MFT が入力サンプルの参照カウントを保持することは保証されません。 MFT でこのフラグが設定されていない場合でも、 MFT が ProcessInput の入力サンプルをリリースすることは有効です。 ただし、このフラグを設定すると、クライアントがバッファーを再利用する方法を最適化できる場合があります。

MFT は、ProcessInput から返された後に入力サンプルを保持する場合は、このフラグを設定しないでください。
MFT_INPUT_STREAM_REMOVABLE
値: 0x200
この入力ストリームは、 IMFTransform::D eleteInputStream を呼び出すことによって削除できます。
MFT_INPUT_STREAM_OPTIONAL
値: 0x400
この入力ストリームは省略可能です。 変換では、このストリームからの入力を受け取らずに出力を生成できます。 呼び出し元は、メディアの種類を設定しないか 、NULL メディアの種類を設定することで、ストリームの選択を解除できます。 変換のすべての入力ストリームを省略可能にすることができますが、出力を生成するには少なくとも 1 つの入力を選択する必要があります。
MFT_INPUT_STREAM_PROCESSES_IN_PLACE
値: 0x800
MFT はインプレース処理を実行できます。 このモードでは、MFT によって入力バッファーが直接変更されます。 クライアントが ProcessOutput を呼び出すと、このストリームに配信されたのと同じサンプルが、一致するストリーム識別子を持つ出力ストリームに返されます。 このフラグは、MFT が入力バッファーを保持していることを意味するため、このフラグを MFT_INPUT_STREAM_DOES_NOT_ADDREF フラグと組み合わせることはできません。

このフラグが存在する場合、MFT は、この入力ストリームに対応する出力ストリームのMFT_OUTPUT_STREAM_PROVIDES_SAMPLESまたはMFT_OUTPUT_STREAM_CAN_PROVIDE_SAMPLESフラグを設定する必要があります。 (「 IMFTransform::GetOutputStreamInfo」を参照してください)。

解説

クライアントが変換にメディアの種類を設定する前に、正確であることが保証される唯一のフラグは、MFT_INPUT_STREAM_REMOVABLEフラグとMFT_INPUT_STREAM_OPTIONALフラグです。 その他のすべてのフラグの場合、クライアントは最初に、オプション以外のすべてのストリームにメディアの種類を設定する必要があります。

既定の処理モデルでは、MFT は ProcessInput で受け取るサンプルの参照カウントを保持します。 ProcessInput 内でサンプルをすぐに処理することはありません。 ProcessOutput が呼び出されると、MFT によって出力データが生成され、入力サンプルが破棄されます。 このモデルでは、次のバリエーションが定義されています。

  • MFT が ProcessInputProcessOutput の間の入力サンプルを保持しない場合は、MFT_INPUT_STREAM_DOES_NOT_ADDREFを設定できます。
  • MFT が ProcessOutput の次の呼び出しを超えていくつかの入力サンプルを保持している場合は、MFT_INPUT_STREAM_HOLDS_BUFFERSを設定できます。

要件

   
サポートされている最小のクライアント Windows Vista [デスクトップ アプリのみ | UWP アプリ]
サポートされている最小のサーバー Windows Server 2008 [デスクトップ アプリ | UWP アプリ]
Header mftransform.h

関連項目

MFT_INPUT_STREAM_INFO

Media Foundation 列挙

Media Foundation Transforms