IMFTopologyNode
COM公式ドキュメント
トポロジ内のノードを表します。
メソッド 16
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
このノードに関連付けられたオブジェクトを設定します。
| pObject | IUnknown* | in | オブジェクトの IUnknown インターフェースへのポインター。以前に設定されたオブジェクトをクリアするには、値 NULL を使用します。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値コード | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
すべてのノード型がこのメソッドをサポートしますが、オブジェクトポインターがすべてのノード型で使用されるわけではありません。
| ノード型 | オブジェクトポインター |
|---|---|
| ソースノード。 | 使用されません。 |
| 変換ノード。 | IMFTransform または IMFActivate インターフェース。 |
| 出力ノード | IMFStreamSink または IMFActivate インターフェース。 |
| ティーノード。 | 使用されません。 |
オブジェクトが IPersist、IPersistStorage、または IPersistPropertyBag をサポートしている場合、このメソッドはオブジェクトの CLSID を取得し、ノードに MF_TOPONODE_TRANSFORM_OBJECTID 属性を設定します。
このノードに関連付けられたオブジェクトを取得します。
| ppObject | IUnknown** | out | オブジェクトの IUnknown インターフェースへのポインターを受け取ります。呼び出し元はインターフェースを解放する必要があります。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値コード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| このノードに関連付けられたオブジェクトはありません。 |
ノード型を取得します。
| pType | MF_TOPOLOGY_TYPE* | out | MF_TOPOLOGY_TYPE 列挙のメンバーとして指定される、ノード型を受け取ります。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値コード | 説明 |
|---|---|
| メソッドは成功しました。 |
ノードの識別子を取得します。
| pID | ULONGLONG* | out | 識別子を受け取ります。 |
戻り値
このメソッドが成功した場合、S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
解説(Remarks)
ノードが最初に作成されるとき、識別子が割り当てられます。ノード識別子はトポロジ内で一意ですが、複数のトポロジにまたがって再利用できます。トポロジローダーは、前のトポロジからオブジェクトを再利用できるように、この識別子を使用して前のトポロジ内のノードを検索します。
トポロジ内で識別子によってノードを検索するには、IMFTopology::GetNodeByID を呼び出します。
ノードの識別子を設定します。
| ullTopoID | ULONGLONG | in | ノードの識別子。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値コード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| このオブジェクトには既に TOPOID が設定されています。 |
解説(Remarks)
ノードが最初に作成されるとき、識別子が割り当てられます。通常、アプリケーションが識別子を上書きする理由はありません。トポロジ内では、各ノード識別子は一意である必要があります。
このノードに現在存在する入力ストリームの数を取得します。
| pcInputs | DWORD* | out | 入力ストリームの数を受け取ります。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値コード | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
入力ストリームは、他のノードの出力ストリームに接続されている場合もあれば、接続されていない場合もあります。指定した入力ストリームに接続されているノードを取得するには、IMFTopologyNode::GetInput を呼び出します。
IMFTopologyNode::ConnectOutput および IMFTopologyNode::SetInputPrefType メソッドは、必要に応じて新しい入力ストリームを追加します。
このノードに現在存在する出力ストリームの数を取得します。
| pcOutputs | DWORD* | out | 出力ストリームの数を受け取ります。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値コード | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
出力ストリームは、他のノードの入力ストリームに接続されている場合もあれば、接続されていない場合もあります。このノードの特定の出力ストリームに接続されているノードを取得するには、IMFTopologyNode::GetOutput を呼び出します。
IMFTopologyNode::ConnectOutput および IMFTopologyNode::SetOutputPrefType メソッドは、必要に応じて新しい入力ストリームを追加します。
このノードの出力ストリームを、別のノードの入力ストリームに接続します。
| dwOutputIndex | DWORD | in | このノードの出力ストリームのゼロベースのインデックス。 |
| pDownstreamNode | IMFTopologyNode* | in | 接続先ノードの IMFTopologyNode インターフェースへのポインター。 |
| dwInputIndexOnDownstreamNode | DWORD | in | 相手側ノードの入力ストリームのゼロベースのインデックス。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値コード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| メソッドは失敗しました。 | |
| 無効なパラメーターです。 |
解説(Remarks)
ノードの接続は、あるノードから次のノードへのデータフローを表します。ストリームは論理的なものであり、インデックスによって指定されます。
ノードが指定された出力で既に接続されている場合、このメソッドは既存の接続を切断します。dwOutputIndex または dwInputIndexOnDownstreamNode がまだ存在しないストリームを指定している場合、このメソッドは必要な数だけストリームを追加します。
このメソッドは、特定の無効な条件をチェックします。
- 出力ノードは出力接続を持つことができません。出力ノードでこのメソッドを呼び出した場合、E_FAIL を返します。
- ノードを自分自身に接続することはできません。pDownstreamNode がメソッド呼び出しと同じノードを指定している場合、E_INVALIDARG を返します。
既存のノード接続を切断するには、IMFTopologyNode::DisconnectOutput を呼び出します。
このノードの出力ストリームを切断します。
| dwOutputIndex | DWORD | in | 切断する出力ストリームのゼロベースのインデックス。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値コード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| dwOutputIndex パラメーターが範囲外です。 | |
| 指定した出力ストリームは、他のノードに接続されていません。 |
解説(Remarks)
指定した出力ストリームが他のノードに接続されている場合、このメソッドはその接続を切断します。
このノードの指定した入力ストリームに接続されているノードを取得します。
| dwInputIndex | DWORD | in | このノードの入力ストリームのゼロベースのインデックス。 |
| ppUpstreamNode | IMFTopologyNode** | out | 指定した入力ストリームに接続されているノードの IMFTopologyNode インターフェースへのポインターを受け取ります。呼び出し元はインターフェースを解放する必要があります。 |
| pdwOutputIndexOnUpstreamNode | DWORD* | out | このノードの入力ストリームに接続されている出力ストリームのインデックスを受け取ります。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値コード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| インデックスが範囲外です。 | |
| 指定した入力ストリームは、他のノードに接続されていません。 |
このノードの指定した出力ストリームに接続されているノードを取得します。
| dwOutputIndex | DWORD | in | このノードの出力ストリームのゼロベースのインデックス。 |
| ppDownstreamNode | IMFTopologyNode** | out | 指定した出力ストリームに接続されているノードの IMFTopologyNode インターフェースへのポインターを受け取ります。呼び出し元はインターフェースを解放する必要があります。 |
| pdwInputIndexOnDownstreamNode | DWORD* | out | このノードの出力ストリームに接続されている入力ストリームのインデックスを受け取ります。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値コード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| インデックスが範囲外です。 | |
| 指定した入力ストリームは、他のノードに接続されていません。 |
このノードの出力ストリームに対する優先メディア型を設定します。
| dwOutputIndex | DWORD | in | 出力ストリームのゼロベースのインデックス。 |
| pType | IMFMediaType* | in | メディア型の IMFMediaType インターフェースへのポインター。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値コード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| このノードは出力ノードです。 |
解説(Remarks)
優先型は、トポロジローダーに対するヒントです。
トポロジをロードした後、またはメディアセッションにトポロジを設定した後に、このメソッドを呼び出さないでください。実行中のトポロジで優先型を変更すると、接続エラーが発生する可能性があります。
指定したインデックスに出力ストリームが存在しない場合、このメソッドは指定したインデックス番号までのストリームを新しく作成します。
出力ノードは出力を持つことができません。出力ノードでこのメソッドを呼び出した場合、E_NOTIMPL を返します。
このノードの出力ストリームに対する優先メディア型を取得します。
| dwOutputIndex | DWORD | in | 出力ストリームのゼロベースのインデックス。 |
| ppType | IMFMediaType** | out | メディア型の IMFMediaType インターフェースへのポインターを受け取ります。呼び出し元はインターフェースを解放する必要があります。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値コード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| このノードには優先出力型がありません。 | |
| 無効なストリームインデックスです。 | |
| このノードは出力ノードです。 |
解説(Remarks)
出力ノードは出力を持つことができません。出力ノードでこのメソッドを呼び出した場合、E_NOTIMPL を返します。
優先出力型は、トポロジローダーに対するヒントを提供します。完全に解決されたトポロジであっても、すべてのトポロジノードが優先出力型を持つとは限りません。ノードの実際のメディア型を取得するには、ノードの基になるオブジェクトへのポインターを取得する必要があります。(詳細については、MF_TOPOLOGY_TYPE 列挙を参照してください。)
このノードの入力ストリームに対する優先メディア型を設定します。
| dwInputIndex | DWORD | in | 入力ストリームのゼロベースのインデックス。 |
| pType | IMFMediaType* | in | メディア型の IMFMediaType インターフェースへのポインター。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値コード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| このノードはソースノードです。 |
解説(Remarks)
優先型は、トポロジローダーに対するヒントです。
トポロジをロードした後、またはメディアセッションにトポロジを設定した後に、このメソッドを呼び出さないでください。実行中のトポロジで優先型を変更すると、接続エラーが発生する可能性があります。
指定したインデックスに入力ストリームが存在しない場合、このメソッドは指定したインデックス番号までのストリームを新しく作成します。
ソースノードは入力を持つことができません。ソースノードでこのメソッドを呼び出した場合、E_NOTIMPL を返します。
このノードの入力ストリームに対する優先メディア型を取得します。
| dwInputIndex | DWORD | in | 入力ストリームのゼロベースのインデックス。 |
| ppType | IMFMediaType** | out | メディア型の IMFMediaType インターフェースへのポインターを受け取ります。呼び出し元はインターフェースを解放する必要があります。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値コード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| このノードには優先入力型がありません。 | |
| 無効なストリームインデックスです。 | |
| このノードはソースノードです。 |
解説(Remarks)
ソースノードは入力を持つことができません。ソースノードでこのメソッドを呼び出した場合、E_NOTIMPL を返します。
優先入力型は、トポロジローダーに対するヒントを提供します。完全に解決されたトポロジであっても、すべてのトポロジノードが優先入力型を持つとは限りません。ノードの実際のメディア型を取得するには、ノードの基になるオブジェクトへのポインターを取得する必要があります。(詳細については、MF_TOPOLOGY_TYPE 列挙を参照してください。)
別のトポロジノードからこのノードにデータをコピーします。
| pNode | IMFTopologyNode* | in | コピー元ノードの IMFTopologyNode インターフェースへのポインター。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値コード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| ノード型が一致しません。 |
解説(Remarks)
2 つのノードは同じノード型でなければなりません。ノード型を取得するには、IMFTopologyNode::GetNodeType を呼び出します。
このメソッドは、オブジェクトポインター、優先型、および属性を pNode からこのノードにコピーします。また、トポロジ内で各ノードを一意に識別する TOPOID もコピーします。pNode から他のノードへの接続は複製されません。
このメソッドの目的は、あるトポロジから別のトポロジへノードをコピーすることです。同一トポロジ内で重複したノードを使用しないでください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMFTopologyNode "{83CF873A-F6DA-4BC8-823F-BACFD55DC430}" #usecom global IMFTopologyNode IID_IMFTopologyNode "{}" #comfunc global IMFTopologyNode_SetObject 33 sptr #comfunc global IMFTopologyNode_GetObject 34 sptr #comfunc global IMFTopologyNode_GetNodeType 35 var #comfunc global IMFTopologyNode_GetTopoNodeID 36 var #comfunc global IMFTopologyNode_SetTopoNodeID 37 int64 #comfunc global IMFTopologyNode_GetInputCount 38 var #comfunc global IMFTopologyNode_GetOutputCount 39 var #comfunc global IMFTopologyNode_ConnectOutput 40 int,sptr,int #comfunc global IMFTopologyNode_DisconnectOutput 41 int #comfunc global IMFTopologyNode_GetInput 42 int,sptr,var #comfunc global IMFTopologyNode_GetOutput 43 int,sptr,var #comfunc global IMFTopologyNode_SetOutputPrefType 44 int,sptr #comfunc global IMFTopologyNode_GetOutputPrefType 45 int,sptr #comfunc global IMFTopologyNode_SetInputPrefType 46 int,sptr #comfunc global IMFTopologyNode_GetInputPrefType 47 int,sptr #comfunc global IMFTopologyNode_CloneFrom 48 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IMFTopologyNode "{83CF873A-F6DA-4BC8-823F-BACFD55DC430}" #usecom global IMFTopologyNode IID_IMFTopologyNode "{}" #comfunc global IMFTopologyNode_SetObject 33 sptr #comfunc global IMFTopologyNode_GetObject 34 sptr #comfunc global IMFTopologyNode_GetNodeType 35 sptr #comfunc global IMFTopologyNode_GetTopoNodeID 36 sptr #comfunc global IMFTopologyNode_SetTopoNodeID 37 int64 #comfunc global IMFTopologyNode_GetInputCount 38 sptr #comfunc global IMFTopologyNode_GetOutputCount 39 sptr #comfunc global IMFTopologyNode_ConnectOutput 40 int,sptr,int #comfunc global IMFTopologyNode_DisconnectOutput 41 int #comfunc global IMFTopologyNode_GetInput 42 int,sptr,sptr #comfunc global IMFTopologyNode_GetOutput 43 int,sptr,sptr #comfunc global IMFTopologyNode_SetOutputPrefType 44 int,sptr #comfunc global IMFTopologyNode_GetOutputPrefType 45 int,sptr #comfunc global IMFTopologyNode_SetInputPrefType 46 int,sptr #comfunc global IMFTopologyNode_GetInputPrefType 47 int,sptr #comfunc global IMFTopologyNode_CloneFrom 48 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。