CPosPassThru 類別

[與此頁面相關的功能 DirectShow是舊版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayerIMFMediaEngine音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議使用舊版 API 的現有程式碼盡可能重寫為使用新的 API。

cpospassthru 基類階層

類別 CPosPassThru 會處理轉換篩選準則的搜尋命令,方法是將其傳遞至下一個篩選準則。

當應用程式搜尋篩選圖形時,Filter Graph 管理員會提供搜尋命令給轉譯器篩選。 命令會透過每個篩選的輸出針腳傳遞至上游,直到到達可執行命令的篩選, (如果有任何) 。 如需詳細資訊,請參閱 搜尋。 類別 CPosPassThru 會將所有搜尋命令傳遞至上游篩選上的輸出針腳,如下圖所示。

cpospassthru 類別會傳送上游的 seek 命令。

雖然此類別是在基類庫中提供,但 DirectShow 也會在 Quartz.dll 中提供相同的類別。 使用 Quartz.dll 版本可以稍微減少篩選中的程式碼大小,因為類別是在執行時間從 DLL 載入。 若要使用該版本,請呼叫 CreatePosPassThru 函式。

在輸出釘選的NonDelegatingQueryInterface方法中,每當要求的介面是IMediaSeekingIMediaPosition時,委派給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();
}

除非另有說明,否則這個類別中的所有 IMediaPositionIMediaSeeking 方法都會在連接的針腳上呼叫對應的方法,並傳回結果。

公用方法 Description
CPosPassThru 建構函式方法。
ForceRefresh 已過時。
GetMediaTime 擷取目前範例上的時間戳記。 虛擬。
IMediaPosition 方法 Description
get_Duration 擷取資料流程的持續時間。
put_CurrentPosition 設定相對於資料流程總持續時間的目前位置。
get_StopTime 擷取播放相對於資料流程持續時間停止的時間。
put_StopTime 設定播放相對於資料流程持續時間停止的時間。
get_PrerollTime 擷取將在開始位置之前排入佇列的資料量。
put_PrerollTime 設定開始位置之前將排入佇列的資料量。
get_Rate 擷取播放速率。
put_Rate 設定播放速率。
get_CurrentPosition 擷取相對於資料流程總持續時間的目前位置。
CanSeekForward 判斷是否可以向後搜尋資料流程。
CanSeekBackward 判斷是否可以向前搜尋資料流程。
IMediaSeeking 方法 Description
CheckCapabilities 查詢資料流程是否有指定的搜尋功能。
ConvertTimeFormat 從某個時間格式轉換成另一個格式。
GetAvailable 擷取搜尋有效率的時間範圍。
GetCapabilities 擷取資料流程的所有搜尋功能。
GetCurrentPosition 擷取相對於資料流程總持續時間的目前位置。
GetDuration 擷取資料流程的持續時間。
GetPositions 擷取相對於資料流程總持續時間的目前位置和停止位置。
GetPreroll 擷取將在開始位置之前排入佇列的資料量。
GetRate 擷取播放速率。
GetStopPosition 擷取播放相對於資料流程持續時間停止的時間。
GetTimeFormat 擷取目前的時間格式。
IsFormatSupported 判斷是否支援指定的時間格式。
IsUsingTimeFormat 判斷指定的時間格式是否為目前使用中的格式。
QueryPreferredFormat 擷取資料流程的慣用時間格式。
SetPositions 設定目前的位置和停止位置。
SetRate 設定播放速率。
SetTimeFormat 設定時間格式。
輔助函式 Description
CreatePosPassThru CPosPassThru建立 或CRendererPosPassThru物件。

規格需求

需求
標頭
Ctlutil.h (包含 Streams.h)
程式庫
Strmbase.lib (零售組建) ;
Strmbasd.lib (偵錯組建)