#elif defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__DragonFly__)
#include <pthread.h>
#endif
-#include <signal.h>
#endif
#define AUDIO_CAP "sdl"
return sdl_post (s, forfn);
}
-static int aud_to_sdlfmt (audfmt_e fmt, int *shift)
+static int aud_to_sdlfmt (audfmt_e fmt)
{
switch (fmt) {
case AUD_FMT_S8:
- *shift = 0;
return AUDIO_S8;
case AUD_FMT_U8:
- *shift = 0;
return AUDIO_U8;
case AUD_FMT_S16:
- *shift = 1;
return AUDIO_S16LSB;
case AUD_FMT_U16:
- *shift = 1;
return AUDIO_U16LSB;
default:
}
}
-static int sdl_to_audfmt (int sdlfmt, audfmt_e *fmt, int *endianess)
+static int sdl_to_audfmt(int sdlfmt, audfmt_e *fmt, int *endianness)
{
switch (sdlfmt) {
case AUDIO_S8:
- *endianess = 0;
+ *endianness = 0;
*fmt = AUD_FMT_S8;
break;
case AUDIO_U8:
- *endianess = 0;
+ *endianness = 0;
*fmt = AUD_FMT_U8;
break;
case AUDIO_S16LSB:
- *endianess = 0;
+ *endianness = 0;
*fmt = AUD_FMT_S16;
break;
case AUDIO_U16LSB:
- *endianess = 0;
+ *endianness = 0;
*fmt = AUD_FMT_U16;
break;
case AUDIO_S16MSB:
- *endianess = 1;
+ *endianness = 1;
*fmt = AUD_FMT_S16;
break;
case AUDIO_U16MSB:
- *endianess = 1;
+ *endianness = 1;
*fmt = AUD_FMT_U16;
break;
{
int status;
#ifndef _WIN32
+ int err;
sigset_t new, old;
/* Make sure potential threads created by SDL don't hog signals. */
- sigfillset (&new);
- pthread_sigmask (SIG_BLOCK, &new, &old);
+ err = sigfillset (&new);
+ if (err) {
+ dolog ("sdl_open: sigfillset failed: %s\n", strerror (errno));
+ return -1;
+ }
+ err = pthread_sigmask (SIG_BLOCK, &new, &old);
+ if (err) {
+ dolog ("sdl_open: pthread_sigmask failed: %s\n", strerror (err));
+ return -1;
+ }
#endif
status = SDL_OpenAudio (req, obt);
}
#ifndef _WIN32
- pthread_sigmask (SIG_SETMASK, &old, NULL);
+ err = pthread_sigmask (SIG_SETMASK, &old, NULL);
+ if (err) {
+ dolog ("sdl_open: pthread_sigmask (restore) failed: %s\n",
+ strerror (errno));
+ /* We have failed to restore original signal mask, all bets are off,
+ so exit the process */
+ exit (EXIT_FAILURE);
+ }
#endif
return status;
}
SDLVoiceOut *sdl = (SDLVoiceOut *) hw;
SDLAudioState *s = &glob_sdl;
SDL_AudioSpec req, obt;
- int shift;
- int endianess;
+ int endianness;
int err;
audfmt_e effective_fmt;
struct audsettings obt_as;
- shift <<= as->nchannels == 2;
-
req.freq = as->freq;
- req.format = aud_to_sdlfmt (as->fmt, &shift);
+ req.format = aud_to_sdlfmt (as->fmt);
req.channels = as->nchannels;
req.samples = conf.nb_samples;
req.callback = sdl_callback;
return -1;
}
- err = sdl_to_audfmt (obt.format, &effective_fmt, &endianess);
+ err = sdl_to_audfmt(obt.format, &effective_fmt, &endianness);
if (err) {
sdl_close (s);
return -1;
obt_as.freq = obt.freq;
obt_as.nchannels = obt.channels;
obt_as.fmt = effective_fmt;
- obt_as.endianness = endianess;
+ obt_as.endianness = endianness;
audio_pcm_init_info (&hw->info, &obt_as);
hw->samples = obt.samples;