]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - glsdk/gstreamer0-10.git/blobdiff - plugins/indexers/gstmemindex.c
gststructure: early out when we know a value cannot be a subset
[glsdk/gstreamer0-10.git] / plugins / indexers / gstmemindex.c
index 3bdc80d0fa67eb79ea7edf30de7ac0dbbb4f5b49..fd276fae446aa48ce388c003e1a5b5067f603330 100644 (file)
@@ -19,6 +19,8 @@
 
 #include <gst/gst.h>
 
+#include "gstindexers.h"
+
 #define GST_TYPE_MEM_INDEX              \
   (gst_index_get_type ())
 #define GST_MEM_INDEX(obj)              \
@@ -105,8 +107,6 @@ enum
   /* FILL ME */
 };
 
-static void gst_mem_index_class_init (GstMemIndexClass * klass);
-static void gst_mem_index_init (GstMemIndex * index);
 static void gst_mem_index_finalize (GObject * object);
 
 static void gst_mem_index_add_entry (GstIndex * index, GstIndexEntry * entry);
@@ -116,35 +116,11 @@ static GstIndexEntry *gst_mem_index_get_assoc_entry (GstIndex * index, gint id,
 
 #define CLASS(mem_index)  GST_MEM_INDEX_CLASS (G_OBJECT_GET_CLASS (mem_index))
 
-static GstIndex *parent_class = NULL;
-
 /*static guint gst_mem_index_signals[LAST_SIGNAL] = { 0 }; */
 
-GType
-gst_mem_index_get_type (void)
-{
-  static GType mem_index_type = 0;
-
-  if (!mem_index_type) {
-    static const GTypeInfo mem_index_info = {
-      sizeof (GstMemIndexClass),
-      NULL,
-      NULL,
-      (GClassInitFunc) gst_mem_index_class_init,
-      NULL,
-      NULL,
-      sizeof (GstMemIndex),
-      1,
-      (GInstanceInitFunc) gst_mem_index_init,
-      NULL
-    };
-
-    mem_index_type =
-        g_type_register_static (GST_TYPE_INDEX, "GstMemIndex", &mem_index_info,
-        0);
-  }
-  return mem_index_type;
-}
+GType gst_mem_index_get_type (void);
+
+G_DEFINE_TYPE (GstMemIndex, gst_mem_index, GST_TYPE_INDEX);
 
 static void
 gst_mem_index_class_init (GstMemIndexClass * klass)
@@ -155,9 +131,7 @@ gst_mem_index_class_init (GstMemIndexClass * klass)
   gobject_class = (GObjectClass *) klass;
   gstindex_class = (GstIndexClass *) klass;
 
-  parent_class = g_type_class_peek_parent (klass);
-
-  gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_mem_index_finalize);
+  gobject_class->finalize = gst_mem_index_finalize;
 
   gstindex_class->add_entry = GST_DEBUG_FUNCPTR (gst_mem_index_add_entry);
   gstindex_class->get_assoc_entry =
@@ -182,7 +156,7 @@ gst_mem_index_free_format (gpointer key, gpointer value, gpointer user_data)
     g_tree_destroy (index->tree);
   }
 
-  g_free (index);
+  g_slice_free (GstMemIndexFormatIndex, index);
 }
 
 static void
@@ -197,7 +171,7 @@ gst_mem_index_free_id (gpointer key, gpointer value, gpointer user_data)
     id_index->format_index = NULL;
   }
 
-  g_free (id_index);
+  g_slice_free (GstMemIndexId, id_index);
 }
 
 static void
@@ -219,7 +193,7 @@ gst_mem_index_finalize (GObject * object)
     memindex->associations = NULL;
   }
 
-  G_OBJECT_CLASS (parent_class)->finalize (object);
+  G_OBJECT_CLASS (gst_mem_index_parent_class)->finalize (object);
 }
 
 static void
@@ -231,7 +205,7 @@ gst_mem_index_add_id (GstIndex * index, GstIndexEntry * entry)
   id_index = g_hash_table_lookup (memindex->id_index, &entry->id);
 
   if (!id_index) {
-    id_index = g_new0 (GstMemIndexId, 1);
+    id_index = g_slice_new0 (GstMemIndexId);
 
     id_index->id = entry->id;
     id_index->format_index = g_hash_table_new (g_int_hash, g_int_equal);
@@ -266,7 +240,7 @@ gst_mem_index_index_format (GstMemIndexId * id_index, GstIndexEntry * entry,
   index = g_hash_table_lookup (id_index->format_index, format);
 
   if (!index) {
-    index = g_new0 (GstMemIndexFormatIndex, 1);
+    index = g_slice_new0 (GstMemIndexFormatIndex);
 
     index->format = *format;
     index->offset = assoc;
@@ -421,8 +395,8 @@ gst_mem_index_get_assoc_entry (GstIndex * index, gint id,
     }
   }
 
-  if (entry) {
-    if ((GST_INDEX_ASSOC_FLAGS (entry) & flags) != flags) {
+  if (entry && ((GST_INDEX_ASSOC_FLAGS (entry) & flags) != flags)) {
+    if (method != GST_INDEX_LOOKUP_EXACT) {
       GList *l_entry = g_list_find (memindex->associations, entry);
 
       entry = NULL;
@@ -439,6 +413,8 @@ gst_mem_index_get_assoc_entry (GstIndex * index, gint id,
           l_entry = g_list_previous (l_entry);
         }
       }
+    } else {
+      entry = NULL;
     }
   }
 
@@ -458,7 +434,7 @@ gst_mem_index_plugin_init (GstPlugin * plugin)
     return FALSE;
   }
 
-  GST_PLUGIN_FEATURE (factory)->plugin_name = g_strdup (plugin->desc.name);
+  GST_PLUGIN_FEATURE (factory)->plugin_name = plugin->desc.name;
   GST_PLUGIN_FEATURE (factory)->loaded = TRUE;
 
   gst_registry_add_feature (gst_registry_get_default (),