Win32 API 日本語リファレンス
ホームMedia.MediaFoundation › IMFTopologyNode

IMFTopologyNode

COM
IID83cf873a-f6da-4bc8-823f-bacfd55dc430継承元IMFAttributes自前メソッド開始 vtbl33

公式ドキュメント

トポロジ内のノードを表します。

メソッド 16

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 33 HRESULT SetObject(IUnknown* pObject)

このノードに関連付けられたオブジェクトを設定します。

pObjectIUnknown*inオブジェクトの IUnknown インターフェースへのポインター。以前に設定されたオブジェクトをクリアするには、値 NULL を使用します。

戻り値

このメソッドは HRESULT を返します。指定できる値には、以下の表に示すものが含まれますが、これらに限定されません。

戻り値コード 説明
S_OK
メソッドは成功しました。

解説(Remarks)

すべてのノード型がこのメソッドをサポートしますが、オブジェクトポインターがすべてのノード型で使用されるわけではありません。

ノード型 オブジェクトポインター
ソースノード。 使用されません。
変換ノード。 IMFTransform または IMFActivate インターフェース。
出力ノード IMFStreamSink または IMFActivate インターフェース。
ティーノード。 使用されません。

オブジェクトが IPersistIPersistStorage、または IPersistPropertyBag をサポートしている場合、このメソッドはオブジェクトの CLSID を取得し、ノードに MF_TOPONODE_TRANSFORM_OBJECTID 属性を設定します。

vtbl 34 HRESULT GetObject(IUnknown** ppObject)

このノードに関連付けられたオブジェクトを取得します。

ppObjectIUnknown**outオブジェクトの IUnknown インターフェースへのポインターを受け取ります。呼び出し元はインターフェースを解放する必要があります。

戻り値

このメソッドは HRESULT を返します。指定できる値には、以下の表に示すものが含まれますが、これらに限定されません。

戻り値コード 説明
S_OK
メソッドは成功しました。
E_FAIL
このノードに関連付けられたオブジェクトはありません。
vtbl 35 HRESULT GetNodeType(MF_TOPOLOGY_TYPE* pType)

ノード型を取得します。

pTypeMF_TOPOLOGY_TYPE*outMF_TOPOLOGY_TYPE 列挙のメンバーとして指定される、ノード型を受け取ります。

戻り値

このメソッドは HRESULT を返します。指定できる値には、以下の表に示すものが含まれますが、これらに限定されません。

戻り値コード 説明
S_OK
メソッドは成功しました。
vtbl 36 HRESULT GetTopoNodeID(ULONGLONG* pID)

ノードの識別子を取得します。

pIDULONGLONG*out識別子を受け取ります。

戻り値

このメソッドが成功した場合、S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。

解説(Remarks)

ノードが最初に作成されるとき、識別子が割り当てられます。ノード識別子はトポロジ内で一意ですが、複数のトポロジにまたがって再利用できます。トポロジローダーは、前のトポロジからオブジェクトを再利用できるように、この識別子を使用して前のトポロジ内のノードを検索します。

トポロジ内で識別子によってノードを検索するには、IMFTopology::GetNodeByID を呼び出します。

vtbl 37 HRESULT SetTopoNodeID(ULONGLONG ullTopoID)

ノードの識別子を設定します。

ullTopoIDULONGLONGinノードの識別子。

戻り値

このメソッドは HRESULT を返します。指定できる値には、以下の表に示すものが含まれますが、これらに限定されません。

戻り値コード 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
このオブジェクトには既に TOPOID が設定されています。

解説(Remarks)

ノードが最初に作成されるとき、識別子が割り当てられます。通常、アプリケーションが識別子を上書きする理由はありません。トポロジ内では、各ノード識別子は一意である必要があります。

vtbl 38 HRESULT GetInputCount(DWORD* pcInputs)

このノードに現在存在する入力ストリームの数を取得します。

