Fixed bug 2580 - sndio backend improvements
authorSam Lantinga <slouken@libsdl.org>
Sun, 15 Jun 2014 17:26:30 -0700
changeset 8867540acbf32d5b
parent 8866 49562091afe1
child 8868 55b16e3a3fc4
Fixed bug 2580 - sndio backend improvements

Brad Smith

Attached is patch from the OpenBSD ports tree to add 24-bit support to the sndio backend and to make use of the sio_open() option SIO_DEVANY.
src/audio/sndio/SDL_sndioaudio.c
     1.1 --- a/src/audio/sndio/SDL_sndioaudio.c	Sun Jun 15 17:18:05 2014 -0700
     1.2 +++ b/src/audio/sndio/SDL_sndioaudio.c	Sun Jun 15 17:26:30 2014 -0700
     1.3 @@ -209,7 +209,7 @@
     1.4      this->hidden->mixlen = this->spec.size;
     1.5  
     1.6      /* !!! FIXME: SIO_DEVANY can be a specific device... */
     1.7 -    if ((this->hidden->dev = SNDIO_sio_open(NULL, SIO_PLAY, 0)) == NULL) {
     1.8 +    if ((this->hidden->dev = SNDIO_sio_open(SIO_DEVANY, SIO_PLAY, 0)) == NULL) {
     1.9          SNDIO_CloseDevice(this);
    1.10          return SDL_SetError("sio_open() failed");
    1.11      }
    1.12 @@ -229,7 +229,17 @@
    1.13              par.sig = SDL_AUDIO_ISSIGNED(test_format) ? 1 : 0;
    1.14              par.bits = SDL_AUDIO_BITSIZE(test_format);
    1.15  
    1.16 -            if (SNDIO_sio_setpar(this->hidden->dev, &par) == 1) {
    1.17 +            if (SNDIO_sio_setpar(this->hidden->dev, &par) == 0) {
    1.18 +                continue;
    1.19 +            }
    1.20 +            if (SNDIO_sio_getpar(this->hidden->dev, &par) == 0) {
    1.21 +                SNDIO_CloseDevice(this);
    1.22 +                return SDL_SetError("sio_getpar() failed");
    1.23 +            }
    1.24 +            if (par.bps != SIO_BPS(par.bits)) {
    1.25 +                continue;
    1.26 +            }
    1.27 +            if ((par.bits == 8 * par.bps) || (par.msb)) {
    1.28                  status = 0;
    1.29                  break;
    1.30              }
    1.31 @@ -242,26 +252,21 @@
    1.32          return SDL_SetError("sndio: Couldn't find any hardware audio formats");
    1.33      }
    1.34  
    1.35 -    if (SNDIO_sio_getpar(this->hidden->dev, &par) == 0) {
    1.36 -        SNDIO_CloseDevice(this);
    1.37 -        return SDL_SetError("sio_getpar() failed");
    1.38 -    }
    1.39 -
    1.40 -    if ((par.bits == 32) && (par.sig) && (par.le))
    1.41 +    if ((par.bps == 4) && (par.sig) && (par.le))
    1.42          this->spec.format = AUDIO_S32LSB;
    1.43 -    else if ((par.bits == 32) && (par.sig) && (!par.le))
    1.44 +    else if ((par.bps == 4) && (par.sig) && (!par.le))
    1.45          this->spec.format = AUDIO_S32MSB;
    1.46 -    else if ((par.bits == 16) && (par.sig) && (par.le))
    1.47 +    else if ((par.bps == 2) && (par.sig) && (par.le))
    1.48          this->spec.format = AUDIO_S16LSB;
    1.49 -    else if ((par.bits == 16) && (par.sig) && (!par.le))
    1.50 +    else if ((par.bps == 2) && (par.sig) && (!par.le))
    1.51          this->spec.format = AUDIO_S16MSB;
    1.52 -    else if ((par.bits == 16) && (!par.sig) && (par.le))
    1.53 +    else if ((par.bps == 2) && (!par.sig) && (par.le))
    1.54          this->spec.format = AUDIO_U16LSB;
    1.55 -    else if ((par.bits == 16) && (!par.sig) && (!par.le))
    1.56 +    else if ((par.bps == 2) && (!par.sig) && (!par.le))
    1.57          this->spec.format = AUDIO_U16MSB;
    1.58 -    else if ((par.bits == 8) && (par.sig))
    1.59 +    else if ((par.bps == 1) && (par.sig))
    1.60          this->spec.format = AUDIO_S8;
    1.61 -    else if ((par.bits == 8) && (!par.sig))
    1.62 +    else if ((par.bps == 1) && (!par.sig))
    1.63          this->spec.format = AUDIO_U8;
    1.64      else {
    1.65          SNDIO_CloseDevice(this);