IMFTopologyServiceLookup
COM公式ドキュメント
カスタムのビデオミキサーまたはビデオプレゼンターが、Enhanced Video Renderer (EVR) からインターフェイスポインターを取得できるようにします。
メソッド 1
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
Enhanced Video Renderer (EVR)、またはビデオミキサーやビデオプレゼンターからインターフェイスを取得します。
| Type | MF_SERVICE_LOOKUP_TYPE | in | 検索の範囲を指定します。現在このパラメーターは無視されます。値 MF_SERVICE_LOOKUP_GLOBAL を使用してください。 |
| dwIndex | DWORD | in | 予約済みです。0 でなければなりません。 |
| guidService | GUID* | in | 要求するインターフェイスのサービス GUID です。 |
| riid | GUID* | in | 要求するインターフェイスのインターフェイス識別子です。 |
| ppvObjects | void** | out | インターフェイスポインターの配列です。メソッドが成功した場合、配列の各メンバーには有効なインターフェイスポインターまたは NULL のいずれかが格納されます。呼び出し側は、EVR が IMFTopologyServiceLookupClient::ReleaseServicePointers を呼び出すとき (またはそれより前) までに、インターフェイスポインターを解放する必要があります。メソッドが失敗した場合、配列のすべてのメンバーは NULL になります。 |
| pnObjects | DWORD* | inout | ppvObjects 配列のサイズを指定する値へのポインターです。値は少なくとも 1 でなければなりません。現在の実装では、1 要素より大きな配列サイズを指定する理由はありません。この値は出力時に変更されません。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 引数が無効です。 | |
| 要求されたインターフェイスは利用できません。 | |
| メソッドが IMFTopologyServiceLookupClient::InitServicePointers メソッドの内部から呼び出されませんでした。「解説」を参照してください。 | |
| オブジェクトは指定されたサービス 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 からは次のインターフェイスを利用できます。
- IMediaEventSink。このインターフェイスは DirectShow SDK ドキュメントに記載されています。
-
IMFClock インターフェイス。このインターフェイスは、EVR がクロック (DirectShow の参照クロック、または Media Foundation のプレゼンテーションクロック) にアクセスできる場合に利用可能です。このインターフェイスは利用できないことがあります。プレゼンターとミキサーは、クロックがなくてもデータを処理できなければなりません。IMFClock インターフェイスが利用可能な場合は、以下の関連インターフェイスも取得できます。
-
IMFPresentationClock (Media Foundation の EVR のみ)
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 指定が可能。#define global IID_IMFTopologyServiceLookup "{FA993889-4383-415A-A930-DD472A8CF6F7}" #usecom global IMFTopologyServiceLookup IID_IMFTopologyServiceLookup "{}" #comfunc global IMFTopologyServiceLookup_LookupService 3 int,int,sptr,sptr,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。