メディアの種類について (Microsoft Media Foundation)
メディアの種類は、メディア ストリームの形式を表します。 Microsoft Media Foundation では、メディアの種類は IMFMediaType インターフェイスによって表されます。 このインターフェイスは、 IMFAttributes インターフェイスを 継承します。 メディアタイプの詳細は属性として指定されます。
新しいメディアの種類を作成するには、 MFCreateMediaType 関数を呼び出します。 この関数は、 IMFMediaType インターフェイスへのポインターを返します。 メディアの種類には、最初は属性がありません。 形式の詳細を設定するには、関連する属性を設定します。
メディアの種類の属性の一覧については、「 メディアの種類の属性」を参照してください。
主な型とサブタイプ
メディアの種類に関する 2 つの重要な情報は、メジャー型とサブタイプです。
- メジャー型は、メディア ストリーム内のデータの全体的なカテゴリを定義する GUID です。 主な種類はビデオとオーディオです。 メジャー型を指定するには、 MF_MT_MAJOR_TYPE 属性を設定します。 IMFMediaType::GetMajorType メソッドは、この属性の値を返します。
- サブタイプは、さらに形式を定義します。 たとえば、ビデオ メジャー タイプ内には、RGB-24、RGB-32、YUY2 などのサブタイプがあります。 オーディオ内には、PCM オーディオ、IEEE 浮動小数点オーディオなどがあります。 サブタイプはメジャー型よりも多くの情報を提供しますが、形式に関するすべての情報を定義しているわけではありません。 たとえば、ビデオ サブタイプでは、イメージ サイズやフレーム レートは定義されません。 サブタイプを指定するには、 MF_MT_SUBTYPE 属性を設定します。
すべてのメディアの種類には、メジャー型 GUID とサブタイプ GUID が必要です。 主な種類とサブタイプの GUID の一覧については、「 メディアの種類の GUID」を参照してください。
属性の理由
属性には、DirectShow や Windows Media Format SDK などの以前のテクノロジで使用されていた形式構造に比べて、いくつかの利点があります。
"知らない" または "気にしない" 値を表す方が簡単です。 たとえば、ビデオ変換を作成する場合は、ビデオ ソースから変換を取得するまで、変換でサポートされる RGB と YUV の形式は事前にわかっていますが、ビデオ フレームのサイズは認識できません。 同様に、ビデオのプライマリなど、特定の詳細については気にしない場合があります。 書式構造では、すべてのメンバーに 何らかの 値を入力する必要があります。 その結果、0 を使用して不明または既定値を示すのが一般的になりました。 この方法では、別のコンポーネントが 0 を正当な値として扱う場合にエラーが発生する可能性があります。 属性を使用すると、不明な属性またはコンポーネントに関連しない属性を省略するだけです。
要件が時間の経過と同時に変化するにつれて、構造の最後にデータを追加することで、書式構造が拡張されました。 たとえば、 WAVEFORMATEXTENSIBLE は WAVEFORMATEX 構造体を拡張します。 コンポーネントは構造体ポインターを他の構造体型にキャストする必要があるため、この方法ではエラーが発生しやすくなります。 属性は安全に拡張できます。
相互に互換性のない形式の構造体が定義されています。 たとえば、DirectShow は VIDEOINFOHEADER および VIDEOINFOHEADER2 構造体を定義します。 属性は互いに独立して設定されるため、この問題は発生しません。
関連トピック