次の方法で共有


イベント通知コード

ここでは、DVD 固有イベント以外の DirectShow イベントについて説明する。DVD に固有のイベントについては、「DVD イベント通知コード」を参照すること。

フィルタは、IMediaEventSink::Notify メソッドを呼び出すことによってフィルタ グラフ マネージャにイベントを渡す。フィルタ グラフ マネージャは、一部のイベントを処理し、それ以外のイベントをアプリケーションのキューに入れる。アプリケーションは、IMediaEvent::GetEvent メソッドを呼び出すことで、イベントを取得する。

以下のセクションでは、イベント コードとイベント パラメータの意味をリストし、イベントに対してフィルタ グラフ マネージャの既定の動作があればそれもリストする。既定の動作をオーバーライドするには、IMediaEvent::CancelDefaultHandling を呼び出す。イベント コードは、ヘッダー ファイルの Evcode.h および Audevcod.h に定義されている。既定の動作が設定されていない場合、フィルタ グラフ マネージャは、イベント キューを使って自動的にイベントをアプリケーションに転送する。

カスタム イベント

フィルタは、EC_USER 以上の範囲でイベント コードを使ってカスタム イベントを定義できる。フィルタ グラフ マネージャはこれらを直接イベント キューに置く。ただし、以下の点に注意すること。

  • フィルタ グラフ マネージャは、通常の IMediaEvent::FreeEventParams メソッドを使ってイベント パラメータを解放することはできない。イベント パラメータに関連付けられたメモリまたは参照カウントは、アプリケーションが解放しなければならない。
  • フィルタは、イベントを処理するよう準備されたアプリケーション内からイベントを送信するだけである。(アプリケーションは、イベントを送信しても安全であることを示すカスタム プロパティをフィルタ上で設定できる。)
イベント通知コード 説明
EC_ACTIVATE ビデオ ウィンドウがアクティブまたは非アクティブである。
EC_BUFFERING_DATA グラフがデータをバッファリングしている、またはデータのバッファリングを停止した。
EC_BUILT グラフを作成し終えたときにビデオ コントロールによって送信される。アプリケーションには転送されない。
EC_CLOCK_CHANGED 基準クロックが変更された。
EC_CLOCK_UNSET クロック プロバイダの接続が解除された。
EC_CODECAPI_EVENT エンコーディング イベントを通知するためにエンコーダによって送信される。
EC_COMPLETE 特定のストリームからのすべてのデータをレンダリングし終えた。
EC_DEVICE_LOST プラグ アンド プレイ デバイスが取り外された、または再び使用できるようになった。
EC_DISPLAY_CHANGED ディスプレイ モードが変更された。
EC_END_OF_SEGMENT セグメントの終わりに到達した。
EC_ERROR_STILLPLAYING グラフを実行する非同期コマンドが失敗した。
EC_ERRORABORT エラーのため処理が中止された。
EC_EXTDEVICE_MODE_CHANGE サポートされていない。
EC_FULLSCREEN_LOST ビデオ レンダラがフルスクリーン モードから切り替わろうとしている。
EC_GRAPH_CHANGED フィルタ グラフが変更された。
EC_LENGTH_CHANGED ソースの長さが変更された。
EC_NEED_RESTART フィルタがグラフの再開を要求している。
EC_NOTIFY_WINDOW フィルタにビデオ レンダラのウィンドウを通知する。
EC_OLE_EVENT フィルタがアプリケーションにテキスト文字列を渡している。
EC_OPENING_FILE グラフがファイルを開いている、またはファイルを開き終えた。
EC_PALETTE_CHANGED ビデオ パレットが変更された。
EC_PAUSED ポーズ要求が完了した。
EC_QUALITY_CHANGE 品質コントロールのため、グラフがサンプルを削除した。
EC_REPAINT ビデオ レンダラが再描画を要求している。
EC_SEGMENT_STARTED 新しいセグメントが開始した。
EC_SHUTTING_DOWN フィルタ グラフが破棄前にシャットダウンしている。
EC_SNDDEV_IN_ERROR 入力ピンでオーディオ デバイス エラーが発生した。
EC_SNDDEV_OUT_ERROR 出力ピンでオーディオ デバイス エラーが発生した。
EC_STARVATION フィルタは十分なデータを受け取っていない。
EC_STATE_CHANGE フィルタ グラフが変更された。
EC_STEP_COMPLETE コマ送りを実行しているフィルタが、指定数のコマ送りを完了した。
EC_STREAM_CONTROL_STARTED ストリーム制御開始コマンドが有効になった。
EC_STREAM_CONTROL_STOPPED ストリーム制御停止コマンドが有効になった。
EC_STREAM_ERROR_STILLPLAYING ストリーム中にエラーが発生した。ストリームは引き続き再生中である。
EC_STREAM_ERROR_STOPPED エラーのためストリームが停止した。
EC_TIMECODE_AVAILABLE サポートされていない。
EC_UNBUILT グラフを破棄し終えたときにビデオ コントロールによって送信される。アプリケーションには転送されない。
EC_USERABORT ユーザーが再生を強制終了した。
EC_VIDEO_SIZE_CHANGED ネイティブ ビデオ サイズが変更された。
EC_VMR_RENDERDEVICE_SET VMR がレンダリング メカニズムを選択し終えたときに送信される。
EC_VMR_SURFACE_FLIPPED VMR-7 のアロケータ プレゼンタが、表示するサーフェイスの DirectDraw Flip メソッドを呼び出したときに送信される。
EC_VMR_RECONNECTION_FAILED アップストリーム デコーダから動的フォーマット変更要求を受け入れることができなかった場合に、VMR-7 および VMR-9 によって送信される。
EC_WINDOW_DESTROYED ビデオ レンダラが破棄またはグラフから削除された。
EC_WMT_EVENT アプリケーションが ASF Reader フィルタを使用して、DRM (digital rights management) によって保護されている ASF ファイルを再生する場合に、Windows Media Format SDK によって送信される。
EC_WMT_INDEX_EVENT アプリケーションが ASF Writer を使用して、Windows Media Video ファイルにインデックスを付ける場合に、Windows Media Format SDK によって送信される。

参照