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 | アドバイズ リンクを終了する。 |