IGraphConfig::Reconnect 方法 (strmif.h)

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

方法 Reconnect 會在兩個針腳之間執行動態重新連線。

語法

HRESULT Reconnect(
  [in] IPin                *pOutputPin,
  [in] IPin                *pInputPin,
  [in] const AM_MEDIA_TYPE *pmtFirstConnection,
  [in] IBaseFilter         *pUsingFilter,
  [in] HANDLE              hAbortEvent,
  [in] DWORD               dwFlags
);

參數

[in] pOutputPin

輸出針腳的 IPin 介面指標。 可以是 NULL,在此情況下 pInputPin 不得為 NULL

[in] pInputPin

IPin 介面指標指向輸入針腳。 可為 NULL,在此情況下 pOutputPin 不得為 NULL

[in] pmtFirstConnection

AM_MEDIA_TYPE 結構的指標,指定重新連接期間所建立之第一個針腳連接的媒體類型。 如果此參數為 NULL,則第一個連接可以有任何媒體類型。

[in] pUsingFilter

要用於重新連線的選擇性篩選指標。 篩選條件必須已經位於圖表中。 可以是 NULL

[in] hAbortEvent

事件的控制代碼。 如果呼叫端是其中一個數據處理線程上的篩選呼叫,這個參數應該是當篩選進入停止狀態時將發出訊號的事件句柄。 否則,此參數可以是 NULL。 如需詳細資訊,請參閱<備註>。

[in] dwFlags

AM_GRAPH_CONFIG_RECONNECT_FLAGS 列舉的旗標組合,指定如何執行重新連線。

傳回值

如果成功,則傳回S_OK。 否則,傳回錯誤碼,可能是下列其中一個值,或未列出其他值。

傳回碼 Description
E_INVALIDARG
無效引數。 例如, (pInputPinpOutputPin 都是 NULL.)
E_NOINTERFACE
輸入針腳不支援 IPinConnection
VFW_E_CANNOT_CONNECT
無法連線篩選。
VFW_E_STATE_CHANGED
篩選的狀態已變更。 無法完成作業。

備註

如果您只指定一個針腳,此方法會搜尋另一個針腳。 不過,根據預設,如果搜尋達到透過 IFilterGraph::AddFilter 方法新增至圖形的篩選條件,則搜尋會失敗。 若要覆寫此行為,請呼叫 IGraphConfig::SetFilterFlags ,並在篩選上設定AM_FILTER_FLAGS_REMOVABLE旗標。

重新連線程式牽涉到數個步驟,其中大部分都是在此方法內處理:

  1. 首先,在呼叫 方法之前,請務必在重新設定的路徑上封鎖數據流。 應用程式應該呼叫 IPinFlowControl::Block 方法來執行此動作。 如果呼叫端是篩選,而不是應用程式,則篩選條件可能可在內部控制數據流。
  2. 指定的輸出和輸入針腳會定義重新連線的開始和結束點。 輸入針腳必須支援 IPinConnection 介面。 如果您藉由傳遞 NULL 參數) ,讓其中一個針腳保持未指定 (,方法會搜尋篩選圖形來尋找候選釘選以進行重新連線。 (若要尋找輸入釘選,它會從輸出釘選搜尋下游;若要尋找輸出釘選,它會從輸入 pin.) 搜尋上游
  3. 方法會透過篩選圖形推送任何擱置的數據, (透過 IGraphConfig::P ushThroughData) 的內部呼叫。
  4. 如果您已指定插入圖形的篩選,方法會將開始輸出針腳連接到篩選的輸入針腳,並將篩選的輸出針腳連接到最終輸入針腳。 如果您未指定篩選條件,方法只會將輸出針腳連接到輸入針腳。 不論是哪一種情況,方法都會插入完成連接所需的任何轉換篩選。 不過, (您可以藉由設定適當的旗標來覆寫此行為;如需詳細資訊,請參閱 dwFlags 參數的描述。)
  5. 最後,方法會將新的篩選放入執行中狀態。 呼叫端必須重新啟動數據流。 應用程式可以呼叫沒有旗標的 IPinFlowControl::Block 來執行此動作。
如果篩選條件在其自己的數據處理線程上呼叫此方法,它就會建立死結的可能性。 方法會取得篩選圖形上的鎖定,這可封鎖篩選在接收 IMediaFilter::Stop 呼叫時停止篩選。 為避免這種情況,方法會接受篩選所提供之事件物件的句柄。 如果篩選收到對 Stop 方法的呼叫,篩選條件應該會發出事件訊號。

規格需求

需求
最低支援的用戶端 Windows XP [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2003 [僅限傳統型應用程式]
目標平台 Windows
標頭 strmif.h (包含 Dshow.h)
程式庫 Strmiids.lib

另請參閱

錯誤和成功碼

IGraphConfig 介面