CTransformFilter 類別

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

ctransformfilter 類別階層

類別 CTransformFilter 是實作轉換篩選的基類。 這個類別是專為實作具有一個輸入針腳和一個輸出針腳的轉換篩選所設計。 它會針對輸入針腳和輸出針腳使用不同的配置器。 若要建立就地處理資料的篩選,請使用 CTransInPlaceFilter 類別。

此篩選準則會使用 CTransformInputPin 類別進行輸入釘選,而 CTransformOutputPin 類別則用於其輸出針腳。 一般而言,您不需要覆寫這些針腳類別。 大部分的 pin 方法會在 類別上 CTransformFilter 呼叫對應的方法,因此您可以視需要覆寫篩選方法。 篩選準則會在 CTransformFilter::GetPin 方法中建立這兩個針腳。 如果您覆寫釘選類別,則必須覆寫 GetPin 以建立自訂釘選。

若要使用此類別,請從 CTransformFilter 衍生新的類別,並實作下列方法:

視篩選的需求而定,您可能也需要覆寫其他方法。

媒體類型

此篩選器的輸入針腳不會建議任何媒體類型;它依賴上游篩選來建議連線的媒體類型。 此設計的原因是在大部分情況下,上游篩選可以提供格式的詳細資訊。 例如,使用視訊格式時,上游篩選會知道視訊維度和畫面播放速率,而轉換篩選準則則無法判斷這項資訊。 如果您想要變更此行為,請覆寫輸入針腳的 GetMediaType 方法。 當上游篩選建議媒體類型時,輸入針腳會呼叫篩選的 CheckInputType 方法, (純虛擬) 。

在連接輸入針腳之前,輸出針腳會拒絕所有連線,而且不會傳回任何慣用的媒體類型。 連接輸入針腳之後,輸出針腳會藉由呼叫篩選的 GetMediaType 方法傳回慣用類型清單。 它會透過篩選的 CheckTransform 方法檢查連線的輸出類型。 (這兩種方法都是單純的 virtual.) 通常,輸入類型會部分決定可接受的輸出類型。

視篩選準則而定,您可能想要註冊某些篩選支援的媒體類型,讓 篩選對應程式 物件可以找到您的篩選。 如需詳細資訊,請參閱 如何註冊 DirectShow 篩選

串流

這個類別不會將輸出資料排入佇列。 每個輸出範例都會在 IMemInputPin::Receive 方法內傳遞。 Receive方法會呼叫篩選的Transform方法, (純虛擬) 來處理資料。

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

受保護的成員變數 Description
m_bEOSDelivered 旗標,指出篩選是否已傳送串流結束通知。
m_bSampleSkipped 旗標,指出是否已卸載最新的樣本。
m_bQualityChanged 指出品質是否已變更的旗標。
m_csFilter 保護篩選狀態的重要區段。
m_csReceive 保護串流狀態的重要區段。
m_pInput 輸入釘選的指標。
m_pOutput 輸出釘選的指標。
公用方法 Description
CTransformFilter 建構函式方法。
~ CTransformFilter 解構函式方法。
GetPinCount 擷取篩選上的針腳數目。 虛擬。
GetPin 擷取針腳。 虛擬。
Transform 轉換輸入範例以產生輸出範例。 虛擬。
StartStreaming 當篩選準則切換至暫停狀態時呼叫。 虛擬。
StopStreaming 篩選切換至停止狀態時呼叫。 虛擬。
AlterQuality 通知篩選要求品質變更。 虛擬。
SetMediaType 在其中一個篩選釘選上設定媒體類型時呼叫。 虛擬。
CheckConnect 判斷針腳連接是否適合。 虛擬。
BreakConnect 從連接釋放針腳。 虛擬。
CompleteConnect 完成針腳連線。 虛擬。
接收 接收媒體範例、處理它,並將輸出範例傳遞至下游篩選。 虛擬。
InitializeOutputSample 擷取新的輸出範例,並將其初始化。
EndOfStream 通知篩選準則,輸入針腳不會有其他資料。 虛擬。
BeginFlush 開始排清作業。 虛擬。
EndFlush 結束排清作業。 虛擬。
NewSegment 通知篩選準則,此呼叫之後收到的媒體範例會分組為區段。 虛擬。
純虛擬方法 Description
CheckInputType 檢查指定的媒體類型是否可接受輸入。
CheckTransform 檢查輸入媒體類型是否與輸出媒體類型相容。
DecideBufferSize 設定輸出針腳的緩衝區需求。
GetMediaType 擷取輸出針腳的慣用媒體類型。
IMediaFilter 方法 Description
停止 停止篩選。
暫停 暫停篩選。
IBaseFilter 方法 Description
FindPin 擷取具有指定識別碼的針腳。

規格需求

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