Freigeben über


Einführung in die Filterbasisklassen

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

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 Debugprogramme nützlich. Die Basisklassenbibliothek ist für die DirectShow-Programmierung jedoch 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 Basisobjektklasse.
CUnknown Implementiert die IUnknown-Schnittstelle .

 

Die meisten DirectShow-Klassen leiten sich von CBaseObject ab. Diese Klasse bietet Unterstützung beim Debuggen, indem die Anzahl aller aktiven Objekte in der DLL zur Laufzeit beibehalten wird. In Debugbuilds gibt die DLL an, wenn sie entladen wird, während die Objektanzahl größer als 0 ist. Dies erleichtert das Auffinden von Lecks, die durch Probleme mit der Referenzzählung verursacht werden.

Alle Basisklassen, die COM-Schnittstellen unterstützen, leiten von CUnknown ab, das CBaseObject erbt. Die CUnknown-Klasse unterstützt verweiszählen, QueryInterface und aggregration. Weitere Informationen finden Sie unter Implementieren von IUnknown.

Filtern und Anheften von Klassen

Die folgenden Klassen unterstützen die Erstellung von DirectShow-Filtern und Anheften von Objekten:

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

 

Die folgenden Klassen sind nützlich, um spezialisiertere Filtertypen zu erstellen:

Klasse BESCHREIBUNG
CSource Basisklasse für Quellfilter. Diese Klasse ist zum Erstellen von Pushquellen konzipiert. Es eignet sich nicht für Pullquellen, z. B. Dateileser. Verwenden Sie die CSourceStream-Klasse , um Ausgabepins für diese Klasse zu erstellen.
CTransformFilter Basisklasse für Transformationsfilter. Diese Klasse führt eine Kopie der Daten durch. 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 für die Eingabedaten aus, bevor sie nachgeschaltet übergeben werden. Die Pins für diese Klasse sind CTransInPlaceInputPin und CTransInPlaceOutputPin.
CVideoTransformFilter Basisklasse für Videotransformationsfilter. Diese Klasse leitet sich von CTransformFilter ab und fügt Unterstützung für die Qualitätskontrolle hinzu.
CBaseRenderer Basisklasse für Rendererfilter. Der Eingabestift für diese Klasse ist CRendererInputPin.
CBaseVideoRenderer Basisklasse für Videorenderer. Diese Klasse wird von CBaseRenderer abgeleitet.

 

Um diese Klassen verwenden zu können, müssen Sie Ihre eigene Klasse ableiten und Code schreiben, um die filterspezifische Funktionalität zu unterstützen. Je spezialisierter die Basisklasse, desto weniger Code müssen Sie in Die abgeleitete 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 Eingabenadeln in Parserfiltern. Unterstützt IAsyncReader-Verbindungen mit Pullquellen.
COutputQueue Hilfsobjekt für Ausgabenadeln, die Beispiele für die Übermittlung in einem Workerthread in die Warteschlange stellen.
CSourceSeeking Hilfeobjekt zum Implementieren der Suche für einen Quellfilter mit genau einem Ausgabenadel. (Diese Klasse ist nicht für Filter mit mehreren Pins, z. B. Parser, konzipiert.)
CEnumPins Enumeratorobjekt zum Auflisten von Pins für einen Filter. Implementiert die IEnumPins-Schnittstelle .
CEnumMediaTypes Enumeratorobjekt zum Auflisten bevorzugter Medientypen an 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.