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 609405 - [qtdemux] Issues when seeking with file with lots of tracks and edit lists
[qtdemux] Issues when seeking with file with lots of tracks and edit lists
Status: RESOLVED FIXED
Product: GStreamer
Classification: Platform
Component: gst-plugins-good
git master
Other Linux
: Normal critical
: 0.10.23
Assigned To: GStreamer Maintainers
GStreamer Maintainers
Depends on:
Blocks:
 
 
Reported: 2010-02-09 11:28 UTC by Robert Swain
Modified: 2010-05-11 16:48 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
Check for stop < start case for a newseg (899 bytes, patch)
2010-02-09 11:30 UTC, Robert Swain
committed Details | Review
Seek test code (2.71 KB, text/x-csrc)
2010-02-09 11:34 UTC, Robert Swain
  Details

Description Robert Swain 2010-02-09 11:28:15 UTC
http://samples.mplayerhq.hu/mov/multitrack/cx/bellhamlam.mov

That sample is a bit nuts but, apparently QuickTime plays it properly and we should at least not segfault. The reason it segfaults is because when translating the newsegment event from byte to time format, somehow the stop time we retrieve is less than the start time.

      gst_qtdemux_push_event (demux,
          gst_event_new_new_segment_full (update, rate, arate, GST_FORMAT_TIME,
              start, stop, start));

With stop < start, gst_event_new_new_segment_full () returns a null pointer which gst_qtdemux_push_event () tries to dereference. Patch for this incoming.
Comment 1 Robert Swain 2010-02-09 11:30:53 UTC
Created attachment 153319 [details] [review]
Check for stop < start case for a newseg

This avoids the segfault but doesn't address the root issue of why stop < start.
Comment 2 Robert Swain 2010-02-09 11:34:42 UTC
Created attachment 153320 [details]
Seek test code

Compile with:

libtool --mode=link gcc `pkg-config --cflags --libs gstreamer-0.10` -o seek_test seek_test.c

To reproduce the segfault, I've been using:

./seek_test 5.0 http://...

When it tries to seek to approximately 25s, the stop < start is hit and the segfault occurs.
Comment 3 Tim-Philipp Müller 2010-02-10 23:41:39 UTC
commit 4aff3e48bec7879e0527419527847f0e42ded5bc
Author: Robert Swain <robert.swain@collabora.co.uk>
Date:   Wed Feb 10 20:36:56 2010 +0000

    qtdemux: temporary safety check to avoid crashes with a certain file
    
    Add temporary check to avoid crashes with a certain file when seeking
    until the real cause of this is figured out. See #609405.




Keeping bug open, since we really need to figure out the real issue here.
Comment 4 Tim-Philipp Müller 2010-02-24 01:22:08 UTC
Demoting to critical since I don't think this will get fixed properly this cycle.
Comment 5 Mark Nauwelaerts 2010-05-11 16:48:24 UTC
It turns out that the lots of tracks and edit lists are a bit of red herring.  For one, edit lists are ignored in push based mode, which is what this is about, and the problem seems to have been in determining TIME from BYTE.


commit bcde9fab09f43fdfee1064612c78b1042e3105f9
Author: Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
Date:   Tue May 11 18:42:32 2010 +0200

    qtdemux: fix push based seeking

    ... where it comes down to transforming incoming BYTE segment
    to a corresponding TIME segment.

    Also fixes #609405.