← Back to team overview

sltv team mailing list archive

[Branch ~sltv/sltv/trunk] Rev 20: Png overlay working.

 

Merge authors:
  Lucas Alberto <lucasa@projeto-pensar>
------------------------------------------------------------
revno: 20 [merge]
committer: lucasa@xxxxxxxxx
branch nick: sltv
timestamp: Tue 2009-12-01 18:20:44 -0200
message:
  Png overlay working.
modified:
  .classpath
  src/br/org/softwarelivre/sltv/SLTVCaptureControlGUI.java
  src/br/org/softwarelivre/sltv/SLTVPlayerAWT.java
  src/br/org/softwarelivre/sltv/SLTVPlayerSwing.java
  src/br/org/softwarelivre/sltv/SLTVStreamFileControlGUI.java
  src/br/org/softwarelivre/sltv/VideoPipeline.java


--
lp:sltv
https://code.launchpad.net/~sltv/sltv/trunk

Your team sltv is subscribed to branch lp:sltv.
To unsubscribe from this branch go to https://code.launchpad.net/~sltv/sltv/trunk/+edit-subscription.
=== modified file '.classpath'
--- .classpath	2009-11-30 21:30:27 +0000
+++ .classpath	2009-12-01 20:20:44 +0000
@@ -2,7 +2,6 @@
 <classpath>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="lib" path="lib/DJNativeSwing.jar"/>
 	<classpathentry kind="lib" path="lib/gstreamer-java.jar" sourcepath="/gstreamer-java"/>
 	<classpathentry kind="lib" path="lib/swingx-beaninfo.jar"/>
 	<classpathentry kind="lib" path="lib/swingx.jar"/>

=== modified file 'src/br/org/softwarelivre/sltv/SLTVCaptureControlGUI.java'
--- src/br/org/softwarelivre/sltv/SLTVCaptureControlGUI.java	2009-11-27 20:23:49 +0000
+++ src/br/org/softwarelivre/sltv/SLTVCaptureControlGUI.java	2009-12-01 20:20:44 +0000
@@ -10,12 +10,10 @@
 
 import javax.swing.JButton;
 import javax.swing.JComboBox;
-import javax.swing.JComponent;
 import javax.swing.JPanel;
 import javax.swing.JTextField;
 import javax.swing.SwingUtilities;
 
-import org.gstreamer.Element;
 import org.gstreamer.swing.VideoComponent;
 import org.jdesktop.swingx.JXPanel;
 import org.jdesktop.swingx.JXTaskPane;

=== modified file 'src/br/org/softwarelivre/sltv/SLTVPlayerAWT.java'
--- src/br/org/softwarelivre/sltv/SLTVPlayerAWT.java	2009-09-09 01:57:27 +0000
+++ src/br/org/softwarelivre/sltv/SLTVPlayerAWT.java	2009-12-01 20:20:44 +0000
@@ -9,8 +9,7 @@
 
 import javax.swing.JPanel;
 
