Microsoft DirectX 8.0

CPosPassThru クラス

CPosPassThru クラスの階層

自分自身ではシークを行わない入力ピンを持つフィルタのシーク コマンドを扱う。

宣言: Ctlutil.h

このヘルパー クラスはシーク コマンドをアップストリームに送るフィルタで IMediaPositionIMediaSeeking インターフェイスを実装する。フィルタ グラフ マネージャがシーク コマンドをアプリケーションから受け取ったとき、そのコマンドをグラフのレンダリング フィルタに送る。そのコマンドは次に、(もしあれば)それを実行できるフィルタに到達するまで、各フィルタの出力ピンを通してアップストリームに送られる。通常、シークはソース フィルタかパーサー フィルタで実装される。

CPosPassThru クラスはフィルタの入力ピンへのポインタを保持する。以下のダイアグラムにあるように、それはシーク コマンドを接続されているアップストリーム フィルタの出力ピンに送る。

CPosPassThru

変換フィルタで CPosPassThru を使い、レンダリング フィルタで CRendererPosPassThru クラスを派生すること。

このクラスをフィルタで使うには、クラスのインターフェイスを作成し、CPosPassThru コンストラクタ メソッドのフィルタの入力ピンを指定すること。次にすべての IMediaPositionIMediaSeeking 呼び出しを CPosPassThru オブジェクトに委任すること。

シーク コマンドを委任する最もシンプルな方法は CPosPassThru オブジェクトの IMediaPositionIMediaSeeking インターフェイスを公開することだ。フィルタかピンがこれらのインターフェイスの 1 つを問い合わせたとき、そのインターフェイスの CPosPassThru 実装へのポインタが返る。次のコードはこの方法を示す。それは CTransformOutputPin クラスから適応されている。CreatePosPassThru 関数は CPosPassThru オブジェクトを作成するヘルパー関数である。

// 次のメンバ変数が仮定されている :
// CPosPassThru *m_pPos;
// IPin *m_pPin;

if (riid == IID_IMediaPosition || riid == IID_IMediaSeeking) 
{
    if (m_pPos == NULL) 
    {
        HRESULT hr;
        hr = CreatePosPassThru(GetOwner(), FALSE, m_pPin, &m_pPos);
        if (FAILED(hr))
            return hr;
    }
    return m_pPosition->QueryInterface(riid, ppv);
} 
else 
{
    // このピンの他のインターフェイスへのポインタを返す。
}

ここで説明している以外に、このクラスのすべての IMediaPositionIMediaSeeking メソッドは接続しているピンの対応するメソッドを呼び出し、その結果を返す。

Public メソッド
CPosPassThruコンストラクタ メソッド。
ForceRefresh使われていない。
GetMediaTime現在のサンプルのタイム スタンプを取得する。仮想。
IMediaPosition メソッド
get_Durationストリームの時間幅を取得する。
put_CurrentPosition現在の位置を設定する、ストリームの全時間幅からの相対値。
get_StopTime再生の終了タイムを取得する、ストリームの全時間幅からの相対値。
put_StopTime再生の終了タイムを設定する、ストリームの全時間幅からの相対値。
get_PrerollTime開始位置の前にキューに入るデータ量 (プリロール タイム) を取得する。
put_PrerollTime開始位置の前にキューに入るデータ量 (プリロール タイム) を設定する。
get_Rate再生レートを取得する。
put_Rate再生レートを設定する。
get_CurrentPosition現在位置を取得する、ストリームの全時間幅からの相対値。
CanSeekForwardストリームが順方向にシークできるかどうかを確認する。
CanSeekBackwardストリームが逆方向にシークできるかどうかを確認する。
IMediaSeeking メソッド
CheckCapabilitiesストリームに指定されたシーク能力を持つかどうかを問い合わせる。
ConvertTimeFormatあるタイムフォーマットから別のフォーマットへ変換する。
GetAvailableシークが効率的な時間幅を取得する。
GetCapabilitiesストリームのすべてのシーク能力を取得する。
GetCurrentPosition現在位置を取得する、ストリームの全時間幅からの相対値。
GetDurationストリームの時間幅を取得する。
GetPositions現在位置と停止位置を取得する、ストリームの全時間幅からの相対値。
GetPreroll開始位置の前にキューに入るデータ量 (プリロール タイム) を取得する。
GetRate再生レートを取得する。
GetStopPosition再生の終了タイムを取得する、ストリームの全時間幅からの相対値。
GetTimeFormat現在のタイム フォーマットを取得する。
IsFormatSupported指定したタイム フォーマットがサポートされているかどうかを確認する。
IsUsingTimeFormat指定したタイム フォーマットが現在使われているフォーマットかどうかを確認する。
QueryPreferredFormatストリームで許容されるタイム フォーマットを取得する。
SetPositions現在位置と停止位置を設定する。
SetRate再生レートを設定する。
SetTimeFormatタイム フォーマットを設定する。
ヘルパー関数
CreatePosPassThruCPosPassThru オブジェクトまたは CRendererPosPassThru オブジェクトを作成する。

