aboutsummaryrefslogtreecommitdiff
path: root/engines/sword1/animation.h
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sword1/animation.h')
-rw-r--r--engines/sword1/animation.h94
1 files changed, 78 insertions, 16 deletions
diff --git a/engines/sword1/animation.h b/engines/sword1/animation.h
index f49245153b..1b484e9583 100644
--- a/engines/sword1/animation.h
+++ b/engines/sword1/animation.h
@@ -24,6 +24,7 @@
#define ANIMATION_H
#include "graphics/animation.h"
+#include "graphics/dxa_player.h"
#include "sword1/screen.h"
#include "sword1/sound.h"
@@ -57,15 +58,71 @@ enum {
#define INTRO_LOGO_OVLS 12
#define INTRO_TEXT_OVLS 8
+class MoviePlayer {
+public:
+ MoviePlayer(Screen *scr, Audio::Mixer *snd, OSystem *sys);
+ virtual ~MoviePlayer(void);
+ virtual bool load(uint32 id);
+ void play(void);
+ void updatePalette(byte *pal, bool packed = true);
+private:
+ bool checkSkipFrame(void);
+protected:
+ Screen *_scr;
+ Audio::Mixer *_snd;
+ OSystem *_sys;
+
+ uint32 _id;
+
+ byte *_frameBuffer;
+ uint _currentFrame;
+ int _framesSkipped;
+ bool _forceFrame;
+
+ int _frameWidth, _frameHeight;
+ int _frameX, _frameY;
+
+ Audio::SoundHandle _bgSoundHandle;
+ Audio::AudioStream *_bgSoundStream;
+ uint32 _ticks;
+
+ virtual void handleScreenChanged(void);
+ virtual bool initOverlays(uint32 id);
+ virtual bool decodeFrame(void) = 0;
+ virtual void processFrame(void) = 0;
+ virtual void syncFrame(void);
+ virtual void updateScreen(void) = 0;
+};
+
+#ifdef USE_ZLIB
+
+class MoviePlayerDXA : public MoviePlayer, ::Graphics::DXAPlayer {
+protected:
+ virtual void setPalette(byte *pal);
+public:
+ MoviePlayerDXA(Screen *scr, Audio::Mixer *snd, OSystem *sys);
+ virtual ~MoviePlayerDXA(void);
+ bool load(uint32 id);
+protected:
+ bool initOverlays(uint32 id);
+ bool decodeFrame(void);
+ void processFrame(void);
+ void updateScreen(void);
+};
+
+#endif
+
+#ifdef USE_MPEG2
+
class AnimationState : public Graphics::BaseAnimationState {
private:
+ MoviePlayer *_player;
Screen *_scr;
public:
- AnimationState(Screen *scr, Audio::Mixer *snd, OSystem *sys);
- ~AnimationState();
+ AnimationState(MoviePlayer *player, Screen *scr, Audio::Mixer *snd, OSystem *sys);
+ ~AnimationState(void);
OverlayColor *giveRgbBuffer(void);
- bool soundFinished();
private:
void drawYUV(int width, int height, byte *const *dat);
@@ -78,24 +135,27 @@ protected:
virtual Audio::AudioStream *createAudioStream(const char *name, void *arg);
};
-class MoviePlayer {
+class MoviePlayerMPEG : public MoviePlayer {
public:
- MoviePlayer(Screen *scr, Audio::Mixer *snd, OSystem *sys);
- ~MoviePlayer(void);
- void play(uint32 id);
-private:
+ MoviePlayerMPEG(Screen *scr, Audio::Mixer *snd, OSystem *sys);
+ virtual ~MoviePlayerMPEG(void);
+ bool load(uint32 id);
+protected:
void insertOverlay(OverlayColor *buf, uint8 *ovl, OverlayColor *pal);
- void processFrame(uint32 animId, AnimationState *anim, uint32 frameNo);
- bool initOverlays(uint32 id);
- Screen *_scr;
- Audio::Mixer *_snd;
- OSystem *_sys;
-
- static const char *_sequenceList[20];
- uint8 *_logoOvls[INTRO_LOGO_OVLS];
+ AnimationState *_anim;
OverlayColor *_introPal;
+ uint8 *_logoOvls[INTRO_LOGO_OVLS];
+
+ bool initOverlays(uint32 id);
+ bool decodeFrame(void);
+ void processFrame(void);
+ void syncFrame(void);
+ void updateScreen(void);
+ void handleScreenChanged(void);
};
+#endif
+
struct FileQueue {
Audio::AudioStream *stream;
FileQueue *next;
@@ -114,6 +174,8 @@ private:
FileQueue *_queue;
};
+MoviePlayer *makeMoviePlayer(uint32 id, Screen *scr, Audio::Mixer *snd, OSystem *sys);
+
} // End of namespace Sword1
#endif