@prefix schema: <https://schema.org/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ks: <https://comcomponent.com/vocab/> .

<https://comcomponent.com/blog/2026/03/09/002-media-foundation-why-it-feels-like-com/#article>
    schema:about <https://comcomponent.com/knowledge/media-foundation/>, <https://comcomponent.com/knowledge/com/> ;
    schema:mentions <https://comcomponent.com/knowledge/iunknown/>, <https://comcomponent.com/knowledge/hresult/>, <https://comcomponent.com/knowledge/imfattributes/>, <https://comcomponent.com/knowledge/imfactivate/>, <https://comcomponent.com/knowledge/imftransform/>, <https://comcomponent.com/knowledge/media-session/>, <https://comcomponent.com/knowledge/imfsourcereader/>, <https://comcomponent.com/knowledge/imfsinkwriter/>, <https://comcomponent.com/knowledge/mf-work-queue/>, <https://comcomponent.com/knowledge/imfsourcereadercallback/>, <https://comcomponent.com/knowledge/coinitializeex/>, <https://comcomponent.com/knowledge/mfstartup/>, <https://comcomponent.com/knowledge/com-apartment-model/>, <https://comcomponent.com/knowledge/com-smart-pointer/>, <https://comcomponent.com/knowledge/media-type-negotiation/>, <https://comcomponent.com/knowledge/mf-topology/> .

<https://comcomponent.com/knowledge/media-foundation/> a skos:Concept ;
    skos:prefLabel "Media Foundation"@ja ;
    skos:definition "Windowsが提供する、メディアの再生・変換・エンコード/デコードを行うためのCOMベースのフレームワーク。"@ja ;
    skos:altLabel "MF" ;
    ks:uses <https://comcomponent.com/knowledge/com/> ;
    ks:uses <https://comcomponent.com/knowledge/mfstartup/> .

<https://comcomponent.com/knowledge/com/> a skos:Concept ;
    skos:prefLabel "COM(コンポーネントオブジェクトモデル)"@ja ;
    skos:definition "公開インターフェース、レジストリ登録、Apartment Modelなどを土台にした、Windowsのバイナリ互換コンポーネントモデル。"@ja ;
    skos:altLabel "Component Object Model" ;
    ks:requires <https://comcomponent.com/knowledge/iunknown/> ;
    ks:uses <https://comcomponent.com/knowledge/hresult/> .

<https://comcomponent.com/knowledge/mfstartup/> a skos:Concept ;
    skos:prefLabel "MFStartup"@ja ;
    skos:definition "Media Foundationプラットフォーム自体を初期化するAPIで、CoInitializeExによるCOM初期化とは別に呼ぶ必要がある。"@ja ;
    skos:altLabel "Media Foundation初期化"@ja ;
    ks:requires <https://comcomponent.com/knowledge/coinitializeex/> .

<https://comcomponent.com/knowledge/coinitializeex/> a skos:Concept ;
    skos:prefLabel "CoInitializeEx"@ja ;
    skos:definition "COMを使う各スレッドが個別に呼んで初期化する必要があるWin32 API。"@ja .

<https://comcomponent.com/knowledge/iunknown/> a skos:Concept ;
    skos:prefLabel "IUnknown"@ja ;
    skos:definition "COMのすべてのインターフェースが実装しなければならない基底インターフェースで、QueryInterface・AddRef・Releaseの3メソッドを持つ。"@ja ;
    skos:altLabel "IUnknown interface" .

<https://comcomponent.com/knowledge/hresult/> a skos:Concept ;
    skos:prefLabel "HRESULT"@ja ;
    skos:definition "COMの呼び出し結果を表す32ビットの符号付き整数のエラーコード体系で、.NETの例外はHRESULTに対応付けられてCOM側へ伝わる。"@ja .

<https://comcomponent.com/knowledge/imfsourcereader/> a skos:Concept ;
    skos:prefLabel "IMFSourceReader(Source Reader)"@ja ;
    skos:definition "Media Foundationが提供する、メディアファイルからサンプルを同期的または非同期的に読み出すための入口となるインターフェイス。"@ja ;
    skos:altLabel "Source Reader" ;
    ks:uses <https://comcomponent.com/knowledge/com/> ;
    ks:uses <https://comcomponent.com/knowledge/imftransform/> ;
    ks:requires <https://comcomponent.com/knowledge/media-type-negotiation/> .

<https://comcomponent.com/knowledge/imftransform/> a skos:Concept ;
    skos:prefLabel "IMFTransform(MFT)"@ja ;
    skos:definition "デコーダー・エンコーダー・映像変換器などをパイプラインへ差し込むための共通モデルを表すMedia FoundationのCOMインターフェース。"@ja ;
    skos:altLabel "MFT" ;
    skos:altLabel "Media Foundation Transform" ;
    ks:uses <https://comcomponent.com/knowledge/com/> .

