aboutsummaryrefslogtreecommitdiff
path: root/graphics/smk_player.cpp
diff options
context:
space:
mode:
authorSven Hesse2008-12-19 00:14:18 +0000
committerSven Hesse2008-12-19 00:14:18 +0000
commit6d19ee6e64c9c6bf5ba5efa58028a300ffd4ce69 (patch)
tree6ff7514785629d117325ad361e5f3c656022e2b3 /graphics/smk_player.cpp
parent9cd759c526c53a4065cb2ae33b09e448788918f0 (diff)
downloadscummvm-rg350-6d19ee6e64c9c6bf5ba5efa58028a300ffd4ce69.tar.gz
scummvm-rg350-6d19ee6e64c9c6bf5ba5efa58028a300ffd4ce69.tar.bz2
scummvm-rg350-6d19ee6e64c9c6bf5ba5efa58028a300ffd4ce69.zip
Adding convenience functions to get the time to wait for the next frame, while keeping A/V sync
svn-id: r35431
Diffstat (limited to 'graphics/smk_player.cpp')
-rw-r--r--graphics/smk_player.cpp32
1 files changed, 32 insertions, 0 deletions
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();