共用方式為


步驟 2. 宣告篩選類別

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

這是教程的步驟 2:撰寫轉換篩選

首先,宣告繼承基類的C++類別:

class CRleFilter : public CTransformFilter
{
    /* Declarations will go here. */
};

每個篩選類別都有相關聯的引腳類別。 視篩選的特定需求而定,您可能需要覆寫 pin 類別。 CTransformFilter時,接點會將大部分的工作委派給過濾器,因此您可能不需要覆寫接點。

您必須為篩選產生唯一的CLSID。 您可以使用 Guidgen 或 Uuidgen 公用程式;永遠不要複製現有的 GUID。 有數種方式可以宣告 CLSID。 下列範例使用 DEFINE_GUID 巨集指令:

[RleFilt.h]
// {1915C5C7-02AA-415f-890F-76D94C85AAF1}
DEFINE_GUID(CLSID_RLEFilter, 
0x1915c5c7, 0x2aa, 0x415f, 0x89, 0xf, 0x76, 0xd9, 0x4c, 0x85, 0xaa, 0xf1);

[RleFilt.cpp]
#include <initguid.h>
#include "RleFilt.h"

接下來,撰寫篩選的建構函式方法:

CRleFilter::CRleFilter()
  : CTransformFilter(NAME("My RLE Encoder"), 0, CLSID_RLEFilter)
{ 
   /* Initialize any private variables here. */
}

請注意,CTransformFilter 建構函式的其中一個參數是稍早定義的 CLSID。

下一步:步驟 3。支援媒體類型協商

撰寫 DirectShow 濾鏡