Inhaltsverzeichnis

23.9.4 MediaFilter (gb.media)

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" ] 

23.9.4.1 Eigenschaften, Methoden und Ereignisse

Die Klasse MediaFilter verfügt über die gleichen relevanten Eigenschaften, Methoden und Ereignisse wie die Klasse MediaControl.

23.9.4.2 Beispiele

23.9.4.2.1 Beispiel 1

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.

BILD1

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"

23.9.4.2.2 Beispiel 2

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

BILD2

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.

Download