Mercurial > hg > dmlib
diff dmengine.c @ 791:7ea8775b265a
Move audio callback code to dmengine.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Sun, 04 Aug 2013 12:52:53 +0300 |
parents | e8153e8a948e |
children | 97ecc0a9c21f |
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)