Differenze tra le versioni di "Mostrare un segnale di test video mediante il Componente gb.media"

Da Gambas-it.org - Wikipedia.
 
Riga 19: Riga 19:
 
     .W = 320
 
     .W = 320
 
     .H = 240
 
     .H = 240
    .Background = Color.Transparent
 
 
   End With
 
   End With
 
   With Button1 = New Button(Me) As "Button1"
 
   With Button1 = New Button(Me) As "Button1"
Riga 74: Riga 73:
 
   con.LinkTo(res)
 
   con.LinkTo(res)
 
   res.LinkTo(snk2)
 
   res.LinkTo(snk2)
 
+
 
   pl1.play()
 
   pl1.play()
 
   pl2.play()
 
   pl2.play()
 
+
   Do
+
   While pl2.State = Media.Playing
 
     Wait 0.01
 
     Wait 0.01
   Loop
+
   Wend
    
+
 +
<FONT Color=gray>' ''Essendo stato sollevato l'Evento "Application_Read()", si dovrà usare l'istruzione "Quit" per chiudere completamente il programma:''</font>
 +
   Quit
 +
 +
End
 +
 +
 +
<FONT Color=gray>' ''Ponendo il puntatore del mouse nella console/terminale e premendo il tasto "Invio" della tastiera, si arresterà il programma.''</font>
 +
Public Sub Application_Read()
 +
 +
  pl1.Stop
 +
  pl1.Close
 +
  pl2.Stop
 +
  pl2.Close
 +
 
  End
 
  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'':
+
Come 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()
+
Private pl1 As MediaPipeline
 +
Private pl2 As MediaPipeline
 +
 +
 +
  Public Sub Form_Open()
 +
 +
  Dim drawingArea1 As DrawingArea
 +
  Dim Button1 As Button
 +
 +
  With Me
 +
    .W = 640
 +
    .H = 480
 +
  End With
 
    
 
    
  Dim pl1, pl2 As Mediapipeline
+
<FONT Color=gray>' ''Crea una "DrawingArea" come oggetto GUI da usare per l'uscita video:''</font>
 +
  With drawingArea1 = New DrawingArea(Me)
 +
    .X = 10
 +
    .Y = 10
 +
    .W = 320
 +
    .H = 240
 +
  End With
 +
  With Button1 = New Button(Me) As "Button1"
 +
    .X = Me.W * 0.8
 +
    .Y = Me.H * 0.2
 +
    .W = Me.W * 0.1
 +
    .H = Me.H * 0.2
 +
  End With
 +
 
   Dim src1, src2, con, res, snk1, snk2 As MediaControl
 
   Dim src1, src2, con, res, snk1, snk2 As MediaControl
 
    
 
    
Riga 111: Riga 149:
 
   pl2.play()
 
   pl2.play()
 
   
 
   
  Do
+
End
    Wait 0.01
+
  Loop
+
 +
Public Sub Button1_Click()
 +
 +
  pl1.Stop
 +
  pl1.Close
 +
  pl2.Stop
 +
  pl2.Close
 
   
 
   
 
  End
 
  End

Versione attuale delle 18:31, 14 lug 2024

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 DrawingArea1 As DrawingArea
  Dim Button1 As Button
  Dim src, xim As MediaControl

  With Me
   .W = 640
   .H = 480
 End With
' Crea una "DrawingArea" come oggetto GUI da usare per l'uscita video:
  With DrawingArea1 = New DrawingArea(Me)
    .X = 10
    .Y = 10
    .W = 320
    .H = 240
  End With
  With Button1 = New Button(Me) As "Button1"
    .X = Me.W * 0.8
    .Y = Me.H * 0.2
    .W = Me.W * 0.1
    .H = Me.H * 0.2
  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(DrawingArea1)
  
  src.LinkTo(xim)

  pl.Play()
  
End


Public Sub Button1_Click()
  
  pl.Stop()
  pl.Close()

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()

  While pl2.State = Media.Playing
    Wait 0.01
  Wend 

' Essendo stato sollevato l'Evento "Application_Read()", si dovrà usare l'istruzione "Quit" per chiudere completamente il programma:
  Quit

End


' Ponendo il puntatore del mouse nella console/terminale e premendo il tasto "Invio" della tastiera, si arresterà il programma.
Public Sub Application_Read()

 pl1.Stop
 pl1.Close
 pl2.Stop
 pl2.Close

End

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

Private pl1 As MediaPipeline
Private pl2 As MediaPipeline


Public Sub Form_Open()

  Dim drawingArea1 As DrawingArea
  Dim Button1 As Button

  With Me
    .W = 640
    .H = 480
  End With
 
' Crea una "DrawingArea" come oggetto GUI da usare per l'uscita video:
  With drawingArea1 = New DrawingArea(Me)
    .X = 10
    .Y = 10
    .W = 320
    .H = 240
  End With
  With Button1 = New Button(Me) As "Button1"
    .X = Me.W * 0.8
    .Y = Me.H * 0.2
    .W = Me.W * 0.1
    .H = Me.H * 0.2
  End With

 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()

End


Public Sub Button1_Click()

  pl1.Stop
  pl1.Close
  pl2.Stop
  pl2.Close

End