pcInputsDWORD*out入力ストリームの数を受け取ります。

戻り値

このメソッドは HRESULT を返します。指定できる値には、以下の表に示すものが含まれますが、これらに限定されません。

戻り値コード 説明
S_OK
メソッドは成功しました。

解説(Remarks)

入力ストリームは、他のノードの出力ストリームに接続されている場合もあれば、接続されていない場合もあります。指定した入力ストリームに接続されているノードを取得するには、IMFTopologyNode::GetInput を呼び出します。

IMFTopologyNode::ConnectOutput および IMFTopologyNode::SetInputPrefType メソッドは、必要に応じて新しい入力ストリームを追加します。

vtbl 39 HRESULT GetOutputCount(DWORD* pcOutputs)

このノードに現在存在する出力ストリームの数を取得します。

pcOutputsDWORD*out出力ストリームの数を受け取ります。

戻り値

このメソッドは HRESULT を返します。指定できる値には、以下の表に示すものが含まれますが、これらに限定されません。

戻り値コード 説明
S_OK
メソッドは成功しました。

解説(Remarks)

出力ストリームは、他のノードの入力ストリームに接続されている場合もあれば、接続されていない場合もあります。このノードの特定の出力ストリームに接続されているノードを取得するには、IMFTopologyNode::GetOutput を呼び出します。

IMFTopologyNode::ConnectOutput および IMFTopologyNode::SetOutputPrefType メソッドは、必要に応じて新しい入力ストリームを追加します。

vtbl 40 HRESULT ConnectOutput(DWORD dwOutputIndex, IMFTopologyNode* pDownstreamNode, DWORD dwInputIndexOnDownstreamNode)

このノードの出力ストリームを、別のノードの入力ストリームに接続します。

dwOutputIndexDWORDinこのノードの出力ストリームのゼロベースのインデックス。
pDownstreamNodeIMFTopologyNode*in接続先ノードの IMFTopologyNode インターフェースへのポインター。
dwInputIndexOnDownstreamNodeDWORDin相手側ノードの入力ストリームのゼロベースのインデックス。

戻り値

このメソッドは HRESULT を返します。指定できる値には、以下の表に示すものが含まれますが、これらに限定されません。

戻り値コード 説明
S_OK
メソッドは成功しました。
E_FAIL
メソッドは失敗しました。
E_INVALIDARG
無効なパラメーターです。

解説(Remarks)

ノードの接続は、あるノードから次のノードへのデータフローを表します。ストリームは論理的なものであり、インデックスによって指定されます。

ノードが指定された出力で既に接続されている場合、このメソッドは既存の接続を切断します。dwOutputIndex または dwInputIndexOnDownstreamNode がまだ存在しないストリームを指定している場合、このメソッドは必要な数だけストリームを追加します。

このメソッドは、特定の無効な条件をチェックします。

ただし、メソッドが成功しても、ノードの接続が有効であることは保証されません。トポロジローダーが解決できない部分的なトポロジを作成することも可能です。その場合、IMFTopoLoader::Load メソッドは失敗します。

既存のノード接続を切断するには、IMFTopologyNode::DisconnectOutput を呼び出します。

vtbl 41 HRESULT DisconnectOutput(DWORD dwOutputIndex)

このノードの出力ストリームを切断します。

dwOutputIndexDWORDin切断する出力ストリームのゼロベースのインデックス。

戻り値

このメソッドは HRESULT を返します。指定できる値には、以下の表に示すものが含まれますが、これらに限定されません。

戻り値コード 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
dwOutputIndex パラメーターが範囲外です。
MF_E_NOT_FOUND
指定した出力ストリームは、他のノードに接続されていません。

解説(Remarks)

指定した出力ストリームが他のノードに接続されている場合、このメソッドはその接続を切断します。

vtbl 42 HRESULT GetInput(DWORD dwInputIndex, IMFTopologyNode** ppUpstreamNode, DWORD* pdwOutputIndexOnUpstreamNode)

