changeset 1999:dd4b184b3050

Let OS/2 DART backend use SDL converters at a higher level (would fail if DART didn't directly support AudioSpec before).
author Ryan C. Gordon <icculus@icculus.org>
date Thu, 31 Aug 2006 22:40:53 +0000
parents cbac0f77a799
children 8c05b048c32c
files src/audio/dart/SDL_dart.c
diffstat 1 files changed, 29 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/src/audio/dart/SDL_dart.c	Thu Aug 31 22:22:34 2006 +0000
+++ b/src/audio/dart/SDL_dart.c	Thu Aug 31 22:40:53 2006 +0000
@@ -74,6 +74,7 @@
 int
 DART_OpenAudio(_THIS, SDL_AudioSpec * spec)
 {
+    SDL_AudioFormat test_format = SDL_FirstAudioFormat(spec->format);
     MCI_AMP_OPEN_PARMS AmpOpenParms;
     MCI_GENERIC_PARMS GenericParms;
     int iDeviceOrd = 0;         // Default device to be used
@@ -105,25 +106,39 @@
     iDeviceOrd = AmpOpenParms.usDeviceID;
 
     // Determine the audio parameters from the AudioSpec
-    switch (spec->format & 0xFF) {
-    case 8:
-        /* Unsigned 8 bit audio data */
-        spec->format = AUDIO_U8;
-        iSilence = 0x80;
-        iBits = 8;
-        break;
-    case 16:
-        /* Signed 16 bit audio data */
-        spec->format = AUDIO_S16;
-        iSilence = 0x00;
-        iBits = 16;
-        break;
-    default:
+    if (spec->channels > 2)
+        spec->channels = 2;  // !!! FIXME: more than stereo support in OS/2?
+
+    while (test_format) {
+        spec->format = test_format;
+        switch (test_format) {
+            case AUDIO_U8:
+                // Unsigned 8 bit audio data
+                iSilence = 0x80;
+                iBits = 8;
+                break;
+
+            case AUDIO_S16LSB:
+                // Signed 16 bit audio data
+                iSilence = 0x00;
+                iBits = 16;
+                break;
+
+            // !!! FIXME: int32?
+
+            default:
+                test_format = SDL_NextAudioFormat();
+                break;
+        }
+    }
+
+    if (!test_format) { // shouldn't happen, but just in case...
         // Close DART, and exit with error code!
         mciSendCommand(iDeviceOrd, MCI_CLOSE, MCI_WAIT, &GenericParms, 0);
         SDL_SetError("Unsupported audio format");
         return (-1);
     }
+
     iFreq = spec->freq;
     iChannels = spec->channels;
     /* Update the fragment size as size in bytes */