info: allow getting other log categories. Fixes #587417
authorStefan Kost <ensonic@users.sf.net>
Tue, 30 Jun 2009 08:26:34 +0000 (11:26 +0300)
committerStefan Kost <ensonic@users.sf.net>
Mon, 6 Jul 2009 18:54:30 +0000 (19:54 +0100)
Add a new macro GST_DEBUG_CATEGORY_GET to get a log category by name. This
allows plugins to use e.g. core categories like PERFORMANCE or CLOCK.
API: GST_DEBUG_CATEGORY_GET

docs/gst/gstreamer-sections.txt
gst/gstinfo.c
gst/gstinfo.h
win32/common/libgstreamer.def

index 8c3e8e4..d994ea5 100644 (file)
@@ -970,6 +970,7 @@ GST_DEBUG_CATEGORY
 GST_DEBUG_CATEGORY_EXTERN
 GST_DEBUG_CATEGORY_STATIC
 GST_DEBUG_CATEGORY_INIT
+GST_DEBUG_CATEGORY_GET
 gst_debug_category_free
 gst_debug_category_set_threshold
 gst_debug_category_reset_threshold
index e5f8243..f34eeb0 100644 (file)
@@ -1470,6 +1470,21 @@ gst_debug_get_all_categories (void)
   return ret;
 }
 
+GstDebugCategory *
+_gst_debug_get_category (const gchar * name)
+{
+  GstDebugCategory *ret = NULL;
+  GSList *node;
+
+  for (node = __categories; node; node = g_slist_next (node)) {
+    ret = (GstDebugCategory *) node->data;
+    if (!strcmp (name, ret->name)) {
+      return ret;
+    }
+  }
+  return NULL;
+}
+
 /*** FUNCTION POINTERS ********************************************************/
 
 static GHashTable *__gst_function_pointers;     /* NULL */
index d739480..925d932 100644 (file)
@@ -350,7 +350,8 @@ void            gst_debug_unset_threshold_for_name  (const gchar * name);
  * This macro expands to nothing if debugging is disabled.
  */
 #define GST_DEBUG_CATEGORY_STATIC(cat) static GstDebugCategory *cat = NULL
-/* do not use this function, use the macros below */
+
+/* do not use this function, use the GST_DEBUG_CATEGORY_INIT macro below */
 GstDebugCategory *_gst_debug_category_new (const gchar * name,
                                            guint         color,
                                            const gchar * description);
@@ -408,6 +409,41 @@ G_CONST_RETURN gchar *
 GSList *
         gst_debug_get_all_categories   (void);
 
+/* do not use this function, use the GST_DEBUG_CATEGORY_GET macro below */
+GstDebugCategory *_gst_debug_get_category (const gchar *name);
+
+/**
+ * GST_DEBUG_CATEGORY_GET:
+ * @cat: the category to initialize.
+ * @name: log category name
+ *
+ * Lookup an exiting #GstDebugCategory by its @name and sets @cat. If category
+ * is not found, but %GST_CAT_DEFAULT is defined, that is assigned to @cat.
+ * Otherwise cat will be NULL.
+ *
+ * |[
+ * GST_DEBUG_CATEGORY_STATIC (gst_myplugin_debug);
+ * #define GST_CAT_DEFAULT gst_myplugin_debug
+ * GST_DEBUG_CATEGORY_STATIC (GST_CAT_PERFORMANCE);
+ * ...
+ * GST_DEBUG_CATEGORY_INIT (gst_myplugin_debug, "myplugin", 0, "nice element");
+ * GST_DEBUG_CATEGORY_GET (GST_CAT_PERFORMANCE, "performance);
+ * ]|
+ */
+#ifdef GST_CAT_DEFAULT
+#define GST_DEBUG_CATEGORY_GET(cat,name)  G_STMT_START{\
+  cat = _gst_debug_get_category (name);                        \
+  if (!cat) {                                          \
+    cat = GST_CAT_DEFAULT;                             \
+  }                                                    \
+}G_STMT_END
+#else
+#define GST_DEBUG_CATEGORY_GET(cat,name)  G_STMT_START{\
+  cat = _gst_debug_get_category (name);                        \
+}G_STMT_END
+#endif
+
+
 gchar * gst_debug_construct_term_color (guint colorinfo);
 gint    gst_debug_construct_win_color (guint colorinfo);
 
@@ -1126,6 +1162,7 @@ guint gst_debug_remove_log_function_by_data (gpointer data);
 #define GST_DEBUG_CATEGORY_STATIC(var)                 /* NOP */
 #endif
 #define GST_DEBUG_CATEGORY_INIT(var,name,color,desc)   /* NOP */
+#define GST_DEBUG_CATEGORY_GET(var,name)               /* NOP */
 #define gst_debug_category_free(category)              /* NOP */
 #define gst_debug_category_set_threshold(category,level) /* NOP */
 #define gst_debug_category_reset_threshold(category)   /* NOP */
index c737da9..231dcd3 100644 (file)
@@ -39,6 +39,7 @@ EXPORTS
        _gst_debug_bin_to_dot_file_with_ts
        _gst_debug_category_new
        _gst_debug_dump_mem
+       _gst_debug_get_category
        _gst_debug_nameof_funcptr
        _gst_debug_register_funcptr
        _gst_element_error_printf