diff options
-rw-r--r-- | ChangeLog | 12 | ||||
-rw-r--r-- | sys/oss4/oss4-mixer.c | 5 | ||||
-rw-r--r-- | sys/oss4/oss4-property-probe.c | 18 | ||||
-rw-r--r-- | sys/oss4/oss4-property-probe.h | 4 | ||||
-rw-r--r-- | sys/oss4/oss4-sink.c | 7 | ||||
-rw-r--r-- | sys/oss4/oss4-source.c | 8 |
6 files changed, 52 insertions, 2 deletions
@@ -1,3 +1,15 @@ +2008-05-22 Tim-Philipp Müller <tim.muller at collabora co uk> + + * 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 <wim.taymans@collabora.co.uk> Patch by: Sjoerd Simons <sjoerd at luon dot net> 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: |