このノードの指定した入力ストリームに接続されているノードを取得します。

dwInputIndexDWORDinこのノードの入力ストリームのゼロベースのインデックス。
ppUpstreamNodeIMFTopologyNode**out指定した入力ストリームに接続されているノードの IMFTopologyNode インターフェースへのポインターを受け取ります。呼び出し元はインターフェースを解放する必要があります。
pdwOutputIndexOnUpstreamNodeDWORD*outこのノードの入力ストリームに接続されている出力ストリームのインデックスを受け取ります。

戻り値

このメソッドは HRESULT を返します。指定できる値には、以下の表に示すものが含まれますが、これらに限定されません。

戻り値コード 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
インデックスが範囲外です。
MF_E_NOT_FOUND
指定した入力ストリームは、他のノードに接続されていません。
vtbl 43 HRESULT GetOutput(DWORD dwOutputIndex, IMFTopologyNode** ppDownstreamNode, DWORD* pdwInputIndexOnDownstreamNode)

このノードの指定した出力ストリームに接続されているノードを取得します。

dwOutputIndexDWORDinこのノードの出力ストリームのゼロベースのインデックス。
ppDownstreamNodeIMFTopologyNode**out指定した出力ストリームに接続されているノードの IMFTopologyNode インターフェースへのポインターを受け取ります。呼び出し元はインターフェースを解放する必要があります。
pdwInputIndexOnDownstreamNodeDWORD*outこのノードの出力ストリームに接続されている入力ストリームのインデックスを受け取ります。

戻り値

このメソッドは HRESULT を返します。指定できる値には、以下の表に示すものが含まれますが、これらに限定されません。

戻り値コード 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
インデックスが範囲外です。
MF_E_NOT_FOUND
指定した入力ストリームは、他のノードに接続されていません。
vtbl 44 HRESULT SetOutputPrefType(DWORD dwOutputIndex, IMFMediaType* pType)

このノードの出力ストリームに対する優先メディア型を設定します。

dwOutputIndexDWORDin出力ストリームのゼロベースのインデックス。
pTypeIMFMediaType*inメディア型の IMFMediaType インターフェースへのポインター。

戻り値

このメソッドは HRESULT を返します。指定できる値には、以下の表に示すものが含まれますが、これらに限定されません。

戻り値コード 説明
S_OK
メソッドは成功しました。
E_NOTIMPL
このノードは出力ノードです。

解説(Remarks)

優先型は、トポロジローダーに対するヒントです。

トポロジをロードした後、またはメディアセッションにトポロジを設定した後に、このメソッドを呼び出さないでください。実行中のトポロジで優先型を変更すると、接続エラーが発生する可能性があります。

指定したインデックスに出力ストリームが存在しない場合、このメソッドは指定したインデックス番号までのストリームを新しく作成します。

出力ノードは出力を持つことができません。出力ノードでこのメソッドを呼び出した場合、E_NOTIMPL を返します。

vtbl 45 HRESULT GetOutputPrefType(DWORD dwOutputIndex, IMFMediaType** ppType)

このノードの出力ストリームに対する優先メディア型を取得します。

dwOutputIndexDWORDin出力ストリームのゼロベースのインデックス。
ppTypeIMFMediaType**outメディア型の IMFMediaType インターフェースへのポインターを受け取ります。呼び出し元はインターフェースを解放する必要があります。

戻り値

このメソッドは HRESULT を返します。指定できる値には、以下の表に示すものが含まれますが、これらに限定されません。

戻り値コード 説明
S_OK
メソッドは成功しました。
E_FAIL
このノードには優先出力型がありません。
E_INVALIDARG
無効なストリームインデックスです。
E_NOTIMPL
このノードは出力ノードです。

解説(Remarks)

出力ノードは出力を持つことができません。出力ノードでこのメソッドを呼び出した場合、E_NOTIMPL を返します。

