public void enoughData(AppSrc elem) { if (sendingData) { sendingData = false; source.connect(needDataListener); source.disconnect(enoughDataListener); } } }
protected AppSrc(String name) { this(makeRawElement(GST_NAME, name)); }
source.setLive(true); source.setFormat(Format.BUFFERS); source.setLatency(-1, 0); source.setSize(-1); source.setCaps(videoCaps); source.setMaxBytes(SRC_QUEUE_SIZE * sourceWidth * sourceHeight * 4); source.connect(needDataListener); source.connect(enoughDataListener);
public void setMaxBytes(long max) { gst().gst_app_src_set_max_bytes(this, max); } public long getMaxBytes() {
pipeline.addMany(appsrc, srcfilter, videorate, ratefilter, videosink); Element.linkMany(appsrc, srcfilter, videorate, ratefilter, videosink); appsrc.set("emit-signals", true); appsrc.connect(new AppSrc.NEED_DATA() { byte color = 0; byte[] data = new byte[width * height * 2]; appsrc.connect(new AppSrc.ENOUGH_DATA() { public void enoughData(AppSrc elem) { System.out.println("NEED_DATA: Element=" + elem.getNativeAddress());
/** * Removes a listener for the <code>enough-data</code> signal * * @param listener The listener that was previously added. */ public void disconnect(ENOUGH_DATA listener) { disconnect(ENOUGH_DATA.class, listener); }
/** * Adds a listener for the <code>need-data</code> signal * * @param listener Listener to be called when appsrc needs data. */ public void connect(final NEED_DATA listener) { connect(NEED_DATA.class, listener, new GstCallback() { @SuppressWarnings("unused") public void callback(AppSrc elem, int size) { listener.needData(elem, size); } }); } /**
/** * Sets the state of the pipeline to NULL and closes the stream. * */ @Override public StateChangeReturn stop() { source.endOfStream(); return super.stop(); }
/** * It pushes a buffer into the gst pipeline. * */ private void pushBuffer() { if (sendingData) if (0 < preQueue.size()) { // There are buffers available in the fifo list to be sent to the // appsrc queue. Buffer buf = preQueue.remove(0); frameCount++; long f = (long)frameCount * NANOS_PER_FRAME; buf.setCaps(videoCaps); buf.setTimestamp(ClockTime.fromNanos(f)); buf.setDuration(ClockTime.fromNanos(NANOS_PER_FRAME)); source.pushBuffer(buf); buf.dispose(); } }
@Override public void setCaps(Caps caps) { gst().gst_app_src_set_caps(this, caps); } public Caps getCaps() {
/** * Removes a listener for the <code>push-buffer</code> signal * * @param listener The listener that was previously added. */ public void disconnect(PUSH_BUFFER listener) { disconnect(PUSH_BUFFER.class, listener); }
/** * Adds a listener for the <code>push-buffer</code> signal * * @param listener Listener to be called when appsrc push buffer. */ public void connect(final PUSH_BUFFER listener) { connect(PUSH_BUFFER.class, listener, new GstCallback() { @SuppressWarnings("unused") public FlowReturn callback(AppSrc elem, Buffer buffer) { return listener.pushBuffer(elem, buffer); } }); } /**
public void setLatency(long min, long max) { gst().gst_app_src_set_latency(this, min, max); } public void getLatency(long[] minmax) {
public void needData(AppSrc elem, int size) { if (!sendingData) { sendingData = true; // If needDataListener is not disconnected, then it keeps triggering // "need-data" signals... This shouldn't happen. Bug in the signal // handling in Gstreamer-java? // Same thing in stopSendingData below. source.disconnect(needDataListener); source.connect(enoughDataListener); } } }
/** * Removes a listener for the <code>need-data</code> signal * * @param listener The listener that was previously added. */ public void disconnect(NEED_DATA listener) { disconnect(NEED_DATA.class, listener); }
/** * Adds a listener for the <code>end-of-stream</code> signal * * @param listener Listener to be called this when appsrc has no more buffer are available. */ public void connect(final END_OF_STREAM listener) { connect(END_OF_STREAM.class, listener, new GstCallback() { @SuppressWarnings("unused") public FlowReturn callback(AppSrc elem) { return listener.endOfStream(elem); } }); } /**
public void pushBuffer(Buffer buffer) { gst().gst_app_src_push_buffer(this, buffer); } public void endOfStream() {
/** * Removes a listener for the <code>end-of-stream</code> signal * * @param listener The listener that was previously added. */ public void disconnect(END_OF_STREAM listener) { disconnect(END_OF_STREAM.class, listener); }
/** * Adds a listener for the <code>enough-data</code> signal * * @param listener Listener to be called this when appsrc fills its queue. */ public void connect(final ENOUGH_DATA listener) { connect(ENOUGH_DATA.class, listener, new GstCallback() { @SuppressWarnings("unused") public void callback(AppSrc elem) { listener.enoughData(elem); } }); } /**
public void setSize(long size) { gst().gst_app_src_set_size(this, size); } public long getSize() {