CPosPassThru::CanSeekBackward

CPosPassThru クラス

ストリームが逆方向にシークできるかどうかを確認する。IMediaPosition::CanSeekBackward メソッドの実装。

構文

HRESULT CanSeekBackward(
    LONG *pCanSeekBackward
);

パラメータ

pCanSeekBackward
フィルタが逆方向にシーク可能なら OATRUE 値を受け取る変数のポインタを返す、そうでなければ OAFALSE を返す。

戻り値

接続されているピンから HRESULT 値を返す。

CPosPassThru::CanSeekForward

CPosPassThru クラス

ストリームが順方向にシークできるかどうかを確認する。IMediaPosition::CanSeekForward メソッドの実装。

構文

HRESULT CanSeekForward(
    LONG *pCanSeekForward
);

パラメータ

pCanSeekForward
フィルタが順方向にシーク可能なら OATRUE 値を受け取る変数のポインタを返す、そうでなければ OAFALSE を返す。

戻り値

接続されているピンから HRESULT 値を返す。

CPosPassThru::CheckCapabilities

CPosPassThru クラス

ストリームに指定されたシーク能力を持つかどうかを問い合わせる。IMediaSeeking::CheckCapabilities メソッドの実装。

構文

HRESULT CheckCapabilities(
    DWORD *pCapabilities
);

パラメータ

pCapabilities
AM_SEEKING_SEEKING_CAPABILITIES 属性の 1 つあるいは複数のビット合成へのポインタ。メソッドが返る時、この値はそれらの属性が有効であることを示す。

戻り値

接続されているピンから HRESULT 値を返す。

CPosPassThru::ConvertTimeFormat

CPosPassThru クラス

あるタイムフォーマットから別のフォーマットへ変換する。IMediaSeeking::ConvertTimeFormat メソッドの実装。

構文

HRESULT ConvertTimeFormat(
    LONGLONG *pTarget,
    const GUID *pTargetFormat,
    LONGLONG Source,
    const GUID *pSourceFormat
);

パラメータ

pTarget
変換されたタイム値を受け取る変数へのポインタ。
pTargetFormat
ターゲット フォーマットのタイム フォーマット GUID へのポインタ。NULL なら現在のフォーマットが使われる。
Source
変換されるタイム値。
pSourceFormat
変換するフォーマットの タイム フォーマット GUID へのポインタ。NULL なら現在のフォーマットが使われる。

戻り値

接続されているピンから HRESULT 値を返す。

CPosPassThru::CPosPassThru

CPosPassThru クラス

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

構文

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

パラメータ

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

CPosPassThru::ForceRefresh

CPosPassThru クラス

使われていない。

構文

HRESULT ForceRefresh(void);

戻り値

S_OK を返す。

注意

当初このクラスは接続されているピンの IMediaPositionIMediaSeeking インターフェイスへのポインタをキャッシュするために設計された。ForceRefresh メソッドはこれらのインターフェイスを解放した。

現在の実装では、このクラスはこれらのインターフェイスをキャッシュしない。互換性のために ForceRefresh メソッドはインクルードされているが、何もせず S_OK を返すだけである。

CPosPassThru::GetAvailable

CPosPassThru クラス

シークが効率的な時間幅を取得する。IMediaSeeking::GetAvailable メソッドの実装。

構文

HRESULT GetAvailable(
    LONGLONG *pEarliest,
    LONGLONG *pLatest
);

パラメータ

