Autore Topic: [RISOLTO] gambas media .... video non confinato nella drawing area  (Letto 776 volte)

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
come da titolo la riproduzione del video mi prende tutto il form invece che essere confinato nella area opportuna ....

copiando un po' dal wiki di vuott:
Codice: [Seleziona]
' Gambas class file


Private mp As New MediaPlayer As "mp"
Private uscitaVideo As MediaControl
Private iVis As Integer   ' Modificando il valore della seguente variabile integer si modifica anche il tipo di visualizzazione

poi in form_open:
Codice: [Seleziona]
'ora inizializza il media player per renderizzare il filmato
  iVis = 1  'semplice riproduzione senza effetti
  
  ' Istanzia il controllo di uscita video da usare. In questo caso sarà "ximagesink",
  ' un "videosink" basato sullo standard X, e che è esso stesso un plug-in:
  uscitaVideo = New MediaControl(mp, "ximagesink")
  
  ' Imposta il controllo perche' disegni i fotogrammi su un particolare oggetto:
  uscitaVideo.SetWindow(DrawingArea_Preview, 0, 0, DrawingArea_Preview.Width, DrawingArea_Preview.Height)
 'uscitaVideo.SetWindow(PictureBox1.Handle)
  
  ' gli dico quale e' il file da riprodurre:
  mp.URL = Media.URL(DrawingArea_Preview.Tag)
  
  'e gli dico che lo deve "sparare" su uscitavideo
  mp.Video.Output = uscitaVideo
  
  'inizializzo la barra di scorrimento
  Slider_Position.MaxValue = CInt(mp.Duration) + 1

ma poi se premo il bottone play:
Codice: [Seleziona]
   mp.Play
  timer_posizione.Start

... IL FILMATO MI PRENDE TUTTA L'AREA DELLA FINESTRA DEL FORM .....


screenshot prima del play e dopo in allegato
« Ultima modifica: 23 Maggio 2013, 00:08:57 da allegfede »
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.316
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: gambas media .... video non confinato nella drawing area
« Risposta #1 il: 10 Maggio 2013, 20:52:30 »
come da titolo la riproduzione del video mi prende tutto il form invece che essere confinato nella area opportuna ....
..... se premo il bottone play:

... IL FILMATO MI PRENDE TUTTA L'AREA DELLA FINESTRA DEL FORM .....


Ricordo che c'ho dovuto lottare parecchio su questo problema per risolverlo. La questione è un po' complessa... ti suggerisco di vedere anche il codice del mio gbmedia:    :-X
http://www.gambas-it.org/smf/index.php?topic=2450.0
In questo programma i video appaiono in una finestra che si apre all'esterno del programma, affinché la visibilità sia accettabile, mentre gli effetti di Gstreamer vengono riprodotti in un'area interna al programma. In entrambi i casi, comunque, il form del programma, ove sono posti anche gli altri controlli, è salvaguardato.
Lo so... c'è un po' da sudare  :skull: . Io, ora, non ricordo con precisione i passaggi, ma più o meno è tutto là.

Puoi, ovviamente, dare un'occhiata anche all'esempio di Gambas: MediaPlayer.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re: gambas media .... video non confinato nella drawing area
« Risposta #2 il: 14 Maggio 2013, 18:43:30 »
ho copiato-incollato il tuo esempio nel wiki di cui riporto il codice integrale :D

Codice: [Seleziona]
' Gambas class file

Private mp As New MediaPlayer As "mp"
Private uscitaVideo As MediaControl
Private arrVis As MediaControl[]   ' Un array di variabili di tipo "MediaControl", ossia di vari PlugIn disponibili
Private iVis As Integer   ' Modificando il valore della seguente variabile integer si modifica anche il tipo di visualizzazione

Public Sub _new()

End

Public Sub Form_Open()
avviaPlugin()

' Questa ripetizione ci evita di dover "incrementare" automaticamente il valore della variabile "iVis":
   iVis = 2
   aggioVis()

' Si dice al MediaControl di mostrare il proprio output (gli effetti video) in uno specifico controllo GUI, solitamente una DrawingArea:
   uscitaVideo.SetWindow(fmain)

   With mp
     .URL = Media.URL("/home/allegfede/Videos/RUZZENENTI.mpg")
     .Play
   End With

   iVis = 1

' Va ad aggiornare la visualizzazione dell'effetto con un plug-in:
   aggioVis()
End

Public Sub avviaPlugin()

' Istanzia il controllo di uscita video da usare. In questo caso sarà "ximagesink",
' un "videosink" basato sullo standard X, e che è esso stesso un plug-in:
   uscitaVideo = New MediaControl(mp, "ximagesink")
 
' Imposta il controllo di uscita video da usare:
   mp.Video.Output = uscitaVideo
 

   arrVis = New MediaControl[]

