303 |
sdl_close (&glob_sdl); |
sdl_close (&glob_sdl); |
304 |
} |
} |
305 |
|
|
306 |
static int sdl_init_out (HWVoiceOut *hw, int freq, int nchannels, audfmt_e fmt) |
static int sdl_init_out (HWVoiceOut *hw, audsettings_t *as) |
307 |
{ |
{ |
308 |
SDLVoiceOut *sdl = (SDLVoiceOut *) hw; |
SDLVoiceOut *sdl = (SDLVoiceOut *) hw; |
309 |
SDLAudioState *s = &glob_sdl; |
SDLAudioState *s = &glob_sdl; |
312 |
int endianess; |
int endianess; |
313 |
int err; |
int err; |
314 |
audfmt_e effective_fmt; |
audfmt_e effective_fmt; |
315 |
|
audsettings_t obt_as; |
316 |
|
|
317 |
if (nchannels != 2) { |
shift <<= as->nchannels == 2; |
|
dolog ("Can not init DAC. Bogus channel count %d\n", nchannels); |
|
|
return -1; |
|
|
} |
|
318 |
|
|
319 |
req.freq = freq; |
req.freq = as->freq; |
320 |
req.format = aud_to_sdlfmt (fmt, &shift); |
req.format = aud_to_sdlfmt (as->fmt, &shift); |
321 |
req.channels = nchannels; |
req.channels = as->nchannels; |
322 |
req.samples = conf.nb_samples; |
req.samples = conf.nb_samples; |
|
shift <<= nchannels == 2; |
|
|
|
|
323 |
req.callback = sdl_callback; |
req.callback = sdl_callback; |
324 |
req.userdata = sdl; |
req.userdata = sdl; |
325 |
|
|
333 |
return -1; |
return -1; |
334 |
} |
} |
335 |
|
|
336 |
|
obt_as.freq = obt.freq; |
337 |
|
obt_as.nchannels = obt.channels; |
338 |
|
obt_as.fmt = effective_fmt; |
339 |
|
|
340 |
audio_pcm_init_info ( |
audio_pcm_init_info ( |
341 |
&hw->info, |
&hw->info, |
342 |
obt.freq, |
&obt_as, |
|
obt.channels, |
|
|
effective_fmt, |
|
343 |
audio_need_to_swap_endian (endianess) |
audio_need_to_swap_endian (endianess) |
344 |
); |
); |
345 |
hw->bufsize = obt.samples << shift; |
hw->samples = obt.samples; |
346 |
|
|
347 |
s->initialized = 1; |
s->initialized = 1; |
348 |
s->exit = 0; |
s->exit = 0; |