優先出力型は、トポロジローダーに対するヒントを提供します。完全に解決されたトポロジであっても、すべてのトポロジノードが優先出力型を持つとは限りません。ノードの実際のメディア型を取得するには、ノードの基になるオブジェクトへのポインターを取得する必要があります。(詳細については、MF_TOPOLOGY_TYPE 列挙を参照してください。)

vtbl 46 HRESULT SetInputPrefType(DWORD dwInputIndex, IMFMediaType* pType)

このノードの入力ストリームに対する優先メディア型を設定します。

dwInputIndexDWORDin入力ストリームのゼロベースのインデックス。
pTypeIMFMediaType*inメディア型の IMFMediaType インターフェースへのポインター。

戻り値

このメソッドは HRESULT を返します。指定できる値には、以下の表に示すものが含まれますが、これらに限定されません。

戻り値コード 説明
S_OK
メソッドは成功しました。
E_NOTIMPL
このノードはソースノードです。

解説(Remarks)

優先型は、トポロジローダーに対するヒントです。

トポロジをロードした後、またはメディアセッションにトポロジを設定した後に、このメソッドを呼び出さないでください。実行中のトポロジで優先型を変更すると、接続エラーが発生する可能性があります。

指定したインデックスに入力ストリームが存在しない場合、このメソッドは指定したインデックス番号までのストリームを新しく作成します。

ソースノードは入力を持つことができません。ソースノードでこのメソッドを呼び出した場合、E_NOTIMPL を返します。

vtbl 47 HRESULT GetInputPrefType(DWORD dwInputIndex, IMFMediaType** ppType)

このノードの入力ストリームに対する優先メディア型を取得します。

dwInputIndexDWORDin入力ストリームのゼロベースのインデックス。
ppTypeIMFMediaType**outメディア型の IMFMediaType インターフェースへのポインターを受け取ります。呼び出し元はインターフェースを解放する必要があります。

戻り値

このメソッドは HRESULT を返します。指定できる値には、以下の表に示すものが含まれますが、これらに限定されません。

戻り値コード 説明
S_OK
メソッドは成功しました。
E_FAIL
このノードには優先入力型がありません。
E_INVALIDARG
無効なストリームインデックスです。
E_NOTIMPL
このノードはソースノードです。

解説(Remarks)

ソースノードは入力を持つことができません。ソースノードでこのメソッドを呼び出した場合、E_NOTIMPL を返します。

優先入力型は、トポロジローダーに対するヒントを提供します。完全に解決されたトポロジであっても、すべてのトポロジノードが優先入力型を持つとは限りません。ノードの実際のメディア型を取得するには、ノードの基になるオブジェクトへのポインターを取得する必要があります。(詳細については、MF_TOPOLOGY_TYPE 列挙を参照してください。)

vtbl 48 HRESULT CloneFrom(IMFTopologyNode* pNode)

別のトポロジノードからこのノードにデータをコピーします。

pNodeIMFTopologyNode*inコピー元ノードの IMFTopologyNode インターフェースへのポインター。

戻り値

このメソッドは HRESULT を返します。指定できる値には、以下の表に示すものが含まれますが、これらに限定されません。

戻り値コード 説明
S_OK
メソッドは成功しました。
MF_E_INVALIDREQUEST
ノード型が一致しません。

解説(Remarks)

2 つのノードは同じノード型でなければなりません。ノード型を取得するには、IMFTopologyNode::GetNodeType を呼び出します。

このメソッドは、オブジェクトポインター、優先型、および属性を pNode からこのノードにコピーします。また、トポロジ内で各ノードを一意に識別する TOPOID もコピーします。pNode から他のノードへの接続は複製されません。

このメソッドの目的は、あるトポロジから別のトポロジへノードをコピーすることです。同一トポロジ内で重複したノードを使用しないでください。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
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 指定が可能。