Pipeline stuck in gst_base_sink_wait_preroll

Marko Mikkonen mmikkone at mail.student.oulu.fi
Mon Feb 28 07:44:03 PST 2011


I'm developing a decoder plugin and my test pipeline (in a custom test 
application) looks like this: filesrc ! my_plugin ! decoderbin2 ! 
directaudiosink. My_element is outputing an mp3 encoded audio. 
Decoderbin has constructed a correct internal pipeline as far as I can 
see it. Furthermore I have NOT implemented pull mode for my element yet 
(only chain function). When I run the program with debug level 5, it 
stops at function gst_base_sink_wait_preroll:

0:00:26.845703000  4408   1f460fd8 DEBUG               basesink 
gstbasesink.c:2181:gst_base_sink_wait_preroll:<audio_sink> waiting in 
preroll for flush or PLAYING

Now, I HAVE set the pipeline to playing state, but somehow 
directaudiosink doesn't want to move to that state. Is the reason that I 
have not implemented pull mode for my element or should the pipeline 
work well in push mode, too? Why does that function wait forever? If the 
pipeline should work in push mode too, I'd like to know how is that 
possible (what happens behind the scenes, e.g. how does the filesrc know 
what/when to output when there's nothing pulling the data). You see I'm 
still an amateur and I'd just like to learn.

Some more info: I can see the filesrc outputting two chunks of data. 
 From this data (after the data has gone through my element) the 
decoderbin has been able to construct the pipeline using typefind. And 
thanks to this data the audio sink has been able to preroll. But no more 
data is coming from filesrc to my plugin...

-Marko


More information about the gstreamer-devel mailing list