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 678575 - [0.10] regression: playbin2 visualisation sync messed up after seeking
[0.10] regression: playbin2 visualisation sync messed up after seeking
Status: RESOLVED FIXED
Product: GStreamer
Classification: Platform
Component: gstreamer (core)
0.10.x
Other All
: Normal blocker
: 0.10.37
Assigned To: GStreamer Maintainers
GStreamer Maintainers
Depends on:
Blocks:
 
 
Reported: 2012-06-21 20:18 UTC by Tim-Philipp Müller
Modified: 2012-06-25 15:39 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
bin: do not skip state_changes of other bins (5.57 KB, patch)
2012-06-23 00:23 UTC, Thiago Sousa Santos
none Details | Review

Description Tim-Philipp Müller 2012-06-21 20:18:51 UTC
This seems to work fine with the last release (seek with arrows right/left):

  gst-launch-0.10 playbin2 uri=file:///path/to.mp3 video-sink='navseek ! ximagesink' vis-plugin=goom flags="soft-colorbalance+soft-volume+text+audio+video+vis"

but not with current 0.10 git. When seeking forward the segment/timestamps seem to be messed up somewher ein the visualisation branch, at least it complains about my computer being too slow and only rendering an emergency frame every second.

I should add that it works fine in totem in 0.10 git though, not sure yet why that behaves differently.
Comment 1 Thiago Sousa Santos 2012-06-23 00:23:42 UTC
Created attachment 217053 [details] [review]
bin: do not skip state_changes of other bins

The problem was caused by patch:
commit 554b81ed243c27385e11b925722b91c2fafdcfb4
bin: try harder to avoid state changes in wrong direction
    When the bin does an upward state change, try to avoid doing a downward state
    change on the child and vice versa.
    Add some more unit tests for this fix.
    
    Fixes https://bugzilla.gnome.org/show_bug.cgi?id=621833

And some bin's state changes were being skipped on this pipeline, leaving some
element's base_time broken, causing sync issues. The patch attached is really
simple. It just won't skip bins state changes. If we think that skipping bins
state changes is good, we need to propagate the base_time to children even when
se skip a bin state change (add some extra function to gstbin to do that), which
is equally simple.
Comment 2 Sebastian Dröge (slomo) 2012-06-25 09:50:39 UTC
I guess distributing the base time should be separated from the state change function somehow
Comment 3 Wim Taymans 2012-06-25 10:35:12 UTC
I think this was fixed with


commit d05ad920ce09b3b9c941f757163df9caacda97fd
Author: Wim Taymans <wim.taymans@collabora.co.uk>
Date:   Tue Jun 12 17:11:51 2012 +0200

    bin: always recurse into bins when doing state changes
    
    Never skip the state change of a bin because it needs to update the base time of
    its children when needed.
Comment 4 Thiago Sousa Santos 2012-06-25 14:02:32 UTC
(In reply to comment #2)
> I guess distributing the base time should be separated from the state change
> function somehow

I agree, I had problems in camerabin2 because of this.

Could we make gst_element_set_base_time overrideable and bins would pass it on to its children?
Comment 5 Thiago Sousa Santos 2012-06-25 14:02:52 UTC
(In reply to comment #3)
> I think this was fixed with
> 
> 
> commit d05ad920ce09b3b9c941f757163df9caacda97fd
> Author: Wim Taymans <wim.taymans@collabora.co.uk>
> Date:   Tue Jun 12 17:11:51 2012 +0200
> 
>     bin: always recurse into bins when doing state changes
> 
>     Never skip the state change of a bin because it needs to update the base
> time of
>     its children when needed.

Great, I'll backport and push to 0.10
Comment 6 Thiago Sousa Santos 2012-06-25 15:39:22 UTC
Pushed as 36c61df29724eb2b2732eb0efb49ba897d0bb64a to 0.10