Differenze tra le versioni di "Mostrare un segnale di test video mediante il Componente gb.media"
(2 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 5: | Riga 5: | ||
Public Sub Form_Open() | Public Sub Form_Open() | ||
− | Dim | + | Dim DrawingArea1 As DrawingArea |
+ | Dim Button1 As Button | ||
Dim src, xim As MediaControl | Dim src, xim As MediaControl | ||
− | + | ||
+ | With Me | ||
+ | .W = 640 | ||
+ | .H = 480 | ||
+ | End With | ||
<FONT Color=gray>' ''Crea una "DrawingArea" come oggetto GUI da usare per l'uscita video:''</font> | <FONT Color=gray>' ''Crea una "DrawingArea" come oggetto GUI da usare per l'uscita video:''</font> | ||
− | With | + | With DrawingArea1 = New DrawingArea(Me) |
.X = 10 | .X = 10 | ||
.Y = 10 | .Y = 10 | ||
.W = 320 | .W = 320 | ||
.H = 240 | .H = 240 | ||
− | |||
End With | 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 | pl = New MediaPipeline | ||
Riga 23: | Riga 33: | ||
<FONT Color=gray>' ''Imposta la superficie dell'Oggetto, ove sarà mostrato il segnale di controllo video:''</font> | <FONT Color=gray>' ''Imposta la superficie dell'Oggetto, ove sarà mostrato il segnale di controllo video:''</font> | ||
− | xim.SetWindow( | + | xim.SetWindow(DrawingArea1) |
src.LinkTo(xim) | src.LinkTo(xim) | ||
+ | |||
+ | pl.Play() | ||
End | End | ||
Riga 32: | Riga 44: | ||
Public Sub Button1_Click() | Public Sub Button1_Click() | ||
− | pl. | + | pl.Stop() |
− | + | pl.Close() | |
+ | |||
End | End | ||
Riga 60: | Riga 73: | ||
con.LinkTo(res) | con.LinkTo(res) | ||
res.LinkTo(snk2) | res.LinkTo(snk2) | ||
− | + | ||
pl1.play() | pl1.play() | ||
pl2.play() | pl2.play() | ||
− | + | ||
− | + | While pl2.State = Media.Playing | |
Wait 0.01 | Wait 0.01 | ||
− | + | 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 | ||
− | + | 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 | + | 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 | ||
− | + | <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 97: | Riga 149: | ||
pl2.play() | pl2.play() | ||
− | + | End | |
− | + | ||
− | + | ||
+ | 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