步驟 1: 選擇基類

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

這是 撰寫轉換篩選器教學課程的步驟 1。

假設您決定撰寫篩選而非 DMO,第一個步驟是選擇要使用哪一個基類。 下列類別適用于轉換篩選:

  • CTransformFilter 是專為使用個別輸入和輸出緩衝區的轉換篩選所設計。 這種篩選有時稱為複製轉換篩選。 當複製轉換篩選收到輸入範例時,它會將新資料寫入輸出範例,並將輸出範例傳遞至下一個篩選。

  • CTransInPlaceFilter 是針對修改原始緩衝區中資料的篩選所設計,也稱為「就地轉換篩選」。 當異地篩選收到樣本時,它會變更該樣本內的資料,並傳遞相同的範例下游。 篩選準則的輸入釘選和輸出釘選一律會與相符的媒體類型連線。

  • CVideoTransformFilter 主要是針對視訊解碼器所設計。 它衍生自 CTransformFilter,但包含當下游轉譯器落後時卸載畫面的功能。

  • CBaseFilter 是泛型篩選類別。 此清單中的其他類別全都衍生自 CBaseFilter。 如果兩者都不適用,您可以回復此類別。 不過,此類別也需要您大部分的工作。

  • ![重要]

    就地視訊轉換可能會對轉譯效能造成重大影響。 就地轉換需要在緩衝區上進行讀取-修改-寫入作業。 如果記憶體位於圖形卡上,讀取作業會大幅變慢。 此外,如果您未仔細實作,即使複製轉換也會造成非預期的讀取作業。 因此,如果您撰寫視訊轉換,您應該一律執行效能測試。

     

針對 RLE 編碼器範例,最佳選擇是 CTransformFilterCVideoTransformFilter。 事實上,它們之間的差異主要是內部的,因此可以輕鬆地從一個轉換成另一個。 因為媒體類型在兩個針腳上必須不同, 所以 CTransInPlaceFilter 類別不適用於此篩選。 此範例將使用 CTransformFilter

下一 步:步驟 2。宣告篩選類別

撰寫 DirectShow 篩選