[gst-devel] jpegenc only decodes one frame, then stream stops

Jan Schmidt thaytan at noraisin.net
Thu Jan 29 00:14:02 CET 2009


On Tue, 2009-01-20 at 17:23 +0100, Tim Hilden wrote:
> hi,
> 
> I need gstreamer for the following: The frames of a video stream need to
> be converted to jpeg images. So I connected a
> filesrc-demuxer-decoder-jpegenc-identity-fakesink.
> The identiry's "handoff"-signal is used to read the current frame and
> store it to a file. The storing will be replaced with some more
> processing later which is not part of gstreamer. But the problem is that
> this stream only encodes the first frame. After that the stream is
> "stuck". I did not get any error messages on the bus and the q_main_loop
> is still running. So do I have to tell the jpegenc to encode the next
> frame or anything?
> The lack of doc and sample code is what makes programming gstreamer so
> hard for me. That and the fact that I don't really want to use GLib and
> main_loops, because it's for a QT app. But QT's phonon is way not enough
> for what I need.
> 
> one more (simple) question: does a stream have to have a sink? Would the
> fakesink be neccessary in my case?
> 

jpegenc per-se encodes multiple incoming video frames into a sequence of jpeg buffers, as this pipeline shows:
gst-launch filesrc location=blah.avi ! decodebin ! jpegenc ! identity !
fakesink -v

I'm not sure where your problem is from there... perhaps you're not
linking something properly and the pipeline is shutting down. In that
case though, you should definitely be seeing an error message on the
bus.

Yes, your pipeline needs a sink of some sort for the buffers to end up
and be disposed. The overhead isn't high. In fact though, fakesink has a
handoff signal and signal-handoffs property too - so you can just
connect to that directly, and forgo the identity element.

Alternatively, you can also look at the appsink element, which will give
you the ability to pull the buffers at your leisure, instead of having
to handle them in the handoff. It might increase the minimum version of
GStreamer you require though - appsink is only available in a stable
form as of 0.10.22 of gst-plugins-base.

See:
http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-plugins/html/gst-plugins-base-plugins-appsink.html

Cheers,
J.
-- 
Jan Schmidt <thaytan at noraisin.net>





More information about the gstreamer-devel mailing list