diff options
author | Travis Howell | 2008-12-21 05:55:37 +0000 |
---|---|---|
committer | Travis Howell | 2008-12-21 05:55:37 +0000 |
commit | 587e70809a7579539e4666c46a13e0c40d3e9e7b (patch) | |
tree | ea41fca672ce17dd5251d237fe406aa5e60d29a8 | |
parent | 76624fc69c28bc422076740521e77f2ba83a2320 (diff) | |
download | scummvm-rg350-587e70809a7579539e4666c46a13e0c40d3e9e7b.tar.gz scummvm-rg350-587e70809a7579539e4666c46a13e0c40d3e9e7b.tar.bz2 scummvm-rg350-587e70809a7579539e4666c46a13e0c40d3e9e7b.zip |
Return exact frame rate in Smacker player, and minor cleanup.
svn-id: r35458
-rw-r--r-- | engines/agos/animation.cpp | 14 | ||||
-rw-r--r-- | graphics/dxa_player.cpp | 13 | ||||
-rw-r--r-- | graphics/dxa_player.h | 12 | ||||
-rw-r--r-- | graphics/smk_player.cpp | 8 | ||||
-rw-r--r-- | graphics/smk_player.h | 3 |
5 files changed, 39 insertions, 11 deletions
diff --git a/engines/agos/animation.cpp b/engines/agos/animation.cpp index d6e5a1f414..47ed5ade8e 100644 --- a/engines/agos/animation.cpp +++ b/engines/agos/animation.cpp @@ -312,7 +312,7 @@ void MoviePlayerDXA::startSound() { } void MoviePlayerDXA::nextFrame() { - if (_vm->_mixer->isSoundHandleActive(_bgSound) && (_vm->_mixer->getSoundElapsedTime(_bgSound) * _framesPerSec) / 1000 < _frameNum) { + if (_vm->_mixer->isSoundHandleActive(_bgSound) && (_vm->_mixer->getSoundElapsedTime(_bgSound) * getFrameRate()) / 1000 < _frameNum) { copyFrameToBuffer(_vm->getBackBuf(), 465, 222, _vm->_screenWidth); return; } @@ -353,15 +353,15 @@ bool MoviePlayerDXA::processFrame() { copyFrameToBuffer((byte *)screen->pixels, (_vm->_screenWidth - _width) / 2, (_vm->_screenHeight - _height) / 2, _vm->_screenWidth); _vm->_system->unlockScreen(); - if ((_bgSoundStream == NULL) || ((int)(_mixer->getSoundElapsedTime(_bgSound) * _framesPerSec) / 1000 < _frameNum + 1) || - _frameSkipped > _framesPerSec) { - if (_frameSkipped > _framesPerSec) { + if ((_bgSoundStream == NULL) || ((int)(_mixer->getSoundElapsedTime(_bgSound) * getFrameRate()) / 1000 < _frameNum + 1) || + _frameSkipped > getFrameRate()) { + if (_frameSkipped > getFrameRate()) { warning("force frame %i redraw", _frameNum); _frameSkipped = 0; } if (_bgSoundStream && _mixer->isSoundHandleActive(_bgSound)) { - while (_mixer->isSoundHandleActive(_bgSound) && (_mixer->getSoundElapsedTime(_bgSound) * _framesPerSec) / 1000 < _frameNum) { + while (_mixer->isSoundHandleActive(_bgSound) && (_mixer->getSoundElapsedTime(_bgSound) * getFrameRate()) / 1000 < _frameNum) { _vm->_system->delayMillis(10); } // In case the background sound ends prematurely, update @@ -369,7 +369,7 @@ bool MoviePlayerDXA::processFrame() { // sync case for the subsequent frames. _ticks = _vm->_system->getMillis(); } else { - _ticks += _frameTicks; + _ticks += getFrameDelay(); while (_vm->_system->getMillis() < _ticks) _vm->_system->delayMillis(10); } @@ -463,7 +463,7 @@ bool MoviePlayerSMK::processFrame() { copyFrameToBuffer((byte *)screen->pixels, (_vm->_screenWidth - getWidth()) / 2, (_vm->_screenHeight - getHeight()) / 2, _vm->_screenWidth); _vm->_system->unlockScreen(); - if (!getAudioLag() || getAudioLag() > 0 || _frameSkipped > getFrameRate()) { + if (!getAudioLag() || getFrameWaitTime() || _frameSkipped > getFrameRate()) { if (_frameSkipped > getFrameRate()) { warning("force frame %i redraw", getCurFrame()); _frameSkipped = 0; diff --git a/graphics/dxa_player.cpp b/graphics/dxa_player.cpp index 7cc5f05eb7..e4601564aa 100644 --- a/graphics/dxa_player.cpp +++ b/graphics/dxa_player.cpp @@ -88,6 +88,19 @@ int DXAPlayer::getFrameCount() { return _framesCount; } +int DXAPlayer::getFrameRate() { + if (!_fileStream) + return 0; + return _framesPerSec; +} + +int32 DXAPlayer::getFrameDelay() { + if (!_fileStream) + return 0; + + return _frameTicks; +} + bool DXAPlayer::loadFile(const char *fileName) { uint32 tag; int32 frameRate; diff --git a/graphics/dxa_player.h b/graphics/dxa_player.h index 4b0a74fd94..73d6ac7ca4 100644 --- a/graphics/dxa_player.h +++ b/graphics/dxa_player.h @@ -85,6 +85,18 @@ public: int getFrameCount(); /** + * Returns the frame rate of the video + * @return the frame rate of the video + */ + 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 + */ + int32 getFrameDelay(); + + /** * Load a DXA encoded video file * @param filename the filename to load */ diff --git a/graphics/smk_player.cpp b/graphics/smk_player.cpp index ea4fd45287..ccd366c7c0 100644 --- a/graphics/smk_player.cpp +++ b/graphics/smk_player.cpp @@ -348,7 +348,13 @@ int32 SMKPlayer::getFrameCount() { int32 SMKPlayer::getFrameRate() { if (!_fileStream) return 0; - return _header.frameRate; + + if (_header.frameRate > 0) + return 1000 / _header.frameRate; + else if (_header.frameRate < 0) + return 100000 / (-_header.frameRate); + else + return 10; } int32 SMKPlayer::getFrameDelay() { diff --git a/graphics/smk_player.h b/graphics/smk_player.h index 1b8976203d..b6513d1803 100644 --- a/graphics/smk_player.h +++ b/graphics/smk_player.h @@ -75,9 +75,6 @@ public: /** * Returns the frame rate of the video - * If > 0, fps are 1000 / FrameRate - * If < 0, fps are 100000 / (-FrameRate) - * If 0, fps are 10 * @return the frame rate of the video */ int32 getFrameRate(); |