IVMRSurfaceAllocatorNotify
COM公式ドキュメント
IVMRSurfaceAllocatorNotify インターフェイスは、Video Mixing Renderer Filter 7 (VMR-7) によって実装されます。
メソッド 6
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
AdviseSurfaceAllocator メソッドは、VMR にカスタムのアロケーター/プレゼンターを使用するよう指示するためにアプリケーションから呼び出されます。
| dwUserID | UINT_PTR | in | 単一のアロケーター/プレゼンターのインスタンスに対して複数の VMR インスタンスが使用されるシナリオにおいて、この VMR インスタンスを一意に識別するアプリケーション定義の DWORD_PTR です。 |
| lpIVRMSurfaceAllocator | IVMRSurfaceAllocator* | in | 新しいアロケーター/プレゼンター上の IVMRSurfaceAllocator インターフェイスを指定します。この値が NULL の場合、VMR はクライアントのアロケーター/プレゼンターを解放し、既定のアロケーター/プレゼンターを復元します。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合はエラーコードを返します。
解説(Remarks)
このメソッドを呼び出すと、既定のアロケーター/プレゼンターがアンインストールおよび破棄され、指定された新しいコンポーネントに置き換えられます。新しいコンポーネントは IVMRImagePresenter インターフェイスもサポートしている必要があります。
このメソッドは、VMR の存続期間中に一度だけ呼び出すことができます。VMR は、自身が削除されるまでそのアロケーター/プレゼンターを使用し続けます。最終的に VMR が解放されると、カスタムのアロケーター/プレゼンターオブジェクトへの参照カウントを解放し、そのオブジェクトを解放できるようにします。
SetDDrawDevice メソッドは、ビデオ再生に使用する初期の DirectDraw デバイスとモニターを設定します。
| lpDDrawDevice | IDirectDraw7* | in | DirectDraw デバイスを指定します。 |
| hMonitor | HMONITOR | in | DirectDraw デバイスに関連付けられたモニターへのハンドルです。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合はエラーコードを返します。
解説(Remarks)
VMR は、ミキサーコンポーネントで作成される Direct3D サーフェスをそのデバイスに関連付けるために、任意の時点でどの DirectDraw デバイスが使用されているかを把握する必要があります。
ChangeDDrawDevice メソッドは、DirectDraw の再生デバイスが変更されたことを VMR に通知します。たとえば、マルチモニターシステムで、ユーザーがビデオ矩形をあるモニターから別のモニターへ移動した場合などです。
| lpDDrawDevice | IDirectDraw7* | in | DirectDraw デバイスを指定します。 |
| hMonitor | HMONITOR | in | DirectDraw デバイスに関連付けられたモニターへのハンドルを指定します。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合はエラーコードを返します。
解説(Remarks)
VMR は、ミキサーコンポーネントで作成される Direct3D サーフェスをそのデバイスに関連付けるために、任意の時点でどの DirectDraw デバイスが使用されているかを把握する必要があります。
RestoreDDrawSurfaces メソッドは、DirectDraw サーフェスの"喪失"が検出されたことを VMR に通知します。
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合はエラーコードを返します。
NotifyEvent メソッドは、割り当てまたは表示の処理中に発生した重要な DirectShow イベントを VMR に通知するために、アロケーター/プレゼンターから呼び出されます。
| EventCode | INT | in | イベントコードを指定します。 |
| Param1 | INT_PTR | in | イベントコードの Param1 を指定します。 |
| Param2 | INT_PTR | in | イベントコードの Param2 を指定します。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合はエラーコードを返します。
解説(Remarks)
VMR は、IVMRSurfaceAllocator::AdviseNotify の呼び出しを通じて、このインターフェイスへのポインターをアロケーター/プレゼンターに提供します。アロケーター/プレゼンターがこのメソッドを呼び出し、EC_ERRORABORT や EC_VMR_RENDERDEVICE_SET などの通常の DirectShow イベントを指定すると、VMR はそのイベントをフィルターグラフマネージャーに渡します。
SetBorderColor メソッドは、たとえばビデオがレターボックス表示される場合など、表示矩形のうちビデオに使用されていない領域に使用する色を VMR に指定します。
| clrBorder | COLORREF | in | 境界色を指定します。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合はエラーコードを返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IVMRSurfaceAllocatorNotify "{AADA05A8-5A4E-4729-AF0B-CEA27AED51E2}"
#usecom global IVMRSurfaceAllocatorNotify IID_IVMRSurfaceAllocatorNotify "{}"
#comfunc global IVMRSurfaceAllocatorNotify_AdviseSurfaceAllocator 3 sptr,sptr
#comfunc global IVMRSurfaceAllocatorNotify_SetDDrawDevice 4 sptr,sptr
#comfunc global IVMRSurfaceAllocatorNotify_ChangeDDrawDevice 5 sptr,sptr
#comfunc global IVMRSurfaceAllocatorNotify_RestoreDDrawSurfaces 6
#comfunc global IVMRSurfaceAllocatorNotify_NotifyEvent 7 int,sptr,sptr
#comfunc global IVMRSurfaceAllocatorNotify_SetBorderColor 8 int
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。