diff options
author | Sven Hesse | 2010-08-08 00:44:33 +0000 |
---|---|---|
committer | Sven Hesse | 2010-08-08 00:44:33 +0000 |
commit | 2296aad042aad1c9983b4a9bf2e187912c361407 (patch) | |
tree | 15951e4b16b520be3bc28376fa045a155bad38bb | |
parent | 2bcc02a27a5261fab4d769e3160ff490573a6be1 (diff) | |
download | scummvm-rg350-2296aad042aad1c9983b4a9bf2e187912c361407.tar.gz scummvm-rg350-2296aad042aad1c9983b4a9bf2e187912c361407.tar.bz2 scummvm-rg350-2296aad042aad1c9983b4a9bf2e187912c361407.zip |
VIDEO/GOB: Fix IMD playing
Fix IMD playing for some fringe cases, especially when seeking
beforehand.
svn-id: r51871
-rw-r--r-- | engines/gob/mult_v2.cpp | 9 | ||||
-rw-r--r-- | engines/gob/videoplayer.h | 4 | ||||
-rw-r--r-- | graphics/video/coktel_decoder.cpp | 4 |
3 files changed, 10 insertions, 7 deletions
diff --git a/engines/gob/mult_v2.cpp b/engines/gob/mult_v2.cpp index 8c58183b3c..d9e94199c3 100644 --- a/engines/gob/mult_v2.cpp +++ b/engines/gob/mult_v2.cpp @@ -1129,6 +1129,8 @@ void Mult_v2::playImd(const char *imdFile, Mult::Mult_ImdKey &key, int16 dir, return; } + _vm->_vidPlayer->evaluateFlags(props); + int slot; if ((slot = _vm->_vidPlayer->openVideo(true, imdFile, props)) < 0) return; @@ -1141,13 +1143,16 @@ void Mult_v2::playImd(const char *imdFile, Mult::Mult_ImdKey &key, int16 dir, uint32 baseFrame = startFrame % (props.lastFrame - props.palFrame + 1); + props.endFrame = props.lastFrame; props.startFrame = baseFrame + props.palFrame; props.lastFrame = baseFrame + props.palFrame; + props.flags &= 0x7F; + debugC(2, kDebugVideo, "Playing mult video \"%s\" @ %d+%d, frame %d, " - "paletteCmd %d (%d - %d), flags %X", imdFile, + "paletteCmd %d (%d - %d; %d), flags %X", imdFile, props.x, props.y, props.startFrame, - props.palCmd, props.palStart, props.palEnd, props.flags); + props.palCmd, props.palStart, props.palEnd, props.endFrame, props.flags); _vm->_vidPlayer->play(slot, props); } diff --git a/engines/gob/videoplayer.h b/engines/gob/videoplayer.h index f1245bca48..1b60e7ffd6 100644 --- a/engines/gob/videoplayer.h +++ b/engines/gob/videoplayer.h @@ -79,8 +79,8 @@ public: int16 breakKey; ///< Keycode of the break/abort key. uint16 palCmd; ///< Palette command. - uint16 palStart; ///< Palette entry to start with. - uint16 palEnd; ///< Palette entry to end at. + int16 palStart; ///< Palette entry to start with. + int16 palEnd; ///< Palette entry to end at. int32 palFrame; ///< Frame to apply the palette command at. bool fade; ///< Fade in? diff --git a/graphics/video/coktel_decoder.cpp b/graphics/video/coktel_decoder.cpp index 73bcc6a8d0..4e5a8fe6e5 100644 --- a/graphics/video/coktel_decoder.cpp +++ b/graphics/video/coktel_decoder.cpp @@ -679,7 +679,7 @@ bool IMDDecoder::seek(int32 frame, int whence, bool restart) { else return false; - if ((frame < -1) || (((uint32) frame) >= _frameCount)) + if ((frame < -1) || (frame >= ((int32) _frameCount))) // Out of range return false; @@ -708,8 +708,6 @@ bool IMDDecoder::seek(int32 frame, int whence, bool restart) { for (int i = ((frame > _curFrame) ? _curFrame : 0); i <= frame; i++) processFrame(); - return true; - } else { warning("IMDDecoder::seek(): Frame %d is not directly accessible", frame + 1); return false; |