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.
Tematy pokrewne