gst/multifile/gstmultifilesrc.c: Implement DEFAULT and BUFFER position queries. See...
authorWim Taymans <wim.taymans@gmail.com>
Wed, 8 Oct 2008 10:42:26 +0000 (10:42 +0000)
committerWim Taymans <wim.taymans@gmail.com>
Wed, 8 Oct 2008 10:42:26 +0000 (10:42 +0000)
Original commit message from CVS:
* gst/multifile/gstmultifilesrc.c: (gst_multi_file_src_class_init),
(gst_multi_file_src_query):
Implement DEFAULT and BUFFER position queries. See #555260.

ChangeLog
gst/multifile/gstmultifilesrc.c

index 366c97a..6c8cb9d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2008-10-08  Wim Taymans  <wim.taymans@collabora.co.uk>
+
+       * gst/multifile/gstmultifilesrc.c: (gst_multi_file_src_class_init),
+       (gst_multi_file_src_query):
+       Implement DEFAULT and BUFFER position queries. See #555260.
+
 2008-10-08  Edward Hervey  <edward.hervey@collabora.co.uk>
 
        * sys/ximage/gstximagesrc.c: (gst_ximage_src_stop):
index dfd1520..ee39c56 100644 (file)
@@ -63,6 +63,7 @@ static void gst_multi_file_src_set_property (GObject * object, guint prop_id,
 static void gst_multi_file_src_get_property (GObject * object, guint prop_id,
     GValue * value, GParamSpec * pspec);
 static GstCaps *gst_multi_file_src_getcaps (GstBaseSrc * src);
+static gboolean gst_multi_file_src_query (GstBaseSrc * src, GstQuery * query);
 
 
 static GstStaticPadTemplate gst_multi_file_src_pad_template =
@@ -135,9 +136,10 @@ gst_multi_file_src_class_init (GstMultiFileSrcClass * klass)
 
   gobject_class->dispose = gst_multi_file_src_dispose;
 
-  gstpushsrc_class->create = gst_multi_file_src_create;
-
   gstbasesrc_class->get_caps = gst_multi_file_src_getcaps;
+  gstbasesrc_class->query = gst_multi_file_src_query;
+
+  gstpushsrc_class->create = gst_multi_file_src_create;
 
   if (sizeof (off_t) < 8) {
     GST_LOG ("No large file support, sizeof (off_t) = %" G_GSIZE_FORMAT,
@@ -186,6 +188,39 @@ gst_multi_file_src_getcaps (GstBaseSrc * src)
 }
 
 static gboolean
+gst_multi_file_src_query (GstBaseSrc * src, GstQuery * query)
+{
+  gboolean res;
+  GstMultiFileSrc *mfsrc;
+
+  mfsrc = GST_MULTI_FILE_SRC (src);
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_POSITION:
+    {
+      GstFormat format;
+
+      gst_query_parse_position (query, &format, NULL);
+      switch (format) {
+        case GST_FORMAT_BUFFERS:
+        case GST_FORMAT_DEFAULT:
+          gst_query_set_position (query, GST_FORMAT_BUFFERS, mfsrc->index);
+          res = TRUE;
+          break;
+        default:
+          res = GST_BASE_SRC_CLASS (parent_class)->query (src, query);
+          break;
+      }
+      break;
+    }
+    default:
+      res = GST_BASE_SRC_CLASS (parent_class)->query (src, query);
+      break;
+  }
+  return res;
+}
+
+static gboolean
 gst_multi_file_src_set_location (GstMultiFileSrc * src, const gchar * location)
 {
   g_free (src->filename);