CPosPassThru 類別
[與此頁面相關的功能 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物件。 |
規格需求
需求 | 值 |
---|---|
標頭 |
|
程式庫 |
|