summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gst-libs/gst/Makefile.am4
-rw-r--r--gst-libs/gst/gconf/Makefile.am17
-rw-r--r--gst-libs/gst/gconf/gconf.c93
-rw-r--r--gst-libs/gst/gconf/gconf.h23
-rw-r--r--gst-libs/gst/gconf/test-gconf.c10
5 files changed, 145 insertions, 2 deletions
diff --git a/gst-libs/gst/Makefile.am b/gst-libs/gst/Makefile.am
index b0e84c3c..95e0b6d9 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 00000000..d1d10e86
--- /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 00000000..64630398
--- /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 00000000..53678544
--- /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 <gst/gst.h>
+#include <gconf/gconf-client.h>
+
+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 00000000..8ce459a8
--- /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"));
+}