Newsgroup: it.comp.java
Titolo: [JMF] Piu' di un VisualComponent

Ciao, spero che qualcuno su questo ng abbia abuto a che fare con 
JavaMediaFramework.
Il mio problema e' che non proprio capito come faccio a "clonare" un 
visual component. Riesco correttamente a creare un player (connesso alla 
mia webcam) ed a visualizzare il visual component ad esso associato 
all'interno di un JFrame. Ora mi piacerebbe avere due visuali distinte, 
una sopra e una sotto. Se nel JFrame aggiungo per due volte lo stesso 
Component, uno dei due sparisce e non si vede. Se faccio chiamate 
multiple alla getVisualComponent, non cambia nulla. Se creo due player 
separati (ma ovviamente attaccati alla stessa DataSource), mi esce 
l'eccezione che mi avverte che "il device e' gia in utilizzo"... Non so 
piu' cosa inventarmi come stringa di ricerca su google...
Help... :'(
Co

 visual component. Riesco correttamente a creare un player (connesso alla 
Cioe' vuoi visualizzare lo stesso DataSource su due component separati che
visualizzano pero' la stessa roba?
Non sono sicuro ma forse potresti creare un CloneableDataSource e da questo
ottenere un altro DataSource (clonato). Ora hai 2 DataSource (il Cloneable
e il clonato) su cui costruire 2 Player e cosi' via. 
Se fermi il ClonableDataSource si fermera' anche il clonato, non vale
viceversa.

 viceversa.
Ho gia' fatto un tentativo con la CloneableDataSource ma invano... 
Adesso sto leggendo tutta la guida JMF per farmi un'idea davvero 
approfondita di questi concetti. mi sono indirizzato verso i 
Processor... estendono Player pare che possano essere usati come 
demultiplexer... Grazie per la rapida risposta, adesso posto un po di 
codice, se hai voglia di dirmi se e' corretto o pieno di vaccate sarebbe 
fantastico...
Co

Corrado ha scritto:

Risolto! Ho capito meglio come funzionao le SourceCloneable e sono 
riuscito a far funzionare il tutto con questo codice...
//Mi sono gia' connesso alla webcam e ne ho ottenuto il DeviceInfo
MediaLocator ml = devInfo.getLocator();
         try {
             //Il mio dataSource originale
             DataSource ds = Manager.createDataSource(ml);
             //Il mio primo clone
             DataSource ds1 = Manager.createCloneableDataSource(ds);
             Player player1 = Manager.createRealizedPlayer(ds1);
             Player player2 = Manager //Il mio secondo clone
                     .createRealizedPlayer(((SourceCloneable) 
ds1).createClone());
             Component visualComponent1 = player1.getVisualComponent();
             Component visualComponent2 = player2.getVisualComponent();
             JPanel p1 = new JPanel();
             p1.add(visualComponent1);
             JPanel p2 = new JPanel();
             p2.add(visualComponent2);
             frame.getContentPane().add(p1, BorderLayout.CENTER);
             frame.getContentPane().add(p2, BorderLayout.SOUTH);
             frame.invalidate();
             frame.pack();
             player1.start();
             player2.start();
         } catch (NoPlayerException e) {
             e.printStackTrace();
         } catch (CannotRealizeException e) {
             e.printStackTrace();
         } catch (IOException e) {
             e.printStackTrace();
         } catch (NoDataSourceException e) {
             e.printStackTrace();
         }
Perooo' c'e' una cosa che mi rimane misteriosa... se ad uno dei due 
player passo il datasource originale e non il clone, il component che 
contiene l'immagine del clone diciamo, risulta completamente nera..... 
questo e' un meccanismo che non e' chiaro...

Tratto da JMF-INTEREST:
try this snippet of code. You are not allowed to work with the original
datasource, only with clones.
private void cloneMyDs(DataSource original)
{
         DataSource clone1, clone2;
         clone1 = Manager.createCloneableDataSource(original);
         clone2 = ((SourceCloneable)clone1).createClone();
         clone1.connect();
         clone1.start();
}
You are not allowed? ok me ne sto, ma perche'?? Sui JavaDoc di JMF 
Manager.createCloneableDataSource e' l'unico metodo NON commentato!!!
Bah...

 questo e' un meccanismo che non e' chiaro...
ci sono molte cose che sono poco chiare. ci sono molti bug.
tieni conte che il framework non e' aggiornato (sic) dal 2003.

marcopar ha scritto:

Purtroppo... eppure leggendo la guida mi e' parso un framework davvero 
ben strutturato e serio... Peccato si per queste zone d'ombra... in ogni 
caso se qlcn fosse interessato a seguirmi in questo piccolo progetto 
apro le iscrizioni! sto pensando di scrivere un software per realizzare 
fotogrammi (e chissa magari in futuro video) che utilizzano tecniche di 
slit-scan. Ho fatto le prime prove con un software per rapida 
prototipizzazione che si chiama processing (
processing.org
) che 
sicurmanete molti di voi conoscono ed i risultati fanno sperare in bene...!

 slit-scan.
non ho idea di cosa sia. io nel mio piccolo catturavo l'input da webcam o
file, analizzavo con semplici tecniche (differenza) il moto, lo evidenziavo
a video e salvavo l'output su file. Il salvataggio poteva essere correlato
al fatto che il moto venisse riconosciuto o meno in modo tale da salvare
solo le parti dove effettivamente si era verificato movimento.
il tutto piu' o meno funziona ma l'attuale stato del JMF mi ha portato ad
ibernare il progetto in attesa di un framework maggiormente supportato.
alternative complete non ci sono attualmente. ci sono progetti che ne
facilitano l'uso crescendo attorno a jmf e quindi ereditandone i difetti
(media4j mai usato pero') e progetti separati (dsj, sorgente chiuso, free
per uso non commerciale, wrapper delle api directshow e simili quindi solo
windows). poi ce ne saranno altri ma questi sono gli ultimi apparsi in
mailing list.

 mailing list.
Faro sicuramente un giro alla ricerca di info su questi progetti, grazie 
per le info!
Corrado

 discussione da qlc altra parte!
la mia email e' di facile interpretazione. eventualmente posso passarti del
codice se dovessi averne bisogno. non e' eccezionale, anzi, ma e' pur
sempre qualcosa da cui partire.