Mostrare un segnale di test video mediante il Componente gb.media

Da Gambas-it.org - Wikipedia.

Per mostrare un segnale di test video mediante il Componente gb.media all'interno della superficie di un oggetto posto sul Form, è possibile adottare il seguente semplice codice:

Private pl As MediaPipeline


Public Sub Form_Open()
 
 Dim da As DrawingArea
 Dim src, xim As MediaControl
    
' Crea una "DrawingArea" come oggetto GUI da usare per l'uscita video:
  With da = New DrawingArea(Me)
    .X = 10
    .Y = 10
    .W = 320
    .H = 240
    .Background = Color.Transparent
  End With
  
  pl = New MediaPipeline
  
  src = New MediaControl(pl, "videotestsrc")
  xim = New MediaControl(pl, "ximagesink")
  
' Imposta la superficie dell'Oggetto, ove sarà mostrato il segnale di controllo video:
  xim.SetWindow(da)
  
  src.LinkTo(xim)
  
End


Public Sub Button1_Click()
  
  pl.Play()
  
End


Volendo invece ottenere un effetto di test video-audio, si potranno utilizzare due Pipeline di GStreamer: una dedicata alla gestione del test video, che sarà mostrato in una finestra esterna automaticamente generata dalle risorse di GStreamer; l'altra è invece dedicata alla gestione del test audio, per il quale sarà emesso un tono continuo.

Mostriamo un esempio questa volta con un'applicazione a riga di comando:

Public Sub Main()
 
 Dim pl1, pl2 As Mediapipeline
 Dim src1, src2, con, res, snk1, snk2 As MediaControl
   
' "Pipeline" dedicata al video:
  pl1 = New MediaPipeline
  src1 = New MediaControl(pl1, "videotestsrc")
  snk1 = New MediaControl(pl1, "ximagesink")
  src1.LinkTo(snk1)
  
' "Pipeline" dedicata all'audio:
  pl2 = New MediaPipeline
  src2 = New MediaControl(pl2, "audiotestsrc")
  con = New MediaControl(pl2, "audioconvert")
  res = New MediaControl(pl2, "audioresample")
  snk2 = New MediaControl(pl2, "alsasink")
  src2.LinkTo(con)
  con.LinkTo(res)
  res.LinkTo(snk2)
  
  pl1.play()
  pl2.play()
  
  Do
    Wait 0.01
  Loop
  
End

Il precedente codice, ma il test-video sarà dinamico e verrà mostrato all'interno di una "DrawingArea" usando il Metodo ".SetWindow()" della Classe MediaControl:

Public Sub Button1_Click()
 
 Dim pl1, pl2 As Mediapipeline
 Dim src1, src2, con, res, snk1, snk2 As MediaControl
  
' "Pipeline" dedicata al video:
 pl1 = New MediaPipeline
 src1 = New MediaControl(pl1, "videotestsrc")
 src1["is-live"] = True
 src1["horizontal-speed"] = 1
 snk1 = New MediaControl(pl1, "xvimagesink")
 src1.LinkTo(snk1)
 snk1.SetWindow(drawingArea1)

' "Pipeline" dedicata all'audio:
 pl2 = New MediaPipeline
 src2 = New MediaControl(pl2, "audiotestsrc")
 con = New MediaControl(pl2, "audioconvert")
 res = New MediaControl(pl2, "audioresample")
 snk2 = New MediaControl(pl2, "autoaudiosink")
 src2.LinkTo(con)
 con.LinkTo(res)
 res.LinkTo(snk2)

 pl1.play()
 pl2.play()

 Do
   Wait 0.01
 Loop

End