CTransformFilter-Klasse

Die CTransformFilter -Klasse ist eine Basisklasse zum Implementieren von Transformationsfiltern. Diese Klasse ist für die Implementierung eines Transformationsfilters mit einem Eingabepin und einem Ausgabepin konzipiert. Es werden separate Zuweisungen für den Eingabepin und den Ausgabepin verwendet. Um einen Filter zu erstellen, der Daten direkt verarbeitet, verwenden Sie die CTransInPlaceFilter-Klasse.
Dieser Filter verwendet die CTransformInputPin-Klasse für den Eingabepin und die CTransformOutputPin-Klasse für den Ausgabepin. In der Regel müssen Sie diese Pinklassen nicht überschreiben. Die meisten pin-Methoden rufen entsprechende Methoden für die -Klasse CTransformFilter 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 die folgenden Methoden:
- CTransformFilter::CheckInputType
- CTransformFilter::CheckTransform
- CTransformFilter::D ecideBufferSize
- CTransformFilter::GetMediaType
- CTransformFilter::Transform
Abhängig von den Anforderungen Ihres Filters müssen Sie möglicherweise auch andere Methoden überschreiben.
Medientypen
Der Eingabepin dieses Filters schlägt keine Medientypen vor. es basiert auf dem Upstreamfilter, um die Medientypen für die Verbindung vorzuschlagen. Der Grund für diesen Entwurf ist, dass der Upstreamfilter in den meisten Fällen weitere Informationen zum Format bereitstellen kann. Bei Videoformaten kennt der Upstreamfilter beispielsweise die Videodimensionen und die Bildfrequenz, während der Transformationsfilter keine Möglichkeit hat, diese Informationen zu bestimmen. Wenn Sie dieses Verhalten ändern möchten, überschreiben Sie die GetMediaType-Methode des Eingabepins. Wenn der Upstreamfilter einen Medientyp vorschlägt, ruft der Eingabepin die CheckInputType-Methode des Filters (rein virtuell) auf.
Solange der Eingabepin nicht verbunden ist, verweigert der Ausgabepin alle Verbindungen und gibt keine bevorzugten Medientypen zurück. Nachdem der Eingabepin verbunden wurde, gibt der Ausgabepin eine Liste der bevorzugten Typen zurück, indem die GetMediaType-Methode des Filters aufruft. Die Ausgabetypen für die Verbindung werden über die CheckTransform-Methode des Filters überprüft. (Beide Methoden sind rein virtuell.) In der Regel bestimmt der Eingabetyp teilweise die zulässigen Ausgabetypen.
Je nach Filter können Sie einige der vom Filter unterstützten Medientypen 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 Transformationsmethode des Filters (auch rein virtuell) auf, um die Daten zu verarbeiten.
Weitere Informationen zur Verwendung dieser Klasse finden Sie unter Writing Transform Filters ( Schreiben von Transformationsfiltern).
| Geschützte Membervariablen | Beschreibung |
|---|---|
| m _ bEOSDelivered | Flag, das angibt, ob der Filter eine Benachrichtigung zum Streamende 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 Filterzustand schützt. |
| m _ csReceive | Abschnitt "Kritisch", der den Streamingzustand schützt. |
| m _ pInput | Zeiger auf den Eingabepin. |
| m _ pOutput | Zeiger auf den Ausgabepin. |
| Öffentliche Methoden | Beschreibung |
| CTransformFilter | Konstruktormethode. |
| ~ CTransformFilter | Destruktormethode. |
| GetPinCount | Ruft die Anzahl der Stecknadeln im Filter ab. Virtuellen. |
| GetPin | Ruft eine Stecknadel ab. Virtuellen. |
| Transform | Transformiert ein Eingabebeispiel, um ein Ausgabebeispiel zu erzeugen. 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 an einem der Pins des Filters festgelegt wird. Virtuellen. |
| CheckConnect | Bestimmt, ob eine Stecknadelverbindung geeignet ist. Virtuellen. |
| BreakConnect | Gibt eine Stecknadel aus einer Verbindung frei. Virtuellen. |
| CompleteConnect | Schließt eine Stecknadelverbindung ab. Virtuellen. |
| Erhalten | Empfängt ein Medienbeispiel, verarbeitet es und übergibt ein Ausgabebeispiel an den Downstreamfilter. Virtuellen. |
| InitializeOutputSample | Ruft ein neues Ausgabebeispiel ab und initialisiert es. |
| EndOfStream | Benachrichtigt den Filter, dass keine zusätzlichen Daten vom Eingabepin erwartet werden. Virtuellen. |
| BeginFlush | Startet einen Leerungsvorgang. Virtuellen. |
| EndFlush | Beendet einen Leerungsvorgang. Virtuellen. |
| NewSegment | Benachrichtigt den Filter, dass medienbeispiele, die nach diesem Aufruf empfangen wurden, als Segment gruppiert werden. Virtuellen. |
| Rein 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. |
| DecideBufferSize | Legt die Pufferanforderungen des Ausgabepins fest. |
| GetMediaType | Ruft einen bevorzugten Medientyp für den Ausgabepin 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 |
|
| Bibliothek |
|