From 6d19ee6e64c9c6bf5ba5efa58028a300ffd4ce69 Mon Sep 17 00:00:00 2001 From: Sven Hesse Date: Fri, 19 Dec 2008 00:14:18 +0000 Subject: Adding convenience functions to get the time to wait for the next frame, while keeping A/V sync svn-id: r35431 --- graphics/smk_player.cpp | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'graphics/smk_player.cpp') diff --git a/graphics/smk_player.cpp b/graphics/smk_player.cpp index 8252dd9c9b..41e118fc9e 100644 --- a/graphics/smk_player.cpp +++ b/graphics/smk_player.cpp @@ -351,6 +351,38 @@ int32 SMKPlayer::getFrameRate() { return _header.frameRate; } +int32 SMKPlayer::getFrameDelay() { + if (!_fileStream) + return 0; + + if (_header.frameRate > 0) + return _header.frameRate * 100; + if (_header.frameRate < 0) + return -_header.frameRate; + + return 10000; +} + +int32 SMKPlayer::getAudioLag() { + if (!_fileStream || !_audioStream) + return 0; + + int32 frameDelay = getFrameDelay(); + int32 videoTime = _currentSMKFrame * frameDelay; + int32 audioTime = (((int32) _mixer->getSoundElapsedTime(_audioHandle)) * 100); + + return videoTime - audioTime; +} + +uint32 SMKPlayer::getFrameWaitTime() { + int32 waitTime = (getFrameDelay() + getAudioLag()) / 100; + + if (waitTime < 0) + return 0; + + return waitTime; +} + bool SMKPlayer::loadFile(const char *fileName) { closeFile(); -- cgit v1.2.3