Microsoft DirectX 8.0

CRendererPosPassThru クラス

CRendererPosPassThru クラスの階層

レンダリング フィルタのシーク コマンドを処理する。

宣言 : Ctlutil.h

このクラスは、CPosPassThru クラスから派生する。サンプルが届いたときサンプルからタイム スタンプをキャッシュするサポートが追加されている。

CPosPassThru クラスと同じやり方でこのクラスを使用する。詳細については、「CPosPassThru」を参照すること。さらに、レンダリング フィルタは、キャッシュされたオブジェクトのタイム スタンプを更新しなければならない。

このクラスの使い方については、CBaseRenderer ソース コードを参照すること。

Public メソッド
CRendererPosPassThruコンストラクタ メソッド。
GetMediaTime現在のサンプルのタイム スタンプを取得する。
RegisterMediaTime現在のサンプルからタイム スタンプをキャッシュする。
ResetMediaTimeキャッシュされたタイム スタンプをゼロにリセットする。
EOSエンドオブストリーム通知の後でキャッシュされたタイム スタンプをアップデートする。

CRendererPosPassThru::CRendererPosPassThru

CRendererPosPassThru クラス

コンストラクタ メソッド。

構文

CRendererPosPassThru(
    const TCHAR *pName,
    LPUNKNOWN pUnk,
    HRESULT *phr,
    IPin *pPin
);

パラメータ

pName
オブジェクトの名前へのポインタ、デバッグ用。このパラメータをスタティック メモリに割り当てること。
pUnk
このオブジェクトの所有者へのポインタ。オブジェクトが集成されているなら、集成されたオブジェクトの IUnknown インターフェイスへのポインタを渡すこと。それ以外の場合、このパラメータはゼロに設定する。
phr
HRESULT 値へのポインタ。無視される。
pPin
フィルタの入力ピンのIPin インターフェイスへのポインタ

CRendererPosPassThru::EOS

CRendererPosPassThru クラス

エンドオブストリーム通知の後でキャッシュされたタイム スタンプをアップデートする。

構文

HRESULT EOS(void);

戻り値

HRESULT 値を返す。以下の表に示されるいずれかの値。

S_OK成功。
E_FAIL失敗。多分フィルタがストリーミングしていない。

注意

フィルタがエンドオブストリーム通知 (IPin::EndOfStream) を受け取ったとき、このメソッドを呼び出すべきだ。このメソッドはストップ位置と等しい 2 つのキャッシュされたタイム スタンプをセットし、IMediaStream::GetCurrentPosition メソッドに正しいストリームの終りの値を返させる。

CRendererPosPassThru::GetMediaTime

CRendererPosPassThru クラス

現在のサンプルのタイム スタンプを取得する。

構文

HRESULT GetMediaTime(
    LONGLONG *pStartTime,
    LONGLONG *pEndTime
);

パラメータ

pStartTime
開始タイムを受け取る変数へのポインタ、現在のタイム フォーマットの単位。
pEndTime
終了タイムを受け取る変数へのポインタ、現在のタイム フォーマットの単位。NULL も可。

戻り値

HRESULT 値を返す。 以下の表に示されるいずれかの値。

S_OK成功。
E_INVALIDARGこのフォーマットへの変換はサポートされていない。
E_POINTERNULL ポインタ引数。

注意

このメソッドは CPosPassThru::GetMediaTime メソッドをオーバーライドする。CPosPassThru::ConvertTimeFormat メソッドを呼び出すことにより、タイム スタンプ値は現在のタイム フォーマットに変換される。

CRendererPosPassThru::RegisterMediaTime

CRendererPosPassThru クラス

現在のサンプルからタイム スタンプをキャッシュする。

構文

HRESULT RegisterMediaTime(
    IMediaSample *pMediaSample
);

HRESULT RegisterMediaTime(
    LONGLONG StartTime,
    LONGLONG EndTime
);

パラメータ

pMediaSample
サンプルの IMediaSample インターフェイスへのポインタ。
StartTime
サンプル開始タイム、100 ナノ秒単位。
EndTime
サンプル終了タイム、100 ナノ秒単位。

戻り値

HRESULT 値を返す。 以下の表に示されるいずれかの値。

S_OK成功。
VFW_E_MEDIA_TIME_NOT_SETサンプルはタイム スタンプされていない。

注意

このメソッドは現在のサンプルからタイム スタンプをストアする。GetMediaTime メソッドは同じ値を取得する。

フィルタは受け取った各サンプルに対しこのメソッドを呼び出すべきだ。このメソッドはサンプルへのポインタかタイム サンプルそれ自身のどちらかを受け取るためにオーバーロードされる。

CRendererPosPassThru::ResetMediaTime

CRendererPosPassThru クラス

キャッシュされたタイム スタンプをゼロにリセットする。

構文

HRESULT ResetMediaTime(void);

戻り値

S_OK を返す。

注意

RegisterMediaTime がキャッシュしたタイム スタンプが無効になるたびに、フィルタはこのメソッドを呼び出すべきだ。とりわけ、IPin::EndFlushIMediaFilter::Stop メソッドに対応する際にこのメソッドを呼び出すべきだ。

このメソッドが呼び出された後、GetMediaTime メソッドは開始タイムと終了タイムにゼロを返す。