<https://comcomponent.com/knowledge/imfattributes/> a skos:Concept ;
    skos:prefLabel "IMFAttributes"@ja ;
    skos:definition "GUIDをキーにしたkey/valueストアを表すMedia FoundationのCOMインターフェースで、設定値やメディア形式の情報を保持する。"@ja ;
    skos:altLabel "Attributes" ;
    ks:uses <https://comcomponent.com/knowledge/com/> .

<https://comcomponent.com/knowledge/imfactivate/> a skos:Concept ;
    skos:prefLabel "IMFActivate(Activation Object)"@ja ;
    skos:definition "列挙されたオブジェクトの本体を後で作るためのヘルパーオブジェクトを表すMedia FoundationのCOMインターフェース。"@ja ;
    skos:altLabel "Activation Object" ;
    ks:uses <https://comcomponent.com/knowledge/imfattributes/> .

<https://comcomponent.com/knowledge/imfsinkwriter/> a skos:Concept ;
    skos:prefLabel "IMFSinkWriter(Sink Writer)"@ja ;
    skos:definition "Media Foundationが提供する、非圧縮フレームをエンコードしてファイルへ書き出すための出力側のインターフェイス。"@ja ;
    skos:altLabel "Sink Writer" .

<https://comcomponent.com/knowledge/media-session/> a skos:Concept ;
    skos:prefLabel "Media Session"@ja ;
    skos:definition "topologyに沿ってsource・transform・sinkのデータフローや再生・停止・シーク・A/V同期をプラットフォーム側で管理するMedia Foundationの仕組み。"@ja ;
    skos:altLabel "IMFMediaSession" ;
    ks:uses <https://comcomponent.com/knowledge/mf-topology/> .

<https://comcomponent.com/knowledge/mf-topology/> a skos:Concept ;
    skos:prefLabel "Topology(トポロジー)"@ja ;
    skos:definition "source・transform・sinkをどうつなぐかを表す接続図で、部分的なpartial topologyをtopology loaderが解決してfull topologyにする。"@ja ;
    skos:altLabel "Partial Topology" ;
    skos:altLabel "Full Topology" .

<https://comcomponent.com/knowledge/imfsourcereadercallback/> a skos:Concept ;
    skos:prefLabel "IMFSourceReaderCallback"@ja ;
    skos:definition "Source Readerを非同期モードで使うときに実装するコールバックインターフェースで、ReadSampleの完了時にwork queueのスレッドから呼ばれる。"@ja ;
    skos:altLabel "非同期コールバック"@ja ;
    ks:uses <https://comcomponent.com/knowledge/mf-work-queue/> .

<https://comcomponent.com/knowledge/mf-work-queue/> a skos:Concept ;
    skos:prefLabel "work queue"@ja ;
    skos:definition "Media Foundationが非同期処理を実行するために持つスレッドの仕組みで、そのスレッドはMTA(Multi-Threaded Apartment)で動く。"@ja ;
    skos:altLabel "ワークキュー"@ja ;
    ks:uses <https://comcomponent.com/knowledge/com-apartment-model/> .

<https://comcomponent.com/knowledge/com-apartment-model/> a skos:Concept ;
    skos:prefLabel "COMアパートメントモデル(STA/MTA)"@ja ;
    skos:definition "どのスレッドからCOMコンポーネントを呼んでよいかを決める、COMのスレッドモデルの約束。"@ja ;
    skos:altLabel "STA" ;
    skos:altLabel "MTA" ;
    skos:altLabel "Single/Multi Threaded Apartment" ;
    skos:broader <https://comcomponent.com/knowledge/com/> .

<https://comcomponent.com/knowledge/com-smart-pointer/> a skos:Concept ;
    skos:prefLabel "COMスマートポインタ(ComPtr/wil::com_ptr)"@ja ;
    skos:definition "COMインターフェースポインタのAddRef/Releaseをスコープに応じて自動管理するC++のラッパー型。"@ja ;
    skos:altLabel "Microsoft::WRL::ComPtr" ;
    skos:altLabel "wil::com_ptr" ;
    ks:recommendedFor <https://comcomponent.com/knowledge/com/> .

