sltv team mailing list archive
-
sltv team
-
Mailing list archive
-
Message #00028
[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();
}