# HG changeset patch # User Matti Hamalainen # Date 1413876663 -10800 # Node ID 1d3d220fb5ccc066dadae5ac9d2a81896a49cd5b # Parent 5ea0bf4379b197b5aa5f4fc086732a20c8faa17f Fix audio playback. diff -r 5ea0bf4379b1 -r 1d3d220fb5cc src/dmengine.c --- a/src/dmengine.c Tue Oct 21 09:34:20 2014 +0300 +++ b/src/dmengine.c Tue Oct 21 10:31:03 2014 +0300 @@ -398,34 +398,37 @@ void engineAudioCallback(void *userdata, Uint8 *stream, int len) { - (void) userdata; + DMEngineData *engine = (DMEngineData *) userdata; + + if (engine == NULL) + return; - dmMutexLock(engine.audioStreamMutex); - engine.audioStreamBuf = stream; - engine.audioStreamLen = len / engine.audioSampleSize; - engine.audioTimePos += (1000 * engine.audioStreamLen) / engine.optAfmt.freq; + dmMutexLock(engine->audioStreamMutex); + engine->audioStreamBuf = stream; + engine->audioStreamLen = len / engine->audioSampleSize; + engine->audioTimePos += (1000 * engine->audioStreamLen) / engine->optAfmt.freq; - if (engine.paused) + if (engine->paused) { memset(stream, 0, len); } else - switch (engine.optAudioSetup) + switch (engine->optAudioSetup) { #ifdef DM_USE_JSS case DM_ASETUP_JSS: - if (engine.jssDev != NULL) - jvmRenderAudio(engine.jssDev, stream, len / engine.audioSampleSize); + 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; + if (engine->audioPos + len >= engine->audioRes->resSize) + engine->exitFlag = TRUE; else { - memcpy(stream, engine.audioRes->resData + engine.audioPos, len); - engine.audioPos += len; + memcpy(stream, engine->audioRes->resData + engine->audioPos, len); + engine->audioPos += len; } break; #endif @@ -434,7 +437,7 @@ break; } - dmMutexUnlock(engine.audioStreamMutex); + dmMutexUnlock(engine->audioStreamMutex); } diff -r 5ea0bf4379b1 -r 1d3d220fb5cc src/dmsimple.c --- 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)