libs/gst/base/gsttypefindhelper.c: If we are provided with the size, we should implement
authorTim-Philipp Müller <tim@centricular.net>
Thu, 9 Mar 2006 10:46:35 +0000 (10:46 +0000)
committerTim-Philipp Müller <tim@centricular.net>
Thu, 9 Mar 2006 10:46:35 +0000 (10:46 +0000)
Original commit message from CVS:
* libs/gst/base/gsttypefindhelper.c: (helper_find_get_length),
(gst_type_find_helper_get_range):
If we are provided with the size, we should implement
GstTypeFind::get_length, so that typefind functions who
want to can actually peek at the middle of a file.

ChangeLog
libs/gst/base/gsttypefindhelper.c

index 7580665..252aee2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2006-03-09  Tim-Philipp Müller  <tim at centricular dot net>
+
+       * libs/gst/base/gsttypefindhelper.c: (helper_find_get_length),
+       (gst_type_find_helper_get_range):
+         If we are provided with the size, we should implement
+         GstTypeFind::get_length, so that typefind functions who
+         want to can actually peek at the middle of a file.
+
 2006-03-08  Tim-Philipp Müller  <tim at centricular dot net>
 
        * docs/manual/advanced-dataaccess.xml:
index 78d3a5d..5d9ad8b 100644 (file)
@@ -147,6 +147,17 @@ helper_find_suggest (gpointer data, guint probability, const GstCaps * caps)
   }
 }
 
+static guint64
+helper_find_get_length (gpointer data)
+{
+  GstTypeFindHelper *find = (GstTypeFindHelper *) data;
+
+  GST_LOG_OBJECT (find->obj, "'%s' called called get_length, returning %"
+      G_GUINT64_FORMAT, GST_PLUGIN_FEATURE_NAME (find->factory), find->size);
+
+  return find->size;
+}
+
 /**
  * gst_type_find_helper_get_range:
  * @obj: A #GstObject that will be passed as first argument to @func
@@ -195,7 +206,12 @@ gst_type_find_helper_get_range (GstObject * obj,
   gst_find.data = &find;
   gst_find.peek = helper_find_peek;
   gst_find.suggest = helper_find_suggest;
-  gst_find.get_length = NULL;
+
+  if (size == 0 || size == (guint64) - 1) {
+    gst_find.get_length = NULL;
+  } else {
+    gst_find.get_length = helper_find_get_length;
+  }
 
   walk = type_list;