Freigeben über


CTransformFilter-Klasse

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

ctransformfilter-Klassenhierarchie

Die CTransformFilter -Klasse ist eine Basisklasse zum Implementieren von Transformationsfiltern. Diese Klasse ist für die Implementierung eines Transformationsfilters mit einem Eingabe- und einem Ausgabestift konzipiert. Es verwendet separate Zuteilungen für den Eingabenadel und den Ausgabenadel. Verwenden Sie die CTransInPlaceFilter-Klasse , um einen Filter zu erstellen, der Daten direkt verarbeitet.

Dieser Filter verwendet die CTransformInputPin-Klasse als Eingabenadel und die CTransformOutputPin-Klasse für den Ausgabepin. In der Regel müssen Sie diese Pinklassen nicht außer Kraft setzen. Die meisten Pinmethoden rufen entsprechende Methoden für die CTransformFilter -Klasse auf, sodass Sie die Filtermethoden bei Bedarf überschreiben können. Der Filter erstellt beide Pins in der CTransformFilter::GetPin-Methode . Wenn Sie die Pinklassen überschreiben, müssen Sie GetPin überschreiben, um Ihre benutzerdefinierten Pins zu erstellen.

Um diese Klasse zu verwenden, leiten Sie eine neue Klasse von ab CTransformFilter , und implementieren Sie die folgenden Methoden:

Abhängig von den Anforderungen Ihres Filters müssen Sie möglicherweise auch andere Methoden außer Kraft setzen.

Medientypen

Der Eingabenadel dieses Filters schlägt keine Medientypen vor. Es basiert auf dem Upstream-Filter, um die Medientypen für die Verbindung vorzuschlagen. Der Grund für diesen Entwurf ist, dass der Upstream-Filter in den meisten Fällen weitere Informationen zum Format bereitstellen kann. Bei Videoformaten kennt der Upstream-Filter beispielsweise die Videodimensionen und die Bildrate, während der Transformationsfilter keine Möglichkeit hat, diese Informationen zu bestimmen. Wenn Sie dieses Verhalten ändern möchten, überschreiben Sie die GetMediaType-Methode der Eingabenadel. Wenn der Upstream-Filter einen Medientyp vorschlägt, ruft der Eingabenadel die CheckInputType-Methode des Filters auf (rein virtuell).

Bis der Eingabepin verbunden ist, lehnt der Ausgabepin alle Verbindungen ab und gibt keine bevorzugten Medientypen zurück. Nachdem der Eingabepin verbunden ist, gibt der Ausgabepin eine Liste der bevorzugten Typen zurück, indem die GetMediaType-Methode des Filters aufgerufen wird. Es überprüft ausgabetypen auf die Verbindung über die CheckTransform-Methode des Filters. (Beide Methoden sind rein virtuell.) In der Regel bestimmt der Eingabetyp teilweise die zulässigen Ausgabetypen.

Abhängig vom Filter können Sie einige der unterstützten Medientypen des Filters registrieren, damit das Filterzuordnungsobjekt Ihren Filter finden kann. Weitere Informationen finden Sie unter Registrieren von DirectShow-Filtern.

Streaming

Diese Klasse stellt die Ausgabedaten nicht in die Warteschlange. Jedes Ausgabebeispiel wird innerhalb der IMemInputPin::Receive-Methode übermittelt. Die Receive-Methode ruft die Transform-Methode (ebenfalls rein virtuell) des Filters auf, um die Daten zu verarbeiten.

Weitere Informationen zur Verwendung dieser Klasse finden Sie unter Schreiben von Transformationsfiltern.

Geschützte Membervariablen Beschreibung
m_bEOSDelivered Flag, das angibt, ob der Filter eine Streamendebenachrichtigung gesendet hat.
m_bSampleSkipped Flag, das angibt, ob das letzte Beispiel gelöscht wurde.
m_bQualityChanged Flag, das angibt, ob sich die Qualität geändert hat.
m_csFilter Kritischer Abschnitt, der den Filterstatus schützt.
m_csReceive Kritischer Abschnitt, der den Streamingstatus schützt.
m_pInput Zeiger auf den Eingabenadel.
m_pOutput Zeiger auf den Ausgabenadel.
Öffentliche Methoden Beschreibung
CTransformFilter Konstruktormethode.
~ CTransformFilter Destruktormethode.
GetPinCount Ruft die Anzahl der Pins für den Filter ab. Virtuellen.
GetPin Ruft einen Pin ab. Virtuellen.
Transform Transformiert ein Eingabebeispiel, um ein Ausgabebeispiel zu erstellen. Virtuellen.
StartStreaming Wird aufgerufen, wenn der Filter in den angehaltenen Zustand wechselt. Virtuellen.
StopStreaming Wird aufgerufen, wenn der Filter in den Zustand beendet wechselt. Virtuellen.
AlterQuality Benachrichtigt den Filter, dass eine Qualitätsänderung angefordert wird. Virtuellen.
SetMediaType Wird aufgerufen, wenn der Medientyp auf einer der Pins des Filters festgelegt ist. Virtuellen.
CheckConnect Bestimmt, ob eine Pinverbindung geeignet ist. Virtuellen.
BreakConnect Gibt einen Pin von einer Verbindung frei. Virtuellen.
CompleteConnect Schließt eine Pinverbindung ab. Virtuellen.
Empfangen Empfängt ein Medienbeispiel, verarbeitet es und übermittelt ein Ausgabebeispiel an den Downstreamfilter. Virtuellen.
InitializeOutputSample Ruft ein neues Ausgabebeispiel ab und initialisiert es.
EndOfStream Benachrichtigt den Filter, dass vom Eingabenadel keine zusätzlichen Daten erwartet werden. Virtuellen.
BeginFlush Startet einen Löschvorgang. Virtuellen.
EndFlush Beendet einen Löschvorgang. Virtuellen.
NewSegment Benachrichtigt den Filter, dass Medienbeispiele, die nach diesem Aufruf empfangen wurden, als Segment gruppiert sind. Virtuellen.
Reine virtuelle Methoden Beschreibung
CheckInputType Überprüft, ob ein angegebener Medientyp für die Eingabe akzeptabel ist.
CheckTransform Überprüft, ob ein Eingabemedientyp mit einem Ausgabemedientyp kompatibel ist.
EntscheidenBufferSize Legt die Pufferanforderungen des Ausgabepins fest.
GetMediaType Ruft einen bevorzugten Medientyp für den Ausgabenadel ab.
IMediaFilter-Methoden Beschreibung
Beenden Beendet den Filter.
Anhalten Hält den Filter an.
IBaseFilter-Methoden Beschreibung
FindPin Ruft den Pin mit dem angegebenen Bezeichner ab.

Anforderungen

Anforderung Wert
Header
Transfrm.h (include Streams.h)
Bibliothek
Strmbase.lib (Einzelhandelsbuilds);
Strmbasd.lib (Debugbuilds)