共用方式為


CTransInPlaceFilter 類別

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

ctransinplacefilter 類別階層

類別 CTransInPlaceFilter 是針對就地轉換篩選所設計,這些篩選準則會修改輸入資料,而不是跨緩衝區複製資料。若要使用此類別,請從 CTransInPlaceFilter 衍生新的類別,並實作下列方法:

這個類別會使用 CTransInPlaceInputPin 類別進行輸入釘選,而 CTransInPlaceOutputPin 類別則用於其輸出釘選。 一般而言,您不需要覆寫這些針腳類別。 篩選準則會在 CTransInPlaceFilter::GetPin 方法中建立這兩個針腳。 如果您覆寫釘選類別,則必須覆寫 GetPin 以建立自訂釘選。

此類別的設計目的是讓輸入類型一律符合輸出類型。 可能的話,篩選準則會針對兩個針腳連接使用單一配置器。

慣用媒體類型

如果輸出針腳已經連接,輸入針腳會提供下游篩選的慣用類型。 (事實上,它只會傳回下游篩選的列舉值物件。) 否則,它沒有慣用的類型。 輸出針腳有相同的行為,但相反地:如果輸入針腳已連接,輸出針腳會提供上游篩選的慣用類型。 否則,它沒有慣用的類型

釘選連線

當一個針腳連線時,篩選通常會重新連接另一個針腳,以確保這兩個針腳都使用相同的媒體類型和相同的配置器。 (重新連接針腳的機制會在 重新連線 Pins中說明。) 兩種可能的情況:輸入針腳會先連接,或輸出針腳會先連接。

假設輸入針腳會先連接。 使用下列步驟:

  1. 輸入針腳會呼叫篩選的 CheckInputType 方法,以檢查媒體類型。
  2. 上游篩選準則會選取配置器。 此時,輸入針腳沒有配置器需求,而且會接受任何配置器進行連線。 如果上游篩選要求配置器,針腳會建立新的配置器。 基於簡短說明的原因,此配置器將不會用於最終連接。 它只會提供來協助完成此連線程式的這個階段。

稍後,當輸出釘選連線時:

  1. 輸出釘選會呼叫篩選的 CheckInputType 方法,以檢查媒體類型。 它也會在上游篩選上呼叫 IPin::QueryAccept 。 這可確保輸入針腳可以變更其媒體類型以符合。
  2. 輸出釘選會呼叫篩選的 CheckInputType 方法,以檢查媒體類型。 它也會在上游篩選上呼叫 IPin::QueryAccept 。 這可確保輸入針腳可以變更其媒體類型以符合。
  3. 輸出釘選會呼叫篩選的 CheckInputType 方法,以檢查媒體類型。 它也會在上游篩選上呼叫 IPin::QueryAccept 。 這可確保輸入針腳可以變更其媒體類型以符合。
  4. 這次,輸入針腳的 GetAllocator 方法會傳回下游配置器,而 GetAllocatorRequirements 會傳回下游篩選準則的配置器需求。 輸入針腳接受上游篩選選擇的任何配置器。
  5. 這次,輸入針腳的 GetAllocator 方法會傳回下游配置器,而 GetAllocatorRequirements 會傳回下游篩選準則的配置器需求。 輸入針腳接受上游篩選選擇的任何配置器。

現在請考慮相反的案例,其中輸出針腳是第一個要連接的針腳。

  1. 輸出釘選會呼叫篩選的 CheckInputType 方法,以檢查媒體類型。
  2. 它會選取配置器,偏好使用下游篩選準則的配置器。

然後,當輸入針腳連接時:

  1. 輸入針腳會在篩選上呼叫 CheckInputType ,並在下游篩選的輸出釘選上呼叫 QueryAccept ,以檢查媒體類型。
  2. 如果輸入類型不符合輸出類型,篩選準則會重新連接輸出針腳。
  3. 上游篩選準則會選取配置器。 輸入針腳的 GetAllocator 方法會傳回下游配置器,而輸入針腳會接受上游篩選準則所選取的任何配置器。
  4. 篩選準則會針對下游連線使用相同的配置器,可能覆寫原始下游配置器。

如果涉及的任何配置器都是唯讀的,這個事件序列會稍微變更,因為下游配置器必須可寫入。 在此情況下,篩選準則可能會使用兩個不同的配置器。

如需使用此類別的詳細資訊,請參閱 撰寫轉換篩選

受保護的成員變數 Description
m_bModifiesData 指出篩選準則是否修改範例資料。
保護方法 Description
複製 複製媒體範例。
InputPin 擷取篩選輸入釘選的指標。
OutputPin 擷取篩選輸出釘選的指標。
TypesMatch 判斷輸入媒體類型是否符合輸出媒體類型。
UsingDifferentAllocators 判斷輸入和輸出針腳是否使用不同的配置器。
公用方法 Description
CTransInPlaceFilter 建構函式方法。
GetPin 擷取針腳。
GetMediaType 擷取輸出釘選的慣用媒體類型。
DecideBufferSize 設定輸出針腳的緩衝區需求。
CheckTransform 檢查輸入媒體類型是否與輸出媒體類型相容。
CompleteConnect 完成針腳連線。
接收 接收媒體範例、處理它,並將它傳遞給下游篩選。
純虛擬方法 Description
Transform 就地轉換範例。

規格需求

需求
標頭
Transip.h (包含 Streams.h)
程式庫
Strmbase.lib (零售組建) ;
Strmbasd.lib (偵錯組建)