mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 06:54:49 +00:00
queue: Fix race when calculating cur_level.time
On the first buffer, it's possible that sink_segment is set but src_segment has not been set yet. If this is the case, we should not calculate cur_level.time since sink_segment.position may be large and src_segment.position default is 0, with the resulting diff being larger than max-size-time, causing the queue to start leaking (if leaky=downstream). One potential consequence of this is that the segment event may be stored on the srcpad before the caps event is pushed downstream, causing a g_warning ("Sticky event misordering, got 'segment' before 'caps'"). https://bugzilla.gnome.org/show_bug.cgi?id=773096
This commit is contained in:
parent
556c540ecd
commit
d03bd54780
1 changed files with 1 additions and 1 deletions
|
@ -546,7 +546,7 @@ update_time_level (GstQueue * queue)
|
||||||
GST_LOG_OBJECT (queue, "sink %" GST_STIME_FORMAT ", src %" GST_STIME_FORMAT,
|
GST_LOG_OBJECT (queue, "sink %" GST_STIME_FORMAT ", src %" GST_STIME_FORMAT,
|
||||||
GST_STIME_ARGS (sink_time), GST_STIME_ARGS (src_time));
|
GST_STIME_ARGS (sink_time), GST_STIME_ARGS (src_time));
|
||||||
|
|
||||||
if (sink_time >= src_time)
|
if (sink_time >= src_time && queue->newseg_applied_to_src)
|
||||||
queue->cur_level.time = sink_time - src_time;
|
queue->cur_level.time = sink_time - src_time;
|
||||||
else
|
else
|
||||||
queue->cur_level.time = 0;
|
queue->cur_level.time = 0;
|
||||||
|
|
Loading…
Reference in a new issue