[與此頁面相關的功能 DirectShow是舊版功能。 它已被 MediaPlayer、 IMFMediaEngine和 Media Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayer、 IMFMediaEngine 和 音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議使用舊版 API 的現有程式碼盡可能重寫為使用新的 API。
類別 CPosPassThru 會處理轉換篩選準則的搜尋命令,方法是將其傳遞至下一個篩選準則。
當應用程式搜尋篩選圖形時,Filter Graph 管理員會提供搜尋命令給轉譯器篩選。 命令會透過每個篩選的輸出針腳傳遞至上游,直到到達可執行命令的篩選, (如果有任何) 。 如需詳細資訊,請參閱 搜尋。 類別 CPosPassThru 會將所有搜尋命令傳遞至上游篩選上的輸出針腳,如下圖所示。
雖然此類別是在基類庫中提供,但 DirectShow 也會在 Quartz.dll 中提供相同的類別。 使用 Quartz.dll 版本可以稍微減少篩選中的程式碼大小,因為類別是在執行時間從 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 方法都會在連接的針腳上呼叫對應的方法,並傳回結果。
| 公用方法 | 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物件。 |
規格需求
| 需求 | 值 |
|---|---|
| 標頭 |
|
| 程式庫 |
|