All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.gstreamer.elements.OSXVideoSink Maven / Gradle / Ivy

There is a newer version: 1.6
Show newest version
package org.gstreamer.elements;

import java.util.ArrayList;

import javax.swing.SwingUtilities;

import org.gstreamer.Bus;
import org.gstreamer.ElementFactory;
import org.gstreamer.Message;
import org.gstreamer.Structure;
import org.gstreamer.swing.OSXVideoComponent;

import com.sun.jna.Pointer;

/**
 * 
 * @author dave
 *
 */
public class OSXVideoSink extends BaseSink {
	public static final String GST_NAME = "osxvideosink";
    static {
    	ElementFactory.registerElement(OSXVideoSink.class, GST_NAME);
    }

    public OSXVideoSink(String name) {
        this(makeRawElement(GST_NAME, name));
        set("embed", true);
        setQOSEnabled(false);
    }

    public OSXVideoSink(Initializer init) {
        super(init);
        setQOSEnabled(false);
    }
    
    public void setEmbedded(boolean embed) {
    	set("embed", true);
    }
    
    public boolean isEmbedded() {
    	return (Boolean) get("embed");
    }
    
    public void listenForNewViews(Bus bus) {
    	bus.connect(new Bus.MESSAGE() {
			public void busMessage(Bus bus, Message message) {
				if (message.getSource().getNativeAddress().equals(getNativeAddress())) {
					final Structure structure = message.getStructure();
					if (structure != null && "have-ns-view".equals(structure.getName())) {
						final Pointer nsview = (Pointer) structure.getValue("nsview");
						fireNewVideoComponent(nsview);
					}
				}
			}
		});
    }
    
    public static interface Listener {
    	/** This will always be called on a Swing event dispatch thread. */
    	void newVideoComponent(Object source, OSXVideoComponent osxVideoComponent);
    }
    
    private final ArrayList listeners = new ArrayList ();
    
    public void addListener(Listener l) {
    	synchronized(listeners) {
    		listeners.add(l);
    	}
    }
    
    public void removeListener(Listener l) {
    	synchronized(listeners) {
    		listeners.remove(l);
    	}
    }
    
    private void fireNewVideoComponent(final Pointer nsview) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				final OSXVideoComponent osxVideoComponent = new OSXVideoComponent(nsview);
		    	synchronized(listeners) {
			    	for (Listener l : listeners) {
			    		l.newVideoComponent(this, osxVideoComponent);
			    	}
		    	}
			}
		});
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy