IOverlay インターフェイス

IOverlay インターフェイスは、ビデオを正しいウィンドウ位置に配置した状態で、フィルタからビデオ メモリに直接書き込むために必要な情報を提供する。このインターフェイスは、ビデオ レンダラの入力ピン上に実装され、アップストリーム フィルタ (主にビデオ デコンプレッサ) の IOverlayNotify メソッドを呼び出して、ビデオ ウィンドウへの変更を通知することにより、そのフィルタと通信する。

このインターフェイスは、DirectDraw® のオーバーレイ能力とは無関係である。Microsoft のビデオ レンダラは、IMemInputPin インターフェイスを通じて受け取ったデータを、DirectDraw オーバレイを使って描画する (ただし利用可能な場合)。このインターフェイスは、IMemInputPin の代わりに使われ、レンダラの描画能力をバイパスするが、ディスプレイのその他プロパティの通知を受ける必要がある、すべてのアップストリーム フィルタに、通知のサポートを提供することを目的としている。

IOverlay インターフェイスと IOverlayNotify インターフェイスの連携の詳細については、「IOverlayNotify」のリファレンス ページを参照すること。

レンダリング ウィンドウへの変更の非同期通知の詳細については、「IOverlayNotify2 インターフェイス」を参照すること。

このインターフェイスは、Microsoft® DirectShow® ビデオ レンダリング フィルタに実装される。また、必要に応じて、代替ビデオ レンダリング フィルタに実装することもできる。その場合には、このインターフェイスを実装して、フレーム バッファに直接書き込むフィルタ、またはオーバーレイを配置しようとするフィルタに、ビデオをどこに表示すればよいかを知らせる。このインターフェイスを実装するには、ビデオ プロパティの変更の通知も含め、描画を行っているフィルタの IOverlayNotify インターフェイスまたは IOverlayNotify2 インターフェイスのメソッドを使う準備が、レンダラにできている必要がある。

DirectShow のウィンドウ ベースのレンダラは、IMemInputPin インターフェイスと IOverlay インターフェイスの両方をサポートする。これら 2 つのインターフェイスは互いに排他である。フィルタでは、接続中にサブタイプが MEDIASUBTYPE_Overlay のメディア タイプを提供することによって、IOverlay トランスポートの使用を選択する。接続後、フィルタは問題なく IOverlay インターフェイスを取得および使用可能である。フィルタが他のビデオ フォーマット (MEDIASUBTYPE_RGB8 など) で接続する場合、IOverlay を通じて呼び出そうとすると、VFW_E_NOT_OVERLAY_CONNECTION が返される。

ビデオ オーバーレイのプロパティを制御する必要があり、ビデオ データ自体の表示を処理しようとするアップストリーム フィルタからは、この関数のメソッドを使うこと。このメソッドは、通常、ビデオ ハードウェアへの代替接続を持つハードウェア ビデオ デコーダで使われる。

IOverlay インターフェイスは、IUnknown から継承するメソッド以外に以下のメソッドも公開する。

メソッド 説明
GetPalette 現在のパレットを取得する。
SetPalette パレットを設定する。
GetDefaultColorKey デフォルトのカラー キーを取得する。
GetColorKey 現在アクティブなカラー キーの識別子を返す。
SetColorKey カラー キーを変更する。
GetWindowHandle ウィンドウ ハンドルを返す。
GetClipList クリップ リストを取得する。
GetVideoPosition 現在のビデオの転送元矩形および転送先矩形を取得する。
Advise オーバーレイ イベント用のアドバイズ リンクを設定する。
Unadvise アドバイズ リンクを終了する。