# HG changeset patch # User Matti Hamalainen # Date 1375195382 -10800 # Node ID 865f457013900b4150af64df278cfaeb1bec1636 # Parent 2f32e178854a97467940fa33b66fadc7656ea943 Fix audio support. diff -r 2f32e178854a -r 865f45701390 dmengine.h --- a/dmengine.h Tue Jul 30 15:31:12 2013 +0300 +++ b/dmengine.h Tue Jul 30 17:43:02 2013 +0300 @@ -250,9 +250,11 @@ int optResFlags; char *optDataPath, *optPackFilename; + // Audio related SDL_AudioSpec optAfmt; int optAudioSetup; + int audioStatus; DMMutex *audioStreamMutex; Uint8 * audioStreamBuf; size_t audioStreamLen; diff -r 2f32e178854a -r 865f45701390 dmsimple.c --- a/dmsimple.c Tue Jul 30 15:31:12 2013 +0300 +++ b/dmsimple.c Tue Jul 30 17:43:02 2013 +0300 @@ -102,11 +102,26 @@ } +static void enginePauseAudio(int status) +{ + if (status) + engine.audioStatus = SDL_AUDIO_PAUSED; + else + engine.audioStatus = SDL_AUDIO_PLAYING; + + SDL_PauseAudio(status); +} + + static int engineAudioThreadFunc(void *userdata) { do { - engineAudioCallback(userdata, engine.audioSimBuf, engine.audioSimBufSize); + if (engine.audioStatus == SDL_AUDIO_PLAYING) + { + engineAudioCallback(userdata, engine.audioSimBuf, engine.audioSimBufSize); + } + SDL_Delay(engine.audioSimDelay); } while (!engine.audioSimDone); @@ -724,6 +739,7 @@ dmPrint(1, "Trying to init SDL audio with: fmt=%d, chn=%d, freq=%d\n", engine.optAfmt.format, engine.optAfmt.channels, engine.optAfmt.freq); + engine.audioStatus = SDL_AUDIO_STOPPED; engine.optAfmt.callback = engineAudioCallback; engine.audioStreamMutex = dmCreateMutex(); @@ -743,8 +759,9 @@ } engine.audioSimDelay = 1000 / 50; - engine.audioSimBufSize = (engine.optAfmt.freq * sampleSize) / 50; + engine.audioSimBufSize = (engine.optAfmt.freq / 50) * sampleSize; engine.audioSimBuf = dmMalloc(engine.audioSimBufSize); + engine.audioSimDone = FALSE; engine.audioSimThread = SDL_CreateThread(engineAudioThreadFunc, NULL); } @@ -817,7 +834,7 @@ dmPrint(1, "Starting up.\n"); SDL_LockAudio(); - SDL_PauseAudio(0); + enginePauseAudio(0); SDL_UnlockAudio(); engine.startTime = SDL_GetTicks(); @@ -923,7 +940,7 @@ SDL_ShowCursor(SDL_ENABLE); SDL_LockAudio(); - SDL_PauseAudio(1); + enginePauseAudio(1); #ifdef DM_USE_JSS if (engine.optAudioSetup == DM_ASETUP_JSS) {