diff options
author | Filippos Karapetis | 2009-12-30 10:09:48 +0000 |
---|---|---|
committer | Filippos Karapetis | 2009-12-30 10:09:48 +0000 |
commit | bcc33871c117c0d1322ce8d90965782cec0157db (patch) | |
tree | 7185a4f81dd93ce34068a7044e79f62db4918516 | |
parent | 69c71c7628c5792e7cc7b49760e640d2be778696 (diff) | |
download | scummvm-rg350-bcc33871c117c0d1322ce8d90965782cec0157db.tar.gz scummvm-rg350-bcc33871c117c0d1322ce8d90965782cec0157db.tar.bz2 scummvm-rg350-bcc33871c117c0d1322ce8d90965782cec0157db.zip |
The wrapper for the VMD decoder is only used in the SCI engine for SCI32 games, so moved it inside the engine, instead of common code. Added support for VMD video playing from the "play_video" console command
svn-id: r46737
-rw-r--r-- | engines/sci/console.cpp | 21 | ||||
-rw-r--r-- | engines/sci/engine/kgraphics.cpp | 2 | ||||
-rw-r--r-- | engines/sci/module.mk | 5 | ||||
-rw-r--r-- | engines/sci/video/seq_decoder.cpp (renamed from engines/sci/seq_decoder.cpp) | 2 | ||||
-rw-r--r-- | engines/sci/video/seq_decoder.h (renamed from engines/sci/seq_decoder.h) | 0 | ||||
-rw-r--r-- | engines/sci/video/vmd_decoder.cpp (renamed from graphics/video/vmd_decoder.cpp) | 16 | ||||
-rw-r--r-- | engines/sci/video/vmd_decoder.h (renamed from graphics/video/vmd_decoder.h) | 11 | ||||
-rw-r--r-- | graphics/module.mk | 1 |
8 files changed, 36 insertions, 22 deletions
diff --git a/engines/sci/console.cpp b/engines/sci/console.cpp index 8b51ce2186..92b1d1c1ec 100644 --- a/engines/sci/console.cpp +++ b/engines/sci/console.cpp @@ -52,7 +52,10 @@ #include "sci/gui/gui_cursor.h" #include "graphics/video/avi_decoder.h" -#include "sci/seq_decoder.h" +#include "sci/video/seq_decoder.h" +#ifdef ENABLE_SCI32 +#include "sci/video/vmd_decoder.h" +#endif #include "common/savefile.h" @@ -245,6 +248,18 @@ void Console::postEnter() { aviDecoder->closeFile(); delete player; delete aviDecoder; + } else if (_videoFile.hasSuffix(".vmd")) { +#ifdef ENABLE_SCI32 + VMDDecoder *vmdDecoder = new VMDDecoder(g_system->getMixer()); + Graphics::VideoPlayer *player = new Graphics::VideoPlayer(vmdDecoder); + if (vmdDecoder->loadFile(_videoFile.c_str())) + player->playVideo(); + else + DebugPrintf("Failed to open movie file %s\n", _videoFile.c_str()); + vmdDecoder->closeFile(); + delete player; + delete vmdDecoder; +#endif } _vm->_gamestate->_gui->showCursor(); @@ -1139,7 +1154,7 @@ bool Console::cmdUndither(int argc, const char **argv) { bool Console::cmdPlayVideo(int argc, const char **argv) { if (argc < 2) { - DebugPrintf("Plays a SEQ or AVI video.\n"); + DebugPrintf("Plays a SEQ, AVI or VMD video.\n"); DebugPrintf("Usage: %s <video file name> <delay>\n", argv[0]); DebugPrintf("The video file name should include the extension\n"); DebugPrintf("Delay is only used in SEQ videos and is measured in ticks (default: 10)\n"); @@ -1149,7 +1164,7 @@ bool Console::cmdPlayVideo(int argc, const char **argv) { Common::String filename = argv[1]; filename.toLowercase(); - if (filename.hasSuffix(".seq") || filename.hasSuffix(".avi")) { + if (filename.hasSuffix(".seq") || filename.hasSuffix(".avi") || filename.hasSuffix(".vmd")) { _videoFile = filename; _videoFrameDelay = (argc == 2) ? 10 : atoi(argv[2]); return false; diff --git a/engines/sci/engine/kgraphics.cpp b/engines/sci/engine/kgraphics.cpp index d553b5d0e2..51ad54d2c1 100644 --- a/engines/sci/engine/kgraphics.cpp +++ b/engines/sci/engine/kgraphics.cpp @@ -30,7 +30,7 @@ #include "sci/sci.h" #include "sci/debug.h" // for g_debug_sleeptime_factor #include "sci/resource.h" -#include "sci/seq_decoder.h" +#include "sci/video/seq_decoder.h" #include "sci/engine/state.h" #include "sci/engine/kernel.h" #include "sci/gfx/operations.h" diff --git a/engines/sci/module.mk b/engines/sci/module.mk index 39922f37f5..13d815e366 100644 --- a/engines/sci/module.mk +++ b/engines/sci/module.mk @@ -7,7 +7,6 @@ MODULE_OBJS := \ event.o \ resource.o \ sci.o \ - seq_decoder.o \ vocabulary.o \ engine/game.o \ engine/gc.o \ @@ -80,7 +79,9 @@ MODULE_OBJS := \ sfx/seq/map-mt32-to-gm.o \ sfx/softseq/adlib.o \ sfx/softseq/amiga.o \ - sfx/softseq/pcjr.o + sfx/softseq/pcjr.o \ + video/seq_decoder.o \ + video/vmd_decoder.o ifdef ENABLE_SCI32 MODULE_OBJS += \ diff --git a/engines/sci/seq_decoder.cpp b/engines/sci/video/seq_decoder.cpp index 45c46d13c6..d3b1ea915d 100644 --- a/engines/sci/seq_decoder.cpp +++ b/engines/sci/video/seq_decoder.cpp @@ -31,7 +31,7 @@ #include "graphics/surface.h" -#include "sci/seq_decoder.h" +#include "sci/video/seq_decoder.h" namespace Sci { diff --git a/engines/sci/seq_decoder.h b/engines/sci/video/seq_decoder.h index 7c810db05d..7c810db05d 100644 --- a/engines/sci/seq_decoder.h +++ b/engines/sci/video/seq_decoder.h diff --git a/graphics/video/vmd_decoder.cpp b/engines/sci/video/vmd_decoder.cpp index d57eb49ee1..4e56e51054 100644 --- a/graphics/video/vmd_decoder.cpp +++ b/engines/sci/video/vmd_decoder.cpp @@ -23,9 +23,9 @@ * */ -#include "graphics/video/vmd_decoder.h" +#ifdef ENABLE_SCI32 -#ifdef GRAPHICS_VIDEO_COKTELVIDEO_H +#include "sci/video/vmd_decoder.h" #include "common/archive.h" #include "common/endian.h" @@ -38,10 +38,10 @@ #include "sound/mixer.h" #include "sound/audiostream.h" -namespace Graphics { +namespace Sci { VMDDecoder::VMDDecoder(Audio::Mixer *mixer) : _mixer(mixer) { - _vmdDecoder = new Vmd(new Graphics::PaletteLUT(5, PaletteLUT::kPaletteYUV)); + _vmdDecoder = new Graphics::Vmd(new Graphics::PaletteLUT(5, Graphics::PaletteLUT::kPaletteYUV)); } VMDDecoder::~VMDDecoder() { @@ -62,12 +62,12 @@ bool VMDDecoder::loadFile(const char *fileName) { if (!_vmdDecoder->load(*_fileStream)) return false; - if (_vmdDecoder->getFeatures() & CoktelVideo::kFeaturesPalette) { + if (_vmdDecoder->getFeatures() & Graphics::CoktelVideo::kFeaturesPalette) { getPalette(); setPalette(_palette); } - if (_vmdDecoder->getFeatures() & CoktelVideo::kFeaturesSound) + if (_vmdDecoder->getFeatures() & Graphics::CoktelVideo::kFeaturesSound) _vmdDecoder->enableSound(*_mixer); _videoInfo.width = _vmdDecoder->getWidth(); @@ -106,9 +106,9 @@ bool VMDDecoder::decodeNextFrame() { if (_videoInfo.currentFrame == 0) _videoInfo.startTime = g_system->getMillis(); - CoktelVideo::State state = _vmdDecoder->nextFrame(); + Graphics::CoktelVideo::State state = _vmdDecoder->nextFrame(); - if (state.flags & CoktelVideo::kStatePalette) { + if (state.flags & Graphics::CoktelVideo::kStatePalette) { getPalette(); setPalette(_palette); } diff --git a/graphics/video/vmd_decoder.h b/engines/sci/video/vmd_decoder.h index 61ec0adf50..63a7e92ab6 100644 --- a/graphics/video/vmd_decoder.h +++ b/engines/sci/video/vmd_decoder.h @@ -23,17 +23,16 @@ * */ -#include "graphics/video/coktelvideo/coktelvideo.h" - -#ifdef GRAPHICS_VIDEO_COKTELVIDEO_H +#ifdef ENABLE_SCI32 #ifndef GRAPHICS_VIDEO_VMD_DECODER_H #define GRAPHICS_VIDEO_VMD_DECODER_H +#include "graphics/video/coktelvideo/coktelvideo.h" #include "graphics/video/video_player.h" #include "sound/mixer.h" -namespace Graphics { +namespace Sci { /** * Wrapper for the Coktel Vision VMD video decoder @@ -43,7 +42,7 @@ namespace Graphics { * - gob (without this wrapper) * - sci */ -class VMDDecoder : public VideoDecoder { + class VMDDecoder : public Graphics::VideoDecoder { public: VMDDecoder(Audio::Mixer *mixer); virtual ~VMDDecoder(); @@ -64,7 +63,7 @@ public: bool decodeNextFrame(); private: - Vmd *_vmdDecoder; + Graphics::Vmd *_vmdDecoder; Audio::Mixer *_mixer; byte _palette[256 * 3]; diff --git a/graphics/module.mk b/graphics/module.mk index fa7ff256c4..97fff5a400 100644 --- a/graphics/module.mk +++ b/graphics/module.mk @@ -26,7 +26,6 @@ MODULE_OBJS := \ video/flic_decoder.o \ video/mpeg_player.o \ video/smk_decoder.o \ - video/vmd_decoder.o \ video/video_player.o \ video/codecs/msvideo1.o \ video/coktelvideo/indeo3.o \ |