diff options
Diffstat (limited to 'graphics/video/smk_player.cpp')
-rw-r--r-- | graphics/video/smk_player.cpp | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/graphics/video/smk_player.cpp b/graphics/video/smk_player.cpp index 2ea9fe7e44..5ad7044c5f 100644 --- a/graphics/video/smk_player.cpp +++ b/graphics/video/smk_player.cpp @@ -370,12 +370,22 @@ int32 SMKPlayer::getFrameDelay() { } int32 SMKPlayer::getAudioLag() { - if (!_fileStream || !_audioStream) + if (!_fileStream) return 0; int32 frameDelay = getFrameDelay(); int32 videoTime = _currentSMKFrame * frameDelay; - int32 audioTime = (((int32) _mixer->getSoundElapsedTime(_audioHandle)) * 100); + int32 audioTime; + + if (!_audioStream) { + /* No audio. + Calculate the lag by how much time has gone by since the first frame + and how much time *should* have passed. + */ + + audioTime = (g_system->getMillis() - _startTime) * 100; + } else + audioTime = (((int32) _mixer->getSoundElapsedTime(_audioHandle)) * 100); return videoTime - audioTime; } @@ -546,6 +556,9 @@ bool SMKPlayer::decodeNextFrame() { uint32 startPos = _fileStream->pos(); + if (_currentSMKFrame == 0) + _startTime = g_system->getMillis(); + // Check if we got a frame with palette data, and // call back the virtual setPalette function to set // the current palette |