CTransformFilter 類別
[與此頁面 相關的功能 DirectShow是舊版功能。 它已被 MediaPlayer、 IMFMediaEngine和 Media Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayer、 IMFMediaEngine 和 音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議盡可能重寫使用舊版 API 的現有程式碼,以使用新的 API。]
類別 CTransformFilter
是實作轉換篩選的基類。 這個類別是專為實作具有一個輸入針腳和一個輸出針腳的轉換篩選所設計。 它會針對輸入針腳和輸出針腳使用不同的配置器。 若要建立就地處理資料的篩選,請使用 CTransInPlaceFilter 類別。
此篩選準則會使用 CTransformInputPin 類別進行輸入釘選,而 CTransformOutputPin 類別則用於其輸出針腳。 一般而言,您不需要覆寫這些針腳類別。 大部分的 pin 方法會在 類別上 CTransformFilter
呼叫對應的方法,因此您可以視需要覆寫篩選方法。 篩選準則會在 CTransformFilter::GetPin 方法中建立這兩個針腳。 如果您覆寫釘選類別,則必須覆寫 GetPin 以建立自訂釘選。
若要使用此類別,請從 CTransformFilter
衍生新的類別,並實作下列方法:
- CTransformFilter::CheckInputType
- CTransformFilter::CheckTransform
- CTransformFilter::D ecideBufferSize
- CTransformFilter::GetMediaType
- CTransformFilter::Transform
視篩選的需求而定,您可能也需要覆寫其他方法。
媒體類型
此篩選器的輸入針腳不會建議任何媒體類型;它依賴上游篩選來建議連線的媒體類型。 此設計的原因是在大部分情況下,上游篩選可以提供格式的詳細資訊。 例如,使用視訊格式時,上游篩選會知道視訊維度和畫面播放速率,而轉換篩選準則則無法判斷這項資訊。 如果您想要變更此行為,請覆寫輸入針腳的 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 | 擷取具有指定識別碼的針腳。 |
規格需求
需求 | 值 |
---|---|
標頭 |
|
程式庫 |
|