aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--graphics/animation.cpp13
1 files changed, 7 insertions, 6 deletions
diff --git a/graphics/animation.cpp b/graphics/animation.cpp
index 6dd98c7915..1401d642c9 100644
--- a/graphics/animation.cpp
+++ b/graphics/animation.cpp
@@ -184,10 +184,6 @@ bool BaseAnimationState::decodeFrame() {
* frames if we run behind and delaying if we are too fast
*/
- /* Avoid deadlock is sound was too far ahead */
- if (_bgSoundStream && !_snd->isSoundHandleActive(_bgSound))
- return false;
-
if (checkPaletteSwitch() || (_bgSoundStream == NULL) ||
((_snd->getSoundElapsedTime(_bgSound) * 12) / 1000 < _frameNum + 1) ||
_frameSkipped > 10) {
@@ -197,9 +193,14 @@ bool BaseAnimationState::decodeFrame() {
}
drawYUV(sequence_i->width, sequence_i->height, _mpegInfo->display_fbuf->buf);
- if (_bgSoundStream) {
- while ((_snd->getSoundElapsedTime(_bgSound) * 12) / 1000 < _frameNum)
+ if (_bgSoundStream && _snd->isSoundHandleActive(_bgSound)) {
+ while (_snd->isSoundHandleActive(_bgSound) && (_snd->getSoundElapsedTime(_bgSound) * 12) / 1000 < _frameNum) {
_sys->delayMillis(10);
+ }
+ // In case the background sound ends prematurely, update
+ // _ticks so that we can still fall back on the no-sound
+ // sync case for the subsequent frames.
+ _ticks = _sys->getMillis();
} else {
_ticks += 83;
while (_sys->getMillis() < _ticks)