Microsoft DirectX 8.0 |
ストリーム内の位置をシークするメソッドを持つ。
IMediaSeeking インターフェイスはこのインターフェイスを改善している。C/C++ で書かれたアプリケーションは IMediaPosition の代わりに IMediaSeeking を使うべきである。しかし、IMediaSeeking は Automation と互換性がないので、Microsoft® Visual Basic® で書かれたアプリケーションは代わりに IMediaPosition を使用しなければならない。
このインターフェイスは個々のフィルタが行うのと同様にフィルタ グラフ マネージャによって公開されている。アプリケーションは IMediaPosition インターフェイス ポインタをフィルタからではなくフィルタ グラフ マネージャから取得すべきである。フィルタ グラフ マネージャはソース フィルタへのアップストリーム 呼び出しを継承する。イベントのこのシーケンスによってすべてのストリームは同期される。
割り当てた呼び出しがエラーを返したら、フィルタ グラフ マネージャは取得した最初のエラー値を返す。この場合割り当てた呼び出しのいくつかが成功している可能性がある。しかし、割り当てたすべての呼び出しが E_NOTIMPL を返すまで、フィルタ グラフは E_NOTIMPL を返さない。グラフ内の少なくとも 1 つのフィルタがそのメソッドを実装すると、フィルタ グラフ マネージャは E_NOTIMPL を返さない。
フィルタ 開発者 : このメソッドを実装してはならない。代わりに IMediaSeeking を実装すること。そのフィルタが IMediaSeeking をサポートするなら、フィルタ グラフ マネージャは自動的に IMediaPosition への呼び出しを処理する。
Vtable 順のメソッド。
IUnknown メソッド 説明 QueryInterface サポートされているインターフェイスへのポインタを取得する。 AddRef 参照カウントをインクリメントする。 Release 参照カウントをデクリメントする。 IDispatch メソッド 説明 GetTypeInfoCount オブジェクトが提供するタイプ情報インターフェイスの数を取得する。 GetTypeInfo オブジェクトのタイプ情報を取得する、それを使ってインターフェイスのタイプ情報を取得する。 GetIDsOfNames 一連の DISPID に対応する一連の名前をマップする。 Invoke オブジェクトによって公開されるプロパティとメソッドへのアクセスを提供する。 IMediaPosition メソッド 説明 get_Duration ストリームの時間幅を取得する。 put_CurrentPosition 現在の位置を設定する、ストリームの全時間幅からの相対値。 get_CurrentPosition 現在の位置を取得する、ストリームの全時間幅からの相対値。 get_StopTime 再生が停止する時間を取得する、ストリームの全時間幅からの相対値。 put_StopTime 再生が停止する時間を設定する、ストリームの全時間幅からの相対値。 get_PrerollTime 開始位置の前にキューに入っているデータの量を取得する。 put_PrerollTime 開始位置の前にキューに入っているデータの量を設定する。 put_Rate 再生レートを設定する。 get_Rate 再生レートを取得する。 CanSeekForward フィルタ グラフがストリームの順方向にシーク可能かどうかを確認する。 CanSeekBackward フィルタ グラフがストリームの逆方向にシーク可能かどうかを確認する。
フィルタ グラフがストリームの逆方向にシーク可能かどうかを確認する。
構文
HRESULT CanSeekBackward( LONG *pCanSeekBackward );
パラメータ
- pCanSeekBackward
- [out] グラフが逆方向にシーク可能なら OATRUE 値を受け取り、シークできないなら OAFALSE を受け取る変数へのポインタ。
戻り値
HRESULT を返す。以下のいずれかの値。
S_OK 成功。 E_NOTIMPL 実装されていない。 E_POINTER NULL ポインタ引数。
フィルタ グラフがストリームの順方向にシーク可能かどうかを確認する。
構文
HRESULT CanSeekForward( LONG *pCanSeekForward );
パラメータ
- pCanSeekForward
- [out] グラフが順方向にシーク可能なら OATRUE 値を受け取り、シークできないなら OAFALSE を受け取る変数へのポインタ。
戻り値
HRESULT を返す。以下のいずれかの値。
S_OK 成功。 E_NOTIMPL 実装されていない。 E_POINTER NULL ポインタ引数。
現在の位置を取得する、ストリームの全時間幅からの相対値。
構文
HRESULT get_CurrentPosition( REFTIME *pllTime );
パラメータ
- pllTime
- [out] 現在の位置を受け取る変数へのポインタ、秒単位。
戻り値
HRESULT を返す。以下のいずれかの値。
S_OK 成功。 E_NOTIMPL 実装されていない。 E_POINTER NULL ポインタ引数。
注意
このメソッドは再生が到達した現在位置を返す。その値は再生レートと開始タイムを無視する。たとえば、レートに 2.0 をセットし、開始タイムが 5 秒だとすると、4 秒グラフを実行すると現在の位置は 9.0 秒となる (5 + 4 × 2.0)。
グラフがポーズあるいは停止なら、現在位置は再生が復帰するポイントとなる。
ストリームの時間幅を取得する。
構文
HRESULT get_Duration( REFTIME *plength );
パラメータ
- plength
- [out] 全ストリーム長を受け取る変数へのポインタ、秒単位。
戻り値
HRESULT を返す。以下のいずれかの値。
S_OK 成功。 E_NOTIMPL 実装されていない。 E_POINTER NULL ポインタ引数。
注意
このメソッドは通常再生スピードでの時間幅を取得する。再生レートを変更してもその時間幅には影響しない。
開始位置の前にキューに入っているデータの量を取得する。
構文
HRESULT get_PrerollTime( REFTIME *pllTime );
パラメータ
- pllTime
- [out] プリロール タイムを受け取る変数へのポインタ、秒単位。
戻り値
HRESULT を返す。以下のいずれかの値。
S_OK 成功。 E_NOTIMPL 実装されていない。 E_POINTER NULL ポインタ引数。
注意
プリロール は開始位置より前のタイムで、テープ プレーヤーのような非ランダム アクセス デバイスではそこからテープなどの巻き込みが開始される。
グラフ内にこのメソッドを実装したフィルタがないなら、フィルタ グラフ マネージャは *pllTime の値をゼロにセットして S_OK を返す。
再生レートを取得する。
構文
HRESULT get_Rate( double *pdRate );
パラメータ
- pdRate
- [out] 再生レートを受け取る変数へのポインタ。
戻り値
HRESULT を返す。以下のいずれかの値。
S_OK 成功。 E_NOTIMPL 実装されていない。 E_POINTER NULL ポインタ引数。
注意
再生レートは通常スピードからの比で表現される。それゆえ、1.0 は通常再生スピードで、0.5 は半分のスピード、2.0 は倍のスピードである。
再生が停止する時間を取得する、ストリームの全時間幅からの相対値。
構文
HRESULT get_StopTime( REFTIME *pllTime );
パラメータ
- pllTime
- [out] 終了タイムを受け取る変数へのポインタ、秒単位。
戻り値
HRESULT を返す。以下のいずれかの値。
S_OK 成功。 E_NOTIMPL 実装されていない。 E_POINTER NULL ポインタ引数。
注意
再生レートはこのメソッドによって返る値に影響を与えない。
現在の位置を設定する、ストリームの全時間幅からの相対値。
構文
HRESULT put_CurrentPosition( REFTIME llTime );
パラメータ
- llTime
- [in] 新しい位置、秒単位。
戻り値
Returns an HRESULT 値を返す。以下のいずれかの値 :
S_FALSE グラフはポーズだった、そして実行状態に戻る移行中である。 S_OK 成功。 E_INVALIDARG 不適切な引数。 E_NOTIMPL 実装されていない。
注意
llTime パラメータによって指定される位置は全時間幅からの相対値であり、再生レートは無視される。たとえば、ソース ファイルが 10 秒の長さなら、5.0 の位置を設定するとグラフは再生レートとは無関係にファイルの真中をシークする。
フィルタ グラフが実行中なら、フィルタ グラフ マネージャはグラフをポーズし、シーク コマンドを処理し、次にグラフを再度実行する。グラフが実行状態への移行中にメソッドが返ると、戻り値は S_FALSE となる。
シーク コマンドを受け取ったときフィルタがポーズなら、新しい位置からそのデータを取り込む前に既存のデータをフラッシュしなければならない。詳細については、IPin::BeginFlush」と「IPin::EndFlush」を参照すること。
開始位置の前にキューに入っているデータの量を設定する。
構文
HRESULT put_PrerollTime( REFTIME llTime );
パラメータ
- llTime
- [in] プリロール タイム、秒単位。
戻り値
HRESULT を返す。以下のいずれかの値。
S_OK 成功。 E_NOTIMPL 実装されていない。
注意
プリロール は開始位置より前のタイムで、テープ プレーヤーのような非ランダム アクセス デバイスではそこからテープなどの巻き込みが開始される。
再生レートを設定する。
構文
HRESULT put_Rate( double dRate );
パラメータ
- dRate
- [in] 再生レート、ゼロであってはならない。
戻り値
HRESULT を返す。以下のいずれかの値。
S_OK 成功。 E_INVALIDARG 無効な引数。 E_NOTIMPL 実装されていない。
注意
再生レートは通常スピードの割合として表現される。したがって、1.0 は通常再生スピード、0.5 は半分のスピード、2.0 は倍のスピードである。オーディオ ストリームについては、レートを変えるとそのピッチも変わる。
詳細については、「IMediaSeeking::SetRate」を参照すること。
再生が停止する時間を取得する、ストリームの全時間幅からの相対値。
構文
HRESULT put_StopTime( REFTIME llTime );
パラメータ
- llTime
- [in] ストップ タイム、秒単位。
戻り値
HRESULT を返す。以下のいずれかの値。
S_OK 成功。 E_INVALIDARG 無効な引数。 E_NOTIMPL 実装されていない。
注意
ストップ単位は開始タイムと再生レートを無視する。たとえば、開始タイムが 2 秒で、ストップタイムが 12 秒で、再生レートが 2.0 なら、再生は (実際の時間で) 5 秒後に停止する。