aboutsummaryrefslogtreecommitdiff
path: root/graphics/video
diff options
context:
space:
mode:
authorFilippos Karapetis2009-05-19 19:56:53 +0000
committerFilippos Karapetis2009-05-19 19:56:53 +0000
commite358b13ef96e15fc1788841633eb09b1f739cc90 (patch)
tree080a9766958f53fb5d9291d5cd15d9a0d5edb88f /graphics/video
parent4f6bc506153550a16efd02a10b0b377cce54c434 (diff)
downloadscummvm-rg350-e358b13ef96e15fc1788841633eb09b1f739cc90.tar.gz
scummvm-rg350-e358b13ef96e15fc1788841633eb09b1f739cc90.tar.bz2
scummvm-rg350-e358b13ef96e15fc1788841633eb09b1f739cc90.zip
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
Diffstat (limited to 'graphics/video')
-rw-r--r--graphics/video/dxa_player.cpp6
-rw-r--r--graphics/video/flic_player.cpp9
-rw-r--r--graphics/video/smk_player.cpp10
-rw-r--r--graphics/video/video_player.cpp4
-rw-r--r--graphics/video/video_player.h10
5 files changed, 19 insertions, 20 deletions
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;