Win32 API 日本語リファレンス
ホームMedia.MediaFoundation › IMFMediaType

IMFMediaType

COM
IID44ae0fa8-ea31-4109-8d2e-4cae4997c555継承元IMFAttributes自前メソッド開始 vtbl33

公式ドキュメント

メディア形式の記述を表します。

解説(Remarks)

新しいメディア型を作成するには、MFCreateMediaType を呼び出します。

メディア型内のすべての情報は属性として格納されます。メディア型を複製するには、IMFAttributes::CopyAllItems を呼び出します。

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで使用できます。

メソッド 5

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 33 HRESULT GetMajorType(GUID* pguidMajorType)

形式のメジャー型を取得します。

pguidMajorTypeGUID*outメジャー型の GUID を受け取ります。メジャー型は、オーディオやビデオなど、形式の大まかなカテゴリを表します。使用可能な値の一覧については、Major Media Types を参照してください。

戻り値

このメソッドは HRESULT を返します。使用可能な値には次の表のものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_ATTRIBUTENOTFOUND
メジャー型が設定されていません。

解説(Remarks)

このメソッドは、メディア型から MF_MT_MAJOR_TYPE 属性を取得することと同等です。

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで使用できます。

vtbl 34 HRESULT IsCompressedFormat(BOOL* pfCompressed)

メディア型が時間方向に圧縮された形式かどうかを照会します。

pfCompressedBOOL*outブール値を受け取ります。形式が時間方向の圧縮を使用する場合は値が TRUE、形式が時間方向の圧縮を使用しない場合は FALSE になります。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

このメソッドは、メディア型の MF_MT_ALL_SAMPLES_INDEPENDENT 属性が TRUE の場合、pfCompressedFALSE を返します。MF_MT_ALL_SAMPLES_INDEPENDENT 属性が FALSE であるか設定されていない場合、このメソッドは TRUE を返します。

このメソッドが pfCompressedTRUE を返す場合、それは形式に時間方向の圧縮が適用されているというヒントになります。このメソッドが FALSE を返す場合、その形式はフレーム内圧縮を使用している可能性はありますが、時間方向の圧縮は使用していません。

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで使用できます。

vtbl 35 HRESULT IsEqual(IMFMediaType* pIMediaType, DWORD* pdwFlags)

2 つのメディア型を比較し、それらが同一かどうかを判定します。同一でない場合、このメソッドは 2 つの形式がどのように異なるかを示します。

pIMediaTypeIMFMediaType*in比較するメディア型の IMFMediaType インターフェイスへのポインター。
pdwFlagsDWORD*out

2 つのメディア型間の類似度を示す、0 個以上のフラグのビットごとの OR を受け取ります。次のフラグが定義されています。

意味
MF_MEDIATYPE_EQUAL_MAJOR_TYPES
0x00000001
メジャー型が同一です。メジャー型は MF_MT_MAJOR_TYPE 属性によって指定されます。
MF_MEDIATYPE_EQUAL_FORMAT_TYPES
0x00000002
サブタイプが同一であるか、どちらのメディア型もサブタイプを持ちません。サブタイプは MF_MT_SUBTYPE 属性によって指定されます。
MF_MEDIATYPE_EQUAL_FORMAT_DATA
0x00000004
一方のメディア型の属性が他方のメディア型の属性のサブセットであり、これらの属性の値が一致します。ただし、MF_MT_USER_DATAMF_MT_FRAME_RATE_RANGE_MIN、および MF_MT_FRAME_RATE_RANGE_MAX 属性の値は除きます。

具体的には、このメソッドは属性の数が少ない方のメディア型を取り、その型の各属性がもう一方のメディア型に存在し、同じ値を持つかどうかを確認します (MF_MT_USER_DATAMF_MT_FRAME_RATE_RANGE_MIN、および MF_MT_FRAME_RATE_RANGE_MAX は含みません)。

その他の比較を行うには、IMFAttributes::Compare メソッドを使用します。たとえば、Compare メソッドは、属性が同一かどうかをテストしたり、2 つの属性セットの積集合をテストしたりできます。詳細については、MF_ATTRIBUTES_MATCH_TYPE を参照してください。