pEarliest
シークが効率的なもっとも早いタイム値を受け取る変数へのポインタ。
pLatest
シークが効率的なもっとも遅いタイム値を受け取る変数へのポインタ。

戻り値

接続されているピンから HRESULT 値を返す。

CPosPassThru::GetCapabilities

CPosPassThru クラス

ストリームのすべてのシーク能力を取得する。IMediaSeeking::GetCapabilities メソッドの実装。

構文

HRESULT GetCapabilities(
    DWORD *pCapabilities
);

パラメータ

pCapabilities
AM_SEEKING_SEEKING_CAPABILITIES フラグのビット合成へのポインタ。

戻り値

接続されているピンから HRESULT 値を返す。

CPosPassThru::GetCurrentPosition

CPosPassThru クラス

現在位置を取得する、ストリームの全時間幅からの相対値。IMediaSeeking::GetCurrentPosition メソッドの実装。

構文

HRESULT GetCurrentPosition(
    LONGLONG *pCurrent
);

パラメータ

pCurrent
現在の位置を受け取る変数へのポインタ、現在のタイム フォーマットの単位。

戻り値

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

S_OK成功。
E_NOTIMPLメソッドはサポートされていない。
E_POINTERNULL ポインタ引数。

注意

このメソッドは CPosPassThru::GetMediaTime メソッドを呼び出して、最も最近の位置を取得する。GetMediaTime が失敗すると、このメソッドは接続されているピンの IMediaSeeking::GetCurrentPosition を呼び出す。

GetMediaTime メソッドは基底クラスのデフォルトでは失敗する。フィルタで現在位置をキャッシュするなら、キャッシュ値を返す GetMediaTime をオーバーライドすること。

CPosPassThru::get_CurrentPosition

CPosPassThru クラス

現在位置を取得する、ストリームの全時間幅からの相対値。IMediaPosition::get_CurrentPosition メソッドの実装。

構文

HRESULT get_CurrentPosition(
    REFTIME *pllTime
);

パラメータ

pllTime
現在位置を受け取る変数へのポインタ、秒単位。

戻り値

接続されているピンから HRESULT 値を返す。

CPosPassThru::GetDuration

CPosPassThru クラス

ストリームの時間幅を取得する。IMediaSeeking::GetDuration メソッドの実装。

構文

HRESULT GetDuration(
    LONGLONG *pDuration
);

パラメータ

pDuration
時間幅を受け取る変数へのポインタ、現在のタイム フォーマット単位。

戻り値

接続されているピンから HRESULT 値を返す。

CPosPassThru::get_Duration

CPosPassThru クラス

ストリームの時間幅を取得する。IMediaPosition::get_Duration メソッドの実装。

構文

HRESULT get_Duration(
    REFTIME *plength
);

パラメータ

plength
全ストリーム長を受け取る変数へのポインタ、秒単位。

戻り値

接続されているピンから HRESULT 値を返す。

CPosPassThru::GetMediaTime

CPosPassThru クラス

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

構文

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

パラメータ

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

戻り値

Returns E_FAIL.

注意

フィルタで受け取ったサンプルのタイム スタンプをキャッシュするならこのメソッドをオーバーライドすること。

CPosPassThru::GetPositions

CPosPassThru クラス

現在位置と停止位置を取得する、ストリームの全時間幅からの相対値。IMediaSeeking::GetPositions メソッドの実装。

構文

HRESULT GetPositions(
    LONGLONG *pCurrent,
    LONGLONG *pStop
);

パラメータ

pCurrent
現在位置を受け取る変数へのポインタ、現在のタイム フォーマットの単位。
pStop
停止位置を受け取る変数へのポインタ、現在のタイム フォーマットの単位。

戻り値

接続されているピンから HRESULT 値を返す。

CPosPassThru::GetPreroll

CPosPassThru クラス

開始位置の前にキューに入るデータの量を取得する。IMediaSeeking::GetPreroll メソッドの実装。

構文

HRESULT GetPreroll(
    LONGLONG *pllPreroll
);

パラメータ

pllPreroll
プリロール タイム を受け取る変数へのポインタ、現在のタイム フォーマットの単位。

戻り値

接続されているピンから HRESULT 値を返す。

CPosPassThru::get_PrerollTime

