Freigeben über


Einführung in die Filterbasisklassen

[Bei dem dieser Seite zugeordneten Feature DirectShow handelt es sich um ein Legacyfeature. Es wurde von MediaPlayer, IMFMediaEngine sowie der Audio- und Videoaufnahme in Media Foundation abgelöst. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt für neuen Code nach Möglichkeit dringend die Verwendung von MediaPlayer, IMFMediaEngine sowie der Audio- und Videoaufnahme in Media Foundation anstelle von DirectShow. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, wenn möglich umgeschrieben wird, um die neuen APIs zu verwenden.]

In diesem Artikel wird die Microsoft DirectShow-Basisklassenbibliothek beschrieben. Diese Bibliothek ist für Filterentwickler vorgesehen, aber Anwendungsautoren finden möglicherweise einige der Hilfsklassen und Debugging-Dienstprogramme hilfreich. Die Basisklassenbibliothek ist jedoch für die DirectShow-Programmierung nicht erforderlich.

In den folgenden Abschnitten werden die wichtigsten Basisklassen in der Bibliothek zusammengefasst.

COM-Objektklassen

Die folgenden Klassen unterstützen die Erstellung von COM-Objekten:

Klasse BESCHREIBUNG
CBaseObject- Base-Objektklasse.
CUnknown- Implementiert die IUnknown-Schnittstelle .

 

Die meisten DirectShow-Klassen werden von CBaseObject abgeleitet. Diese Klasse bietet Unterstützung beim Debuggen, indem die Anzahl aller aktiven Objekte in der DLL zur Laufzeit beibehalten wird. In Debugbuilds bestätigt die DLL, ob sie entladen wird, während die Objektanzahl größer als 0 ist. Dies erleichtert das Auffinden von Lecks, die durch Referenzzählungsprobleme verursacht werden.

Alle Basisklassen, die COM-Schnittstellen unterstützen, werden von CUnknown abgeleitet, die CBaseObject erbt. Die CUnknown-Klasse unterstützt Verweiszählungen, QueryInterface und Aggregation. Weitere Informationen finden Sie unter "Implementieren von IUnknown".

Filtern und Anheften von Klassen

Die folgenden Klassen unterstützen die Erstellung von DirectShow-Filter- und Pinobjekten:

Klasse BESCHREIBUNG
CBaseFilter- Basisklasse für Filter. Implementiert die IBaseFilter-Schnittstelle .
CBasePin- Basisklasse für Pins. Implementiert die IPin- und IQualityControl-Schnittstellen .
CBaseInputPin- Basisklasse für Eingabe-Pins, die den lokalen Speichertransport verwenden. Implementiert die IMemInputPin-Schnittstelle . Diese Klasse wird von CBasePin abgeleitet.
CBaseOutputPin- Basisklasse für Ausgabe-Pins, die IMemInputPin-Verbindungen verwenden. Diese Klasse wird von CBasePin abgeleitet.

 

Die folgenden Klassen sind hilfreich für das Erstellen speziellerer Filtertypen:

Klasse BESCHREIBUNG
CSource- Basisklasse für Quellfilter. Diese Klasse wurde für die Erzeugung von Push-Quellen entwickelt. Es eignet sich nicht für Pullquellen, z. B. Dateileser. Verwenden Sie die CSourceStream-Klasse , um Ausgabe-Pins für diese Klasse zu erstellen.
CTransformFilter- Basisklasse für Transformationsfilter. Diese Klasse kopiert die Daten. Die Pins für diese Klasse sind CTransformInputPin und CTransformOutputPin.
CTransInPlaceFilter- Basisklasse für Transformationsfilter, die keine Daten kopieren. Diese Klasse führt die Datenverarbeitung direkt an den Eingabedaten durch, bevor sie weitergeleitet werden. Die Pins für diese Klasse sind CTransInPlaceInputPin und CTransInPlaceOutputPin.
CVideoTransformFilter- Basisklasse für Videotransformationsfilter. Diese Klasse wird von CTransformFilter abgeleitet und bietet Unterstützung für die Qualitätskontrolle.
CBaseRenderer- Basisklasse für Rendererfilter. Der Eingabepin für diese Klasse ist CRendererInputPin.
CBaseVideoRenderer Basisklasse für Videorenderer. Diese Klasse wird von CBaseRenderer abgeleitet.

 

Um diese Klassen zu verwenden, müssen Sie Ihre eigene Klasse ableiten und Code schreiben, um die für Den Filter spezifische Funktionalität zu unterstützen. Je spezieller die Basisklasse ist, desto weniger Code müssen Sie in Ihrer abgeleiteten Klasse schreiben.

Hilfsobjekte

Die folgenden Klassen implementieren Hilfsobjekte, die von Filtern und Pins verwendet werden. Die meisten dieser Klassen können verwendet werden, ohne neue Klassen daraus abzuleiten:

Klasse BESCHREIBUNG
CPullPin- Hilfsobjekt für Eingangs-Pins bei Parserfiltern. Unterstützt IAsyncReader-Verbindungen mit Pullquellen.
COutputQueue Hilfsobjekt für Ausgabe-Pins, die Datenproben in die Warteschlange eines Arbeitsthreads stellen.
CSourceSeeking- Hilfeobjekt zur Durchführung von Suchvorgängen auf einem Quellfilter mit genau einem Ausgangs-Pin. (Diese Klasse ist nicht für Filter mit mehreren Pins wie Parsern ausgelegt.)
CEnumPins Enumerator-Objekt zum Aufzählen von Pins für einen Filter. Implementiert die IEnumPins-Schnittstelle .
CEnumMediaTypes Enumerator-Objekt zum Aufzählen bevorzugter Medientypen auf einem Pin. Implementiert die IEnumMediaTypes-Schnittstelle .
CMemAllocator- Speicherzuordnungsobjekt. Implementiert die IMemAllocator-Schnittstelle .
CMediaSample- Medienbeispielobjekt. Implementiert die IMediaSample2-Schnittstelle .
CBaseReferenceClock- Basisklasse für Referenzuhren. Implementiert die IReferenceClock-Schnittstelle .
CMediaType- Hilfsobjekt zum Bearbeiten AM_MEDIA_TYPE Strukturen.