changeset 791:7ea8775b265a

Move audio callback code to dmengine.
author Matti Hamalainen <ccr@tnsp.org>
date Sun, 04 Aug 2013 12:52:53 +0300
parents 999c7ad69051
children bfb1d2bacd54
files dmengine.c dmengine.h dmsimple.c
diffstat 3 files changed, 44 insertions(+), 48 deletions(-) [+]
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)
--- a/dmengine.h	Sun Aug 04 11:48:09 2013 +0300
+++ b/dmengine.h	Sun Aug 04 12:52:53 2013 +0300
@@ -258,6 +258,7 @@
     DMMutex *audioStreamMutex;
     Uint8 * audioStreamBuf;
     size_t audioStreamLen;      // Length in samples
+    Uint32 audioTimePos;        // Approximate audio time (in milliseconds)
     int audioSampleSize;        // Size of one audio sample in bytes (incl. all channels)
 
     // No-sound audio simulation thread stuff
@@ -366,6 +367,7 @@
 int    engineGetTick(DMEngineData *eng);
 float  engineGetTimeDT(DMEngineData *eng);
 
+void   engineAudioCallback(void *userdata, Uint8 *stream, int len);
 void   enginePauseAudio(int status);
 int    engineGetVideoAspect(int width, int height);
 
--- a/dmsimple.c	Sun Aug 04 11:48:09 2013 +0300
+++ b/dmsimple.c	Sun Aug 04 12:52:53 2013 +0300
@@ -61,54 +61,6 @@
 }
 
 
-static void engineAudioCallback(void *userdata, Uint8 *stream, int len)
-{
-    (void) userdata;
-
-    dmMutexLock(engine.audioStreamMutex);
-    engine.audioStreamBuf = stream;
-    engine.audioStreamLen = len;
-
-    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 / jvmGetSampleSize(engine.jssDev));
-            }
-
-            JSS_LOCK(engine.jssPlr);
-            if (engine.jssPlr != NULL && !engine.jssPlr->isPlaying)
-                engine.exitFlag = TRUE;
-            JSS_UNLOCK(engine.jssPlr);
-            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);
-}
-
-
 static int engineAudioThreadFunc(void *userdata)
 {
     do