Share via


Passaggio 2. Dichiarare la classe Filter

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation anziché DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

Questo è il passaggio 2 dell'esercitazione Scrittura di filtri di trasformazione.

Iniziare dichiarando una classe C++ che eredita la classe base:

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

Ognuna delle classi di filtro ha associato classi di pin. A seconda delle esigenze specifiche del filtro, potrebbe essere necessario eseguire l'override delle classi di pin. Nel caso di CTransformFilter, i pin delegano la maggior parte del loro lavoro al filtro, quindi probabilmente non è necessario eseguire l'override dei pin.

È necessario generare un CLSID univoco per il filtro. È possibile usare l'utilità Guidgen o Uuidgen; non copiare mai un GUID esistente. Esistono diversi modi per dichiarare un CLSID. Nell'esempio seguente viene usata la macro 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"

Scrivere quindi un metodo del costruttore per il filtro:

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

Si noti che uno dei parametri del costruttore CTransformFilter è il CLSID definito in precedenza.

Avanti: Passaggio 3. Supportare la negoziazione dei tipi di supporto.

Scrittura di filtri DirectShow