CPosPassThru クラス

開始位置の前にキューに入るデータ量 (プリロール タイム) を取得する。IMediaPosition::get_PrerollTime メソッドの実装。

構文

HRESULT get_PrerollTime(
    REFTIME *pllTime
);

パラメータ

pllTime
プリロール タイムを受け取る変数へのポインタ。秒単位。

戻り値

接続されているピンから HRESULT 値を返す。

CPosPassThru::GetRate

CPosPassThru クラス

再生レートを取得する。IMediaSeeking::GetRate メソッドの実装。

構文

HRESULT GetRate(
    double *pdRate
);

パラメータ

pdRate
再生レートを受け取る変数へのポインタ。

戻り値

接続されているピンから HRESULT 値を返す。

CPosPassThru::get_Rate

CPosPassThru クラス

再生レートを取得する。IMediaPosition::get_Rate メソッドの実装。

構文

HRESULT get_Rate(
    double *pdRate
);

パラメータ

pdRate
再生レートを受け取る変数へのポインタ。

戻り値

接続されているピンから HRESULT 値を返す。

CPosPassThru::GetStopPosition

CPosPassThru クラス

再生終了タイムを取得する、ストリームの全時間幅からの相対値。IMediaSeeking::GetStopPosition メソッドの実装。

構文

HRESULT GetStopPosition(
    LONGLONG *pStop
);

パラメータ

pStop
終了タイムを受け取る変数へのポインタ、現在のタイムフォーマットの単位。

戻り値

接続されているピンから HRESULT 値を返す。

CPosPassThru::get_StopTime

CPosPassThru クラス

再生の終了タイムを取得する、ストリームの全時間幅からの相対値。IMediaPosition::get_StopTime メソッドの実装。

構文

HRESULT get_StopTime(
    REFTIME *pllTime
);

パラメータ

pllTime
終了タイムを受け取る変数へのポインタ、秒単位。

戻り値

接続されているピンから HRESULT 値を返す。

CPosPassThru::GetTimeFormat

CPosPassThru クラス

現在のタイム フォーマットを取得する。IMediaSeeking::GetTimeFormat メソッドの実装。

構文

HRESULT GetTimeFormat(
    const GUID *pFormat
);

パラメータ

pFormat
タイム フォーマット GUID を受け取る変数へのポインタ。

戻り値

接続されているピンから HRESULT 値を返す。

CPosPassThru::IsFormatSupported

CPosPassThru クラス

指定したタイム フォーマットがサポートされているかどうかを確認する。IMediaSeeking::IsFormatSupported メソッドの実装。

構文

HRESULT IsFormatSupported(
    const GUID *pFormat
);

パラメータ

pFormat
タイム フォーマット GUID へのポインタ。

戻り値

接続されているピンから HRESULT 値を返す。

CPosPassThru::IsUsingTimeFormat

CPosPassThru クラス

指定したタイム フォーマットが現在使われているフォーマットかどうかを確認する。IMediaSeeking::IsUsingTimeFormat メソッドの実装。

構文

HRESULT IsUsingTimeFormat(
    const GUID *pFormat
);

パラメータ

pFormat
タイム フォーマット GUIDへのポインタ。

戻り値

接続されているピンから HRESULT 値を返す。

CPosPassThru::put_CurrentPosition

CPosPassThru クラス

現在の位置を設定する、ストリームの全時間幅からの相対値。IMediaPosition::put_CurrentPosition メソッドの実装。

構文

HRESULT put_CurrentPosition(
    REFTIME llTime
);

パラメータ

llTime
新しい位置、秒単位。

戻り値

接続されているピンから HRESULT 値を返す。

CPosPassThru::put_PrerollTime

CPosPassThru クラス

開始位置の前にキューに入るデータの量を設定する。IMediaPosition::put_PrerollTime メソッドの実装。

構文

HRESULT put_PrerollTime(
    REFTIME llTime
);

パラメータ

llTime
プリロール タイム、秒単位。

戻り値

接続されているピンから HRESULT 値を返す。

注意

このメンバ関数はその呼び出しをアップストリームに渡すが、IMediaPosition::put_PrerollTime メソッドはすべての DirectShow ソース フィルタでサポートされているわけではない。

CPosPassThru::put_Rate

CPosPassThru クラス

