oggdemux: report -1 for duration in push mode
authorWim Taymans <wim.taymans@collabora.co.uk>
Tue, 17 Mar 2009 18:53:44 +0000 (19:53 +0100)
committerWim Taymans <wim.taymans@collabora.co.uk>
Tue, 17 Mar 2009 18:53:44 +0000 (19:53 +0100)
In push mode we must return TRUE from the duration query with a value of -1
meaning that we know that we don't know the duration.

ext/ogg/gstoggdemux.c

index 6d640b3..77b6fa1 100644 (file)
@@ -275,15 +275,22 @@ gst_ogg_pad_src_query (GstPad * pad, GstQuery * query)
     case GST_QUERY_DURATION:
     {
       GstFormat format;
+      gint64 total_time;
 
       gst_query_parse_duration (query, &format, NULL);
       /* can only get position in time */
       if (format != GST_FORMAT_TIME)
         goto wrong_format;
 
-      /* can only return the total time position */
-      /* FIXME, return time for this specific stream */
-      gst_query_set_duration (query, GST_FORMAT_TIME, ogg->total_time);
+      if (ogg->seekable) {
+        /* we must return the total seekable length */
+        total_time = ogg->total_time;
+      } else {
+        /* in non-seek mode we can answer the query and we must return -1 */
+        total_time = -1;
+      }
+
+      gst_query_set_duration (query, GST_FORMAT_TIME, total_time);
       break;
     }
     case GST_QUERY_SEEKING: