Etapa 2. Declarar a classe filter

[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]

Esta é a etapa 2 do tutorial Escrevendo filtros de transformação.

Comece declarando uma classe C++ que herda a classe base:

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

Cada uma das classes de filtro tem classes de pin associadas. Dependendo das necessidades específicas do filtro, talvez seja necessário substituir as classes de pino. No caso de CTransformFilter, os pinos delegam a maior parte de seu trabalho para o filtro, portanto, você provavelmente não precisa substituir os pinos.

Você deve gerar um CLSID exclusivo para o filtro. Você pode usar o utilitário Guidgen ou Uuidgen; nunca copie um GUID existente. Há várias maneiras de declarar um CLSID. O exemplo a seguir usa a 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"

Em seguida, escreva um método de construtor para o filtro:

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

Observe que um dos parâmetros para o construtor CTransformFilter é o CLSID definido anteriormente.

Próximo: Etapa 3. Suporte à Negociação de Tipo de Mídia.

Escrevendo filtros do DirectShow