package net.sf.fmj.capture.test;
import java.awt.event.ContainerEvent;
import java.awt.event.ContainerListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.Player;
import javax.media.protocol.DataSource;
import javax.media.protocol.SourceCloneable;
import javax.swing.JFrame;
import net.sf.fmj.ejmf.toolkit.util.PlayerPanel;
import net.sf.fmj.utility.FmjStartup;
/**
* Tests cloning data sources
* @author Ken Larson
*
*/
public class CloneTest
{
public static void main(String[] args) throws Exception
{
// init FMJ/JMF logging/classpath
FmjStartup.init();
// create both data sources:
final DataSource dsVideo = Manager.createDataSource(new MediaLocator("civil:/0"));
// merge them:
final DataSource dsCloneable = Manager.createCloneableDataSource(dsVideo);
final DataSource dsClone = ((SourceCloneable) dsCloneable).createClone();
// if (dsCloneable instanceof CaptureDevice)
// System.out.println("CAPTURE DEVICE!!!");
// if (dsClone instanceof CaptureDevice)
// System.out.println("dsClone CAPTURE DEVICE!!!");
final DataSource[] ds = new DataSource[] {dsCloneable, dsClone};
for (int i = 0; i < ds.length; ++i)
{
// create a player:
final Player player = Manager.createRealizedPlayer(ds[i]);
// create GUI frame, add player's GUI components to it:
final PlayerPanel playerpanel = new PlayerPanel(player);
// already realized so this will work:
playerpanel.addControlComponent();
playerpanel.addVisualComponent();
final JFrame frame = new JFrame( "A/V Clone Test " + i );
// exit on close:
// Allow window to close
frame.addWindowListener(
new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
);
// Resize frame whenever new Component is added
playerpanel.getMediaPanel().addContainerListener(
new ContainerListener() {
public void componentAdded(ContainerEvent e) {
frame.pack();
}
public void componentRemoved(ContainerEvent e) {
frame.pack();
}
}
);
// finish constructing window, and open it
frame.getContentPane().add(playerpanel);
frame.pack();
frame.setVisible(true);
// start playback:
player.start();
// TODO: we don't have much in place to handle problems starting, or anything else really
// after this point...
}
}
}