diff options
author | Tim-Philipp Müller <tim@centricular.net> | 2008-05-22 15:14:26 +0000 |
---|---|---|
committer | Tim-Philipp Müller <tim.muller@collabora.co.uk> | 2010-05-11 19:02:53 +0100 |
commit | 385cd9a804db9d725ffbbd6b823a0a6b1ce00d77 (patch) | |
tree | 1ca1c92056d29ee2795ea17750897ea42a2208a4 /sys | |
parent | 0e4d8ef5fe0df792109c0a8349dd74fb678fe318 (diff) |
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).
Diffstat (limited to 'sys')
-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 |
5 files changed, 40 insertions, 2 deletions
diff --git a/sys/oss4/oss4-mixer.c b/sys/oss4/oss4-mixer.c index 62e271e5a..8970e0fd2 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 e4b566799..9a625d84f 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 26ee8b799..707af024c 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 1cff22a51..79bca8a2d 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 90c12b0f8..c75797212 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: |