diff dmengine.c @ 791:7ea8775b265a

Move audio callback code to dmengine.
author Matti Hamalainen <ccr@tnsp.org>
date Sun, 04 Aug 2013 12:52:53 +0300
parents e8153e8a948e
children 97ecc0a9c21f
line wrap: on
line diff
--- a/dmengine.c	Sun Aug 04 11:48:09 2013 +0300
+++ b/dmengine.c	Sun Aug 04 12:52:53 2013 +0300
@@ -396,6 +396,48 @@
 }
 
 
+void engineAudioCallback(void *userdata, Uint8 *stream, int len)
+{
+    (void) userdata;
+
+    dmMutexLock(engine.audioStreamMutex);
+    engine.audioStreamBuf  = stream;
+    engine.audioStreamLen  = len / engine.audioSampleSize;
+    engine.audioTimePos   += (1000 * engine.audioStreamLen) / engine.optAfmt.freq;
+
+    if (engine.paused)
+    {
+        memset(stream, 0, len);
+    }
+    else
+    switch (engine.optAudioSetup)
+    {
+#ifdef DM_USE_JSS
+        case DM_ASETUP_JSS:
+            if (engine.jssDev != NULL)
+                jvmRenderAudio(engine.jssDev, stream, len / engine.audioSampleSize);
+            break;
+#endif
+#ifdef DM_USE_TREMOR
+        case DM_ASETUP_TREMOR:
+            if (engine.audioPos + len >= engine.audioRes->resSize)
+                engine.exitFlag = TRUE;
+            else
+            {
+                memcpy(stream, engine.audioRes->resData + engine.audioPos, len);
+                engine.audioPos += len;
+            }
+            break;
+#endif
+
+        default:
+            break;
+    }
+
+    dmMutexUnlock(engine.audioStreamMutex);
+}
+
+
 void enginePauseAudio(int status)
 {
     if (status)