再生レートを設定する。IMediaPosition::put_Rate メソッドの実装。

構文

HRESULT put_Rate(
    double dRate
);

パラメータ

dRate
再生レート。ゼロであってはならない。

戻り値

dRate がゼロなら E_INVALIDARG を返す。それ以外なら、接続されているピンから HRESULT 値を返す。

注意

マイナス値はリバース再生を示す。すべてのメディアがリバース再生をサポートしているわけではない。

CPosPassThru::put_StopTime

CPosPassThru クラス

再生の終了タイムを設定する、ストリームの全時間幅からの相対値。IMediaPosition::put_StopTime メソッドの実装。

構文

HRESULT put_StopTime(
    REFTIME llTime
);

パラメータ

llTime
停止 タイムの double 値、秒単位。

戻り値

接続されているピンから HRESULT 値を返す。

CPosPassThru::QueryPreferredFormat

CPosPassThru クラス

ストリームで許容されるタイム フォーマットを取得する。IMediaSeeking::QueryPreferredFormat メソッドの実装。

構文

HRESULT QueryPreferredFormat(
    GUID *pFormat
);

パラメータ

pFormat
タイム フォーマット GUID を受け取る変数へのポインタ。

戻り値

接続されているピンから HRESULT 値を返す。

CPosPassThru::SetPositions

CPosPassThru クラス

現在位置と停止位置を設定する。IMediaSeeking::SetPositions メソッドの実装。

構文

HRESULT SetPositions(
    LONGLONG *pCurrent,
    DWORD dwCurrentFlags,
    LONGLONG *pStop,
    DWORD dwStopFlags
);

パラメータ

pCurrent
現在位置を指定する変数へのポインタ、現在のタイム フォーマットの単位。
dwCurrentFlags
フラグのビットの組み合わせ。詳細については、「IMediaSeeking::SetPositions」を参照すること。
pStop
停止位置を指定する変数へのポインタ、現在のタイム フォーマットの単位。
dwStopFlags
フラグのビットの組み合わせ。詳細については、IMediaSeeking::SetPositions」を参照すること。

戻り値

接続されているピンから HRESULT 値を返す。

CPosPassThru::SetRate

CPosPassThru クラス

再生レートを設定する。IMediaSeeking::SetRate メソッドの実装。

構文

HRESULT SetRate(
    double dRate
);

パラメータ

dRate
再生レート。ゼロであってはならない。

戻り値

dRate がゼロなら E_INVALIDARG を返す。それ以外なら、接続されているピンから HRESULT 値を返す。

CPosPassThru::SetTimeFormat

CPosPassThru クラス

タイム フォーマットを設定する。IMediaSeeking::SetTimeFormat メソッドの実装。

構文

HRESULT SetTimeFormat(
    const GUID *pFormat
);

パラメータ

pFormat
タイム フォーマット GUID へのポインタ。

戻り値

接続されているピンから HRESULT 値を返す。

CreatePosPassThru 関数

CPosPassThru クラス

CPosPassThru オブジェクトまたは CRendererPosPassThru オブジェクトを作成する。

構文

STDAPI CreatePosPassThru(
    LPUNKNOWN pAgg,
    BOOL bRenderer,
    IPin *pPin,
    IUnknown **ppPassThru
);

パラメータ

pAgg
このオブジェクトの所有者へのポインタ。オブジェクトが集成された場合は、集成オブジェクトの IUnknown インターフェイスにポインタを渡す。それ以外の場合は、このパラメータに NULL を設定する。
bRenderer
ファイルがレンダラであるかどうかを示すブール値。フィルタがレンダラである場合は値 TRUE を使用し、レンダラでない場合は値 FALSE を使用する。
pPin
フィルタの入力ピンの IPin へのポインタ。
ppPassThru
オブジェクトの IUnknown インターフェイスへのポインタを受け取る変数のアドレス。

戻り値

成功の場合は S_OK を返す。それ以外の場合は HRESULT 値を返し、エラーの原因を示す。

注意

bSupportRendering の値が TRUE の場合、このメソッドは CRendererPosPassThru クラスのインスタンスを作成する。それ以外の場合は、CPosPassThru クラスのインスタンスを作成する。詳細については、「CSeekingPassThru」を参照すること。