From 80ef4ca4d7449550b2c5aa05d55d7c697a7c1fab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim-Philipp=20M=C3=BCller?= Date: Thu, 22 May 2008 15:14:26 +0000 Subject: 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). --- ChangeLog | 12 ++++++++++++ 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 +++++++- 6 files changed, 52 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 76d20e3d..0722b934 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2008-05-22 Tim-Philipp Müller + + * 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). + 2008-05-22 Wim Taymans Patch by: Sjoerd Simons diff --git a/sys/oss4/oss4-mixer.c b/sys/oss4/oss4-mixer.c index 62e271e5..8970e0fd 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 e4b56679..9a625d84 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 26ee8b79..707af024 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 1cff22a5..79bca8a2 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..c7579721 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: -- cgit v1.2.1