Udostępnij za pośrednictwem


Krok 2. Deklarowanie klasy filtru

[Funkcja skojarzona z tą stroną, DirectShow, jest starszą funkcją. Zostało to zastąpione przez MediaPlayer, IMFMediaEngineoraz Audio/Video Capture w Media Foundation. Te funkcje zostały zoptymalizowane pod kątem systemów Windows 10 i Windows 11. Firma Microsoft zdecydowanie zaleca, aby nowy kod używał MediaPlayer, IMFMediaEngine i Audio/Video Capture w programie Media Foundation zamiast DirectShow, jeśli to możliwe. Firma Microsoft sugeruje, że istniejący kod, który używa starszych interfejsów API, należy przepisać go do korzystania z nowych interfejsów API, jeśli to możliwe.]

To jest krok 2 samouczka Pisanie filtrów przekształceń.

Zacznij od zadeklarowania klasy C++, która dziedziczy klasę bazową:

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

Każda z klas filtrów ma skojarzone klasy pinów. W zależności od konkretnych potrzeb filtru może być konieczne zastąpienie klas pinów. W przypadku CTransformFilter, piny delegują większość swojej pracy do filtra, więc prawdopodobnie nie musisz zastępować pinów.

Musisz wygenerować unikatowy identyfikator CLSID dla filtru. Możesz użyć narzędzia Guidgen lub Uuidgen; nigdy nie kopiuj istniejącego GUID. Istnieje kilka sposobów deklarowania identyfikatora CLSID. W poniższym przykładzie użyto makra 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"

Następnie napisz metodę konstruktora dla filtru:

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

Zwróć uwagę, że jednym z parametrów konstruktora CTransformFilter jest zdefiniowany wcześniej identyfikator CLSID.

Następnie: Krok 3. Obsługa negocjacji typów mediów.

Pisanie filtrów DirectShow