Share via


重新連線釘選

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

在釘選連線期間,篩選準則可以中斷連線並重新連線其其中一個其他針腳,如下所示:

  1. 篩選準則會在其他篩選的釘選上呼叫 IPin::QueryAccept ,並指定新的媒體類型。
  2. 如果 QueryAccept 傳回S_OK,篩選準則會呼叫 IFilterGraph2::ReconnectEx 來重新連接針腳。

以下是篩選準則可能需要重新連接針腳時的一些範例:

  • Tee 篩選器。 tee 篩選器會將輸入資料流程分割成多個輸出,而不需要變更資料流程中的資料。 tee 篩選器可以接受各種媒體類型,但類型必須符合所有針腳連線。 因此,當輸入針腳連接時,篩選準則可能需要重新交涉輸出針腳上的任何現有連線,反之亦然。 如需範例,請參閱 InfTee 篩選範例
  • 就地轉換篩選準則。地轉換 篩選會修改原始緩衝區中的輸入資料,而不是將資料複製到個別的輸出緩衝區。 就地轉接篩選準則必須針對上游和下游連線使用相同的配置器。 連接 (輸入或輸出的第一個針腳,) 以平常的方式交涉配置器。 不過,當其他針腳連接時,可能無法接受第一個配置器。 在此情況下,第二個針腳會選擇不同的配置器,而第一個針腳會使用新的配置器重新連線。 如需範例實作,請參閱 CTransInPlaceFilter 類別。

ReconnectEx 方法中,Filter Graph 管理員會以非同步方式中斷連接並重新連接針腳。 除非 QueryAccept 傳回S_OK,否則篩選準則不得嘗試重新連線。 否則,針腳會保持中斷連線,導致圖形錯誤。 此外,篩選應該在相同的執行緒上,要求 從 IPin::Connect 方法內部重新連線。 如果 Connect 方法在一個執行緒上傳回,而另一個執行緒提出重新連線要求,則 Filter Graph 管理員可能會在重新連線之前執行圖形,導致圖形錯誤。