<https://comcomponent.com/knowledge/media-type-negotiation/> a skos:Concept ;
    skos:prefLabel "メディアタイプの取り決め(media type negotiation)"@ja ;
    skos:definition "ネイティブタイプの列挙、major typeの確認、SetCurrentMediaTypeでの指定、GetCurrentMediaTypeでの確定値の読み直しという手順で、Source Readerとやり取りする出力形式を決める一連の処理。"@ja ;
    skos:altLabel "media type negotiation" ;
    ks:uses <https://comcomponent.com/knowledge/imfattributes/> .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/media-foundation/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/com/> ;
    schema:description "Media Foundationはsource/transform/sink/activation/attributes/callbackなど部品間の境界をCOMインターフェースで表現している"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/medfound/media-foundation-and-com> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/mfstartup/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/coinitializeex/> ;
    schema:description "MFStartupを呼ぶ前に、CoInitializeExでCOMライブラリを初期化しておく必要がある"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/medfound/initializing-media-foundation> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/media-foundation/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/mfstartup/> ;
    schema:description "Media Foundationプラットフォーム自体の初期化はMFStartupが担う"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/medfound/initializing-media-foundation> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/com/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/iunknown/> ;
    schema:description "COMのすべてのインターフェースは共通の基底であるIUnknownの実装を前提とする"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/api/unknwn/nn-unknwn-iunknown> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/com/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/hresult/> ;
    schema:description "COMのメソッド呼び出しは成否をHRESULTという戻り値の型で表す"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/com/error-handling-in-com> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/imfsourcereader/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/com/> ;
    schema:description "IMFSourceReaderはCOMインターフェースとして定義され、戻り値や設定オブジェクトの受け渡しにCOMの作法が使われる"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/medfound/source-reader> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/imftransform/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/com/> ;
    schema:description "MFT(IMFTransform)もCOMインターフェースとして定義される"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/api/mftransform/nn-mftransform-imftransform> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/imfattributes/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/com/> ;
    schema:description "IMFAttributesはGUIDをキーにした設定・型情報をCOMインターフェース越しに保持する"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/api/mfobjects/nn-mfobjects-imfattributes> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/imfactivate/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/imfattributes/> ;
    schema:description "IMFActivate自体もattributesを持てるため、実体化する前に候補の属性を確認できる"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/medfound/activation-objects> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/media-foundation/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/imfsourcereader/> ;
    schema:description "アプリがデータを直接扱うモデルでは、Source Readerがsourceからframe/sampleを取り出す入口になる"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/medfound/source-reader> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/media-foundation/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/imfsinkwriter/> ;
    schema:description "アプリがデータを直接扱うモデルでは、生成した音声・映像をファイルへ書き出す出口としてSink Writerを提供する"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/medfound/sink-writer> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/media-foundation/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/media-session/> ;
    schema:description "パイプライン全体を使うモデルでは、再生・停止・シークやA/V同期をMedia Sessionが管理する"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/medfound/overview-of-the-media-foundation-architecture> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/media-session/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/mf-topology/> ;
    schema:description "Media Sessionは、partial topologyをtopology loaderが解決したfull topologyに沿ってsource/transform/sinkをつなぐ"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/medfound/about-topologies> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/imfsourcereader/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/imftransform/> ;
    schema:description "Source Readerは必要に応じてdecoderとなるMFTを自動的に読み込んでアプリへデータを渡す"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/medfound/source-reader> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/imfsourcereader/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/imfsourcereadercallback/> ;
    schema:description "Source Readerを非同期モードで作成すると、結果はIMFSourceReaderCallbackで受け取る"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/medfound/using-the-source-reader-in-asynchronous-mode> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/imfsourcereadercallback/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/mf-work-queue/> ;
    schema:description "非同期コールバックはMedia Foundationのwork queueのスレッドから呼ばれる"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/medfound/using-the-source-reader-in-asynchronous-mode> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/mf-work-queue/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/com-apartment-model/> ;
    schema:description "work queueのスレッドはMTAで動くため、callback側でSTAのUIオブジェクトを直接触らず、結果だけをUIスレッドへ橋渡しする設計が必要になる"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/medfound/using-the-source-reader-in-asynchronous-mode> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/com-smart-pointer/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/com/> ;
    schema:description "新規にCOMインターフェースを扱うC++コードでは、生ポインタでのAddRef/Release管理よりComPtrやwil::com_ptrのようなスマートポインタが推奨される"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/cpp/cppcx/wrl/comptr-class> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/imfsourcereader/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/media-type-negotiation/> ;
    schema:description "Source Readerで狙った形式のサンプルを得るには、ネイティブタイプの列挙・major type確認・SetCurrentMediaType・GetCurrentMediaTypeという手順でメディアタイプを取り決める必要がある"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/medfound/processing-media-data-with-the-source-reader> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/media-type-negotiation/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/imfattributes/> ;
    schema:description "メディアタイプの取り決めは、IMFAttributesを継承した属性ストアであるIMFMediaTypeを介して行う"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/api/mfobjects/nn-mfobjects-imfmediatype> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/imftransform/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/imfactivate/> ;
    schema:description "MFTEnumExで列挙してMFTを取得する経路では、結果はIMFActivateの配列として返り、必要なものだけActivateObjectで実体化して初めてIMFTransformが得られる(自作のcustom MFTを直接インスタンス化する場合はIMFActivateを経由しない)"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/api/mfapi/nf-mfapi-mftenumex> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .
