aboutsummaryrefslogtreecommitdiff
path: root/engines/gob/demos
diff options
context:
space:
mode:
authorSven Hesse2009-06-06 19:06:47 +0000
committerSven Hesse2009-06-06 19:06:47 +0000
commit2901694486712f6012152f7192afa10d08ffc561 (patch)
tree5691199e79c2f55d7352c34a07133e4189920529 /engines/gob/demos
parent6c44c7764c3776e6189cd1dfb519709c4864d7fa (diff)
downloadscummvm-rg350-2901694486712f6012152f7192afa10d08ffc561.tar.gz
scummvm-rg350-2901694486712f6012152f7192afa10d08ffc561.tar.bz2
scummvm-rg350-2901694486712f6012152f7192afa10d08ffc561.zip
Demoplayer:
- Fixing the flawed double mode - Adding an "auto" double mode, where the videos get scaled if possible svn-id: r41294
Diffstat (limited to 'engines/gob/demos')
-rw-r--r--engines/gob/demos/demoplayer.cpp45
-rw-r--r--engines/gob/demos/demoplayer.h1
2 files changed, 38 insertions, 8 deletions
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;