# HG changeset patch # User Matti Hamalainen # Date 1349190785 -10800 # Node ID 15fdd55733444b01b8dc630d4c6d4578ec7cbc55 # Parent e5796ffce131430a2cf5e27365ced8b666a01b61 Add simple (and buggy / not really working) debug mode. diff -r e5796ffce131 -r 15fdd5573344 Makefile.gen --- a/Makefile.gen Tue Oct 02 18:12:07 2012 +0300 +++ b/Makefile.gen Tue Oct 02 18:13:05 2012 +0300 @@ -4,7 +4,7 @@ include config.mak ifeq ($(EXTRA_CFLAGS),) -EXTRA_CFLAGS=-march=core2 +EXTRA_CFLAGS=-march=core2 -DDM_DEBUG endif ifneq ($(DMLIB),) diff -r e5796ffce131 -r 15fdd5573344 dmsimple.c --- a/dmsimple.c Tue Oct 02 18:12:07 2012 +0300 +++ b/dmsimple.c Tue Oct 02 18:13:05 2012 +0300 @@ -60,7 +60,7 @@ int engineGetTick() { - return (frame.startTime - engine.startTime) + engine.debugTime * 1000; + return (frame.startTime - engine.startTime) + engine.adjustTime; } @@ -165,13 +165,58 @@ } +#ifdef DM_DEBUG +static void engineAudioCallbackStream(void *userdata, Uint8 *stream, int len) +{ + if (engine.paused) + { + memset(stream, 0, len); + } + else + { + JSSMixer *d = (JSSMixer *) userdata; + if (d != NULL) + { + int pos = ((engine.adjustTime * d->outFreq) / 1000) * jvmGetSampleSize(d) + + engine.audioSamples; + + memcpy(stream, engine.audioBuf + pos, len); + + engine.audioSamples += len; + } + } +} + +void engineAdjustTime(int adj) +{ + if (engine.optDebug) + { + int tmp = engine.adjustTime + adj; + if (tmp < 0) + tmp = 0; + else + if (tmp >= engine.demoDuration * 1000) + tmp = engine.demoDuration * 1000; + + engine.pauseFlag = TRUE; + engine.adjustTime = tmp; + dmPrint(0, "adj=%d, adjtime=%d\n", adj, engine.adjustTime); + } +} +#endif + + static void engineAudioCallback(void *userdata, Uint8 *stream, int len) { - JSSMixer *d = (JSSMixer *) userdata; - - if (d != NULL) + if (engine.paused) { - jvmRenderAudio(d, stream, len / jvmGetSampleSize(d)); + memset(stream, 0, len); + } + else + { + JSSMixer *d = (JSSMixer *) userdata; + if (d != NULL) + jvmRenderAudio(d, stream, len / jvmGetSampleSize(d)); } } @@ -233,8 +278,18 @@ dmPrint(1, "Trying to init SDL audio with: %d, %d, %d\n", afmt.format, afmt.channels, afmt.freq); - afmt.callback = engineAudioCallback; - afmt.userdata = (void *) engine.dev; +#ifdef DM_DEBUG + if (engine.optDebug) + { + afmt.callback = engineAudioCallbackStream; + afmt.userdata = (void *) engine.dev; + } + else +#endif + { + afmt.callback = engineAudioCallback; + afmt.userdata = (void *) engine.dev; + } if (SDL_OpenAudio(&afmt, NULL) < 0) { @@ -269,6 +324,33 @@ if ((err = demoGlobalInit()) != DMERR_OK) goto error_exit; +#ifdef DM_DEBUG + if (engine.optDebug) + { + Uint8 *ptr; + int left = engine.dev->outFreq * engine.demoDuration; + engine.audioBufSize = jvmGetSampleSize(engine.dev) * engine.dev->outFreq * engine.demoDuration; + if ((engine.audioBuf = dmMalloc(engine.audioBufSize)) == NULL) + { + dmError("Could not allocate audio stream buffer of %d bytes.\n", + engine.audioBufSize); + goto error_exit; + } + + ptr = engine.audioBuf; + while (left > 0) + { + int length = left; + if (length > 16*1024) + length = 16*1024; + + jvmRenderAudio(engine.dev, ptr, length); + ptr += jvmGetSampleSize(engine.dev) * length; + left -= length; + } + } +#endif + SDL_PauseAudio(0); engine.startTime = SDL_GetTicks(); @@ -288,6 +370,13 @@ engine.pauseFlag = !engine.pauseFlag; break; +#ifdef DM_DEBUG + case SDLK_LEFT: engineAdjustTime(-500); break; + case SDLK_RIGHT: engineAdjustTime( 500); break; + case SDLK_UP: engineAdjustTime( 1000); break; + case SDLK_DOWN: engineAdjustTime(-1000); break; +#endif + default: break; } @@ -304,6 +393,16 @@ // Draw frame frame.startTime = SDL_GetTicks(); + if (engine.pauseFlag != engine.paused) + { + engine.paused = engine.pauseFlag; + engine.pauseTime = engineGetTick(); + } + + if (engine.paused) + { + engine.startTime = frame.startTime - engine.pauseTime; + } if (SDL_MUSTLOCK(engine.screen) != 0 && SDL_LockSurface(engine.screen) != 0) { diff -r e5796ffce131 -r 15fdd5573344 dmsimple.h --- a/dmsimple.h Tue Oct 02 18:12:07 2012 +0300 +++ b/dmsimple.h Tue Oct 02 18:13:05 2012 +0300 @@ -14,8 +14,10 @@ typedef struct { - int currFrame, endTime, startTime, totalFrameTime, debugTime; - BOOL pauseFlag, exitFlag; + int currFrame, endTime, startTime, + totalFrameTime, adjustTime, pauseTime; + + BOOL pauseFlag, paused, exitFlag; SDL_Surface *screen; SDL_Event event; @@ -24,6 +26,13 @@ JSSMixer *dev; JSSPlayer *plr; +#ifdef DM_DEBUG + BOOL optDebug; + Uint8 *audioBuf; + int audioBufSize; + int audioSamples; + int demoDuration; +#endif } DMEngineData;