Microsoft DirectX 8.0 |
IOverlayNotify インターフェイスは、デコーダなどのアップストリーム フィルタに、レンダリング ウィンドウへの変更の通知を提供する。このインターフェイスには、パレット、カラー キー、およびウィンドウ位置への変更、および可視領域 (クリッピング) の変化に関する通知が含まれる。
多くのソフトウェア ビデオ デコーダでは、デコーダがレンダラの入力ピンの IMemInputPin インターフェイスにメディア サンプルを渡し、その結果生成された圧縮解除後のイメージを、ビデオ レンダラが描画する。
ただし、一部のビデオ デコード フィルタ (主にハードウェア圧縮解除ボード) では、(多くの場合 VGA コネクタを使用して) そのデコーダ内でイメージを描画する。このようなフィルタでは、IMemInputPin を使用する必要はないが、代わりに、レンダラの入力ピンが提供する IOverlay インターフェイスを使用できる。デコーダは、ウィンドウの位置またはサイズが変化したとき、または現在のシステム パレットが変化したときに、このインターフェイスを通じて通知を受けることによって、カラー キーおよびパレットの組み込みや変更ができる。
独自の描画処理を行うデコーダは、ウィンドウのサイズまたは位置が変化したとき、現在のシステム パレットが変化したとき、または別のカラー キーが使用されたときに通知を受けるために、IOverlayNotify インターフェイスを実装しなければならない。そうすると、このメソッドで、このインターフェイスへのポインタを、レンダラの入力ピンの IOverlay インターフェイスに渡して、アドバイズ リンク (本来はコールバック メカニズム) を設定できる。アドバイズ リンクの確立後には、該当するイベントが発生すると、レンダラがデコーダの IOverlayNotify メソッドを呼び出す。アドバイズ リンクを取り消すには、IOverlay::Unadvise を呼び出す。
ビデオ レンダラは、このインターフェイスのメソッドを呼び出す唯一のフィルタである。この呼び出しは、デフォルトのレンダラによって自動的に行われる。代替ビデオ レンダラを開発する場合、そのフィルタで IOverlay をサポートし、IOverlay::Advise の呼び出しでフィルタにこのインターフェイスが渡されるなら、このインターフェイスのメソッドを使用する必要がある。
vtable 順のメソッド
IUnknown メソッド 説明 QueryInterface サポートされているインターフェイスへのポインタを返す。 AddRef 参照カウントをインクリメントする。 Release 参照カウントをデクリメントする。 IOverlayNotify メソッド 説明 OnPaletteChange ウィンドウのパレットが変化したことを示す通知を提供する。 OnClipChange ウィンドウの可視領域が変化したことを示す通知を提供する。 OnColorKeyChange クロマ キーが変化したことを示す通知を提供する。 OnPositionChange 位置が変化したことを示す通知を提供する。
ウィンドウの可視領域が変化したことを示す通知を提供する。メソッドから戻る前に、オーバーレイ ハードウェアすべてに可視領域への変更が反映されなければならない。
構文
HRESULT OnClipChange(
RECT *pSourceRect,
RECT *pDestinationRect,
RGNDATA *pRgnData
);
パラメータ
- pSourceRect
- [in] ビデオ内の使用する領域へのポインタ。
- pDestinationRect
- [in] ビデオの転送先へのポインタ。
- pRgnData
- [in] クリッピング情報へのポインタ。
戻り値
実装に応じた HRESULT 値を返す。HRESULT は、次の標準的な定数の 1 つか、または一覧に示されていないその他の値となる。
E_FAIL 失敗。 E_POINTER Null ポインタ引数。 E_INVALIDARG 無効な引数。 E_NOTIMPL メソッドがサポートされていない。 S_OK または NOERROR 成功。
注意
OnClipChange の呼び出しは、ウィンドウと同期して発生する。このメソッドは、ウィンドウの移動前にビデオをフリーズするために、空のクリップ リストを指定して呼び出され、新しいクリップ リストを使用してウィンドウが安定化されたときに、もう一度呼び出される。
ウィンドウ矩形がすべて 0 の場合、ウィンドウは非表示である。AVI デコーダの場合、現在のイメージを利用して次のイメージを復号化するなら、デコーダはイメージを保存しなければならない。
ウィンドウのカラー キーが変化したことを示す通知を提供する。
構文
HRESULT OnColorKeyChange(
COLORKEY *pColorKey
);
パラメータ
- pColorKey
- [in] 新しいクロマ キーへのポインタ。
戻り値
実装に応じた HRESULT 値を返す。HRESULT は、次の標準的な定数の 1 つか、または一覧に示されていないその他の値となる。
E_FAIL 失敗。 E_POINTER Null ポインタ引数。 E_INVALIDARG 無効な引数。 E_NOTIMPL メソッドがサポートされていない。 S_OK または NOERROR 成功。
ウィンドウのパレットが変化したことを示す通知を提供する。
構文
HRESULT OnPaletteChange(
DWORD dwColors,
const PALETTEENTRY *pPalette
);
パラメータ
- dwColors
- [in] 存在する色の数。
- pPalette
- [in] パレット カラーの配列へのポインタ。
戻り値
実装に応じた HRESULT 値を返す。HRESULT は、次の標準的な定数の 1 つか、または一覧に示されていないその他の値となる。
E_FAIL 失敗。 E_POINTER Null ポインタ引数。 E_INVALIDARG 無効な引数。 E_NOTIMPL メソッドがサポートされていない。 S_OK または NOERROR 成功。
注意
戻る前に、必要に応じてフィルタで RGBQUAD 値の配列をコピーすること。
位置が変化したことを示す通知を提供する。
構文
HRESULT OnPositionChange(
const RECT *pSourceRect,
const RECT *pDestinationRect
);
パラメータ
- pSourceRect
- [in] ビデオの転送元矩形へのポインタ。
- pDestinationRect
- [in] ビデオの転送先矩形へのポインタ。表示可能領域に合わせてクリッピングされないので注意すること。
戻り値
実装に応じた HRESULT 値を返す。HRESULT は、次の標準的な定数の 1 つか、または一覧に示されていないその他の値となる。
E_FAIL 失敗。 E_POINTER Null ポインタ引数。 E_INVALIDARG 無効な引数。 E_NOTIMPL メソッドがサポートされていない。 S_OK または NOERROR 成功。
注意
このメソッドは、クリッピングを同期更新する必要はなく、ビデオの転送元位置または転送先位置が変更されたときにのみ知る必要がある、ハードウェア オーバーレイ カードでの使用を目的とするコールバックである。
IOverlayNotify::OnClipChange メソッドと異なり、このメソッドはウィンドウの変化と同期して呼び出されるのではなく、ウィンドウが変化した後の任意の時点で (基本的には WM_SIZE のメッセージが届いたとき) 呼び出される。したがって、このメソッドは、データをフレーム バッファに差し込まないオーバーレイ カードに適している。