fdsink: implement SEEKING query
authorTim-Philipp Müller <tim.muller@collabora.co.uk>
Sat, 25 Feb 2012 15:08:55 +0000 (15:08 +0000)
committerTim-Philipp Müller <tim.muller@collabora.co.uk>
Sat, 25 Feb 2012 15:08:55 +0000 (15:08 +0000)
We may or may not support seeking. stdout to a
terminal doesn't support seeking, for example, but
... ! fdsink > file.foo just might.

plugins/elements/gstfdsink.c
plugins/elements/gstfdsink.h

index 6383d2a..80e1f30 100644 (file)
@@ -222,6 +222,16 @@ gst_fd_sink_query (GstPad * pad, GstQuery * query)
       gst_query_set_uri (query, fdsink->uri);
       return TRUE;
 
+    case GST_QUERY_SEEKING:
+      gst_query_parse_seeking (query, &format, NULL, NULL, NULL);
+      if (format == GST_FORMAT_BYTES || format == GST_FORMAT_DEFAULT) {
+        gst_query_set_seeking (query, GST_FORMAT_BYTES, fdsink->seekable, 0,
+            -1);
+      } else {
+        gst_query_set_seeking (query, format, FALSE, 0, -1);
+      }
+      return TRUE;
+
     default:
       return gst_pad_query_default (pad, query);
   }
@@ -384,6 +394,9 @@ gst_fd_sink_start (GstBaseSink * basesink)
   fdsink->bytes_written = 0;
   fdsink->current_pos = 0;
 
+  fdsink->seekable = gst_fd_sink_do_seek (fdsink, 0);
+  GST_INFO_OBJECT (fdsink, "seeking supported: %d", fdsink->seekable);
+
   return TRUE;
 
   /* ERRORS */
index 90913b4..59393d0 100644 (file)
@@ -59,6 +59,8 @@ struct _GstFdSink {
   int fd;
   guint64 bytes_written;
   guint64 current_pos;
+
+  gboolean seekable;
 };
 
 struct _GstFdSinkClass {