From 0350ac56d2054503c52529a1831604dc59127c07 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Thu, 31 Aug 2006 23:16:23 +0000 Subject: [PATCH] Let SDL convert to valid Dreamcast audio formats instead of failing if the hardware can't be opened in a specific format. Not that you'd want to swallow the overhead on a Dreamcast, but hey, it's the SDL way. --- src/audio/dc/SDL_dcaudio.c | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/src/audio/dc/SDL_dcaudio.c b/src/audio/dc/SDL_dcaudio.c index b47acaefb..012255333 100644 --- a/src/audio/dc/SDL_dcaudio.c +++ b/src/audio/dc/SDL_dcaudio.c @@ -220,18 +220,31 @@ DCAUD_CloseAudio(_THIS) static int DCAUD_OpenAudio(_THIS, SDL_AudioSpec * spec) { - switch (spec->format & 0xff) { - case 8: - spec->format = AUDIO_S8; - break; - case 16: - spec->format = AUDIO_S16LSB; - break; - default: + SDL_AudioFormat test_format = SDL_FirstAudioFormat(spec->format); + int valid_datatype = 0; + while ((!valid_datatype) && (test_format)) { + spec->format = test_format; + switch (test_format) { + /* only formats Dreamcast accepts... */ + case AUDIO_S8: + case AUDIO_S16LSB: + valid_datatype = 1; + break; + + default: + test_format = SDL_NextAudioFormat(); + break; + } + } + + if (!valid_datatype) { /* shouldn't happen, but just in case... */ SDL_SetError("Unsupported audio format"); return (-1); } + if (spec->channels > 2) + spec->channels = 2; /* no more than stereo on the Dreamcast. */ + /* Update the fragment size as size in bytes */ SDL_CalculateAudioSpec(spec);