-import uk.co.caprica.vlcj.MediaPlayer;
-import uk.co.caprica.vlcj.MediaPlayerEventListener;
+import org.gstreamer.media.MediaPlayer;
 
 public class SLTVPlayerAWT extends Frame {
 

=== modified file 'src/br/org/softwarelivre/sltv/SLTVPlayerSwing.java'
--- src/br/org/softwarelivre/sltv/SLTVPlayerSwing.java	2009-09-09 01:57:27 +0000
+++ src/br/org/softwarelivre/sltv/SLTVPlayerSwing.java	2009-12-01 20:20:44 +0000
@@ -11,8 +11,8 @@
 import javax.swing.event.InternalFrameEvent;
 import javax.swing.event.InternalFrameListener;
 
-import uk.co.caprica.vlcj.MediaPlayer;
-import uk.co.caprica.vlcj.MediaPlayerEventListener;
+import org.gstreamer.media.MediaPlayer;
+
 import chrriis.dj.nativeswing.NSOption;
 import chrriis.dj.nativeswing.NativeComponentWrapper;
 import chrriis.dj.nativeswing.NativeSwing;

=== modified file 'src/br/org/softwarelivre/sltv/SLTVStreamFileControlGUI.java'
--- src/br/org/softwarelivre/sltv/SLTVStreamFileControlGUI.java	2009-11-30 21:30:27 +0000
+++ src/br/org/softwarelivre/sltv/SLTVStreamFileControlGUI.java	2009-12-01 20:20:44 +0000
@@ -7,8 +7,6 @@
 import java.awt.FlowLayout;
 import java.awt.GraphicsDevice;
 import java.awt.GraphicsEnvironment;
-import java.awt.Point;
-import java.awt.Toolkit;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.ItemEvent;
@@ -18,7 +16,6 @@
 import java.awt.event.KeyListener;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
-import java.awt.event.MouseListener;
 import java.io.File;
 import java.util.Hashtable;
 
@@ -39,14 +36,12 @@
 import javax.swing.JSplitPane;
 import javax.swing.JTabbedPane;
 import javax.swing.JTextField;
-import javax.swing.JWindow;
 import javax.swing.SpinnerNumberModel;
 import javax.swing.SwingUtilities;
 import javax.swing.event.ChangeEvent;
 import javax.swing.event.ChangeListener;
 import javax.swing.event.InternalFrameAdapter;
 import javax.swing.event.InternalFrameEvent;
-import javax.swing.event.InternalFrameListener;
 
 import org.gstreamer.Element;
 import org.gstreamer.State;
@@ -903,6 +898,8 @@
 		this.setIconifiable(true);
 		this.setBorder(new DropShadowBorder());
 		
+		setGlassPane(new DrawingGlassPane());
+		getGlassPane().setVisible(true);
 	}
 
 	private JPanel getJPanel_Metadata() {
@@ -917,7 +914,7 @@
 		try {
 			Thread thread = new Thread() {
 				public void run() {
-					while (getVideoPipeline().getPipeline().getState() != org.gstreamer.State.PLAYING) {
+					while (getVideoPipeline() != null && getVideoPipeline().getPipeline().getState() != org.gstreamer.State.PLAYING) {
 						try {
 							Thread.sleep(100);
 						} catch (InterruptedException e) {
@@ -978,7 +975,7 @@
 						mxGraph graph = graphPanel.getGraph();
 						mxGraphModel model = (mxGraphModel) graph.getModel();
 						Hashtable cells = model.getCells();
-						while (getVideoPipeline().getPipeline().getState() == org.gstreamer.State.PLAYING)
+						while (getVideoPipeline()!=null && getVideoPipeline().getPipeline().getState() == org.gstreamer.State.PLAYING)
 						{
 							graph.getModel().beginUpdate();
 							for (Object id : cells.keySet()) {

=== modified file 'src/br/org/softwarelivre/sltv/VideoPipeline.java'
--- src/br/org/softwarelivre/sltv/VideoPipeline.java	2009-11-30 21:30:27 +0000
+++ src/br/org/softwarelivre/sltv/VideoPipeline.java	2009-12-01 20:20:44 +0000
@@ -22,7 +22,6 @@
 import org.gstreamer.elements.RGBDataSink;
 import org.gstreamer.event.BusSyncHandler;
 import org.gstreamer.event.EOSEvent;
-import org.gstreamer.interfaces.XOverlay;
 
 
 /**
@@ -233,8 +232,11 @@
 	public void createAudioVisualization(Element videoVizualizationSink) {
 		if(isAudioMonitoringEnable())
 		{
-			valveAudioVisualizationOutput = ElementFactory.make("valve", null);
-			//valveAudioVisualizationOutput.set("drop", true);
+			try {
+				valveAudioVisualizationOutput = ElementFactory.make("valve", null);
+			} catch (Exception e) {
+				valveAudioVisualizationOutput = ElementFactory.make("identity", null);
+			}
 			Element audioRate = ElementFactory.make("audiorate", null);		
 			Element audioConvert = ElementFactory.make("audioconvert", null);
 			Element audioResample = ElementFactory.make("audioresample", null);
@@ -359,9 +361,8 @@
 		
 		bus.setSyncHandler(new BusSyncHandler() {
             public BusSyncReply syncMessage(Message message) {
-                if (DEBUG&& message.getType() != org.gstreamer.MessageType.STATE_CHANGED) {
-					System.out.println("Bus SYNC MESSAGE - "
-					 + message.getStructure());
+                if (DEBUG && message.getType() != org.gstreamer.MessageType.STATE_CHANGED) {
+					//System.out.println("Bus SYNC MESSAGE - "+ message.getStructure());
 				}
                 return BusSyncReply.PASS;
             }
@@ -369,8 +370,7 @@
 		
 		bus.connect(new Bus.ERROR() {
 			public void errorMessage(GstObject source, int code, String message) {
-					System.out.println("Error: code=" + code + " message="
-					 + message);
+					System.out.println("Error: code=" + code + " message="+ message);
 			}
 		});
 
@@ -408,8 +408,7 @@
 				}
 
 				if (DEBUG && message.getType() != org.gstreamer.MessageType.STATE_CHANGED) {
-					System.out.println("Bus MESSAGE - "
-					 + message.getStructure());
+					System.out.println("Bus MESSAGE - " + message.getStructure());
 				}
 			}
 		});
@@ -452,7 +451,11 @@
 
 	private Bin createStreamOutputBin() {
 		Bin bin = createOggOutputBin();
-		valveStreamVideoOutput = ElementFactory.make("valve", null);
+		try {
+			valveStreamVideoOutput = ElementFactory.make("valve", null);
+		} catch (Exception e) {
+			valveStreamVideoOutput = ElementFactory.make("identity", null);
+		}
 		Element queue1 = ElementFactory.make("queue", null);
 		shout2send = ElementFactory.make("shout2send", "shout2send");
 		bin.addMany(valveStreamVideoOutput, queue1, shout2send);
@@ -972,6 +975,7 @@
 	 * @param path - path to the png image file
 	 * @return
 	 */
+	@SuppressWarnings("static-access")
 	private Bin createPNGImageOverlayBin(String path) {
 		// creates a image overlay Bin and connect it to main pipeline
 		Bin bin = new Bin("pngOverlay");
@@ -1007,9 +1011,9 @@
 		final Element fileSrc = ElementFactory.make("filesrc", "png-file");
 		fileSrc.set("location", path);
 		final Element videoscale = ElementFactory.make("videoscale", null);
-		Element videorate = ElementFactory.make("videorate", null);
+		final Element videorate = ElementFactory.make("videorate", null);
+		
 		DecodeBin decodebin = new DecodeBin("Overlay Decode Bin");
-		
 		decodebin.connect(new DecodeBin.NEW_DECODED_PAD() {
             public void newDecodedPad(Element elem, Pad pad, boolean last) {
                 /* only link once */
@@ -1030,12 +1034,14 @@
             }
         });
 
-		Element caps = ElementFactory.make("capsfilter", null);
-		caps.setCaps(new Caps("video/x-raw-yuv, width=100, height=100, framerate=5/1"));
-		Element alphaColor = ElementFactory.make("identity", "alphacolor");
+		Element capsFilter = ElementFactory.make("capsfilter", null);
+		//caps.setCaps(new Caps("video/x-raw-rgb"));
+		Caps caps = new Caps("video/x-raw-rgb,width=80,height=80");
+		capsFilter.setCaps(caps);
+		Element alphaColor = ElementFactory.make("alphacolor", "alphacolor");
 		Element ffmpegcolorspace1 = ElementFactory.make("ffmpegcolorspace", null);
 		Element ffmpegcolorspace2 = ElementFactory.make("ffmpegcolorspace", null);
-		Element videobox = ElementFactory.make("videobox", null);
+		Element videobox = ElementFactory.make("videobox", "videobox");
 		videobox.set("border-alpha", 0);
 		videobox.set("alpha", 1);
 		videobox.set("top", -10);
@@ -1044,22 +1050,25 @@
 		Element queue2 = ElementFactory.make("queue", null);
 		Element queue = ElementFactory.make("queue", null);
 		Element alpha = ElementFactory.make("alpha", "alpha");
+		Element pngdec = ElementFactory.make("pngdec", null);
+		pngdec.setCaps(caps);
 		
 		//bin.addMany(fileSrc, decode, videoscale, caps, alphaColor, ffmpegcolorspace1, videobox, queue, videomixer, ffmpegcolorspace2);
 		//boolean linked = bin.linkMany(fileSrc, decode, videoscale, caps, alphaColor, ffmpegcolorspace1, videobox, queue, videomixer, ffmpegcolorspace2);
-		//Element decodebin2 = ElementFactory.make("decodebin2", null);
+		Element decodebin2 = ElementFactory.make("decodebin2", null);
 		Element videotestsrc = ElementFactory.make("videotestsrc", null);
-		bin.addMany(videotestsrc, /*fileSrc, decodebin,*/ videoscale, videorate, caps, ffmpegcolorspace1, alphaColor, videobox, queue, videomixer, alpha, ffmpegcolorspace2);
+		bin.addMany(/* videotestsrc, */fileSrc, queue, decodebin, videoscale,
+				capsFilter, alphaColor, ffmpegcolorspace1, videobox, videomixer, alpha, ffmpegcolorspace2);
 		
 		boolean linked = bin.linkMany(alpha, videomixer);
 		if (DEBUG)
 			System.out.println("Pipeline alpha->videomixer linked: " + linked);
 		
-		//linked = bin.linkMany(fileSrc, decodebin);
-		//if (DEBUG)
-			//System.out.println("Pipeline fileSrc->decodebin linked: " + linked);
+		linked = bin.linkMany(fileSrc, queue, decodebin);
+		if (DEBUG)
+			System.out.println("Pipeline fileSrc->decodebin linked: " + linked);
 		
-		linked = bin.linkMany(videotestsrc, videoscale, videorate, caps, ffmpegcolorspace1, alphaColor, videobox, queue, videomixer, ffmpegcolorspace2);
+		linked = bin.linkMany(/* videotestsrc, */videoscale, capsFilter, alphaColor, ffmpegcolorspace1, videobox, videomixer, ffmpegcolorspace2);
 		if (DEBUG)
 			System.out.println("Pipeline png image overlay linked: " + linked);
 		
@@ -1084,6 +1093,7 @@
 		Element videoscale = ElementFactory.make("videoscale", null);
 		Element videorate = ElementFactory.make("videorate", null);
 		Element ffmpegcolorspace = ElementFactory.make("ffmpegcolorspace", null);
+		videobalance = ElementFactory.make("videobalance", "videobalance");
 
 		timeoverlay = ElementFactory.make("timeoverlay", "timeoverlay");
 		timeoverlay.set("font-desc", "mono 20");
@@ -1104,7 +1114,7 @@
 			pngOverlay = ElementFactory.make("identity", "identityOverlay");
 
 		pipeline.addMany(identityFilter, timeoverlay, textoverlay, videoscale,
-				 videorate, capsVideoFilter, identityTee, ffmpegcolorspace, pngOverlay);
+				 videorate, capsVideoFilter, identityTee, ffmpegcolorspace, pngOverlay, videobalance);
 		
 		lastEffect = "filterBin";
 		filterBin = createSimpleBin(lastEffect, "identity");
@@ -1113,7 +1123,7 @@
 
 		
 		boolean linkedLocal = Element.linkMany(queueVideoBegin, videorate,
-				videoscale, ffmpegcolorspace, capsVideoFilter, identityFilter, filterBin, identityTee, pngOverlay, timeoverlay,
+				videoscale, ffmpegcolorspace, videobalance, capsVideoFilter, identityFilter, filterBin, identityTee, pngOverlay, timeoverlay,
 				textoverlay, teeVideo);
 		if (DEBUG)
 			System.out.println("Pipeline local linked: " + linkedLocal);
@@ -1123,130 +1133,4 @@
 		// TODO Auto-generated method stub
 		
 	}
-
-	/*
-	 * def swap_elements(self, before_old, after_old, old, new):
-	 * before_old.get_pad('src').set_blocked(True) before_old.unlink(old) #
-	 * flushing def pad_probe(pad, event): print 'received event: ', event.type
-	 * # drop EOS if event.type == gst.EVENT_EOS: print 'dropping' return False
-	 * else: return True probe = old.get_pad('src').add_event_probe(pad_probe)
-	 * old.send_event(gst.event_new_eos())
-	 * old.get_pad('src').remove_event_probe(probe) before_old.unlink(old)
-	 * old.unlink(after_old) old.set_state(gst.STATE_NULL) #new.link(after_old)
-	 * new.get_pad('src').link(after_old.get_pad('sink')) before_old.link(new)
-	 * new.set_state(gst.STATE_PLAYING)
-	 * before_old.get_pad('src').set_blocked(False)
-	 */
-
-	// pipe.link(tee, streamBin);
-	// // Create the video component and link it in
-	// final VideoComponent videoComponent1 = new VideoComponent();
-	// final VideoComponent videoComponent2 = new VideoComponent();
-	//  
-	// final Element videosink1 = videoComponent1.getElement();
-	// videosink1.setName("video1");
-	// final Element videosink2 = videoComponent2.getElement();
-	// videosink2.setName("video2");
-	//  
-	// final Element videosrc = ElementFactory.make("videotestsrc", "source");
-	// final Element videofilter = ElementFactory.make("capsfilter", "flt");
-	// final Element efeito1 = ElementFactory.make("edgetv", "efeito1");
-	// final Element efeito2 = ElementFactory.make("edgetv", "efeito2");
-	// final Element colorspace2 = ElementFactory.make("ffmpegcolorspace",
-	// "colorspace2");
-	// final Element theoradec = ElementFactory.make("theoradec", "theoradec");
-	// final Element videomixer = ElementFactory.make("videomixer", "mixer");
-	//  
-	// SwingUtilities.invokeLater(
-	// new Runnable() {
-	// public void run() {
-	//      	
-	// videofilter.setCaps(Caps.fromString("video/x-raw-rgb, width=320, height=200"
-	// + ", bpp=32, depth=32, framerate=25/1"));
-	//      	
-	// //pipe1.addMany(videosrc, videofilter, tee, queue1, queue2,theoraenc,
-	// oggmux, stream, colorspace1, colorspace2,
-	// // videosink1, efeito1, videomixer);
-	// pipe1.addMany(videosrc, tee, colorspace1, videomixer, queue1,
-	// colorspace2, queue2, videosink1);
-	// pipe1.linkMany(videosrc, tee, colorspace1, videomixer, queue1,
-	// colorspace2, queue2, videosink1);
-	//          
-	// // Now create a JFrame to display the video output
-	// JFrame frame1 = new JFrame("Swing Video Test 1");
-	// frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-	// frame1.add(videoComponent1, BorderLayout.CENTER);
-	// videoComponent1.setPreferredSize(new Dimension(320, 200));
-	// frame1.pack();
-	// frame1.setVisible(true);
-	//          
-	// // Start the pipeline processing
-	// pipe1.setState(State.PLAYING);
-	//          
-	// /*Element novo = ElementFactory.make("shout2send", "icecast2");
-	// pipe.add(novo);
-	// videofilter.unlink(videosrc);
-	// pipe.setState(State.PLAYING);*/
-	// }
-	// });
-	//  
-	// Thread thread2 = new Thread(new Runnable() {
-	// public void run() {
-	// try {Thread.sleep(10000);
-	// } catch (InterruptedException e){e.printStackTrace();}
-	// System.out.println("Segunda thread.");
-	// final Element colorspace3 = ElementFactory.make("ffmpegcolorspace",
-	// "colorspace3");
-	// final Element colorspace4 = ElementFactory.make("ffmpegcolorspace",
-	// "colorspace4");
-	// pipe1.setState(State.PAUSED);
-	// pipe1.addMany(colorspace3, efeito1, colorspace4);
-	// pipe1.linkMany(tee, colorspace3, efeito1, colorspace4, videomixer);
-	// pipe1.setState(State.PLAYING);
-	// }
-	// });
-	// thread2.start();
-	//  
-	// Thread thread3 = new Thread(new Runnable() {
-	// public void run() {
-	// try {Thread.sleep(10000);
-	// } catch (InterruptedException e){e.printStackTrace();}
-	// System.out.println("Segunda thread.");
-	// pipe1.setState(State.NULL);
-	// pipe1.removeMany(videosrc, videofilter, tee, queue1, theoraenc, oggmux,
-	// colorspace1, stream);
-	//			
-	// final Element videosrc = ElementFactory.make("videotestsrc", "source");
-	// final Element videofilter = ElementFactory.make("capsfilter", "flt");
-	// final Element tee = ElementFactory.make("tee", "tee");
-	// final Element queue1 = ElementFactory.make("queue", "queue1");
-	// final Element queue2 = ElementFactory.make("queue", "queue2");
-	// final Element efeito1 = ElementFactory.make("edgetv", "efeito1");
-	// final Element colorspace1 = ElementFactory.make("ffmpegcolorspace",
-	// "colorspace1");
-	// final Element colorspace2 = ElementFactory.make("ffmpegcolorspace",
-	// "colorspace2");
-	// final Element theoraenc = ElementFactory.make("theoraenc", "theoraenc");
-	// final Element oggmux = ElementFactory.make("oggmux", "oggmux");
-	//          
-	// videofilter.setCaps(Caps.fromString("video/x-raw-rgb, width=320, height=200"
-	// + ", bpp=32, depth=32, framerate=25/1"));
-	//          
-	// pipe2.addMany(videosrc, videofilter, tee, queue1, queue2, theoraenc,
-	// oggmux, colorspace1, stream);
-	// pipe2.addMany(efeito1, colorspace2);
-	// videosrc.link(videofilter);
-	// videofilter.link(tee);
-	// tee.link(queue1);
-	// queue1.link(colorspace1);
-	// colorspace1.link(efeito1);
-	// efeito1.link(colorspace2);
-	// colorspace2.link(theoraenc);
-	// theoraenc.link(oggmux);
-	// oggmux.link(stream);
-	//          
-	// pipe2.setState(State.PLAYING);
-	// }
-	// });
-	// //thread3.start();
 }