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