/* Initialize the tracing system */ void _priv_gst_tracing_init (void) { const gchar *env = g_getenv ("GST_TRACER_PLUGINS"); if (env != NULL && *env != '\0') { GstRegistry *registry = gst_registry_get (); GstPluginFeature *feature; GstTracerFactory *factory; gchar **t = g_strsplit_set (env, ";", 0); gint i = 0; gchar *params; GST_INFO ("enabling tracers: '%s'", env); if (G_N_ELEMENTS (_quark_strings) != GST_TRACER_QUARK_MAX) g_warning ("the quark table is not consistent! %d != %d", (gint) G_N_ELEMENTS (_quark_strings), GST_TRACER_QUARK_MAX); for (i = 0; i < GST_TRACER_QUARK_MAX; i++) { _priv_gst_tracer_quark_table[i] = g_quark_from_static_string (_quark_strings[i]); } _priv_tracers = g_hash_table_new (NULL, NULL); i = 0; while (t[i]) { // check t[i] for params if ((params = strchr (t[i], '('))) { gchar *end = strchr (¶ms[1], ')'); *params = '\0'; params++; if (end) *end = '\0'; } else { params = NULL; } GST_INFO ("checking tracer: '%s'", t[i]); if ((feature = gst_registry_lookup_feature (registry, t[i]))) { factory = GST_TRACER_FACTORY (gst_plugin_feature_load (feature)); if (factory) { GST_INFO_OBJECT (factory, "creating tracer: type-id=%u", (guint) factory->type); /* tracers register them self to the hooks */ gst_object_unref (g_object_new (factory->type, "params", params, NULL)); } else { GST_WARNING_OBJECT (feature, "loading plugin containing feature %s failed!", t[i]); } } else { GST_WARNING ("no tracer named '%s'", t[i]); } i++; } g_strfreev (t); } }
/* Initialize the tracing system */ void _priv_gst_tracing_init (void) { gint i = 0; const gchar *env = g_getenv ("GST_TRACERS"); /* We initialize the tracer sub system even if the end * user did not activate it through the env variable * so that external tools can use it anyway */ GST_DEBUG ("Initializing GstTracer"); _priv_tracers = g_hash_table_new (NULL, NULL); if (G_N_ELEMENTS (_quark_strings) != GST_TRACER_QUARK_MAX) g_warning ("the quark table is not consistent! %d != %d", (gint) G_N_ELEMENTS (_quark_strings), GST_TRACER_QUARK_MAX); for (i = 0; i < GST_TRACER_QUARK_MAX; i++) { _priv_gst_tracer_quark_table[i] = g_quark_from_static_string (_quark_strings[i]); } if (env != NULL && *env != '\0') { GstRegistry *registry = gst_registry_get (); GstPluginFeature *feature; GstTracerFactory *factory; gchar **t = g_strsplit_set (env, ";", 0); gchar *params; GST_INFO ("enabling tracers: '%s'", env); i = 0; while (t[i]) { // check t[i] for params if ((params = strchr (t[i], '('))) { gchar *end = strchr (¶ms[1], ')'); *params = '\0'; params++; if (end) *end = '\0'; } else { params = NULL; } GST_INFO ("checking tracer: '%s'", t[i]); if ((feature = gst_registry_lookup_feature (registry, t[i]))) { factory = GST_TRACER_FACTORY (gst_plugin_feature_load (feature)); if (factory) { GstTracer *tracer; GST_INFO_OBJECT (factory, "creating tracer: type-id=%u", (guint) factory->type); tracer = g_object_new (factory->type, "params", params, NULL); /* Clear floating flag */ gst_object_ref_sink (tracer); /* tracers register them self to the hooks */ gst_object_unref (tracer); } else { GST_WARNING_OBJECT (feature, "loading plugin containing feature %s failed!", t[i]); } } else { GST_WARNING ("no tracer named '%s'", t[i]); } i++; } g_strfreev (t); } }