Proper lag calculation even if the SMK has no audio

svn-id: r35698
This commit is contained in:
Sven Hesse 2009-01-03 13:31:23 +00:00
parent 23e6fff0bf
commit 0430bb9b3a
2 changed files with 16 additions and 2 deletions

View file

@ -370,12 +370,22 @@ int32 SMKPlayer::getFrameDelay() {
} }
int32 SMKPlayer::getAudioLag() { int32 SMKPlayer::getAudioLag() {
if (!_fileStream || !_audioStream) if (!_fileStream)
return 0; return 0;
int32 frameDelay = getFrameDelay(); int32 frameDelay = getFrameDelay();
int32 videoTime = _currentSMKFrame * frameDelay; 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; return videoTime - audioTime;
} }
@ -546,6 +556,9 @@ bool SMKPlayer::decodeNextFrame() {
uint32 startPos = _fileStream->pos(); uint32 startPos = _fileStream->pos();
if (_currentSMKFrame == 0)
_startTime = g_system->getMillis();
// Check if we got a frame with palette data, and // Check if we got a frame with palette data, and
// call back the virtual setPalette function to set // call back the virtual setPalette function to set
// the current palette // the current palette

View file

@ -184,6 +184,7 @@ private:
Audio::SoundHandle _audioHandle; Audio::SoundHandle _audioHandle;
uint32 _currentSMKFrame; uint32 _currentSMKFrame;
uint32 _startTime;
BigHuffmanTree *_MMapTree; BigHuffmanTree *_MMapTree;
BigHuffmanTree *_MClrTree; BigHuffmanTree *_MClrTree;