知識マップ: Media Foundation入門 - COM視点でAPIを理解する
記事「Media Foundation入門 - COM視点でAPIを理解する」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
この記事は、Media FoundationがCOMを土台にしたメディア処理プラットフォームであることを、初期化・オブジェクト受け渡し・設定・列挙・非同期処理という5つの地点から説明している。COMライブラリの初期化(CoInitializeEx)はMedia Foundation自身の初期化(MFStartup)の前提になり、IMFSourceReaderやIMFAttributes、IMFTransformといった部品はいずれもIUnknownを基底に持つCOMインターフェースとしてHRESULTを返す。IMFActivateは実体を後で作るための入口で、MFTEnumExの列挙結果からActivateObjectを呼んで初めてIMFTransformが得られる。非同期処理はMTAで動くwork queueのスレッドから呼ばれるため、STA側のUIオブジェクトを直接扱わずに結果だけを橋渡しする設計が必要になる。
flowchart LR
accTitle: Media FoundationとCOMの関係の知識マップ
accDescr: Media FoundationがCOMを基盤にしたメディア処理プラットフォームであること、初期化・オブジェクト表現・設定・列挙・非同期処理の各地点でCOMの性質が現れること、MTAのwork queueとUIのapartmentモデルを橋渡しする必要があることを示す図
media_foundation["Media Foundation"]
com["COM(コンポーネントオブジェクトモデル)"]
mfstartup["MFStartup"]
coinitializeex["CoInitializeEx"]
iunknown["IUnknown"]
hresult["HRESULT"]
imfsourcereader["IMFSourceReader(Source Reader)"]
imftransform["IMFTransform(MFT)"]
imfattributes["IMFAttributes"]
imfactivate["IMFActivate(Activation Object)"]
imfsinkwriter["IMFSinkWriter(Sink Writer)"]
media_session["Media Session"]
mf_topology["Topology(トポロジー)"]
imfsourcereadercallback["IMFSourceReaderCallback"]
mf_work_queue["work queue"]
com_apartment_model["COMアパートメントモデル(STA/MTA)"]
com_smart_pointer["COMスマートポインタ(ComPtr/wil::com_ptr)"]
media_type_negotiation["メディアタイプの取り決め(media type negotiation)"]
media_foundation -->|"利用する"| com
mfstartup -->|"前提とする"| coinitializeex
media_foundation -->|"利用する"| mfstartup
com -->|"前提とする"| iunknown
com -->|"利用する"| hresult
imfsourcereader -->|"利用する"| com
imftransform -->|"利用する"| com
imfattributes -->|"利用する"| com
imfactivate -->|"利用する"| imfattributes
media_foundation -.->|"利用する"| imfsourcereader
media_foundation -.->|"利用する"| imfsinkwriter
media_foundation -.->|"利用する"| media_session
media_session -->|"利用する"| mf_topology
imfsourcereader -->|"利用する"| imftransform
imfsourcereader -.->|"利用する"| imfsourcereadercallback
imfsourcereadercallback -->|"利用する"| mf_work_queue
mf_work_queue -->|"利用する"| com_apartment_model
com_smart_pointer -->|"推奨される対応"| com
imfsourcereader -->|"前提とする"| media_type_negotiation
media_type_negotiation -->|"利用する"| imfattributes
imftransform -.->|"前提とする"| imfactivate
概念間の関係(全21件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- Media FoundationはCOM(コンポーネントオブジェクトモデル)を利用します。
- MFStartupはCoInitializeExを前提とします。
- Media FoundationはMFStartupを利用します。
- COM(コンポーネントオブジェクトモデル)はIUnknownを前提とします。
- COM(コンポーネントオブジェクトモデル)はHRESULTを利用します。
- IMFSourceReader(Source Reader)はCOM(コンポーネントオブジェクトモデル)を利用します。
- IMFTransform(MFT)はCOM(コンポーネントオブジェクトモデル)を利用します。
- IMFAttributesはCOM(コンポーネントオブジェクトモデル)を利用します。
- IMFActivate(Activation Object)はIMFAttributesを利用します。
- Media FoundationはIMFSourceReader(Source Reader)を利用します。
- Media FoundationはIMFSinkWriter(Sink Writer)を利用します。
- Media FoundationはMedia Sessionを利用します。
- Media SessionはTopology(トポロジー)を利用します。
- IMFSourceReader(Source Reader)はIMFTransform(MFT)を利用します。
- IMFSourceReader(Source Reader)はIMFSourceReaderCallbackを利用します。
- IMFSourceReaderCallbackはwork queueを利用します。
- work queueはCOMアパートメントモデル(STA/MTA)を利用します。
- COMスマートポインタ(ComPtr/wil::com_ptr)はCOM(コンポーネントオブジェクトモデル)に対する本記事の推奨です。
- IMFSourceReader(Source Reader)はメディアタイプの取り決め(media type negotiation)を前提とします。
- メディアタイプの取り決め(media type negotiation)はIMFAttributesを利用します。
- IMFTransform(MFT)はIMFActivate(Activation Object)を前提とします。
主要概念の定義
機械可読データ
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。