Microsoft DirectX 8.0 |
このインターフェイスは、イベント通知を取得するメソッドと、フィルタ グラフのデフォルトのイベント処理をオーバーライドするメソッドを提供する。IMediaEventEx インターフェイスは、このインターフェイスを継承し、拡張する。
フィルタ グラフ マネージャがこのインターフェイスを実装する。アプリケーションでは、このインターフェイスを使用して、ストリームの終了、レンダリング エラーなど、フィルタ グラフ内で発生するイベントに応答できる。フィルタでは、IMediaEventSink インターフェイスを使用してフィルタ グラフにイベントを送る。
イベント通知の詳細については、「DirectShow でのイベント通知」を参照すること。システム定義のイベント通知の一覧については、「イベント通知コード」を参照すること。
vtable 順のメソッド
IUnknown メソッド 説明 QueryInterface サポートされているインターフェイスへのポインタを取得する。 AddRef 参照カウントをインクリメントする。 Release 参照カウントをデクリメントする。 IDispatch メソッド 説明 GetTypeInfoCount このディスプインターフェイスに利用可能なタイプ情報があるかどうか判断する。 GetTypeInfo GetTypeInfoCount が成功した場合は、このディスプインターフェイスのタイプ情報を取得する。 GetIDsOfNames (引数を含む) プロパティおよびメソッドのテキスト名を対応する DISPID に変換する。 Invoke DISPID およびその他の必要なパラメータが指定された場合は、このディスプインターフェイスのメソッドを呼び出すか、またはプロパティにアクセスする。 IMediaEvent メソッド 説明 GetEventHandle キューにイベント通知がある間通知済状態の、手動リセット イベントへのハンドルを受け取る。 GetEvent 次の通知イベントをイベント キューから取得する。 WaitForCompletion フィルタ グラフがすべての有効なデータをレンダリングするのを待つ。 CancelDefaultHandling 指定したイベントに対するフィルタ グラフ マネージャのデフォルト処理をキャンセルする。 RestoreDefaultHandling 指定したイベントに対するフィルタ グラフ マネージャのデフォルト処理をリストアする。 FreeEventParams イベントのパラメータに関連付けられたリソースを解放する。
指定したイベントに対するフィルタ グラフ マネージャのデフォルト処理をキャンセルする。
構文
HRESULT CancelDefaultHandling( long lEvCode );
パラメータ
- lEvCode
- デフォルト処理をキャンセルするイベント コード。
戻り値
HRESULT 値を返す。以下の表に示されるいずれかの値。
S_OK 成功。 E_INVALIDARG このイベントにはデフォルト処理はない。
注意
イベントのデフォルト処理をリストアするには、イベントコードを渡して RestoreDefaultHandling メソッドを呼び出すこと。
イベントのパラメータに関連付けられたリソースを解放する。
構文
HRESULT FreeEventParams( long lEventCode, long lParam1, long lParam2 );
パラメータ
- lEventCode
- [in] イベント コード。
- lParam1
- [in] 第 1 イベント パラメータ。
- lParam2
- [in] 第 2 イベント パラメータ。
戻り値
S_OK を返す。
注意
IMediaEvent::GetEvent メソッドを呼び出してイベント通知を受け取った後で、FreeEventParams を呼び出さなければならない。このメソッドはイベントパラメータに割り当てられてすべてのリソースを解放する。次の例に示すように GetEvent に用いた同じ変数を渡すこと :
hr = pEvent->GetEvent(&evCode, ¶m1, ¶m2, 0); // Handle the event (not shown). hr = pEvent->FreeEventParams(evCode, param1, param2);
次の通知イベントをイベント キューから取得する。
構文
HRESULT GetEvent( long *lEventCode, long *lParam1, long *lParam2, long msTimeout );
パラメータ
- IEventCode
- [out] イベント コードを受け取る変数へのポインタ。
- lParam1
- [out] 第 1 イベント パラメータを受け取る変数へのポインタ。
- lParam2
- [out] 第 2 イベント パラメータを受け取る変数へのポインタ。
- msTimeout
- [in] タイムアウト時間、ミリ秒単位。イベントがある間は INFINITE を使いブロックする。
戻り値
HRESULT 値を返す。以下のいずれかの値。
S_OK 成功。 E_ABORT タイムアウトによる時間切れ。
注意
アプリケーションはタイムアウト時間 INFINITE を使うのは避けるべきだ、なぜならスレッドは GetEvent を待つ間メッセージを処理することができないからだ。Windows メss-時を処理する同じスレッドから GetEvent を呼び出すなら、ユーザー入力へのレスポンスを維持するために待ち時間を少なくすること。インターネットのようなソースからデータをストリーミングするときにはこれは最も重要である、なぜなら状態の移行は完了するまで非常に時間がかかるからだ。
GetEvent を呼び出した後で、FreeEventParams メソッドを呼び出してイベントパラメータに確保したすべてのリソースを解放すること。
通知コードおよびパラメータ値の一覧については、「イベント通知コード」を参照すること。
キューにイベント通知がある間通知済状態の、手動リセット イベントへのハンドルを受け取る。
構文
HRESULT GetEventHandle( OAEVENT *hEvent );
パラメータ
- hEvent
- [out] イベント ハンドルを受け取る変数へのポインタ。
戻り値
S_OK を返す。
注意
フィルタ グラフ マネージャはイベント キューの状態を反映した手動リセット イベントを保持する。キューにイベント通知が入っていると、手動リセット イベントが通知済になる。キューがカラなら、IMediaEvent::GetEvent メソッドはそのイベントをリセットする。
アプリケーションはこのイベントを使用してキューの状態を確認することができる。最初に GetEventHandle を呼び出してイベントのハンドルを取得する。WaitForSingleObject のような Microsoft® Windows® 関数を使って、イベントが通知済になるまで待つ。イベントが通知済になると、GetEvent メソッドを呼び出して次のイベント通知をキューから受け取る。フィルタ グラフ マネージャはキューが空になるまでイベント通知を保持し、その後イベントをリセットする。
注 Automation との互換性のため、このメソッドは OAEVENT 変数へのポインタを持つ。C++ では、次のように HANDLE タイプの変数を宣言しそれを OAEVENT タイプにキャストする :HANDLE hEvent; GetEventHandle( (OAEVENT*) &hEvent );アプリケーションがイベントキューをモニタするもう 1 つの方法は IMediaEventEx::SetNotifyWindow メソッドを呼び出すことである。
指定したイベントに対するフィルタ グラフ マネージャのデフォルト処理をリストアする。
構文
HRESULT RestoreDefaultHandling( long lEvCode );
パラメータ
- lEvCode
- [in] デフォルト処理に戻すイベント コード。
戻り値
HRESULT 値を返す。以下の表に示されるいずれかの値。
S_OK 成功。 E_INVALIDARG このイベントにはデフォルト処理はない。
注意
デフォルトでは、グラフ マネージャは (EC_REPAINT のような) いくつかのイベントをアプリケーションに渡さずに処理する。CancelDefaultHandling メソッドを呼び出してイベントのデフォルト処理をオーバーライドすると、同じイベント コードで RestoreDefaultHandling をコーすることでデフォルトの処理をリストアすることができる。
フィルタ グラフがすべての有効なデータをレンダリングするのを待つ。
構文
HRESULT WaitForCompletion( long msTimeout, long *pEvCode );
パラメータ
- msTimeout
- [in] タイムアウト時間、ミリ秒単位。即座に戻るには 0 を渡す。無期限にブロックするには INFINITE を渡す。
- pEvCode
- [out] イベント コードを受け取る変数へのポインタ。詳細については、「注意」を参照すること。
戻り値
HRESULT 値を返す。以下のいずれかの値。
S_OK 成功。 E_ABORT タイムアウトによる時間切れ。 VFW_E_WRONG_STATE フィルタ グラフが実行中ではない。
注意
このメソッドはタイムアウトが時間切れになるまでブロックする、あるいは以下のイベントの 1 つを起こす :
待っている間、このメソッドはすべての他のイベント通知を廃棄する。
戻り値が S_OK なら、pEvCode パラメータは待ち状態終了のイベントコードを受け取る。メソッドが帰っても、フィルタ グラフはまだ実行している。アプリケーションは必要に応じてグラフをポーズしたり停止したりできる。