diff src/dmsimple.c @ 845:1d3d220fb5cc

Fix audio playback.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 21 Oct 2014 10:31:03 +0300
parents 1e5cf1144f36
children 05a3ee1ca964
line wrap: on
line diff
--- a/src/dmsimple.c	Tue Oct 21 09:34:20 2014 +0300
+++ b/src/dmsimple.c	Tue Oct 21 10:31:03 2014 +0300
@@ -63,15 +63,21 @@
 
 static int engineAudioThreadFunc(void *userdata)
 {
+    DMEngineData *engine = (DMEngineData *) userdata;
+    if (engine == NULL)
+        return 0;
+
     do
     {
-        if (engine.audioStatus == SDL_AUDIO_PLAYING)
+        dmMutexLock(engine->audioStreamMutex);
+        if (engine->audioStatus == SDL_AUDIO_PLAYING)
         {
-            engineAudioCallback(userdata, engine.audioSimBuf, engine.audioSimBufSize);
+            engineAudioCallback(userdata, engine->audioSimBuf, engine->audioSimBufSize);
         }
+        dmMutexUnlock(engine->audioStreamMutex);
 
-        SDL_Delay(engine.audioSimDelay);
-    } while (!engine.audioSimDone);
+        SDL_Delay(engine->audioSimDelay);
+    } while (!engine->audioSimDone);
 
     return 0;
 }
@@ -681,9 +687,10 @@
         engine.optAfmt.format, engine.optAfmt.channels,
         engine.optAfmt.freq, engine.optAfmt.samples);
 
+    engine.audioStreamMutex = dmCreateMutex();
     engine.audioStatus      = SDL_AUDIO_STOPPED;
     engine.optAfmt.callback = engineAudioCallback;
-    engine.audioStreamMutex = dmCreateMutex();
+    engine.optAfmt.userdata = (void *) &engine;
 
     engine.audioSampleSize  = engine.optAfmt.channels;
     switch (engine.optAfmt.format)