Mercurial > hg > dmlib
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)