IMFTopoLoader
COM公式ドキュメント
部分トポロジーを完全なトポロジーに変換します。
解説(Remarks)
トポロジーローダーを作成するには、MFCreateTopoLoader 関数を呼び出します。
メソッド 1
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
入力された部分トポロジーから、完全に読み込まれたトポロジーを作成します。
| pInputTopo | IMFTopology* | in | 解決対象となる部分トポロジーの IMFTopology インターフェイスへのポインター。 |
| ppOutputTopo | IMFTopology** | out | 完成したトポロジーの IMFTopology インターフェイスへのポインターを受け取ります。呼び出し元はこのインターフェイスを解放する必要があります。 |
| pCurrentTopo | IMFTopology* | in | 直前の完全なトポロジーの IMFTopology インターフェイスへのポインター。トポロジーローダーは、このトポロジー内のオブジェクトを新しいトポロジーで再利用できます。このパラメーターは NULL でもかまいません。「解説」を参照してください。 |
戻り値
このメソッドは HRESULT を返します。指定可能な値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 1 つ以上の出力ノードが IMFActivate ポインターを含んでいます。呼び出し元は、出力ノードをメディアシンクにバインドする必要があります。出力ノードのメディアシンクへのバインドを参照してください。 |
解説(Remarks)
このメソッドは、トポロジーを完成させるために必要な中間変換 (トランスフォーム) を作成します。また、トポロジー内のすべてのオブジェクトに対して入力および出力メディアタイプを設定します。メソッドが成功すると、完全なトポロジーが ppOutputTopo パラメーターで返されます。
pCurrentTopo パラメーターを使用して、以前に読み込まれた完全なトポロジーを指定できます。このトポロジーに新しいトポロジーで必要となるオブジェクトが含まれている場合、トポロジーローダーはそれらを再作成することなく再利用できます。このキャッシュにより、処理を高速化できる可能性があります。pCurrentTopo のオブジェクトは再構成されないため、現在アクティブにデータをストリーミングしているトポロジーを指定できます。たとえば、あるトポロジーがまだ実行中の間に、次のトポロジーを事前に読み込むことができます。
このメソッドを呼び出す前に、部分トポロジー内の出力ノードが IMFActivate ポインターではなく、有効な IMFStreamSink ポインターを持っていることを確認する必要があります。Media Session は、IMFMediaSession::SetTopology メソッド内でこの処理を自動的に実行します。ただし、SetTopology を呼び出す前に Load を呼び出す場合は、出力ノードを手動でバインドする必要があります。詳細については、出力ノードのメディアシンクへのバインドを参照してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMFTopoLoader "{DE9A6157-F660-4643-B56A-DF9F7998C7CD}"
#usecom global IMFTopoLoader IID_IMFTopoLoader "{}"
#comfunc global IMFTopoLoader_Load 3 sptr,sptr,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。