IMFTopology
COM公式ドキュメント
トポロジーを表します。トポロジーは、特定の順序で接続されたメディアソース、シンク、トランスフォームの集合を記述します。
メソッド 10
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
トポロジーの識別子を取得します。
| pID | ULONGLONG* | out | 識別子を TOPOID 値として受け取ります。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
トポロジーにノードを追加します。
| pNode | IMFTopologyNode* | in | ノードの IMFTopologyNode インターフェースへのポインター。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| pNode が無効です。ノードが既にトポロジーに存在していることが原因である可能性があります。 |
トポロジーからノードを削除します。
| pNode | IMFTopologyNode* | in | ノードの IMFTopologyNode インターフェースへのポインター。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 指定されたノードはこのトポロジーのメンバーではありません。 |
解説(Remarks)
このメソッドはノードを破棄しないため、メソッドが戻った後も IMFTopologyNode ポインターは引き続き有効です。
このメソッドは、指定されたノードと他のノードとの間のすべての接続を切断します。
トポロジー内のノード数を取得します。
| pwNodes | WORD* | out | ノード数を受け取ります。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
インデックスで指定されたトポロジー内のノードを取得します。
| wIndex | WORD | in | ノードの 0 から始まるインデックス。トポロジー内のノード数を取得するには、IMFTopology::GetNodeCount を呼び出します。 |
| ppNode | IMFTopologyNode** | out | ノードの IMFTopologyNode インターフェースへのポインターを受け取ります。呼び出し元はこのポインターを解放する必要があります。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| インデックスが 0 未満です。 | |
| インデックス wIndex にノードが見つかりません。 |
トポロジーからすべてのノードを削除します。
戻り値
このメソッドは HRESULT を返します。指定できる値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
トポロジーを破棄する前にクリアする必要はありません。Clear メソッドは、トポロジーが破棄されるときに自動的に呼び出されます。
このトポロジーを別のトポロジーのコピーに変換します。
| pTopology | IMFTopology* | in | 複製元のトポロジーの IMFTopology インターフェースへのポインター。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドは以下の処理を行います。
- このトポロジーからすべてのノードを削除します。
- pTopology からノードを複製し、このトポロジーに追加します。複製されたノードは、pTopology のノードと同じノード識別子を持ちます。
- pTopology の接続に一致するように、複製されたノードを接続します。
- pTopology の属性をこのトポロジーにコピーします。
- pTopology のトポロジー識別子をこのトポロジーにコピーします。
ノード識別子で指定されたトポロジー内のノードを取得します。
| qwTopoNodeID | ULONGLONG | in | 取得するノードの識別子。ノードの識別子を取得するには、IMFTopologyNode::GetTopoNodeID を呼び出します。 |
| ppNode | IMFTopologyNode** | out | ノードの IMFTopologyNode インターフェースへのポインターを受け取ります。呼び出し元はこのインターフェースを解放する必要があります。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| トポロジーにこの識別子を持つノードが含まれていません。 |
トポロジー内のソースノードを取得します。
| ppCollection | IMFCollection** | out | IMFCollection インターフェースへのポインターを受け取ります。呼び出し元はこのポインターを解放する必要があります。このコレクションには、トポロジー内のすべてのソースノードへの IUnknown ポインターが含まれます。各ポインターは IMFTopologyNode インターフェースを照会できます。コレクションは空の場合があります。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
トポロジー内の出力ノードを取得します。
| ppCollection | IMFCollection** | out | IMFCollection インターフェースへのポインターを受け取ります。呼び出し元はこのポインターを解放する必要があります。このコレクションには、トポロジー内のすべての出力ノードへの IUnknown ポインターが含まれます。各ポインターは IMFTopologyNode インターフェースを照会できます。コレクションは空の場合があります。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMFTopology "{83CF873A-F6DA-4BC8-823F-BACFD55DC433}" #usecom global IMFTopology IID_IMFTopology "{}" #comfunc global IMFTopology_GetTopologyID 33 var #comfunc global IMFTopology_AddNode 34 sptr #comfunc global IMFTopology_RemoveNode 35 sptr #comfunc global IMFTopology_GetNodeCount 36 var #comfunc global IMFTopology_GetNode 37 int,sptr #comfunc global IMFTopology_Clear 38 #comfunc global IMFTopology_CloneFrom 39 sptr #comfunc global IMFTopology_GetNodeByID 40 int64,sptr #comfunc global IMFTopology_GetSourceNodeCollection 41 sptr #comfunc global IMFTopology_GetOutputNodeCollection 42 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IMFTopology "{83CF873A-F6DA-4BC8-823F-BACFD55DC433}" #usecom global IMFTopology IID_IMFTopology "{}" #comfunc global IMFTopology_GetTopologyID 33 sptr #comfunc global IMFTopology_AddNode 34 sptr #comfunc global IMFTopology_RemoveNode 35 sptr #comfunc global IMFTopology_GetNodeCount 36 sptr #comfunc global IMFTopology_GetNode 37 int,sptr #comfunc global IMFTopology_Clear 38 #comfunc global IMFTopology_CloneFrom 39 sptr #comfunc global IMFTopology_GetNodeByID 40 int64,sptr #comfunc global IMFTopology_GetSourceNodeCollection 41 sptr #comfunc global IMFTopology_GetOutputNodeCollection 42 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。