After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 701146 - gnonlin : Don't send flush start flush stop on user demand.
gnonlin : Don't send flush start flush stop on user demand.
Status: RESOLVED FIXED
Product: GStreamer
Classification: Platform
Component: gnonlin
git master
Other Linux
: Normal normal
: 1.1.1
Assigned To: GStreamer Maintainers
GStreamer Maintainers
Depends on:
Blocks:
 
 
Reported: 2013-05-28 17:20 UTC by Mathieu Duponchelle
Modified: 2013-06-11 19:54 UTC
See Also:
GNOME target: ---
GNOME version: ---



Description Mathieu Duponchelle 2013-05-28 17:20:16 UTC
This caused a bug following that pattern:

Have two sources one after another.
seek in the first source with the flush flag.
Play.
The playback will freeze when passing from a clip to another. A WIP modified test case is in the linked branch as well.

The bug occured that way :


1) we get a seek ->  comp->priv->user_seek_flush = TRUE
2) at the update at the end of the first clip, no_more_pads gets called
3) user_seek_flush == TRUE -> send flush_start
4) element lost state
5) pipeline updates base time

The proposed patch doesn't use the reset_time argument of flush_stop, as for some reason the playback becomes correct but you still observe a jump on the call to update_pipeline.

Instead, it removes all notions of user_seek_flush as we take care of that ourselves, and the only observed use for this is to break playback ..
Tests still pass, and the observed behaviour in the updated test case is now correct.
Comment 1 Mathieu Duponchelle 2013-05-28 17:21:05 UTC
https://github.com/MathieuDuponchelle/gnonlin/commits/eos_thread by the way.
Comment 2 Nicolas Dufresne (ndufresne) 2013-05-28 18:37:33 UTC
Ok, so basically this is about reverting:

commit d196cd3cdc850f2355bb16518e22ccfda1170078
Author: Sebastian Dröge <sebastian.droege@collabora.co.uk>
Date:   Wed Nov 28 15:49:37 2012 +0100

    gnlcomposition: Make sure to pass flushes downstream if flushing seeks were received
    
    Conflicts:
        gnl/gnlcomposition.c
Comment 3 Sebastian Dröge (slomo) 2013-05-29 07:20:14 UTC
As discussed on IRC it seems that this change is causing other negative side effects. What's missing it seems is the direct correlation of a user seek event and the flush event that is generated from that, it could be generated by something else too in the time between sending the seek upstream and receiving the real flush-start.


A solution to this must make sure that:
a) No flushes go downstream at all for internal composition work (e.g. switching segments)
b) A flushing seek should produce for downstream exactly one flush-start and flush-stop during seeking
c) It must work reliable with scrub-seeking, non-flushing seeks, reverse playback, just changing/reversing playback rate, ...
Comment 4 Sebastian Dröge (slomo) 2013-06-11 19:54:42 UTC
commit cb1818f086dd4772ef6344193831aba8273b8215
Author: Mathieu Duponchelle <mathieu.duponchelle@epitech.eu>
Date:   Wed May 29 16:55:34 2013 +0200

    gnlcomposition: forward non time-resetting flush stops outside the compositi
    except those consecutive to a seek event.
    
    The 'reset-time' parameter has been added in 1.0, and we need it to be FALSE
    outside the composition.
    
    Related to https://bugzilla.gnome.org/show_bug.cgi?id=701146

commit 8153731bee539183597145ada7ba1157a546ad4b
Author: Mathieu Duponchelle <mathieu.duponchelle@epitech.eu>
Date:   Tue May 28 19:09:23 2013 +0200

    gnlcomposition: Don't flush_start / flush_stop according to user's flags.
    
    We do it ourselves when needed, doing so led the pipeline to lose state,
    which was updating the base time.
    fixes https://bugzilla.gnome.org/show_bug.cgi?id=701146