Fixed bug 3484 - DSP driver does not detect /dev/dsp0
authorSam Lantinga <slouken@libsdl.org>
Fri, 11 Nov 2016 12:41:06 -0800
changeset 10603d2c8ae6ceac8
parent 10602 20855a38e048
child 10604 27d0fb08d755
Fixed bug 3484 - DSP driver does not detect /dev/dsp0

Tobias Kortkamp

using SDL 2.0.5 (and a repository checkout) on FreeBSD 11.0 I get this output
from testaudioinfo with SDL_AUDIODRIVER=dsp:

INFO: Found 8 output devices:
INFO: 0: /dev/dsp
INFO: 1: /dev/dsp1
INFO: 2: /dev/dsp2
INFO: 3: /dev/dsp3
INFO: 4: /dev/dsp4
INFO: 5: /dev/dsp5
INFO: 6: /dev/dsp6
INFO: 7: /dev/dsp7
INFO:
INFO: Found 3 capture devices:
INFO: 0: /dev/dsp
INFO: 1: /dev/dsp4
INFO: 2: /dev/dsp5
INFO:

This is /dev/sndstat:

Installed devices:
pcm0: <NVIDIA (0x0040) (HDMI/DP 8ch)> (play)
pcm1: <NVIDIA (0x0040) (HDMI/DP 8ch)> (play)
pcm2: <NVIDIA (0x0040) (HDMI/DP 8ch)> (play)
pcm3: <NVIDIA (0x0040) (HDMI/DP 8ch)> (play)
pcm4: <Realtek ALC887 (Rear Analog 7.1/2.0)> (play/rec)
pcm5: <Realtek ALC887 (Front Analog)> (play/rec) default
pcm6: <Realtek ALC887 (Rear Digital)> (play)
pcm7: <Realtek ALC887 (Onboard Digital)> (play)
No devices installed from userspace.

I'd expect to find /dev/dsp0 in the output device list. It's not detected
because of a a small logic error in SDL_audiodev.c (see attached patch).

With the patch applied I get this which is what I'd expect:

INFO: Found 9 output devices:
INFO: 0: /dev/dsp
INFO: 1: /dev/dsp0
INFO: 2: /dev/dsp1
INFO: 3: /dev/dsp2
INFO: 4: /dev/dsp3
INFO: 5: /dev/dsp4
INFO: 6: /dev/dsp5
INFO: 7: /dev/dsp6
INFO: 8: /dev/dsp7
src/audio/SDL_audiodev.c
     1.1 --- a/src/audio/SDL_audiodev.c	Fri Nov 11 04:35:06 2016 -0800
     1.2 +++ b/src/audio/SDL_audiodev.c	Fri Nov 11 12:41:06 2016 -0800
     1.3 @@ -103,9 +103,10 @@
     1.4  
     1.5      if (SDL_strlen(audiodev) < (sizeof(audiopath) - 3)) {
     1.6          int instance = 0;
     1.7 -        while (instance++ <= 64) {
     1.8 +        while (instance <= 64) {
     1.9              SDL_snprintf(audiopath, SDL_arraysize(audiopath),
    1.10                           "%s%d", audiodev, instance);
    1.11 +            instance++;
    1.12              test_device(iscapture, audiopath, flags, test);
    1.13          }
    1.14      }