Compartir a través de


Declaración de información de filtro

[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.

El primer paso es declarar la información de filtro, si es necesario. DirectShow define las siguientes estructuras para describir filtros, patillas y tipos de medios:

Estructura Descripción
AMOVIESETUP_FILTER Describe un filtro.
AMOVIESETUP_PIN Describe un pin.
AMOVIESETUP_MEDIATYPE Describe un tipo de medio.

 

Estas estructuras están anidadas. La estructura AMOVEIESETUP_FILTER tiene un puntero a una matriz de estructuras de AMOVIESETUP_PIN y cada uno de ellos tiene un puntero a una matriz de estructuras de AMOVEIESETUP_MEDIATYPE . En conjunto, estas estructuras proporcionan suficiente información para la interfaz IFilterMapper2 para localizar un filtro. No son una descripción completa de un filtro. Por ejemplo, si el filtro crea varias instancias del mismo pin, debe declarar solo una estructura de AMOVIESETUP_PIN para ese pin. Además, no se requiere un filtro para admitir todas las combinaciones de tipos de medios que registra; tampoco es necesario registrar todos los tipos de medios que admita.

Declare las estructuras de configuración como variables globales dentro del archivo DLL. En el ejemplo siguiente se muestra un filtro con un pin de salida:

static const WCHAR g_wszName[] = L"Some Filter";

AMOVIESETUP_MEDIATYPE sudMediaTypes[] = {
    { &MEDIATYPE_Video, &MEDIASUBTYPE_RGB24 },
    { &MEDIATYPE_Video, &MEDIASUBTYPE_RGB32 },
};

AMOVIESETUP_PIN sudOutputPin = {
    L"",            // Obsolete, not used.
    FALSE,          // Is this pin rendered?
    TRUE,           // Is it an output pin?
    FALSE,          // Can the filter create zero instances?
    FALSE,          // Does the filter create multiple instances?
    &GUID_NULL,     // Obsolete.
    NULL,           // Obsolete.
    2,              // Number of media types.
    sudMediaTypes   // Pointer to media types.
};

AMOVIESETUP_FILTER sudFilterReg = {
    &CLSID_SomeFilter,      // Filter CLSID.
    g_wszName,              // Filter name.
    MERIT_NORMAL,           // Merit.
    1,                      // Number of pin types.
    &sudOutputPin           // Pointer to pin information.
};

El nombre del filtro se declara como una variable global estática, ya que se usará de nuevo en otro lugar.

Cómo registrar filtros directShow