[Bug 761815] playbin: changing playbin flags stalls playback

GStreamer (GNOME Bugzilla) bugzilla at gnome.org
Mon Feb 22 16:30:47 UTC 2016


https://bugzilla.gnome.org/show_bug.cgi?id=761815

Edward Hervey <bilboed at bilboed.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |bilboed at bilboed.com

--- Comment #15 from Edward Hervey <bilboed at bilboed.com> ---
(sorry for the delay, was re-re-re-reading the playsink code...)

The provided patch is wrong. It goes under the assumption that playsink->flags
is what's actually configured.

playsink->flags actually corresponds to "I would like you to configure yourself
to this combination of flags if possible". Knowing whether a certain "flag" is
active or not depends on a (way too big) list of things:
* Whether a pad was requested for that input
* Whether a chain was created already for a flag
* Whether the input caps for a given pad changed or not
* ...

The design/code hasn't fundamentally changed since 0.10 ... which is the core
issue. But we don't have time to rewrite/refactor/redesign this in the current
timeframe.

What I'm currently looking at is the following:
* set_flags only stores the flags (i.e. don't apply the proposed patch)
* Only make decisions of what to block/activate/unlink in
gst_play_sink_reconfigure().
** The rationale is that by then the various pads should have been requested,
i.e. we have all the information needed to figure out the next steps
** This also means figuring out the various
need_{audio|video|vis|deinterlace|text} variables there (which is currently
done in _do_reconfigure() which is *after* pads are blocked).
** Use the presence (or not) of a chain to determine whether a "flag" is
already active or not (ex: textchain != NULL => text flag was active
previously)
** If a flag is to be removed (ex: audiochain != NULL but need_audio is FALSE)
then just set an idle probe which will unlink/destroy the associated chain
** Only add a blocking probe if really need (i.e. a chain was added)

I'll update once I have more results

-- 
You are receiving this mail because:
You are the QA Contact for the bug.
You are the assignee for the bug.


More information about the gstreamer-bugs mailing list