Schritt 2: Deklarieren der Filterklasse

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

Dies ist Schritt 2 des Tutorials Schreiben von Transformationsfiltern.

Beginnen Sie mit dem Deklarieren einer C++-Klasse, die die Basisklasse erbt:

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

Jede Filterklasse verfügt über zugeordnete Pinklassen. Abhängig von den spezifischen Anforderungen Ihres Filters müssen Sie möglicherweise die Anheftklassen außer Kraft setzen. Im Fall von CTransformFilter delegieren die Pins den Größten Teil ihrer Arbeit an den Filter, sodass Sie die Pins wahrscheinlich nicht überschreiben müssen.

Sie müssen eine eindeutige CLSID für den Filter generieren. Sie können das Guidgen- oder Uuidgen-Hilfsprogramm verwenden. Kopieren Sie niemals eine vorhandene GUID. Es gibt mehrere Möglichkeiten, eine CLSID zu deklarieren. Im folgenden Beispiel wird das makro DEFINE_GUID verwendet:

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

Schreiben Sie als Nächstes eine Konstruktormethode für den Filter:

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

Beachten Sie, dass einer der Parameter für den CTransformFilter-Konstruktor die zuvor definierte CLSID ist.

Weiter: Schritt 3. Medientypverhandlung unterstützen.

Schreiben von DirectShow-Filtern