diff options
author | Matthew Hoops | 2010-05-18 14:17:24 +0000 |
---|---|---|
committer | Matthew Hoops | 2010-05-18 14:17:24 +0000 |
commit | 11cbdd03180a655b2b23ee4a13f1a00a1d782b3c (patch) | |
tree | 5b0d84211308ea37a2fa2f7017d6f96314f3c6fb /engines/saga/introproc_saga2.cpp | |
parent | f3892a506b2f935bae0be6319394c503c786d368 (diff) | |
download | scummvm-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.cpp | 59 |
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 |