Mercurial > hg > dmlib
comparison src/dmengine.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 |
comparison
equal
deleted
inserted
replaced
844:5ea0bf4379b1 | 845:1d3d220fb5cc |
---|---|
396 } | 396 } |
397 | 397 |
398 | 398 |
399 void engineAudioCallback(void *userdata, Uint8 *stream, int len) | 399 void engineAudioCallback(void *userdata, Uint8 *stream, int len) |
400 { | 400 { |
401 (void) userdata; | 401 DMEngineData *engine = (DMEngineData *) userdata; |
402 | 402 |
403 dmMutexLock(engine.audioStreamMutex); | 403 if (engine == NULL) |
404 engine.audioStreamBuf = stream; | 404 return; |
405 engine.audioStreamLen = len / engine.audioSampleSize; | 405 |
406 engine.audioTimePos += (1000 * engine.audioStreamLen) / engine.optAfmt.freq; | 406 dmMutexLock(engine->audioStreamMutex); |
407 | 407 engine->audioStreamBuf = stream; |
408 if (engine.paused) | 408 engine->audioStreamLen = len / engine->audioSampleSize; |
409 engine->audioTimePos += (1000 * engine->audioStreamLen) / engine->optAfmt.freq; | |
410 | |
411 if (engine->paused) | |
409 { | 412 { |
410 memset(stream, 0, len); | 413 memset(stream, 0, len); |
411 } | 414 } |
412 else | 415 else |
413 switch (engine.optAudioSetup) | 416 switch (engine->optAudioSetup) |
414 { | 417 { |
415 #ifdef DM_USE_JSS | 418 #ifdef DM_USE_JSS |
416 case DM_ASETUP_JSS: | 419 case DM_ASETUP_JSS: |
417 if (engine.jssDev != NULL) | 420 if (engine->jssDev != NULL) |
418 jvmRenderAudio(engine.jssDev, stream, len / engine.audioSampleSize); | 421 jvmRenderAudio(engine->jssDev, stream, len / engine->audioSampleSize); |
419 break; | 422 break; |
420 #endif | 423 #endif |
421 #ifdef DM_USE_TREMOR | 424 #ifdef DM_USE_TREMOR |
422 case DM_ASETUP_TREMOR: | 425 case DM_ASETUP_TREMOR: |
423 if (engine.audioPos + len >= engine.audioRes->resSize) | 426 if (engine->audioPos + len >= engine->audioRes->resSize) |
424 engine.exitFlag = TRUE; | 427 engine->exitFlag = TRUE; |
425 else | 428 else |
426 { | 429 { |
427 memcpy(stream, engine.audioRes->resData + engine.audioPos, len); | 430 memcpy(stream, engine->audioRes->resData + engine->audioPos, len); |
428 engine.audioPos += len; | 431 engine->audioPos += len; |
429 } | 432 } |
430 break; | 433 break; |
431 #endif | 434 #endif |
432 | 435 |
433 default: | 436 default: |
434 break; | 437 break; |
435 } | 438 } |
436 | 439 |
437 dmMutexUnlock(engine.audioStreamMutex); | 440 dmMutexUnlock(engine->audioStreamMutex); |
438 } | 441 } |
439 | 442 |
440 | 443 |
441 void enginePauseAudio(int status) | 444 void enginePauseAudio(int status) |
442 { | 445 { |