From df0a66156b85c871abd23fd2f3ad8df6e2147118 Mon Sep 17 00:00:00 2001 From: Thomas Vander Stichele Date: Mon, 1 Jul 2002 15:39:58 +0000 Subject: [PATCH] gconf stuff Original commit message from CVS: gconf stuff --- gst-libs/gst/Makefile.am | 4 +- gst-libs/gst/gconf/Makefile.am | 17 ++++++ gst-libs/gst/gconf/gconf.c | 93 +++++++++++++++++++++++++++++++++ gst-libs/gst/gconf/gconf.h | 23 ++++++++ gst-libs/gst/gconf/test-gconf.c | 10 ++++ 5 files changed, 145 insertions(+), 2 deletions(-) create mode 100644 gst-libs/gst/gconf/Makefile.am create mode 100644 gst-libs/gst/gconf/gconf.c create mode 100644 gst-libs/gst/gconf/gconf.h create mode 100644 gst-libs/gst/gconf/test-gconf.c diff --git a/gst-libs/gst/Makefile.am b/gst-libs/gst/Makefile.am index b0e84c3c1f..95e0b6d98d 100644 --- a/gst-libs/gst/Makefile.am +++ b/gst-libs/gst/Makefile.am @@ -1,3 +1,3 @@ -SUBDIRS = audio idct resample riff floatcast +SUBDIRS = audio idct resample riff floatcast gconf -DIST_SUBDIRS = audio idct resample riff floatcast +DIST_SUBDIRS = audio idct resample riff floatcast gconf diff --git a/gst-libs/gst/gconf/Makefile.am b/gst-libs/gst/gconf/Makefile.am new file mode 100644 index 0000000000..d1d10e868e --- /dev/null +++ b/gst-libs/gst/gconf/Makefile.am @@ -0,0 +1,17 @@ +librarydir = $(prefix)/lib/gst + +library_LTLIBRARIES = libgstgconf.la + +libgstgconf_la_SOURCES = gconf.c + +libgstgconfincludedir = $(includedir)/@PACKAGE@-@VERSION@/gst/gconf +libgstgconfinclude_HEADERS = gconf.h + +noinst_PROGRAMS = test-gconf + +test_gconf_CFLAGS = $(GST_CFLAGS) $(GCONF_CFLAGS) +test_gconf_LDADD = $(GST_LIBS) $(GCONF_LIBS) -lgstgconf + +libgstgconf_la_LIBADD = $(GCONF_LIBS) +libgstgconf_la_CFLAGS = $(GST_CFLAGS) $(GCONF_CFLAGS) +libgstgconf_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) diff --git a/gst-libs/gst/gconf/gconf.c b/gst-libs/gst/gconf/gconf.c new file mode 100644 index 0000000000..6463039818 --- /dev/null +++ b/gst-libs/gst/gconf/gconf.c @@ -0,0 +1,93 @@ +/* + * this library handles interaction with GConf + */ + +#include "gconf.h" + +#define GST_GCONF_DIR "/system/gstreamer" + +static GConfClient *_gst_gconf_client = NULL; /* GConf connection */ + + +/* internal functions */ + +GConfClient * +gst_gconf_get_client (void) +{ + if (!_gst_gconf_client) + _gst_gconf_client = gconf_client_get_default (); + + return _gst_gconf_client; +} + +/* external functions */ + +gchar * +gst_gconf_get_string (const gchar *key) +{ + GError *error = NULL; + gchar *value = NULL; + gchar *full_key = g_strdup_printf ("%s/%s", GST_GCONF_DIR, key); + + g_print ("DEBUG: full key: %s\n", full_key); + + value = gconf_client_get_string (gst_gconf_get_client (), full_key, &error); + g_free (full_key); + + if (value) + return value; + else + return NULL; + // this is a good idea: return g_strdup (default_val); +} + +void +gst_gconf_set_string (const gchar *key, const gchar *value) +{ + gconf_client_set_string (gst_gconf_get_client (), key, value, NULL); +} + +gboolean +gst_gconf_render_bin (const gchar *key, GstElement **element) +{ + GstElement *bin; + gchar *pipeline; + GError *error = NULL; + gchar *value = NULL; + + value = gst_gconf_get_string (key); + + pipeline = g_strdup_printf ("bin.( %s )", value); + bin = GST_ELEMENT (gst_parse_launch (pipeline, &error)); + if (error) + { + g_print ("DEBUG: gstgconf: error parsing pipeline %s\n%s\n", + pipeline, error->message); + g_error_free (error); + return FALSE; + } + *element = bin; + return TRUE; +} + +/* +guint gst_gconf_notify_add (const gchar *key, + GConfClientNotifyFunc func, + gpointer user_data); +*/ + +static gboolean +plugin_init (GModule *module, GstPlugin *plugin) +{ + gst_plugin_set_longname (plugin, + "Convenience routines for GConf interaction"); + return TRUE; +} + +GstPluginDesc plugin_desc = { + GST_VERSION_MAJOR, + GST_VERSION_MINOR, + "gstgconf", + plugin_init +}; + diff --git a/gst-libs/gst/gconf/gconf.h b/gst-libs/gst/gconf/gconf.h new file mode 100644 index 0000000000..536785447e --- /dev/null +++ b/gst-libs/gst/gconf/gconf.h @@ -0,0 +1,23 @@ +#ifndef GST_GCONF_H +#define GST_GCONF_H + +/* + * this library handles interaction with GConf + */ + +#include +#include + +gchar * gst_gconf_get_string (const gchar *key); +void gst_gconf_set_string (const gchar *key, + const gchar *value); + +gboolean gst_gconf_render_bin (const gchar *key, + GstElement **element); + +/* +guint gst_gconf_notify_add (const gchar *key, + GConfClientNotifyFunc func, + gpointer user_data); +*/ +#endif /* GST_GCONF_H */ diff --git a/gst-libs/gst/gconf/test-gconf.c b/gst-libs/gst/gconf/test-gconf.c new file mode 100644 index 0000000000..8ce459a8bc --- /dev/null +++ b/gst-libs/gst/gconf/test-gconf.c @@ -0,0 +1,10 @@ +#include "gconf.h" + +int +main (int argc, char *argv[]) +{ + printf ("Default video sink : %s\n", + gst_gconf_get_string ("default/videosink")); + printf ("Default audio sink : %s\n", + gst_gconf_get_string ("default/audiosink")); +}