Freigeben über


Deklarieren von Filterinformationen

[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde durch MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation ersetzt. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code nach Möglichkeit MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet. Microsoft schlägt vor, vorhandenen Code, der die Legacy-APIs verwendet, um nach Möglichkeit die neuen APIs zu verwenden.]

Der erste Schritt besteht darin, die Filterinformationen bei Bedarf zu deklarieren. DirectShow definiert die folgenden Strukturen zum Beschreiben von Filtern, Pins und Medientypen:

Struktur BESCHREIBUNG
AMOVIESETUP_FILTER Beschreibt einen Filter.
AMOVIESETUP_PIN Beschreibt eine Pin.
AMOVIESETUP_MEDIATYPE Beschreibt einen Medientyp.

 

Diese Strukturen sind geschachtelt. Die AMOVEIESETUP_FILTER-Struktur verfügt über einen Zeiger auf ein Array von AMOVIESETUP_PIN Strukturen, und jede dieser Strukturen verfügt über einen Zeiger auf ein Array von AMOVEIESETUP_MEDIATYPE Strukturen. Zusammen stellen diese Strukturen genügend Informationen bereit, damit die IFilterMapper2-Schnittstelle nach einem Filter suchen kann. Sie sind keine vollständige Beschreibung eines Filters. Wenn der Filter beispielsweise mehrere Instanzen desselben Pins erstellt, sollten Sie nur eine AMOVIESETUP_PIN Struktur für diesen Pin deklarieren. Außerdem ist ein Filter nicht erforderlich, um jede Kombination von Medientypen zu unterstützen, die er registriert. es ist auch nicht erforderlich, jeden unterstützten Medientyp zu registrieren.

Deklarieren Sie die Setupstrukturen als globale Variablen in Ihrer DLL. Das folgende Beispiel zeigt einen Filter mit einem Ausgabenadel:

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.
};

Der Filtername wird als statische globale Variable deklariert, da er an anderer Stelle erneut verwendet wird.

Registrieren von DirectShow-Filtern