mpegdemux: Set duration on seeking query if possible
authorSeungha Yang <seungha@centricular.com>
Wed, 11 Nov 2020 09:21:25 +0000 (18:21 +0900)
committerGStreamer Merge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Wed, 11 Nov 2020 14:10:27 +0000 (14:10 +0000)
Set duration on seeking query in the same way as duration query handler.
Otherwise application might get confused as if the duration is unknown.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1791>

gst/mpegdemux/gstmpegdemux.c

index e900377..fbf7b6e 100644 (file)
@@ -1557,10 +1557,14 @@ gst_ps_demux_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
       if (demux->random_access) {
         /* In pull mode we can seek in TIME format if we have the SCR */
         if (fmt != GST_FORMAT_TIME || demux->scr_rate_n == G_MAXUINT64
-            || demux->scr_rate_d == G_MAXUINT64)
+            || demux->scr_rate_d == G_MAXUINT64) {
           gst_query_set_seeking (query, fmt, FALSE, -1, -1);
-        else
-          gst_query_set_seeking (query, fmt, TRUE, 0, -1);
+        } else {
+          gint64 dur = -1;
+          if (GST_CLOCK_TIME_IS_VALID (demux->src_segment.duration))
+            dur = demux->src_segment.duration;
+          gst_query_set_seeking (query, fmt, TRUE, 0, dur);
+        }
       } else {
         if (fmt == GST_FORMAT_BYTES) {
           /* Seeking in BYTES format not supported at all */