summaryrefslogtreecommitdiffstats
path: root/sys/oss4
diff options
context:
space:
mode:
authorTim-Philipp Müller <tim@centricular.net>2008-05-22 15:14:26 +0000
committerTim-Philipp Müller <tim@centricular.net>2008-05-22 15:14:26 +0000
commit80ef4ca4d7449550b2c5aa05d55d7c697a7c1fab (patch)
tree800d89d8acdb6af889aa56d44253c3d1f889684c /sys/oss4
parentb3bc29bc641b8a4c380d100b60d709aa08e61f28 (diff)
downloadgst-plugins-bad-80ef4ca4d7449550b2c5aa05d55d7c697a7c1fab.tar.gz
gst-plugins-bad-80ef4ca4d7449550b2c5aa05d55d7c697a7c1fab.tar.bz2
gst-plugins-bad-80ef4ca4d7449550b2c5aa05d55d7c697a7c1fab.zip
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/oss4')
-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 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: