Compartir a través de


Paso 2. Declarar la clase Filter

[La característica asociada a esta página, DirectShow, es una característica heredada. Se ha reemplazado por MediaPlayer, IMFMediaEngine y Captura de audio/vídeo en Media Foundation. Esas características se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use MediaPlayer, IMFMediaEngine y Audio/Video Capture en Media Foundation en lugar de DirectShow, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.

Este es el paso 2 del tutorial Escritura de filtros de transformación.

Comience declarando una clase de C++ que hereda la clase base:

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

Cada una de las clases de filtro tiene clases de patillas asociadas. En función de las necesidades específicas del filtro, es posible que tenga que invalidar las clases de anclaje. En el caso de CTransformFilter, las patillas delegan la mayor parte de su trabajo en el filtro, por lo que probablemente no es necesario invalidar las patillas.

Debe generar un CLSID único para el filtro. Puede usar la utilidad Guidgen o Uuidgen; nunca copie un GUID existente. Hay varias maneras de declarar un CLSID. En el ejemplo siguiente se usa 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"

A continuación, escriba un método de constructor para el filtro:

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

Observe que uno de los parámetros del constructor CTransformFilter es el CLSID definido anteriormente.

Siguiente: Paso 3. Compatibilidad con la negociación de tipos de medios.

Escribir filtros directShow