Pipeline freeze at preroll on embedded system

Julian Scheel julian at jusst.de
Tue Jan 22 01:32:19 PST 2013


Am Montag, den 21.01.2013, 10:16 +0100 schrieb Sebastian Dröge:
> On Mo, 2013-01-21 at 09:43 +0100, Julian Scheel wrote:
> > Am Montag, den 21.01.2013, 08:23 +0100 schrieb Sebastian Dröge:
> > > On So, 2013-01-20 at 21:57 +0100, Julian Scheel wrote:
> > > 
> > > > > The GCond in question would usually be signalled when the state change
> > > > > from PAUSED to PLAYING happens in basesink (or when
> > > > > flushing/EOS/stepping). So what you could do is to check if
> > > > > 
> > > > > a) basesink is actually tried to be set from PAUSED to PLAYING (check if
> > > > > the change_state function is called)
> > > > 
> > > > Actually I debugged this and the PAUSED to PLAYING transition is never happening. I can see that gstbasesrc change_state is called for GST_STATE_CHANGE_NULL_TO_READY as well as GST_STATE_CHANGE_READY_TO_PAUSED, but never for GST_STATE_CHANGE_PAUSED_TO_PLAYING.
> > > > So now the question is why this would not happen?
> > > > From where would that transition be initiated?
> > > 
> > > In "gst-launch-1.0 fakesrc ! fakesink" it would happen from the
> > > application thread. See gstreamer/tools/gst-launch.c:1097
> > 
> > Ok, if I set a breakpoint at line 1097 it won't be reached.
> > 
> > But if I set a breakpoint at line 1075:
> > caught_error = event_loop (pipeline, TRUE, GST_STATE_PAUSED);
> > it fires. And after it halted there I can continue and the pipeline
> > works as expected. If the breakpoint is set to line 1076 it won't be
> > reached at all.
> > So my guess would be that entering the event_loop a little later
> > magically solves the issue because some lock is released before or
> > anything like that. Any thoughs from your side?
> 
> Well, check where in event_loop() it blocks forever :) I guess for some
> reason it doesn't get the STATE_CHANGED message from the bus.
> 
> And it probably works if you wait before that because then the message
> is probably on the bus already then, and otherwise it has to wait for
> messages to appear on the bus (using a GCond).

As further debugging did not lead me to a solution I rebuilt my system
with eglibc instead of uClibc and now it works. Will stay with eglibc
for now.



More information about the gstreamer-devel mailing list