Media Foundation では、オブジェクトの情報を Attribute (属性) として扱っている。属性は、キーと値のペアで成り立っている。
キーはGUID、値はPROPVARIANT
である。
全ての型が対応しているわけではなく、以下のようになっている。
- VT_UI4
- VT_UI8
- VT_R8
- VT_CLSID
- VT_LPWSTR
- VT_VECTOR | VT_UI1
- VT_UNKNOWN
属性が存在する(設定できる)オブジェクトは IMFAttributes
インターフェイスを継承している。アプリケーションは、このインターフェイスを介して、オブジェクトの属性を設定したり問い合わせたりする。
例えば、あるメディアタイプのサブタイプを知りたいとする。メディアタイプのインターフェイスはIMFMediaType
だがIMFAttributes
を継承している。サブメディアタイプのキーはMF_MT_SUBTYPE
、値はGUID
型である。値は IMFAttributes::GetGUID
を呼ぶと GUID
型の変数へ代入できる。
1 2 3 | CComPtr<IMFMediaType> mt; // メディアタイプを取得したとする
GUID sub_type;
mt->GetGUID(MF_MT_SUBTYPE, &sub_type);
|
DirectShow では属性は構造体で扱う。しかし構造体は拡張性・柔軟性に乏しく、実装が複雑になってしまうという難点がある。結果としてバージョンアップ時に○○○2のような名前で定義されている。 Media Foundation の属性はキー/値ペアなので、新たにキーを定義すれば拡張できる。キーはGUIDになっているため、アプリケーションが独自のキーを設定することもできる。
属性は、バイト配列またはIStream
インターフェイスでシリアライズ(永続化)もできるようになっている。
Comments
comments powered by Disqus