From e513ed1810b083db0abc2c06abb8eb60948660bd Mon Sep 17 00:00:00 2001 From: Thibault Saunier Date: Fri, 29 Jun 2012 12:05:36 -0400 Subject: [PATCH] info: add a function to set debug threshold from a GST_DEBUG-style string Use the same format as with the GST_DEBUG environment variable. API: gst_debug_set_threshold_from_string() https://bugzilla.gnome.org/show_bug.cgi?id=679152 --- docs/gst/gstreamer-sections.txt | 1 + gst/gstinfo.c | 93 +++++++++++++++++++++++++++++++++++++++++ gst/gstinfo.h | 1 + win32/common/libgstreamer.def | 1 + 4 files changed, 96 insertions(+) diff --git a/docs/gst/gstreamer-sections.txt b/docs/gst/gstreamer-sections.txt index 5a6af74..26070dd 100644 --- a/docs/gst/gstreamer-sections.txt +++ b/docs/gst/gstreamer-sections.txt @@ -1144,6 +1144,7 @@ gst_debug_is_active gst_debug_set_colored gst_debug_is_colored gst_debug_set_default_threshold +gst_debug_set_threshold_from_string gst_debug_get_default_threshold gst_debug_set_threshold_for_name gst_debug_unset_threshold_for_name diff --git a/gst/gstinfo.c b/gst/gstinfo.c index 5929d10..6c3acbb 100644 --- a/gst/gstinfo.c +++ b/gst/gstinfo.c @@ -1601,6 +1601,94 @@ _gst_debug_get_category (const gchar * name) return NULL; } +static gboolean +parse_debug_category (gchar * str, const gchar ** category) +{ + if (!str) + return FALSE; + + /* works in place */ + g_strstrip (str); + + if (str[0] != '\0') { + *category = str; + return TRUE; + } + + return FALSE; +} + +static gboolean +parse_debug_level (gchar * str, GstDebugLevel * level) +{ + if (!str) + return FALSE; + + /* works in place */ + g_strstrip (str); + + if (str[0] != '\0' && str[1] == '\0' + && str[0] >= '0' && str[0] < '0' + GST_LEVEL_COUNT) { + *level = (GstDebugLevel) (str[0] - '0'); + return TRUE; + } + + return FALSE; +} + +/** + * gst_debug_set_threshold_from_string: + * @list: comma-separated list of "category:level" pairs to be used + * as debug logging levels + * @reset: %TRUE to clear all previously-set debug levels before setting + * new thresholds + * %FALSE if adding the threshold described by @list to the one already set. + * + * Sets the debug logging wanted in the same form as with the GST_DEBUG + * environment variable. You can use wildcards such as '*', but note that + * the order matters when you use wild cards, e.g. "foosrc:6,*src:3,*:2" sets + * everything to log level 2. + * + * Since: 1.2.0 + */ +void +gst_debug_set_threshold_from_string (const gchar * list, gboolean reset) +{ + gchar **split; + gchar **walk; + + g_assert (list); + + if (reset == TRUE) + gst_debug_set_default_threshold (0); + + split = g_strsplit (list, ",", 0); + + for (walk = split; *walk; walk++) { + if (strchr (*walk, ':')) { + gchar **values = g_strsplit (*walk, ":", 2); + + if (values[0] && values[1]) { + GstDebugLevel level; + const gchar *category; + + if (parse_debug_category (values[0], &category) + && parse_debug_level (values[1], &level)) + gst_debug_set_threshold_for_name (category, level); + } + + g_strfreev (values); + } else { + GstDebugLevel level; + + if (parse_debug_level (*walk, &level)) + gst_debug_set_default_threshold (level); + } + } + + g_strfreev (split); +} + /*** FUNCTION POINTERS ********************************************************/ static GHashTable *__gst_function_pointers; /* NULL */ @@ -1874,6 +1962,11 @@ gst_debug_is_colored (void) } void +gst_debug_set_threshold_from_string (const gchar * list) +{ +} + +void gst_debug_set_default_threshold (GstDebugLevel level) { } diff --git a/gst/gstinfo.h b/gst/gstinfo.h index 155851c..400d915 100644 --- a/gst/gstinfo.h +++ b/gst/gstinfo.h @@ -346,6 +346,7 @@ void gst_debug_set_default_threshold (GstDebugLevel level); GstDebugLevel gst_debug_get_default_threshold (void); void gst_debug_set_threshold_for_name (const gchar * name, GstDebugLevel level); +void gst_debug_set_threshold_from_string (const gchar * list, gboolean reset); void gst_debug_unset_threshold_for_name (const gchar * name); diff --git a/win32/common/libgstreamer.def b/win32/common/libgstreamer.def index 15eac39..4e5fcdb 100644 --- a/win32/common/libgstreamer.def +++ b/win32/common/libgstreamer.def @@ -339,6 +339,7 @@ EXPORTS gst_debug_set_colored gst_debug_set_default_threshold gst_debug_set_threshold_for_name + gst_debug_set_threshold_from_string gst_debug_unset_threshold_for_name gst_default_allocator_get_type gst_deinit -- 2.7.4