CTransInPlaceFilter 類別
[與此頁面 相關的功能 DirectShow是舊版功能。 它已被 MediaPlayer、 IMFMediaEngine和 Media Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayer、 IMFMediaEngine 和 音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議盡可能重寫使用舊版 API 的現有程式碼,以使用新的 API。]
類別 CTransInPlaceFilter
是針對就地轉換篩選所設計,這些篩選準則會修改輸入資料,而不是跨緩衝區複製資料。若要使用此類別,請從 CTransInPlaceFilter
衍生新的類別,並實作下列方法:
這個類別會使用 CTransInPlaceInputPin 類別進行輸入釘選,而 CTransInPlaceOutputPin 類別則用於其輸出釘選。 一般而言,您不需要覆寫這些針腳類別。 篩選準則會在 CTransInPlaceFilter::GetPin 方法中建立這兩個針腳。 如果您覆寫釘選類別,則必須覆寫 GetPin 以建立自訂釘選。
此類別的設計目的是讓輸入類型一律符合輸出類型。 可能的話,篩選準則會針對兩個針腳連接使用單一配置器。
慣用媒體類型
如果輸出針腳已經連接,輸入針腳會提供下游篩選的慣用類型。 (事實上,它只會傳回下游篩選的列舉值物件。) 否則,它沒有慣用的類型。 輸出針腳有相同的行為,但相反地:如果輸入針腳已連接,輸出針腳會提供上游篩選的慣用類型。 否則,它沒有慣用的類型
釘選連線
當一個針腳連線時,篩選通常會重新連接另一個針腳,以確保這兩個針腳都使用相同的媒體類型和相同的配置器。 (重新連接針腳的機制會在 重新連線 Pins中說明。) 兩種可能的情況:輸入針腳會先連接,或輸出針腳會先連接。
假設輸入針腳會先連接。 使用下列步驟:
- 輸入針腳會呼叫篩選的 CheckInputType 方法,以檢查媒體類型。
- 上游篩選準則會選取配置器。 此時,輸入針腳沒有配置器需求,而且會接受任何配置器進行連線。 如果上游篩選要求配置器,針腳會建立新的配置器。 基於簡短說明的原因,此配置器將不會用於最終連接。 它只會提供來協助完成此連線程式的這個階段。
稍後,當輸出釘選連線時:
- 輸出釘選會呼叫篩選的 CheckInputType 方法,以檢查媒體類型。 它也會在上游篩選上呼叫 IPin::QueryAccept 。 這可確保輸入針腳可以變更其媒體類型以符合。
- 輸出釘選會呼叫篩選的 CheckInputType 方法,以檢查媒體類型。 它也會在上游篩選上呼叫 IPin::QueryAccept 。 這可確保輸入針腳可以變更其媒體類型以符合。
- 輸出釘選會呼叫篩選的 CheckInputType 方法,以檢查媒體類型。 它也會在上游篩選上呼叫 IPin::QueryAccept 。 這可確保輸入針腳可以變更其媒體類型以符合。
- 這次,輸入針腳的 GetAllocator 方法會傳回下游配置器,而 GetAllocatorRequirements 會傳回下游篩選準則的配置器需求。 輸入針腳接受上游篩選選擇的任何配置器。
- 這次,輸入針腳的 GetAllocator 方法會傳回下游配置器,而 GetAllocatorRequirements 會傳回下游篩選準則的配置器需求。 輸入針腳接受上游篩選選擇的任何配置器。
現在請考慮相反的案例,其中輸出針腳是第一個要連接的針腳。
- 輸出釘選會呼叫篩選的 CheckInputType 方法,以檢查媒體類型。
- 它會選取配置器,偏好使用下游篩選準則的配置器。
然後,當輸入針腳連接時:
- 輸入針腳會在篩選上呼叫 CheckInputType ,並在下游篩選的輸出釘選上呼叫 QueryAccept ,以檢查媒體類型。
- 如果輸入類型不符合輸出類型,篩選準則會重新連接輸出針腳。
- 上游篩選準則會選取配置器。 輸入針腳的 GetAllocator 方法會傳回下游配置器,而輸入針腳會接受上游篩選準則所選取的任何配置器。
- 篩選準則會針對下游連線使用相同的配置器,可能覆寫原始下游配置器。
如果涉及的任何配置器都是唯讀的,這個事件序列會稍微變更,因為下游配置器必須可寫入。 在此情況下,篩選準則可能會使用兩個不同的配置器。
如需使用此類別的詳細資訊,請參閱 撰寫轉換篩選。
受保護的成員變數 | Description |
---|---|
m_bModifiesData | 指出篩選準則是否修改範例資料。 |
保護方法 | Description |
複製 | 複製媒體範例。 |
InputPin | 擷取篩選輸入釘選的指標。 |
OutputPin | 擷取篩選輸出釘選的指標。 |
TypesMatch | 判斷輸入媒體類型是否符合輸出媒體類型。 |
UsingDifferentAllocators | 判斷輸入和輸出針腳是否使用不同的配置器。 |
公用方法 | Description |
CTransInPlaceFilter | 建構函式方法。 |
GetPin | 擷取針腳。 |
GetMediaType | 擷取輸出釘選的慣用媒體類型。 |
DecideBufferSize | 設定輸出針腳的緩衝區需求。 |
CheckTransform | 檢查輸入媒體類型是否與輸出媒體類型相容。 |
CompleteConnect | 完成針腳連線。 |
接收 | 接收媒體範例、處理它,並將它傳遞給下游篩選。 |
純虛擬方法 | Description |
Transform | 就地轉換範例。 |
規格需求
需求 | 值 |
---|---|
標頭 |
|
程式庫 |
|