diff options
Diffstat (limited to 'gst-libs/gst')
-rw-r--r-- | gst-libs/gst/gconf/gconf.c | 44 | ||||
-rw-r--r-- | gst-libs/gst/gconf/gconf.h | 3 |
2 files changed, 43 insertions, 4 deletions
diff --git a/gst-libs/gst/gconf/gconf.c b/gst-libs/gst/gconf/gconf.c index 3da2c310..f14a0a6c 100644 --- a/gst-libs/gst/gconf/gconf.c +++ b/gst-libs/gst/gconf/gconf.c @@ -11,7 +11,7 @@ static GConfClient *_gst_gconf_client = NULL; /* GConf connection */ /* internal functions */ -GConfClient * +static GConfClient * gst_gconf_get_client (void) { if (!_gst_gconf_client) @@ -19,9 +19,10 @@ gst_gconf_get_client (void) return _gst_gconf_client; } + /* go through a bin, finding the one pad that is unconnected in the given * * direction, and return that pad */ -GstPad * +static GstPad * gst_bin_find_unconnected_pad (GstBin *bin, GstPadDirection direction) { GstPad *pad = NULL; @@ -117,11 +118,12 @@ gst_gconf_render_bin_from_description (const gchar *description) GstElement * gst_gconf_render_bin_from_key (const gchar *key) { - GstElement *bin; + GstElement *bin = NULL; gchar *value; value = gst_gconf_get_string (key); - bin = gst_gconf_render_bin_from_description (value); + if (value) + bin = gst_gconf_render_bin_from_description (value); return bin; } @@ -131,6 +133,40 @@ guint gst_gconf_notify_add (const gchar *key, gpointer user_data); */ +GstElement * +gst_gconf_get_default_audio_sink (void) +{ + GstElement *ret = gst_gconf_render_bin_from_key ("default/audiosink"); + + if (!ret) { + ret = gst_element_factory_make ("osssink", NULL); + + if (!ret) + g_warning ("No GConf default audio sink key and osssink doesn't work"); + else + g_warning ("GConf audio sink not found, using osssink"); + } + + return ret; +} + +GstElement * +gst_gconf_get_default_video_sink (void) +{ + GstElement *ret = gst_gconf_render_bin_from_key ("default/videosink"); + + if (!ret) { + ret = gst_element_factory_make ("xvideosink", NULL); + + if (!ret) + g_warning ("No GConf default video sink key and xvideosink doesn't work"); + else + g_warning ("GConf video sink not found, using xvideosink"); + } + + return ret; +} + static gboolean plugin_init (GModule *module, GstPlugin *plugin) { diff --git a/gst-libs/gst/gconf/gconf.h b/gst-libs/gst/gconf/gconf.h index a054dc3e..c1ed9d42 100644 --- a/gst-libs/gst/gconf/gconf.h +++ b/gst-libs/gst/gconf/gconf.h @@ -15,6 +15,9 @@ void gst_gconf_set_string (const gchar *key, GstElement * gst_gconf_render_bin_from_key (const gchar *key); GstElement * gst_gconf_render_bin_from_description (const gchar *description); +GstElement * gst_gconf_get_default_video_sink (void); +GstElement * gst_gconf_get_default_audio_sink (void); + /* guint gst_gconf_notify_add (const gchar *key, GConfClientNotifyFunc func, |