IMediaSeeking インターフェイス

IMediaSeeking インターフェイスには、ストリーム内の位置にシークするメソッドと、再生レートを設定するメソッドが含まれる。フィルタ グラフ マネージャはこのインターフェイスを公開し、個々のフィルタも同じように公開する。アプリケーションはこのインターフェイスに関してはフィルタ グラフ マネージャに照会する必要がある。

フィルタ グラフ マネージャは、IMediaSeeking 呼び出しをグラフ内の各レンダリング フィルタに配布する。レンダリング フィルタは、その呼び出しをソース フィルタへのアップストリームに送る。イベントのこのシーケンスによってすべてのストリームは同期される。配布されたいずれかの呼び出しがエラーを返した場合、フィルタ グラフ マネージャは、配布された呼び出しの一部が成功した場合でも、最初に受け取ったエラー値を返す。この例外には、E_NOTIMPL がある。フィルタ グラフ マネージャは、配布されたすべての呼び出しが E_NOTIMPL を返さない限り、E_NOTIMPL を返さない。

グラフがどの状態 (実行中、ポーズ、停止中) にあっても、アプリケーションはグラフをシークできる。グラフが実行中の場合、フィルタ グラフ マネージャはシークコマンドを発行する前にグラフをポーズする。その後、グラフを再び実行する。すべてのシーク操作は、現在の再生レートには依存しない。シーク操作によって、ペンディング状態のメディア データはグラフからフラッシュされる。

タイムを指定するすべての IMediaSeeking 引数について、タイムの単位は現在のタイム フォーマットに依存する。タイム フォーマットを設定するには、IMediaSeeking::SetTimeFormat を呼び出す。タイム フォーマットは、uuids.h で定義されているグローバルに一意の識別子 (GUID) である。詳細については、「タイム フォーマット GUID」を参照すること。

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

メソッド 説明
GetCapabilities ストリームのすべてのシーク能力を取得する。
CheckCapabilities 指定したシーク能力をストリームが持っているかどうかを照会する。
IsFormatSupported 指定したタイム フォーマットがシーク操作でサポートされているかどうかを確認する。
QueryPreferredFormat シーク操作の優先タイム フォーマットを取得する。
GetTimeFormat 現在シーク操作で使われているタイム フォーマットを取得する。
IsUsingTimeFormat シーク操作が現在指定したタイム フォーマットを使っているかどうかを確認する。
SetTimeFormat 以降のシーク操作のタイム フォーマットを設定する。
GetDuration ストリームの時間幅を取得する。
GetStopPosition ストリームの時間幅を基準として、再生が停止するタイムを取得する。
GetCurrentPosition ストリームの合計時間幅を基準とする、現在の位置を取得する。
ConvertTimeFormat 1 つのタイム フォーマットから別のタイム フォーマットに変換する。
SetPositions 現在位置と停止位置を設定する。
GetPositions ストリームの合計時間幅を基準とする、現在の位置と停止位置を取得する。
GetAvailable シークが有効なタイムの範囲を取得する。
SetRate 再生レートを設定する。
GetRate 再生レートを取得する。
GetPreroll 開始位置の前にキューに入るデータの量を取得する。

参照