aboutsummaryrefslogtreecommitdiff
path: root/graphics/video
diff options
context:
space:
mode:
authorSven Hesse2009-01-03 13:31:23 +0000
committerSven Hesse2009-01-03 13:31:23 +0000
commit0430bb9b3a1189cada3edd3cf18061e06dcad17c (patch)
treeb7fe4289485a8fec9e0ab67811278c2ab879c08a /graphics/video
parent23e6fff0bfb226a2bb7ab84833a9184eee1118d3 (diff)
downloadscummvm-rg350-0430bb9b3a1189cada3edd3cf18061e06dcad17c.tar.gz
scummvm-rg350-0430bb9b3a1189cada3edd3cf18061e06dcad17c.tar.bz2
scummvm-rg350-0430bb9b3a1189cada3edd3cf18061e06dcad17c.zip
Proper lag calculation even if the SMK has no audio
svn-id: r35698
Diffstat (limited to 'graphics/video')
-rw-r--r--graphics/video/smk_player.cpp17
-rw-r--r--graphics/video/smk_player.h1
2 files changed, 16 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
diff --git a/graphics/video/smk_player.h b/graphics/video/smk_player.h
index e07412b2a5..c1b118b13e 100644
--- a/graphics/video/smk_player.h
+++ b/graphics/video/smk_player.h
@@ -184,6 +184,7 @@ private:
Audio::SoundHandle _audioHandle;
uint32 _currentSMKFrame;
+ uint32 _startTime;
BigHuffmanTree *_MMapTree;
BigHuffmanTree *_MClrTree;