From: Sebastian Dröge Date: Thu, 2 Oct 2014 08:00:32 +0000 (+0300) Subject: queue: update segment position on GAP events to calculate levels properly X-Git-Tag: 1.6.1~724 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=594e2f06685fe8d4ef88869d608061d41e5e8979;p=platform%2Fupstream%2Fgstreamer.git queue: update segment position on GAP events to calculate levels properly https://bugzilla.gnome.org/show_bug.cgi?id=737498 --- diff --git a/plugins/elements/gstqueue.c b/plugins/elements/gstqueue.c index b2151be..f9ba957 100644 --- a/plugins/elements/gstqueue.c +++ b/plugins/elements/gstqueue.c @@ -561,6 +561,34 @@ apply_segment (GstQueue * queue, GstEvent * event, GstSegment * segment, update_time_level (queue); } +static void +apply_gap (GstQueue * queue, GstEvent * event, + GstSegment * segment, gboolean is_sink) +{ + GstClockTime timestamp; + GstClockTime duration; + + gst_event_parse_gap (event, ×tamp, &duration); + + if (GST_CLOCK_TIME_IS_VALID (timestamp)) { + + if (GST_CLOCK_TIME_IS_VALID (duration)) { + timestamp += duration; + } + + segment->position = timestamp; + + if (is_sink) + queue->sink_tainted = TRUE; + else + queue->src_tainted = TRUE; + + /* calc diff with other end */ + update_time_level (queue); + } +} + + /* take a buffer and update segment, updating the time level of the queue. */ static void apply_buffer (GstQueue * queue, GstBuffer * buffer, GstSegment * segment, @@ -679,6 +707,8 @@ gst_queue_locked_enqueue_event (GstQueue * queue, gpointer item) /* a new segment allows us to accept more buffers if we got EOS * from downstream */ queue->unexpected = FALSE; + case GST_EVENT_GAP: + apply_gap (queue, event, &queue->sink_segment, TRUE); break; default: break; @@ -740,6 +770,9 @@ gst_queue_locked_dequeue (GstQueue * queue) queue->newseg_applied_to_src = FALSE; } break; + case GST_EVENT_GAP: + apply_gap (queue, event, &queue->src_segment, FALSE); + break; default: break; }