comparison dmsimple.c @ 93:15fdd5573344

Add simple (and buggy / not really working) debug mode.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 02 Oct 2012 18:13:05 +0300
parents f47011b06d5c
children 4bbfc0274b29
comparison
equal deleted inserted replaced
92:e5796ffce131 93:15fdd5573344
58 } 58 }
59 59
60 60
61 int engineGetTick() 61 int engineGetTick()
62 { 62 {
63 return (frame.startTime - engine.startTime) + engine.debugTime * 1000; 63 return (frame.startTime - engine.startTime) + engine.adjustTime;
64 } 64 }
65 65
66 66
67 float engineGetTimeDT() 67 float engineGetTimeDT()
68 { 68 {
163 return NULL; 163 return NULL;
164 } 164 }
165 } 165 }
166 166
167 167
168 #ifdef DM_DEBUG
169 static void engineAudioCallbackStream(void *userdata, Uint8 *stream, int len)
170 {
171 if (engine.paused)
172 {
173 memset(stream, 0, len);
174 }
175 else
176 {
177 JSSMixer *d = (JSSMixer *) userdata;
178 if (d != NULL)
179 {
180 int pos = ((engine.adjustTime * d->outFreq) / 1000) * jvmGetSampleSize(d) +
181 engine.audioSamples;
182
183 memcpy(stream, engine.audioBuf + pos, len);
184
185 engine.audioSamples += len;
186 }
187 }
188 }
189
190 void engineAdjustTime(int adj)
191 {
192 if (engine.optDebug)
193 {
194 int tmp = engine.adjustTime + adj;
195 if (tmp < 0)
196 tmp = 0;
197 else
198 if (tmp >= engine.demoDuration * 1000)
199 tmp = engine.demoDuration * 1000;
200
201 engine.pauseFlag = TRUE;
202 engine.adjustTime = tmp;
203 dmPrint(0, "adj=%d, adjtime=%d\n", adj, engine.adjustTime);
204 }
205 }
206 #endif
207
208
168 static void engineAudioCallback(void *userdata, Uint8 *stream, int len) 209 static void engineAudioCallback(void *userdata, Uint8 *stream, int len)
169 { 210 {
170 JSSMixer *d = (JSSMixer *) userdata; 211 if (engine.paused)
171 212 {
172 if (d != NULL) 213 memset(stream, 0, len);
173 { 214 }
174 jvmRenderAudio(d, stream, len / jvmGetSampleSize(d)); 215 else
216 {
217 JSSMixer *d = (JSSMixer *) userdata;
218 if (d != NULL)
219 jvmRenderAudio(d, stream, len / jvmGetSampleSize(d));
175 } 220 }
176 } 221 }
177 222
178 223
179 int main(int argc, char *argv[]) 224 int main(int argc, char *argv[])
231 276
232 // Initialize SDL audio 277 // Initialize SDL audio
233 dmPrint(1, "Trying to init SDL audio with: %d, %d, %d\n", 278 dmPrint(1, "Trying to init SDL audio with: %d, %d, %d\n",
234 afmt.format, afmt.channels, afmt.freq); 279 afmt.format, afmt.channels, afmt.freq);
235 280
236 afmt.callback = engineAudioCallback; 281 #ifdef DM_DEBUG
237 afmt.userdata = (void *) engine.dev; 282 if (engine.optDebug)
283 {
284 afmt.callback = engineAudioCallbackStream;
285 afmt.userdata = (void *) engine.dev;
286 }
287 else
288 #endif
289 {
290 afmt.callback = engineAudioCallback;
291 afmt.userdata = (void *) engine.dev;
292 }
238 293
239 if (SDL_OpenAudio(&afmt, NULL) < 0) 294 if (SDL_OpenAudio(&afmt, NULL) < 0)
240 { 295 {
241 dmError("Couldn't open audio: %s\n", SDL_GetError()); 296 dmError("Couldn't open audio: %s\n", SDL_GetError());
242 goto error_exit; 297 goto error_exit;
266 } 321 }
267 322
268 // Final initializations 323 // Final initializations
269 if ((err = demoGlobalInit()) != DMERR_OK) 324 if ((err = demoGlobalInit()) != DMERR_OK)
270 goto error_exit; 325 goto error_exit;
326
327 #ifdef DM_DEBUG
328 if (engine.optDebug)
329 {
330 Uint8 *ptr;
331 int left = engine.dev->outFreq * engine.demoDuration;
332 engine.audioBufSize = jvmGetSampleSize(engine.dev) * engine.dev->outFreq * engine.demoDuration;
333 if ((engine.audioBuf = dmMalloc(engine.audioBufSize)) == NULL)
334 {
335 dmError("Could not allocate audio stream buffer of %d bytes.\n",
336 engine.audioBufSize);
337 goto error_exit;
338 }
339
340 ptr = engine.audioBuf;
341 while (left > 0)
342 {
343 int length = left;
344 if (length > 16*1024)
345 length = 16*1024;
346
347 jvmRenderAudio(engine.dev, ptr, length);
348 ptr += jvmGetSampleSize(engine.dev) * length;
349 left -= length;
350 }
351 }
352 #endif
271 353
272 SDL_PauseAudio(0); 354 SDL_PauseAudio(0);
273 engine.startTime = SDL_GetTicks(); 355 engine.startTime = SDL_GetTicks();
274 356
275 while (!engine.exitFlag) 357 while (!engine.exitFlag)
286 368
287 case SDLK_SPACE: 369 case SDLK_SPACE:
288 engine.pauseFlag = !engine.pauseFlag; 370 engine.pauseFlag = !engine.pauseFlag;
289 break; 371 break;
290 372
373 #ifdef DM_DEBUG
374 case SDLK_LEFT: engineAdjustTime(-500); break;
375 case SDLK_RIGHT: engineAdjustTime( 500); break;
376 case SDLK_UP: engineAdjustTime( 1000); break;
377 case SDLK_DOWN: engineAdjustTime(-1000); break;
378 #endif
379
291 default: 380 default:
292 break; 381 break;
293 } 382 }
294 383
295 break; 384 break;
302 break; 391 break;
303 } 392 }
304 393
305 // Draw frame 394 // Draw frame
306 frame.startTime = SDL_GetTicks(); 395 frame.startTime = SDL_GetTicks();
396 if (engine.pauseFlag != engine.paused)
397 {
398 engine.paused = engine.pauseFlag;
399 engine.pauseTime = engineGetTick();
400 }
401
402 if (engine.paused)
403 {
404 engine.startTime = frame.startTime - engine.pauseTime;
405 }
307 406
308 if (SDL_MUSTLOCK(engine.screen) != 0 && SDL_LockSurface(engine.screen) != 0) 407 if (SDL_MUSTLOCK(engine.screen) != 0 && SDL_LockSurface(engine.screen) != 0)
309 { 408 {
310 dmError("Can't lock surface.\n"); 409 dmError("Can't lock surface.\n");
311 goto error_exit; 410 goto error_exit;