src/audio/sndio/SDL_sndioaudio.c
changeset 8867 540acbf32d5b
parent 8149 681eb46b8ac4
child 9393 ed79a66e57e5
equal deleted inserted replaced
8866:49562091afe1 8867:540acbf32d5b
   207     SDL_memset(this->hidden, 0, sizeof(*this->hidden));
   207     SDL_memset(this->hidden, 0, sizeof(*this->hidden));
   208 
   208 
   209     this->hidden->mixlen = this->spec.size;
   209     this->hidden->mixlen = this->spec.size;
   210 
   210 
   211     /* !!! FIXME: SIO_DEVANY can be a specific device... */
   211     /* !!! FIXME: SIO_DEVANY can be a specific device... */
   212     if ((this->hidden->dev = SNDIO_sio_open(NULL, SIO_PLAY, 0)) == NULL) {
   212     if ((this->hidden->dev = SNDIO_sio_open(SIO_DEVANY, SIO_PLAY, 0)) == NULL) {
   213         SNDIO_CloseDevice(this);
   213         SNDIO_CloseDevice(this);
   214         return SDL_SetError("sio_open() failed");
   214         return SDL_SetError("sio_open() failed");
   215     }
   215     }
   216 
   216 
   217     SNDIO_sio_initpar(&par);
   217     SNDIO_sio_initpar(&par);
   227         if (!SDL_AUDIO_ISFLOAT(test_format)) {
   227         if (!SDL_AUDIO_ISFLOAT(test_format)) {
   228             par.le = SDL_AUDIO_ISLITTLEENDIAN(test_format) ? 1 : 0;
   228             par.le = SDL_AUDIO_ISLITTLEENDIAN(test_format) ? 1 : 0;
   229             par.sig = SDL_AUDIO_ISSIGNED(test_format) ? 1 : 0;
   229             par.sig = SDL_AUDIO_ISSIGNED(test_format) ? 1 : 0;
   230             par.bits = SDL_AUDIO_BITSIZE(test_format);
   230             par.bits = SDL_AUDIO_BITSIZE(test_format);
   231 
   231 
   232             if (SNDIO_sio_setpar(this->hidden->dev, &par) == 1) {
   232             if (SNDIO_sio_setpar(this->hidden->dev, &par) == 0) {
       
   233                 continue;
       
   234             }
       
   235             if (SNDIO_sio_getpar(this->hidden->dev, &par) == 0) {
       
   236                 SNDIO_CloseDevice(this);
       
   237                 return SDL_SetError("sio_getpar() failed");
       
   238             }
       
   239             if (par.bps != SIO_BPS(par.bits)) {
       
   240                 continue;
       
   241             }
       
   242             if ((par.bits == 8 * par.bps) || (par.msb)) {
   233                 status = 0;
   243                 status = 0;
   234                 break;
   244                 break;
   235             }
   245             }
   236         }
   246         }
   237         test_format = SDL_NextAudioFormat();
   247         test_format = SDL_NextAudioFormat();
   240     if (status < 0) {
   250     if (status < 0) {
   241         SNDIO_CloseDevice(this);
   251         SNDIO_CloseDevice(this);
   242         return SDL_SetError("sndio: Couldn't find any hardware audio formats");
   252         return SDL_SetError("sndio: Couldn't find any hardware audio formats");
   243     }
   253     }
   244 
   254 
   245     if (SNDIO_sio_getpar(this->hidden->dev, &par) == 0) {
   255     if ((par.bps == 4) && (par.sig) && (par.le))
   246         SNDIO_CloseDevice(this);
       
   247         return SDL_SetError("sio_getpar() failed");
       
   248     }
       
   249 
       
   250     if ((par.bits == 32) && (par.sig) && (par.le))
       
   251         this->spec.format = AUDIO_S32LSB;
   256         this->spec.format = AUDIO_S32LSB;
   252     else if ((par.bits == 32) && (par.sig) && (!par.le))
   257     else if ((par.bps == 4) && (par.sig) && (!par.le))
   253         this->spec.format = AUDIO_S32MSB;
   258         this->spec.format = AUDIO_S32MSB;
   254     else if ((par.bits == 16) && (par.sig) && (par.le))
   259     else if ((par.bps == 2) && (par.sig) && (par.le))
   255         this->spec.format = AUDIO_S16LSB;
   260         this->spec.format = AUDIO_S16LSB;
   256     else if ((par.bits == 16) && (par.sig) && (!par.le))
   261     else if ((par.bps == 2) && (par.sig) && (!par.le))
   257         this->spec.format = AUDIO_S16MSB;
   262         this->spec.format = AUDIO_S16MSB;
   258     else if ((par.bits == 16) && (!par.sig) && (par.le))
   263     else if ((par.bps == 2) && (!par.sig) && (par.le))
   259         this->spec.format = AUDIO_U16LSB;
   264         this->spec.format = AUDIO_U16LSB;
   260     else if ((par.bits == 16) && (!par.sig) && (!par.le))
   265     else if ((par.bps == 2) && (!par.sig) && (!par.le))
   261         this->spec.format = AUDIO_U16MSB;
   266         this->spec.format = AUDIO_U16MSB;
   262     else if ((par.bits == 8) && (par.sig))
   267     else if ((par.bps == 1) && (par.sig))
   263         this->spec.format = AUDIO_S8;
   268         this->spec.format = AUDIO_S8;
   264     else if ((par.bits == 8) && (!par.sig))
   269     else if ((par.bps == 1) && (!par.sig))
   265         this->spec.format = AUDIO_U8;
   270         this->spec.format = AUDIO_U8;
   266     else {
   271     else {
   267         SNDIO_CloseDevice(this);
   272         SNDIO_CloseDevice(this);
   268         return SDL_SetError("sndio: Got unsupported hardware audio format.");
   273         return SDL_SetError("sndio: Got unsupported hardware audio format.");
   269     }
   274     }