changeset 641:c3852e49a610

Change how audio configuration works.
author Matti Hamalainen <ccr@tnsp.org>
date Mon, 15 Apr 2013 09:20:45 +0300
parents 55743025d628
children 0888971cbff8
files dmengine.h dmsimple.c
diffstat 2 files changed, 75 insertions(+), 41 deletions(-) [+]
line wrap: on
line diff
--- a/dmengine.h	Mon Apr 15 08:58:02 2013 +0300
+++ b/dmengine.h	Mon Apr 15 09:20:45 2013 +0300
@@ -25,9 +25,20 @@
 
 
 // Video setup type
-#define DM_VSETUP_NONE        0x00  // No video setup, just set window/screen to what demo specifies
-#define DM_VSETUP_ASPECT      0x01  // Only modes that match the optVidAspect aspect ratio are ok
-#define DM_VSETUP_ANY         0x02  // Any available mode is okay, the code can adapt
+enum
+{
+    DM_VSETUP_NONE    = 0x00,  // No video setup, just set window/screen to what demo specifies
+    DM_VSETUP_ASPECT  = 0x01,  // Only modes that match the optVidAspect aspect ratio are ok
+    DM_VSETUP_ANY     = 0x02,  // Any available mode is okay, the code can adapt
+};
+
+// Audio setup type
+enum
+{
+    DM_ASETUP_NONE    = 0,
+    DM_ASETUP_JSS     = 1,
+    DM_ASETUP_TREMOR  = 2,
+};
 
 
 
@@ -225,6 +236,7 @@
     SDL_Surface *screen;
     SDL_Event event;
     SDL_AudioSpec optAfmt;
+    int optAudioSetup;
 
     int optVidWidth, optVidHeight,
         optVidDepth, optVFlags,
--- a/dmsimple.c	Mon Apr 15 08:58:02 2013 +0300
+++ b/dmsimple.c	Mon Apr 15 09:20:45 2013 +0300
@@ -64,23 +64,29 @@
         memset(stream, 0, len);
     }
     else
-#ifdef DM_USE_JSS
+    switch (engine.optAudioSetup)
     {
-        if (engine.dev != NULL)
-            jvmRenderAudio(engine.dev, stream, len / jvmGetSampleSize(engine.dev));
-    }
+#ifdef DM_USE_JSS
+        case DM_ASETUP_JSS:
+            if (engine.dev != NULL)
+                jvmRenderAudio(engine.dev, stream, len / jvmGetSampleSize(engine.dev));
+            break;
 #endif
 #ifdef DM_USE_TREMOR
-    if (engine.audioPos + len >= engine.audioRes->rdataSize)
-    {
-        engine.exitFlag = TRUE;
+        case DM_ASETUP_TREMOR:
+            if (engine.audioPos + len >= engine.audioRes->rdataSize)
+                engine.exitFlag = TRUE;
+            else
+            {
+                memcpy(stream, engine.audioRes->rdata + engine.audioPos, len);
+                engine.audioPos += len;
+            }
+            break;
+#endif
+
+        default:
+            break;
     }
-    else
-    {
-        memcpy(stream, engine.audioRes->rdata + engine.audioPos, len);
-        engine.audioPos += len;
-    }
-#endif
 }
 
 
@@ -633,33 +639,46 @@
     if (engine.optAfmt.samples == 0)
         engine.optAfmt.samples = engine.optAfmt.freq / 16;
 
-#ifdef DM_USE_JSS
-    jssInit();
-
-    switch (engine.optAfmt.format)
+    switch (engine.optAudioSetup)
     {
-        case AUDIO_S16SYS: engine.jss_format = JSS_AUDIO_S16; break;
-        case AUDIO_U16SYS: engine.jss_format = JSS_AUDIO_U16; break;
-        case AUDIO_S8:     engine.jss_format = JSS_AUDIO_S8; break;
-        case AUDIO_U8:     engine.jss_format = JSS_AUDIO_U8; break;
-    }
+        case DM_ASETUP_JSS:
+#ifdef DM_USE_JSS
+            jssInit();
+
+            switch (engine.optAfmt.format)
+            {
+                case AUDIO_S16SYS: engine.jss_format = JSS_AUDIO_S16; break;
+                case AUDIO_U16SYS: engine.jss_format = JSS_AUDIO_U16; break;
+                case AUDIO_S8:     engine.jss_format = JSS_AUDIO_S8; break;
+                case AUDIO_U8:     engine.jss_format = JSS_AUDIO_U8; break;
+            }
+
+            dmPrint(1, "Initializing miniJSS mixer with fmt=%d, chn=%d, freq=%d\n",
+                engine.jss_format, engine.optAfmt.channels, engine.optAfmt.freq);
 
-    dmPrint(1, "Initializing miniJSS mixer with fmt=%d, chn=%d, freq=%d\n",
-        engine.jss_format, engine.optAfmt.channels, engine.optAfmt.freq);
+            if ((engine.dev = jvmInit(engine.jss_format, engine.optAfmt.channels, engine.optAfmt.freq, JMIX_AUTO)) == NULL)
+            {
+                dmError("jvmInit() returned NULL, voi perkele.\n");
+                goto error_exit;
+            }
 
-    if ((engine.dev = jvmInit(engine.jss_format, engine.optAfmt.channels, engine.optAfmt.freq, JMIX_AUTO)) == NULL)
-    {
-        dmError("jvmInit() returned NULL, voi perkele.\n");
-        goto error_exit;
+            if ((engine.plr = jmpInit(engine.dev)) == NULL)
+            {
+                dmError("jmpInit() returned NULL\n");
+                goto error_exit;
+            }
+#else
+            dmError("miniJSS support not included.\n");
+#endif
+            break;
+
+        case DM_ASETUP_TREMOR:
+#ifndef DM_USE_TREMOR
+            dmError("Tremor support not included.\n");
+#endif
+            break;
     }
 
-    if ((engine.plr = jmpInit(engine.dev)) == NULL)
-    {
-        dmError("jmpInit() returned NULL\n");
-        goto error_exit;
-    }
-#endif
-
     // Initialize SDL audio
     dmPrint(1, "Trying to init SDL audio with: fmt=%d, chn=%d, freq=%d\n",
         engine.optAfmt.format, engine.optAfmt.channels, engine.optAfmt.freq);
@@ -850,9 +869,12 @@
     SDL_LockAudio();
     SDL_PauseAudio(1);
 #ifdef DM_USE_JSS
-    jmpClose(engine.plr);
-    jvmClose(engine.dev);
-    jssClose();
+    if (engine.optAudioSetup == DM_ASETUP_JSS)
+    {
+        jmpClose(engine.plr);
+        jvmClose(engine.dev);
+        jssClose();
+    }
 #endif
     SDL_UnlockAudio();