summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog12
-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
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 <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: