From 2901694486712f6012152f7192afa10d08ffc561 Mon Sep 17 00:00:00 2001 From: Sven Hesse Date: Sat, 6 Jun 2009 19:06:47 +0000 Subject: Demoplayer: - Fixing the flawed double mode - Adding an "auto" double mode, where the videos get scaled if possible svn-id: r41294 --- engines/gob/demos/demoplayer.cpp | 45 +++++++++++++++++++++++++++++++++------- engines/gob/demos/demoplayer.h | 1 + 2 files changed, 38 insertions(+), 8 deletions(-) (limited to 'engines/gob/demos') diff --git a/engines/gob/demos/demoplayer.cpp b/engines/gob/demos/demoplayer.cpp index 08bd93753c..c1fde0b637 100644 --- a/engines/gob/demos/demoplayer.cpp +++ b/engines/gob/demos/demoplayer.cpp @@ -153,6 +153,13 @@ void DemoPlayer::playVideo(const char *fileName) { bool videoSupportsDouble = ((_vm->_vidPlayer->getFeatures() & Graphics::CoktelVideo::kFeaturesSupportsDouble) != 0); + if (_autoDouble) { + int16 width = _vm->_vidPlayer->getWidth(); + int16 height = _vm->_vidPlayer->getHeight(); + + _doubleMode = ((width <= 320) && (height <= 200)); + } + if (_doubleMode) { if (videoSupportsDouble) { _vm->_vidPlayer->slotSetDoubleMode(-1, true); @@ -177,13 +184,14 @@ void DemoPlayer::playVideoNormal() { } void DemoPlayer::playVideoDoubled() { - const char *fileNameOpened = _vm->_vidPlayer->getFileName(); + Common::String fileNameOpened = _vm->_vidPlayer->getFileName(); _vm->_vidPlayer->primaryClose(); - if (_vm->_vidPlayer->primaryOpen(fileNameOpened, 0, -1, VideoPlayer::kFlagOtherSurface)) { + if (_vm->_vidPlayer->primaryOpen(fileNameOpened.c_str(), 0, -1, + VideoPlayer::kFlagScreenSurface)) { + for (int i = 0; i < _vm->_vidPlayer->getFramesCount(); i++) { - if (_vm->_vidPlayer->primaryPlay(i, i)) - break; + _vm->_vidPlayer->playFrame(i); Graphics::CoktelVideo::State state = _vm->_vidPlayer->getState(); @@ -197,6 +205,21 @@ void DemoPlayer::playVideoDoubled() { _vm->_draw->dirtiedRect(_vm->_draw->_frontSurface, state.left * 2, state.top * 2, wD, hD); _vm->_video->retrace(); + + _vm->_util->processInput(); + if (_vm->shouldQuit()) + break; + + int16 key; + bool end = false; + while (_vm->_util->checkKey(key)) + if (key == 0x011B) + end = true; + if (end) + break; + + _vm->_vidPlayer->slotWaitEndFrame(); + } } } @@ -204,10 +227,16 @@ void DemoPlayer::playVideoDoubled() { void DemoPlayer::evaluateVideoMode(const char *mode) { debugC(2, kDebugDemo, "Video mode \"%s\"", mode); - if (!scumm_strnicmp(mode, "VESA", 4)) - _doubleMode = false; - else if (!scumm_strnicmp(mode, "VGA", 3) && _vm->is640()) - _doubleMode = true; + _autoDouble = false; + _doubleMode = false; + + // Only applicable when we actually can double + if (_vm->is640()) { + if (!scumm_strnicmp(mode, "AUTO", 4)) + _autoDouble = true; + else if (!scumm_strnicmp(mode, "VGA", 3) && _vm->is640()) + _doubleMode = true; + } } } // End of namespace Gob diff --git a/engines/gob/demos/demoplayer.h b/engines/gob/demos/demoplayer.h index 52c089c8f1..9d475512fb 100644 --- a/engines/gob/demos/demoplayer.h +++ b/engines/gob/demos/demoplayer.h @@ -45,6 +45,7 @@ public: protected: GobEngine *_vm; bool _doubleMode; + bool _autoDouble; virtual bool playStream(Common::SeekableReadStream &stream) = 0; -- cgit v1.2.3