mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-26 02:00:33 +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_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;
|
||||
else
|
||||
queue->cur_level.time = 0;
|
||||
|
|
Loading…
Reference in a new issue