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

IMFTopologyServiceLookup

COM
IIDfa993889-4383-415a-a930-dd472a8cf6f7継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

カスタムのビデオミキサーまたはビデオプレゼンターが、Enhanced Video Renderer (EVR) からインターフェイスポインターを取得できるようにします。

メソッド 1

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

vtbl 3 HRESULT LookupService(MF_SERVICE_LOOKUP_TYPE Type, DWORD dwIndex, GUID* guidService, GUID* riid, void** ppvObjects, DWORD* pnObjects)

Enhanced Video Renderer (EVR)、またはビデオミキサーやビデオプレゼンターからインターフェイスを取得します。

TypeMF_SERVICE_LOOKUP_TYPEin検索の範囲を指定します。現在このパラメーターは無視されます。値 MF_SERVICE_LOOKUP_GLOBAL を使用してください。
dwIndexDWORDin予約済みです。0 でなければなりません。
guidServiceGUID*in要求するインターフェイスのサービス GUID です。
riidGUID*in要求するインターフェイスのインターフェイス識別子です。
ppvObjectsvoid**outインターフェイスポインターの配列です。メソッドが成功した場合、配列の各メンバーには有効なインターフェイスポインターまたは NULL のいずれかが格納されます。呼び出し側は、EVR が IMFTopologyServiceLookupClient::ReleaseServicePointers を呼び出すとき (またはそれより前) までに、インターフェイスポインターを解放する必要があります。メソッドが失敗した場合、配列のすべてのメンバーは NULL になります。
pnObjectsDWORD*inoutppvObjects 配列のサイズを指定する値へのポインターです。値は少なくとも 1 でなければなりません。現在の実装では、1 要素より大きな配列サイズを指定する理由はありません。この値は出力時に変更されません。

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
引数が無効です。
E_NOINTERFACE
要求されたインターフェイスは利用できません。
MF_E_NOTACCEPTING
メソッドが IMFTopologyServiceLookupClient::InitServicePointers メソッドの内部から呼び出されませんでした。「解説」を参照してください。
MF_E_UNSUPPORTED_SERVICE
オブジェクトは指定されたサービス GUID をサポートしていません。

解説(Remarks)

このメソッドは、IMFTopologyServiceLookupClient::InitServicePointers メソッドの内部からのみ呼び出すことができます。それ以外のタイミングでは、このメソッドは MF_E_NOTACCEPTING を返します。

プレゼンターはこのメソッドを使用して EVR とミキサーに問い合わせできます。ミキサーはこのメソッドを使用して EVR とプレゼンターに問い合わせできます。どのオブジェクトに問い合わせが行われるかは、以下の表に示すように、呼び出し側とサービス GUID によって異なります。

呼び出し側 サービス GUID 問い合わせ対象オブジェクト
プレゼンター MR_VIDEO_RENDER_SERVICE EVR
プレゼンター MR_VIDEO_MIXER_SERVICE ミキサー
ミキサー MR_VIDEO_RENDER_SERVICE プレゼンターと EVR

EVR からは次のインターフェイスを利用できます。

ミキサーからは次のインターフェイスを利用できます。
出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IMFTopologyServiceLookup "{FA993889-4383-415A-A930-DD472A8CF6F7}"
#usecom global IMFTopologyServiceLookup IID_IMFTopologyServiceLookup "{}"
#comfunc global IMFTopologyServiceLookup_LookupService  3 int,int,var,var,sptr,var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。