MF_MEDIATYPE_EQUAL_FORMAT_USER_DATA
0x00000008
ユーザーデータが同一であるか、どちらのメディア型もユーザーデータを含みません。ユーザーデータは MF_MT_USER_DATA 属性によって指定されます。

戻り値

このメソッドは HRESULT を返します。使用可能な値には次の表のものが含まれますが、これらに限定されません。

戻り値 説明
S_FALSE
型が等しくありません。型がどのように異なるかを判断するには、pdwFlags パラメーターを調べてください。
S_OK
型が等しいです。
E_INVALIDARG
一方または両方のメディア型が無効です。

解説(Remarks)

両方のメディア型がメジャー型を持っている必要があります。そうでない場合、このメソッドは E_INVALIDARG を返します。

このメソッドが成功し、pdwFlags にすべての比較フラグが設定されている場合、戻り値は S_OK です。このメソッドが成功したものの、1 つ以上の比較フラグが設定されていない場合、このメソッドは S_FALSE を返します。

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで使用できます。

vtbl 36 HRESULT GetRepresentation(GUID guidRepresentation, void** ppvRepresentation)

メディア型の代替表現を取得します。現在サポートされているのは DirectShow の AM_MEDIA_TYPE 構造体のみです。

guidRepresentationGUIDin

取得する表現を指定する GUID。次の値が定義されています。

意味
AM_MEDIA_TYPE_REPRESENTATION
メディア型を DirectShow の AM_MEDIA_TYPE 構造体に変換します。このメソッドは最も適切な形式構造体 (pbFormat) を選択します。
FORMAT_MFVideoFormat
メディア型を、MFVIDEOFORMAT 形式構造体を持つ DirectShow の AM_MEDIA_TYPE 構造体に変換します。
FORMAT_VideoInfo
メディア型を、VIDEOINFOHEADER 形式構造体を持つ DirectShow の AM_MEDIA_TYPE 構造体に変換します。
FORMAT_VideoInfo2
メディア型を、VIDEOINFOHEADER2 形式構造体を持つ DirectShow の AM_MEDIA_TYPE 構造体に変換します。
ppvRepresentationvoid**out表現を含む構造体へのポインターを受け取ります。このメソッドが構造体のメモリを割り当てます。呼び出し側は IMFMediaType::FreeRepresentation を呼び出してメモリを解放する必要があります。

戻り値

このメソッドは HRESULT を返します。使用可能な値には次の表のものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_ATTRIBUTENOTFOUND
メディア型の詳細が、要求された表現と一致しません。
MF_E_INVALIDMEDIATYPE
メディア型が有効ではありません。
MF_E_UNSUPPORTED_REPRESENTATION
メディア型が、要求された表現をサポートしていません。

解説(Remarks)

guidRepresentation パラメーターで VIDEOINFOHEADER などの特定の形式構造体を要求すると、形式情報の一部が失われる可能性があります。

MFInitAMMediaTypeFromMFMediaType 関数を使用して、Media Foundation のメディア型を DirectShow のメディア型に変換することもできます。

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで使用できます。

vtbl 37 HRESULT FreeRepresentation(GUID guidRepresentation, void* pvRepresentation)

IMFMediaType::GetRepresentation メソッドによって割り当てられたメモリを解放します。

guidRepresentationGUIDinGetRepresentation メソッドに渡された GUID。
pvRepresentationvoid*inGetRepresentation メソッドによって返されたバッファーへのポインター。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで使用できます。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IMFMediaType "{44AE0FA8-EA31-4109-8D2E-4CAE4997C555}"
#usecom global IMFMediaType IID_IMFMediaType "{}"
#comfunc global IMFMediaType_GetMajorType        33 var
#comfunc global IMFMediaType_IsCompressedFormat  34 var
#comfunc global IMFMediaType_IsEqual             35 sptr,var
#comfunc global IMFMediaType_GetRepresentation   36 int,sptr
#comfunc global IMFMediaType_FreeRepresentation  37 int,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。