[Bug 779310] New: tsdemux: racy handling of concurrent seek events in push mode
GStreamer (GNOME Bugzilla)
bugzilla at gnome.org
Mon Feb 27 13:56:54 UTC 2017
https://bugzilla.gnome.org/show_bug.cgi?id=779310
Bug ID: 779310
Summary: tsdemux: racy handling of concurrent seek events in
push mode
Classification: Platform
Product: GStreamer
Version: git master
OS: Linux
Status: NEW
Severity: normal
Priority: Normal
Component: gst-plugins-bad
Assignee: gstreamer-bugs at lists.freedesktop.org
Reporter: rawoul at gmail.com
QA Contact: gstreamer-bugs at lists.freedesktop.org
GNOME version: ---
When configured in push mode, tsdemux can generate a segment while flushing or
with wrong values, when two consecutive seek events are handled in parallel.
This can stall the pipeline for very long times.
Here's a stripped/tweaked log from tsdemux that exhibits this issue:
stm0: seek to 95032ms from start
<tsdemux0> seek event, rate: 1.000000 start: 0:01:35.032000000 stop:
99:99:99.999999999
<tsdemux0> Got event flush-start
<tsdemux0> Got event flush-stop
<tsdemux0> soft flush of all streams
<tsdemux0> Got event segment
<tsdemux0> soft flush of all streams
<tsdemux0:audio_0_0045> first PTS 0:01:32.669048481
<tsdemux0:video_0_0044> first PTS 0:01:33.429048481
<tsdemux0> Pushing segment event: 0x73d06ec0, time 99:99:99.999999999, seq-num
1133, GstEventSegment, segment=(GstSegment)"GstSegment,
flags=(GstSegmentFlags)GST_SEGMENT_FLAG_NONE, rate=(double)1,
applied-rate=(double)1, format=(GstFormat)GST_FORMAT_TIME, base=(guint64)0,
offset=(guint64)0, start=(guint64)92669048481,
stop=(guint64)18446744073709551615, time=(guint64)92669048481,
position=(guint64)92669048481, duration=(guint64)18446744073709551615;";
stm0: seek to 125032ms from start
<tsdemux0> seek event, rate: 1.000000 start: 0:02:05.032000000 stop:
99:99:99.999999999
<tsdemux0> Got event flush-start
<tsdemux0> Pushing segment event: 0x73d06e80, time 99:99:99.999999999, seq-num
1133, GstEventSegment, segment=(GstSegment)"GstSegment,
flags=(GstSegmentFlags)GST_SEGMENT_FLAG_NONE, rate=(double)1,
applied-rate=(double)1, format=(GstFormat)GST_FORMAT_TIME, base=(guint64)0,
offset=(guint64)0, start=(guint64)0, stop=(guint64)18446744073709551615,
time=(guint64)0, position=(guint64)0, duration=(guint64)18446744073709551615;";
<tsdemux0:audio_0_0045> first PTS 0:01:34.525048481
<tsdemux0> Got event flush-stop
<tsdemux0> soft flush of all streams
<tsdemux0> Got event segment
<tsdemux0> soft flush of all streams
<tsdemux0:video_0_0044> first PTS 0:02:03.429048481
GStreamer-WARNING **:
../../gitsrc/gst/gstpad.c:4429:gst_pad_push_data:<tsdemux0:video_0_0044> Got
data flow before segment event
GStreamer-WARNING **:
../../gitsrc/gst/gstpad.c:4176:gst_pad_chain_data_unchecked:<multiqueue0:sink_0>
Got data flow before segment event
...
In this example the second segment is sent too early, and its start value is
invalid. The start value should be the lowest PTS in all streams received after
the seek event, but here no data was received yet (flush_stop hasn't even been
received yet).
--
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