[Bug 744587] New: queue2: incorrect current-level-time reported after seek (with packetized data)
GStreamer (GNOME Bugzilla)
bugzilla at gnome.org
Mon Feb 16 02:41:09 PST 2015
https://bugzilla.gnome.org/show_bug.cgi?id=744587
Bug ID: 744587
Summary: queue2: incorrect current-level-time reported after
seek (with packetized data)
Classification: Platform
Product: GStreamer
Version: 1.4.5
OS: Linux
Status: UNCONFIRMED
Severity: normal
Priority: Normal
Component: gstreamer (core)
Assignee: gstreamer-bugs at lists.freedesktop.org
Reporter: awabik at opera.com
QA Contact: gstreamer-bugs at lists.freedesktop.org
GNOME version: ---
Created attachment 296913
--> https://bugzilla.gnome.org/attachment.cgi?id=296913&action=edit
The testcase
Steps to reproduce the bug:
1) Have a queue2 element,
2) Send SEGMENT (GST_FORMAT_TIME) event with non-zero start/position/time.
3) Start pushing buffers with PTSes starting at 0 to the queue.
Effects:
1) As soon the queue obtains buffers with valid in-segment PTS, it reports
buffered time level correctly,
2) As soon the queue pushes first buffer with PTS < segment.start to the
srcpad, the queue stops reporting buffered time level correctly, it reports 0
buffered.
This is caused by rewriting src_segment.position with buffer's PTS, and then
gst_segment_to_running_time() returns GST_CLOCK_TIME_NONE.
At this point, if we have a very fast source element, and a very slow decoder,
the decoder may block on the first frame (with PTS below segment start) for
quite a long time (especially if it's a software decoder decoding 1080p HEVC or
VP9 frame). In this time, the queue reports current-level-time == 0, and what's
worse, if the queue has buffer & byte limits 0, and only the time limit set,
fast source may push megabytes of data, tens of seconds of data, even though
the limit may be 0.5 seconds. The queue will not block, as it thinks it's 0%
filled.
Additional bug (fixed by the same fix): some streams have non-monotonic PTSes.
Push buffer with PTS=1s, duration=1s, and then push buffer with PTS=0s,
duration=1s. The queue has now 2 seconds of data buffered, but it will report
only one second.
I am attaching the extended unit tests for queue2 element that demonstrate both
these problems.
--
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