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

IVMRSurfaceAllocatorNotify

COM
IIDaada05a8-5a4e-4729-af0b-cea27aed51e2継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

IVMRSurfaceAllocatorNotify インターフェイスは、Video Mixing Renderer Filter 7 (VMR-7) によって実装されます。

メソッド 6

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

vtbl 3 HRESULT AdviseSurfaceAllocator(UINT_PTR dwUserID, IVMRSurfaceAllocator* lpIVRMSurfaceAllocator)

AdviseSurfaceAllocator メソッドは、VMR にカスタムのアロケーター/プレゼンターを使用するよう指示するためにアプリケーションから呼び出されます。

dwUserIDUINT_PTRin単一のアロケーター/プレゼンターのインスタンスに対して複数の VMR インスタンスが使用されるシナリオにおいて、この VMR インスタンスを一意に識別するアプリケーション定義の DWORD_PTR です。
lpIVRMSurfaceAllocatorIVMRSurfaceAllocator*in新しいアロケーター/プレゼンター上の IVMRSurfaceAllocator インターフェイスを指定します。この値が NULL の場合、VMR はクライアントのアロケーター/プレゼンターを解放し、既定のアロケーター/プレゼンターを復元します。

戻り値

メソッドが成功した場合は S_OK を返します。失敗した場合はエラーコードを返します。

解説(Remarks)

このメソッドを呼び出すと、既定のアロケーター/プレゼンターがアンインストールおよび破棄され、指定された新しいコンポーネントに置き換えられます。新しいコンポーネントは IVMRImagePresenter インターフェイスもサポートしている必要があります。

このメソッドは、VMR の存続期間中に一度だけ呼び出すことができます。VMR は、自身が削除されるまでそのアロケーター/プレゼンターを使用し続けます。最終的に VMR が解放されると、カスタムのアロケーター/プレゼンターオブジェクトへの参照カウントを解放し、そのオブジェクトを解放できるようにします。

vtbl 4 HRESULT SetDDrawDevice(IDirectDraw7* lpDDrawDevice, HMONITOR hMonitor)

SetDDrawDevice メソッドは、ビデオ再生に使用する初期の DirectDraw デバイスとモニターを設定します。

lpDDrawDeviceIDirectDraw7*inDirectDraw デバイスを指定します。
hMonitorHMONITORinDirectDraw デバイスに関連付けられたモニターへのハンドルです。

戻り値

メソッドが成功した場合は S_OK を返します。失敗した場合はエラーコードを返します。

解説(Remarks)

VMR は、ミキサーコンポーネントで作成される Direct3D サーフェスをそのデバイスに関連付けるために、任意の時点でどの DirectDraw デバイスが使用されているかを把握する必要があります。

vtbl 5 HRESULT ChangeDDrawDevice(IDirectDraw7* lpDDrawDevice, HMONITOR hMonitor)

ChangeDDrawDevice メソッドは、DirectDraw の再生デバイスが変更されたことを VMR に通知します。たとえば、マルチモニターシステムで、ユーザーがビデオ矩形をあるモニターから別のモニターへ移動した場合などです。

lpDDrawDeviceIDirectDraw7*inDirectDraw デバイスを指定します。
hMonitorHMONITORinDirectDraw デバイスに関連付けられたモニターへのハンドルを指定します。

戻り値

メソッドが成功した場合は S_OK を返します。失敗した場合はエラーコードを返します。

解説(Remarks)

VMR は、ミキサーコンポーネントで作成される Direct3D サーフェスをそのデバイスに関連付けるために、任意の時点でどの DirectDraw デバイスが使用されているかを把握する必要があります。

vtbl 6 HRESULT RestoreDDrawSurfaces()

RestoreDDrawSurfaces メソッドは、DirectDraw サーフェスの"喪失"が検出されたことを VMR に通知します。

戻り値

メソッドが成功した場合は S_OK を返します。失敗した場合はエラーコードを返します。

vtbl 7 HRESULT NotifyEvent(INT EventCode, INT_PTR Param1, INT_PTR Param2)

NotifyEvent メソッドは、割り当てまたは表示の処理中に発生した重要な DirectShow イベントを VMR に通知するために、アロケーター/プレゼンターから呼び出されます。

EventCodeINTinイベントコードを指定します。
Param1INT_PTRinイベントコードの Param1 を指定します。
Param2INT_PTRinイベントコードの Param2 を指定します。

戻り値

メソッドが成功した場合は S_OK を返します。失敗した場合はエラーコードを返します。

解説(Remarks)

VMR は、IVMRSurfaceAllocator::AdviseNotify の呼び出しを通じて、このインターフェイスへのポインターをアロケーター/プレゼンターに提供します。アロケーター/プレゼンターがこのメソッドを呼び出し、EC_ERRORABORTEC_VMR_RENDERDEVICE_SET などの通常の DirectShow イベントを指定すると、VMR はそのイベントをフィルターグラフマネージャーに渡します。

vtbl 8 HRESULT SetBorderColor(COLORREF clrBorder)

SetBorderColor メソッドは、たとえばビデオがレターボックス表示される場合など、表示矩形のうちビデオに使用されていない領域に使用する色を VMR に指定します。

clrBorderCOLORREFin境界色を指定します。

戻り値

メソッドが成功した場合は S_OK を返します。失敗した場合はエラーコードを返します。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_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 指定が可能。