[gst-devel] [decodebin 0.9] getting informations of a stream
Wim Taymans
wim at fluendo.com
Thu Oct 20 10:26:18 CEST 2005
On Thu, 2005-10-20 at 19:08 +0200, Vincent Torri wrote:
> Hey,
>
Hi,
a little testapp called test6.c is included in
gst-plugins-base/gst/playback to
demonstrate stream type finding using decodebin. Requires latest CVS
version and
uses the ASYNC state change of decodebin.
Wim
> I've seen some decodebin updates in the cvs, and some test programs in the
> playback diretory, and I've updated my test program. It is attached.
>
> It seems that the streams are correctly found. But I can't get the
> informations of the streams. Once the streams are found, I call the
> get_info function. I get the first video sink (named vsink0) and try to
> get its size.
>
> when I call str = gst_caps_get_structure (caps, 0); I get:
>
> (main_0_9_new:14489): GStreamer-CRITICAL **: gst_caps_get_structure:
> assertion `index < caps->structs->len' failed
>
> (main_0_9_new:14489): GStreamer-CRITICAL **: gst_structure_to_string:
> assertion `structure != NULL' failed
>
> any Idea where I am wrong ?
>
> thank you
>
> Vincent
>
>
> On Mon, 29 Aug 2005, Ronald S. Bultje wrote:
>
> > Hi Vincent,
> >
> > (our) implementation problem, let me explain:
> >
> > On Mon, 2005-08-29 at 11:33 +0200, Vincent Torri wrote:
> > > With gstreamer 0.9, Ronald told me that setting the pipeline to PAUSED
> > > fill all the informations I need (size, framerate, length, etc...)
> >
> > Ideally, this is the case. However, this is not implemented yet, so
> > you'll need a bit more.
> >
> > > but when I set the pipeline to PAUSED, I only get all the new pads. To get
> > > the informations, I have to set the pipeline to PLAYING and I need to look
> > > at the "notify::caps" signal, as in gstreamer 0.8. Am I missing something,
> > > or is it the only way to get these informations ?
> >
> > So this is done using something called 'preroll'; preroll works well,
> > but only if a sink is in the pipeline. With no sink, preroll "is not
> > needed" and thus skipped. This is nice for most purposes, but sucks for
> > decodebin.
> >
> > So, you want decodebin to preroll (which means 'prepare data for the
> > sink in the ready->paused state transition'); you do that by attaching a
> > fake sink (fakesink :) ). Now, to trigger preroll, you add an unused
> > sink to the pipeline you're prerolling; not doing this will make the
> > pipeline aware of the sink too late, and thus it will still be skipped.
> > So you have this pipeline:
> >
> > filesrc ! decodebin fakesink
> >
> > For each new pad in decodebin, link a fakesink to it:
> >
> > ! fakesink
> > filesrc ! decodebin ! fakesink fakesink
> > ! fakesink
> >
> > And then remove the unused fakesink. Now, after the ready->paused state
> > transition, it will be ready to process data, and data types will have
> > been set on the pads, just like you wanted.
> >
> > Cheers,
> > Ronald
> >
> >
> >
> > -------------------------------------------------------
> > SF.Net email is Sponsored by the Better Software Conference & EXPO
> > September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices
> > Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA
> > Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf
> > _______________________________________________
> > gstreamer-devel mailing list
> > gstreamer-devel at lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
> >
--
Wim Taymans <wim at fluendo.com>
More information about the gstreamer-devel
mailing list