]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - glsdk/gstreamer0-10.git/commitdiff
queue2: when EOS we know the duration
authorWim Taymans <wim.taymans@collabora.co.uk>
Fri, 9 Apr 2010 10:35:47 +0000 (12:35 +0200)
committerWim Taymans <wim.taymans@collabora.co.uk>
Fri, 9 Apr 2010 11:21:18 +0000 (13:21 +0200)
When we are EOS, we don't need to do an upstream query for the duration in bytes
because we already know it is the offset of the last written byte.

plugins/elements/gstqueue2.c

index 9cfed25398b31a9d7eca723fbe2ad28c01572e04..403cff6b4585b2cca77333e3fd1cd1f8a3e73919 100644 (file)
@@ -2003,7 +2003,7 @@ gst_queue2_handle_src_query (GstPad * pad, GstQuery * query)
         gint64 estimated_total, buffering_left;
         GstFormat peer_fmt;
         gint64 duration;
-        gboolean peer_res, is_buffering;
+        gboolean peer_res, is_buffering, is_eos;
         gdouble byte_in_rate, byte_out_rate;
 
         /* we need a current download region */
@@ -2014,12 +2014,19 @@ gst_queue2_handle_src_query (GstPad * pad, GstQuery * query)
         byte_in_rate = queue->byte_in_rate;
         byte_out_rate = queue->byte_out_rate;
         is_buffering = queue->is_buffering;
+        is_eos = queue->is_eos;
         percent = queue->buffering_percent;
 
-        /* get duration of upstream in bytes */
-        peer_fmt = GST_FORMAT_BYTES;
-        peer_res = gst_pad_query_peer_duration (queue->sinkpad, &peer_fmt,
-            &duration);
+        if (is_eos) {
+          /* we're EOS, we know the duration in bytes now */
+          peer_res = TRUE;
+          duration = writing_pos;
+        } else {
+          /* get duration of upstream in bytes */
+          peer_fmt = GST_FORMAT_BYTES;
+          peer_res = gst_pad_query_peer_duration (queue->sinkpad, &peer_fmt,
+              &duration);
+        }
 
         /* calculate remaining and total download time */
         if (peer_res && byte_in_rate > 0.0) {