aboutsummaryrefslogtreecommitdiff
path: root/engines/saga/introproc_saga2.cpp
diff options
context:
space:
mode:
authorMatthew Hoops2010-05-18 14:17:24 +0000
committerMatthew Hoops2010-05-18 14:17:24 +0000
commit11cbdd03180a655b2b23ee4a13f1a00a1d782b3c (patch)
tree5b0d84211308ea37a2fa2f7017d6f96314f3c6fb /engines/saga/introproc_saga2.cpp
parentf3892a506b2f935bae0be6319394c503c786d368 (diff)
downloadscummvm-rg350-11cbdd03180a655b2b23ee4a13f1a00a1d782b3c.tar.gz
scummvm-rg350-11cbdd03180a655b2b23ee4a13f1a00a1d782b3c.tar.bz2
scummvm-rg350-11cbdd03180a655b2b23ee4a13f1a00a1d782b3c.zip
Committing the rest of the VideoDecoder Rewrite from patch #2963496.
svn-id: r49079
Diffstat (limited to 'engines/saga/introproc_saga2.cpp')
-rw-r--r--engines/saga/introproc_saga2.cpp59
1 files changed, 34 insertions, 25 deletions
diff --git a/engines/saga/introproc_saga2.cpp b/engines/saga/introproc_saga2.cpp
index 0af31dae61..7491815303 100644
--- a/engines/saga/introproc_saga2.cpp
+++ b/engines/saga/introproc_saga2.cpp
@@ -40,13 +40,7 @@ namespace Saga {
int Scene::DinoStartProc() {
_vm->_gfx->showCursor(false);
- Graphics::SmackerDecoder *smkDecoder = new Graphics::SmackerDecoder(_vm->_mixer);
- Graphics::VideoPlayer *player = new Graphics::VideoPlayer(smkDecoder);
- if (smkDecoder->loadFile("testvid.smk"))
- player->playVideo(); // Play introduction
- smkDecoder->closeFile();
- delete player;
- delete smkDecoder;
+ playMovie("testvid.smk");
// HACK: Forcibly quit here
_vm->quitGame();
@@ -57,16 +51,8 @@ int Scene::DinoStartProc() {
int Scene::FTA2StartProc() {
_vm->_gfx->showCursor(false);
- Graphics::SmackerDecoder *smkDecoder = new Graphics::SmackerDecoder(_vm->_mixer);
- Graphics::VideoPlayer *player = new Graphics::VideoPlayer(smkDecoder);
- if (smkDecoder->loadFile("trimark.smk"))
- player->playVideo(); // Show Ignite logo
- smkDecoder->closeFile();
- if (smkDecoder->loadFile("intro.smk"))
- player->playVideo(); // Play introduction
- smkDecoder->closeFile();
- delete player;
- delete smkDecoder;
+ playMovie("trimark.smk");
+ playMovie("intro.smk");
// HACK: Forcibly quit here
_vm->quitGame();
@@ -100,18 +86,41 @@ int Scene::FTA2EndProc(FTA2Endings whichEnding) {
_vm->_gfx->showCursor(false);
// Play ending
- Graphics::SmackerDecoder *smkDecoder = new Graphics::SmackerDecoder(_vm->_mixer);
- Graphics::VideoPlayer *player = new Graphics::VideoPlayer(smkDecoder);
- if (smkDecoder->loadFile(videoName)) {
- player->playVideo();
- smkDecoder->closeFile();
- }
- delete player;
- delete smkDecoder;
+ playMovie(videoName);
return SUCCESS;
}
+void Scene::playMovie(const char *filename) {
+ Graphics::SmackerDecoder *smkDecoder = new Graphics::SmackerDecoder(_vm->_mixer);
+
+ if (!smkDecoder->loadFile(filename))
+ return;
+
+ uint16 x = (g_system->getWidth() - smkDecoder->getWidth()) / 2;
+ uint16 y = (g_system->getHeight() - smkDecoder->getHeight()) / 2;
+
+ while (!_vm->shouldQuit() && !smkDecoder->endOfVideo()) {
+ if (smkDecoder->needsUpdate()) {
+ Graphics::Surface *frame = smkDecoder->decodeNextFrame();
+ if (frame) {
+ _vm->_system->copyRectToScreen((byte *)frame->pixels, frame->pitch, x, y, frame->w, frame->h);
+
+ if (smkDecoder->hasDirtyPalette())
+ smkDecoder->setSystemPalette();
+
+ _vm->_system->updateScreen();
+ }
+ }
+
+ Common::Event event;
+ while (_vm->_system->getEventManager()->pollEvent(event))
+ ;
+
+ _vm->_system->delayMillis(10);
+ }
+}
+
} // End of namespace Saga
#endif