IMediaSeeking::SetPositions 方法 (strmif.h)
[與此頁面相關的功能 DirectShow 是舊版功能。 它已被 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音訊/視訊擷取取代。 這些功能已針對 Windows 10 和 Windows 11 進行優化。 Microsoft 強烈建議新程式代碼盡可能使用 MediaPlayer、 IMFMediaEngine 和 音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議使用舊版 API 的現有程式代碼盡可能重寫為使用新的 API。
方法 SetPositions
會設定目前的位置和停止位置。
語法
HRESULT SetPositions(
[in, out] LONGLONG *pCurrent,
[in] DWORD dwCurrentFlags,
[in, out] LONGLONG *pStop,
[in] DWORD dwStopFlags
);
參數
[in, out] pCurrent
[in,out]指定目前時間格式單位之目前位置的變數指標。
[in] dwCurrentFlags
旗標的位組合。 請參閱<備註>。
[in, out] pStop
[in,out]指定停止時間的變數指標,以目前時間格式的單位為單位。
[in] dwStopFlags
旗標的位組合。 請參閱<備註>。
傳回值
傳回 HRESULT 值。 可能的值如下。
傳回碼 | Description |
---|---|
|
沒有位置變更。 (兩個旗標都未指定任何搜尋。) |
|
成功。 |
|
無效引數。 |
|
不支援方法。 |
|
NULL 指標自變數。 |
備註
dwCurrentFlags 和 dwStopFlags 參數會定義搜尋的類型。 定義下列旗標。
定位旗標 | Description |
---|---|
AM_SEEKING_NoPositioning | 位置沒有變更。 (time 參數可以是 NULL.) |
AM_SEEKING_AbsolutePositioning | 指定的位置是絕對位置。 |
AM_SEEKING_RelativePositioning | 指定的位置相對於先前的值。 |
AM_SEEKING_IncrementalPositioning | pStop) 的停止位置 (相對於 pCurrent) 的目前 (位置。 |
修飾詞旗標 | Description |
---|---|
AM_SEEKING_SeekToKeyFrame | 搜尋最接近的主要畫面格。 這可能比較快,但較不精確。 DirectShow 隨附的篩選都不支援此旗標。 譯碼器是最可能支持的篩選類型。 |
AM_SEEKING_ReturnTime | 傳回對等的參考時間。 |
AM_SEEKING_Segment | 使用區段搜尋。 |
AM_SEEKING_NoFlush | 請勿排清。 |
針對每個參數,請使用一個定位旗標。 選擇性地包含一或多個修飾詞旗標。
如果指定AM_SEEKING_ReturnTime旗標,方法會將位置值轉換成參考時間,並在 pCurrent 或 pStop 變數中傳回它。 如果您使用另一個時間格式,例如畫面格,則此旗標很有用。
AM_SEEKING_Segment和AM_SEEKING_NoFlush旗標支援無縫迴圈:
- 如果AM_SEEKING_Segment旗標存在,來源篩選會在到達停止位置時傳送 EC_END_OF_SEGMENT 事件,而不是呼叫 IPin::EndOfStream。 應用程式可以等候此事件,然後發出另一個 seek 命令。
- 如果AM_SEEKING_NoFlush旗標存在,圖表不會在搜尋期間排清數據。 將此旗標與 AM_SEEKING_Segment搭配使用。
pCurrent 和 pStop 的傳入值會以目前時間格式表示。 默認時間格式REFERENCE_TIME單位 ( 100 奈秒) 。 若要變更時間格式,請使用 IMediaSeeking::SetTimeFormat 方法。 如果AM_SEEKING_ReturnTime旗標存在,方法會將傳出值轉換成 REFERENCE_TIME 單位。
篩選開發人員
如果您實作這個方法,您可以使用值AM_SEEKING_PositioningBitsMask遮罩修飾詞旗標,檢查呼叫端是否要求目前或停止位置的變更。 例如:
DWORD dwCurrentPos = dwCurrentFlags & AM_SEEKING_PositioningBitsMask if (dwCurrentPos == AM_SEEKING_AbsolutePositioning) { // Set new position to pCurrent. m_rtStart = *pCurrent; } else if (dwCurrentPos == AM_SEEKING_RelativePositioning) { // Increment current position by pCurrent. m_rtStart += *pCurrent; } |
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 專業版 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | strmif.h (包含 Dshow.h) |
程式庫 | Strmiids.lib |