summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorTim-Philipp Müller <tim@centricular.net>2008-05-22 15:14:26 +0000
committerTim-Philipp Müller <tim.muller@collabora.co.uk>2010-05-11 19:02:53 +0100
commit385cd9a804db9d725ffbbd6b823a0a6b1ce00d77 (patch)
tree1ca1c92056d29ee2795ea17750897ea42a2208a4 /sys
parent0e4d8ef5fe0df792109c0a8349dd74fb678fe318 (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.c5
-rw-r--r--sys/oss4/oss4-property-probe.c18
-rw-r--r--sys/oss4/oss4-property-probe.h4
-rw-r--r--sys/oss4/oss4-sink.c7
-rw-r--r--sys/oss4/oss4-source.c8
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: