CPosPassThru クラス

cpospassthru 基本クラス階層

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

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

cpospassthru クラスは、シーク コマンドをアップストリームに送信します。

このクラスは基本クラス ライブラリで提供しますが、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 または CPosPassThru CRendererPosPassThru オブジェクトを作成 します。

必要条件

要件
ヘッダー
Ctlutil.h (ストリーム.h を含む)
ライブラリ
Strmbase.lib (小売りビルド)
Str str strsd.lib (デバッグ ビルド)