From e358b13ef96e15fc1788841633eb09b1f739cc90 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Tue, 19 May 2009 19:56:53 +0000 Subject: Changed calculations based on frame delay to be based on the scale of 1ms, not 1/100. This fixes the FLIC player and also makes the overall code a bit clearer and easier to understand svn-id: r40730 --- graphics/video/dxa_player.cpp | 6 +++--- graphics/video/flic_player.cpp | 9 ++++----- graphics/video/smk_player.cpp | 10 +++++----- graphics/video/video_player.cpp | 4 ++-- graphics/video/video_player.h | 10 +++++----- 5 files changed, 19 insertions(+), 20 deletions(-) (limited to 'graphics/video') diff --git a/graphics/video/dxa_player.cpp b/graphics/video/dxa_player.cpp index d7fd970e26..55fe869fc4 100644 --- a/graphics/video/dxa_player.cpp +++ b/graphics/video/dxa_player.cpp @@ -86,13 +86,13 @@ bool DXADecoder::loadFile(const char *fileName) { if (frameRate > 0) { _videoInfo.frameRate = 1000 / frameRate; - _videoInfo.frameDelay = frameRate * 100; + _videoInfo.frameDelay = frameRate; } else if (frameRate < 0) { _videoInfo.frameRate = 100000 / (-frameRate); - _videoInfo.frameDelay = -frameRate; + _videoInfo.frameDelay = -frameRate / 100; } else { _videoInfo.frameRate = 10; - _videoInfo.frameDelay = 10000; + _videoInfo.frameDelay = 100; } _videoInfo.width = _fileStream->readUint16BE(); diff --git a/graphics/video/flic_player.cpp b/graphics/video/flic_player.cpp index 024aab0f43..29c83e9d0e 100644 --- a/graphics/video/flic_player.cpp +++ b/graphics/video/flic_player.cpp @@ -72,9 +72,8 @@ bool FlicDecoder::loadFile(const char *fileName) { } _fileStream->readUint16LE(); // flags // Note: The normal delay is a 32-bit integer (dword), whereas the overriden delay is a 16-bit integer (word) - // frameDelay is the FLIC "speed", in milliseconds. Our frameDelay is calculated in 1/100 ms, so we convert it here - _videoInfo.frameDelay = _fileStream->readUint32LE() / 100; - _videoInfo.frameRate = 100 * 1000 / _videoInfo.frameDelay; + _videoInfo.frameDelay = _fileStream->readUint32LE(); // frameDelay is the FLIC "speed", in milliseconds + _videoInfo.frameRate = 1000 / _videoInfo.frameDelay; _fileStream->seek(80); _offsetFrame1 = _fileStream->readUint32LE(); @@ -207,10 +206,10 @@ bool FlicDecoder::decodeNextFrame() { case FRAME_TYPE: { chunkCount = _fileStream->readUint16LE(); // Note: The overriden delay is a 16-bit integer (word), whereas the normal delay is a 32-bit integer (dword) - uint16 newFrameDelay = _fileStream->readUint16LE() / 100; // "speed", in milliseconds + uint16 newFrameDelay = _fileStream->readUint16LE(); // "speed", in milliseconds if (newFrameDelay > 0) { _videoInfo.frameDelay = newFrameDelay; - _videoInfo.frameRate = 100 * 1000 / _videoInfo.frameDelay; + _videoInfo.frameRate = 1000 / _videoInfo.frameDelay; } _fileStream->readUint16LE(); // reserved, always 0 uint16 newWidth = _fileStream->readUint16LE(); diff --git a/graphics/video/smk_player.cpp b/graphics/video/smk_player.cpp index 4b5a502ec4..9ed8e9902f 100644 --- a/graphics/video/smk_player.cpp +++ b/graphics/video/smk_player.cpp @@ -344,9 +344,9 @@ int32 SmackerDecoder::getAudioLag() { and how much time *should* have passed. */ - audioTime = (g_system->getMillis() - _videoInfo.startTime) * 100; + audioTime = g_system->getMillis() - _videoInfo.startTime; } else - audioTime = (((int32) _mixer->getSoundElapsedTime(_audioHandle)) * 100); + audioTime = (int32) _mixer->getSoundElapsedTime(_audioHandle); return videoTime - audioTime; } @@ -380,13 +380,13 @@ bool SmackerDecoder::loadFile(const char *fileName) { if (frameRate > 0) { _videoInfo.frameRate = 1000 / frameRate; - _videoInfo.frameDelay = frameRate * 100; + _videoInfo.frameDelay = frameRate; } else if (frameRate < 0) { _videoInfo.frameRate = 100000 / (-frameRate); - _videoInfo.frameDelay = -frameRate; + _videoInfo.frameDelay = -frameRate / 100; } else { _videoInfo.frameRate = 10; - _videoInfo.frameDelay = 10000; + _videoInfo.frameDelay = 100; } // Flags are determined by which bit is set, which can be one of the following: diff --git a/graphics/video/video_player.cpp b/graphics/video/video_player.cpp index 81c025d22f..b77cb3b7f7 100644 --- a/graphics/video/video_player.cpp +++ b/graphics/video/video_player.cpp @@ -88,14 +88,14 @@ int32 VideoDecoder::getAudioLag() { Calculate the lag by how much time has gone by since the first frame and how much time *should* have passed. */ - int32 audioTime = (g_system->getMillis() - _videoInfo.startTime) * 100; + int32 audioTime = g_system->getMillis() - _videoInfo.startTime; int32 videoTime = _videoInfo.currentFrame * getFrameDelay(); return videoTime - audioTime; } uint32 VideoDecoder::getFrameWaitTime() { - int32 waitTime = (getFrameDelay() + getAudioLag()) / 100; + int32 waitTime = getFrameDelay() + getAudioLag(); if (waitTime < 0) return 0; diff --git a/graphics/video/video_player.h b/graphics/video/video_player.h index da7f93d0c8..ef878aa61b 100644 --- a/graphics/video/video_player.h +++ b/graphics/video/video_player.h @@ -75,16 +75,16 @@ public: virtual int32 getFrameRate(); /** - * Returns the time to wait for each frame in 1/100 ms - * @return the time to wait for each frame in 1/100 ms + * Returns the time to wait for each frame in ms + * @return the time to wait for each frame in ms */ virtual int32 getFrameDelay(); /** - * Returns the current A/V lag in 1/100 ms + * Returns the current A/V lag in ms * If > 0, audio lags behind * If < 0, video lags behind - * @return the current A/V lag in 1/100 ms + * @return the current A/V lag in ms */ virtual int32 getAudioLag(); @@ -170,7 +170,7 @@ protected: uint32 height; uint32 frameCount; int32 frameRate; - int32 frameDelay; // 1/100 ms + int32 frameDelay; // ms uint32 frameOffs; uint32 currentFrame; uint32 startTime; -- cgit v1.2.3