Diese Klasse implementiert ein GStreamer-Capsfilter-Element. Die Klasse beerbt MediaControl, funktioniert wie ein Lese-/Schreib-Array und ist erzeugbar:
Dim hMediaFilter As MediaFilter hMediaFilter = New MediaFilter ( [ Parent As MediaContainer, Type As String ] ) [ As "EventName" ]
Die Klasse MediaFilter verfügt über die gleichen relevanten Eigenschaften, Methoden und Ereignisse wie die Klasse MediaControl.
Achtung: Für den Plugin-Typ kann seit der Gambas-Version 3.6 dieselbe Syntax für Caps-Filter verwendet werden, die auch das Programm gst-launch verwendet.
Abbildung 23.9.4.2.1: Pipeline mit (Caps-)Filter
Im folgenden Beispiel wird das Filter-Element in der GStreamer-Pipeline beispielsweise so angegeben:
gst-launch-1.0 videotestsrc ! capsfilter caps=video/x-raw,format=GRAY8 ! videoconvert ! autovideosink
oder in der Kurzform:
gst-launch-1.0 videotestsrc ! video/x-raw,format=GRAY8 ! videoconvert ! autovideosink
und so in Gambas kompakt umgesetzt:
Dim hMediaFilter As MediaFilter Dim hParent As MediaControl ... hMediaFilter = New MediaFilter(hParent, "video/x-raw,format=GRAY8")
und ist das Äquivalent zu folgender Syntax:
Dim hMediaFilter As MediaFilter hMediaFilter = New hMediaFilter(hParent, "capsfilter") hMediaFilter["caps"] = "video/x-raw,format=GRAY8"
Im Beispiel 2 wird der folgende GStreamer-Befehl in Gambas umgesetzt, um die Bilder einer lokalen WebCam in einer Größe von 320×240 Pixel – als Teil des Filters – anzuzeigen:
$ gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,width=320,height=240,framerate=30/1 ! videoconvert ! ximagesink
Abbildung 23.9.4.2.2: Video-Anzeige einer localen WebCam in einem separaten Fenster
Der Gambas-Quelltext mit einem Media-Filter ist kurz und wird hier komplett angegeben:
' Gambas class file Private mpPipeline As MediaPipeline Private mcSource As MediaControl Private mcFilter As MediaFilter Private mcConvert As MediaControl Private mcSink As MediaControl Public Sub CreatePipeline() mpPipeline = New MediaPipeline As "hPipeline" mcSource = New MediaControl(mpPipeline, "v4l2src") mcSource["device"] = "/dev/video0" mcFilter = New MediaFilter(mpPipeline, "capsfilter") mcFilter["caps"] = "video/x-raw,width=640,height=480,framerate=30/1" mcConvert = New MediaControl(mpPipeline, "videoconvert") mcSink = New MediaControl(mpPipeline, "xvimagesink") mcSource.LinkTo(mcFilter) mcFilter.LinkTo(mcConvert) mcConvert.LinkTo(mcSink) End Public Sub btnShow_Click() CreatePipeline() mpPipeline.Play() End Public Sub btnStop_Click() If mpPipeline And If mpPipeline.State = Media.Playing Then mpPipeline.Stop() mpPipeline.Close() Endif End
Beachten Sie: Die Anzeige des Bilder der lokalen WebCam erfolgt in einem separaten Fenster.
Artikel