summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/modules/module-detect.c28
1 files changed, 17 insertions, 11 deletions
diff --git a/src/modules/module-detect.c b/src/modules/module-detect.c
index 3e4d2bf6..ebafa10d 100644
--- a/src/modules/module-detect.c
+++ b/src/modules/module-detect.c
@@ -135,23 +135,29 @@ static int detect_oss(pa_core *c, int just_one) {
line[strcspn(line, "\r\n")] = 0;
if (!b) {
- b = strcmp(line, "Audio devices:") == 0;
+ b = strcmp(line, "Audio devices:") == 0 || strcmp(line, "Installed devices:") == 0;
continue;
}
if (line[0] == 0)
break;
- if (sscanf(line, "%u: ", &device) != 1)
- continue;
-
- if (device == 0)
- snprintf(args, sizeof(args), "device=/dev/dsp");
- else
- snprintf(args, sizeof(args), "device=/dev/dsp%u", device);
-
- if (!pa_module_load(c, "module-oss", args))
- continue;
+ if (sscanf(line, "%u: ", &device) == 1) {
+ if (device == 0)
+ snprintf(args, sizeof(args), "device=/dev/dsp");
+ else
+ snprintf(args, sizeof(args), "device=/dev/dsp%u", device);
+
+ if (!pa_module_load(c, "module-oss", args))
+ continue;
+
+ } else if (sscanf(line, "pcm%u: ", &device) == 1) {
+ /* FreeBSD support, the devices are named /dev/dsp0.0, dsp0.1 and so on */
+ snprintf(args, sizeof(args), "device=/dev/dsp%u.0", device);
+
+ if (!pa_module_load(c, "module-oss", args))
+ continue;
+ }
n++;