' Nella variabile array di tipo "MediaControl" vengono aggiunti i diversi PlugIn disponibili.
' Il primo elemento dell'array deve essere sostanzialmente vuoto. Se si sceglie questa opzione, non sarà visualizzato alcun motivo:
   aggiunVis("", "")

' Ecco alcuni disponibili:
   aggiunVis("goom", "Goom")
   aggiunVis("libvisual_bumpscope", "Bump")
   aggiunVis("libvisual_corona", "Corona")
   aggiunVis("libvisual_infinite", "Infinite")
   aggiunVis("libvisual_jakdaw", "Jakdaw")
   aggiunVis("libvisual_jess", "Jess")
' Monoscopio è un plugin che consente di visualizzare una forma d'onda altamente stabilizzata di ingresso audio
   aggiunVis("monoscope", "Mono")
   aggiunVis("libvisual_oinksie", "Oinksie")
   aggiunVis("libvisual_lv_scope", "Scope")
   aggiunVis("spacescope", "Space")
   aggiunVis("spectrascope", "Spectra")
   aggiunVis("synaescope", "Synae")
' Oscilloscopio a forma d'onda semplice:
   aggiunVis("wavescope", "Wave")

   iVis = 1

   aggioVis()

End

Public Sub aggiunVis(tipoPlug As String, titolo As String)
 
 Dim hVis As MediaControl

' La variabile "tipoPlug" contiene il tipo di plug'in...
   If tipoPlug Then hVis = New MediaControl(mp, tipoPlug)
 
' ...che viene aggiunta agli elementi della omogenea variabile array:
   arrVis.Add(hVis)

   Catch
     Error tipoPlug; ": "; Error.Text
 
End

Public Sub aggioVis()

 Dim hVis As MediaControl = arrVis[iVis]

' Imposta il plug-in da utilizzare:
   mp.Video.Visualisation = hVis

' Anche qui viene impostata la "DrawingArea", ove mostrare gli effetti video:
   uscitaVideo.SetWindow(FMain)
 
End

questo il risultato nella debug window:
Citazione
The program 'testgbmedia2' received an X Window System error.
This probably reflects a bug in the program.
The error was 'BadWindow (invalid Window parameter)'.
  (Details: serial 17 error_code 3 request_code 3 minor_code 0)
  (Note to programmers: normally, X errors are reported asynchronously;
   that is, you will receive the error a while after causing it.
   To debug your program, run it with the --sync command line
   option to change this behavior. You can then get a meaningful
   backtrace from your debugger if you break on the gdk_x_error() function.)


bohhhh
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.316
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: gambas media .... video non confinato nella drawing area
« Risposta #3 il: 14 Maggio 2013, 21:31:29 »
ho copiato-incollato il tuo esempio nel wiki....

questo il risultato nella debug window:

Non saprei.
Il codice era riferito in particolare agli effetti speciali video messi a disposizione dai plugin di Gstreamer; comunque la procedura per l'esecuzione dei file video è simile.

Ad ogni modo la tua annotazione mi ha consentito di apportare dei miglioramenti e correzioni di quel codice (che era un po' precedente rispetto a quello usato per il mio programma gbmedia), creando un piccolo paragrafo specifico per i file audio-video:
http://www.gambas-it.org/wiki/index.php?title=La_gestione_mediante_il_componente_gb.media#Gli_effetti_video_con_i_plug-in
« Ultima modifica: 15 Maggio 2013, 13:37:42 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re: gambas media .... video non confinato nella drawing area
« Risposta #4 il: 15 Maggio 2013, 22:26:18 »
Vuott ma tu hai KDE o Gnome sulla macchina dove fai i test con gambas media?

perche' l'errore me lo genera se metto GB.gui (che switcha sul mio gtk) mentre se forzo gb.qt visualizza su intero form se metto setwindow a fmail oppure non visualizza nulla se metto su drawing area, ma niente errori.

suppongo sia un errore di xwindows su gnome .....
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.316
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: gambas media .... video non confinato nella drawing area
« Risposta #5 il: 15 Maggio 2013, 23:22:03 »
Vuott ma tu hai KDE o Gnome sulla macchina dove fai i test con gambas media?

Io ho Gnome, e imposto sempre i miei progetti con gb.qt4 .
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re: gambas media .... video non confinato nella drawing area
« Risposta #6 il: 16 Maggio 2013, 11:48:36 »
allora ho riutilizzato lo stesso IDENTICO codice impostando il progetto DA ZERO come progetto QT e cosi' funziona perfettamente .....

suppongo sia un baco di gtk ......

SE INVECE "converto" il mio progetto di ingesting da progetto grafico generico (gb.gui) ad QT (ovvero forso l'uso delle QT ma non riscrivo il codice da zero) riesco a disegnare il video nella drawing area SOLO se imposto la proprieta CACHED a true :D

....  ;D .....
« Ultima modifica: 16 Maggio 2013, 12:17:10 da allegfede »
se corri, morirai stanco (motto degli sniper)