CPosPassThru クラス

cpospassthru base class hierarchy

このクラスは CPosPassThru 、次のフィルターに上流に渡すことで、変換フィルターのシーク コマンドを処理します。

アプリケーションがフィルター グラフをシークすると、フィルター Graph マネージャーは、レンダラー フィルターに seek コマンドを提供します。 コマンドは、各フィルターの出力ピンを介して上流に渡され、コマンドを実行できるフィルター (存在する場合) に達するまで実行されます。 詳細については、 シークを参照してください。 次の図に示すように、クラスはすべての CPosPassThru シーク コマンドをアップストリーム フィルターの出力ピンに渡します。

the cpospassthru class sends seek commands upstream.

このクラスは基底クラス ライブラリで提供されますが、DirectShowはQuartz.dllでも同じクラスを提供します。 クラスは DLL から実行時に読み込まれるため、Quartz.dll バージョンを使用すると、フィルター内のコード サイズを多少小さくできます。 そのバージョンを使用するには、 CreatePosPassThru 関数を呼び出します。

次のコードに示すように、出力ピンの NonDelegatingQueryInterface メソッドで、要求されたインターフェイスが IMediaSeeking または IMediaPosition である場合は常に CPosPassThru オブジェクトにデリゲートします。

// The following member variables are assumed:
IPin *m_pInput;    // Pointer to the input pin on your filter.
IUnknown *m_pPos;  // Pointer to the CPosPassThru object.

STDMETHODIMP CMyPin::NonDelegatingQueryInterface(REFIID riid, void **ppv)
{
    HRESULT hr
    if (riid == IID_IMediaPosition || riid == IID_IMediaSeeking) 
    {
        if (m_pPos == NULL) 
        {
            // We have not created the CPosPassThru object yet. Do so now.
            hr = CreatePosPassThru(GetOwner(), FALSE, m_pInput, &m_pPos);
            if (FAILED(hr)) return hr;
        }
        return m_pPos->QueryInterface(riid, ppv);
    } 
    else
    {
         // Other interfaces (not shown).
    }
}

~CMyPin::CMyPin() 
{
    // Release the CPosPassThruObject.
    if (m_pPos != NULL) m_pPos->Release();
}

記載されている場合を除き、このクラスのすべての IMediaPosition メソッドと IMediaSeeking メソッドは、接続されているピンの対応するメソッドを呼び出し、結果を返します。

パブリック メソッド 説明
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 時刻の形式を設定します。
ヘルパー関数 説明
CreatePosPassThru CPosPassThruCRendererPosPassThru オブジェクトを作成します。

要件

要件
ヘッダー
Ctlutil.h (ストリーム.h を含む)
ライブラリ
Strmbase.lib (リテール ビルド);
Strmbasd.lib (デバッグ ビルド)