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);