IOverlayNotify
COM公式ドキュメント
IOverlayNotify インターフェースは、デコーダーなどの上流フィルターに対して、レンダリングウィンドウの変更に関する通知を提供します。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
OnPaletteChange メソッドは、ウィンドウのパレットが変更されたことを通知します。
| dwColors | DWORD | in | 存在する色の数。 |
| pPalette | PALETTEENTRY* | in | パレットの色の配列へのポインター。 |
戻り値
成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
戻る前に、フィルターは必要に応じて RGBQUAD 値の配列をコピーする必要があります。
OnClipChange メソッドは、ウィンドウの可視領域が変更されたことを通知します。このメソッドから戻る前に、可視領域の変更を反映するためにオーバーレイハードウェアを更新することが不可欠です。
| pSourceRect | RECT* | in | 使用するビデオの領域へのポインター。 |
| pDestinationRect | RECT* | in | ビデオの出力先へのポインター。 |
| pRgnData | RGNDATA* | in | クリッピング情報へのポインター。 |
戻り値
成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
OnClipChange の呼び出しはウィンドウと同期して行われます。ウィンドウが移動する前にビデオを固定するために空のクリップリストで呼び出され、その後ウィンドウが新しいクリップリストで安定したときに再度呼び出されます。
ウィンドウの矩形がすべて 0 の場合、ウィンドウは非表示です。AVI デコーダーの場合のように、デコーダーが次の画像をデコードするために現在の画像に依存しているときは、その画像を保存する必要があります。
OnColorKeyChange メソッドは、ウィンドウのカラーキーが変更されたことを通知します。
| pColorKey | COLORKEY* | in | 新しいクロマキーへのポインター。 |
戻り値
成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
OnPositionChange メソッドは、位置が変更されたことを通知します。
| pSourceRect | RECT* | in | ソースビデオ矩形へのポインター。 |
| pDestinationRect | RECT* | in | 出力先ビデオ矩形へのポインター。これは可視表示領域にクリップされない点に注意してください。 |
戻り値
成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドは、同期的なクリッピング更新のコストを避けたいハードウェアオーバーレイカードが、ソースまたは出力先のビデオ位置が変更されたときだけ知りたい場合に使用することを意図したコールバックです。
IOverlayNotify::OnClipChange メソッドとは異なり、このメソッドはウィンドウの変更と同期して呼び出されるのではなく、ウィンドウが変更された後のある時点で(基本的には受信した WM_SIZE メッセージのタイミングで)呼び出されます。そのため、データをフレームバッファーにインレイしないオーバーレイカードに適しています。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IOverlayNotify "{56A868A0-0AD4-11CE-B03A-0020AF0BA770}" #usecom global IOverlayNotify IID_IOverlayNotify "{}" #comfunc global IOverlayNotify_OnPaletteChange 3 int,var #comfunc global IOverlayNotify_OnClipChange 4 var,var,var #comfunc global IOverlayNotify_OnColorKeyChange 5 var #comfunc global IOverlayNotify_OnPositionChange 6 var,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IOverlayNotify "{56A868A0-0AD4-11CE-B03A-0020AF0BA770}" #usecom global IOverlayNotify IID_IOverlayNotify "{}" #comfunc global IOverlayNotify_OnPaletteChange 3 int,sptr #comfunc global IOverlayNotify_OnClipChange 4 sptr,sptr,sptr #comfunc global IOverlayNotify_OnColorKeyChange 5 sptr #comfunc global IOverlayNotify_OnPositionChange 6 sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。