From 385cd9a804db9d725ffbbd6b823a0a6b1ce00d77 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Tim-Philipp=20M=C3=BCller?= Date: Thu, 22 May 2008 15:14:26 +0000 Subject: [PATCH] sys/oss4/: Make device-name probing in NULL state work better (e.g. for the gnome-control-center sound capplet). Original commit message from CVS: * sys/oss4/oss4-mixer.c: (gst_oss4_mixer_open): * sys/oss4/oss4-property-probe.c: (gst_oss4_property_probe_find_device_name), (gst_oss4_property_probe_find_device_name_nofd): * sys/oss4/oss4-property-probe.h: * sys/oss4/oss4-sink.c: (gst_oss4_sink_get_property): * sys/oss4/oss4-source.c: (gst_oss4_source_get_property): Make device-name probing in NULL state work better (e.g. for the gnome-control-center sound capplet). --- sys/oss4/oss4-mixer.c | 5 +++++ sys/oss4/oss4-property-probe.c | 18 ++++++++++++++++++ sys/oss4/oss4-property-probe.h | 4 ++++ sys/oss4/oss4-sink.c | 7 ++++++- sys/oss4/oss4-source.c | 8 +++++++- 5 files changed, 40 insertions(+), 2 deletions(-) diff --git a/sys/oss4/oss4-mixer.c b/sys/oss4/oss4-mixer.c index 62e271e..8970e0f 100644 --- a/sys/oss4/oss4-mixer.c +++ b/sys/oss4/oss4-mixer.c @@ -303,6 +303,9 @@ open_failed: GST_ELEMENT_ERROR (mixer, RESOURCE, OPEN_READ_WRITE, (_("Could not open audio device for mixer control handling.")), GST_ERROR_SYSTEM); + } else { + GST_DEBUG_OBJECT (mixer, "open failed: %s (ignoring errors)", + g_strerror (errno)); } g_free (device); return FALSE; @@ -315,6 +318,8 @@ legacy_oss: (_("Could not open audio device for mixer control handling." "This version of the Open Sound System is not supported by this " "element.")), ("Try the 'ossmixer' element instead")); + } else { + GST_DEBUG_OBJECT (mixer, "open failed: legacy oss (ignoring errors)"); } g_free (device); return FALSE; diff --git a/sys/oss4/oss4-property-probe.c b/sys/oss4/oss4-property-probe.c index e4b5667..9a625d8 100644 --- a/sys/oss4/oss4-property-probe.c +++ b/sys/oss4/oss4-property-probe.c @@ -163,6 +163,24 @@ gst_oss4_property_probe_find_device_name (GstObject * obj, int fd, return (name != NULL); } +gboolean +gst_oss4_property_probe_find_device_name_nofd (GstObject * obj, + const gchar * device_handle, gchar ** device_name) +{ + gboolean res; + int fd; + + fd = open ("/dev/mixer", O_RDONLY); + if (fd < 0) + return FALSE; + + res = gst_oss4_property_probe_find_device_name (obj, fd, device_handle, + device_name); + + close (fd); + return res; +} + static GList * gst_oss4_property_probe_get_mixer_devices (GstObject * obj, int fd, struct oss_sysinfo *si) diff --git a/sys/oss4/oss4-property-probe.h b/sys/oss4/oss4-property-probe.h index 26ee8b7..707af02 100644 --- a/sys/oss4/oss4-property-probe.h +++ b/sys/oss4/oss4-property-probe.h @@ -29,6 +29,10 @@ gboolean gst_oss4_property_probe_find_device_name (GstObject * obj, const gchar * device_handle, gchar ** device_name); +gboolean gst_oss4_property_probe_find_device_name_nofd (GstObject * obj, + const gchar * device_handle, + gchar ** device_name); + #endif /* GST_OSS4_PROPERTY_PROBE_H */ diff --git a/sys/oss4/oss4-sink.c b/sys/oss4/oss4-sink.c index 1cff22a..79bca8a 100644 --- a/sys/oss4/oss4-sink.c +++ b/sys/oss4/oss4-sink.c @@ -255,7 +255,12 @@ gst_oss4_sink_get_property (GObject * object, guint prop_id, g_value_set_string (value, oss->device_name); gst_oss4_sink_close (GST_AUDIO_SINK (oss)); } else { - g_value_set_string (value, oss->device_name); + gchar *name = NULL; + + gst_oss4_property_probe_find_device_name_nofd (GST_OBJECT (oss), + oss->device, &name); + g_value_set_string (value, name); + g_free (name); } } else { g_value_set_string (value, oss->device_name); diff --git a/sys/oss4/oss4-source.c b/sys/oss4/oss4-source.c index 90c12b0f..c757972 100644 --- a/sys/oss4/oss4-source.c +++ b/sys/oss4/oss4-source.c @@ -256,11 +256,17 @@ gst_oss4_source_get_property (GObject * object, guint prop_id, g_value_set_string (value, oss->device_name); gst_oss4_source_close (GST_AUDIO_SRC (oss)); } else { - g_value_set_string (value, NULL); + gchar *name = NULL; + + gst_oss4_property_probe_find_device_name_nofd (GST_OBJECT (oss), + oss->device, &name); + g_value_set_string (value, name); + g_free (name); } } else { g_value_set_string (value, oss->device_name); } + GST_OBJECT_UNLOCK (oss); break; default: -- 2.7.4