diff options
-rw-r--r-- | engines/sword1/animation.cpp | 15 | ||||
-rw-r--r-- | engines/sword1/animation.h | 3 | ||||
-rw-r--r-- | engines/sword2/animation.cpp | 13 | ||||
-rw-r--r-- | engines/sword2/animation.h | 3 | ||||
-rw-r--r-- | graphics/animation.cpp | 60 | ||||
-rw-r--r-- | graphics/animation.h | 19 |
6 files changed, 23 insertions, 90 deletions
diff --git a/engines/sword1/animation.cpp b/engines/sword1/animation.cpp index 9c02c431c3..f33277f21e 100644 --- a/engines/sword1/animation.cpp +++ b/engines/sword1/animation.cpp @@ -186,6 +186,7 @@ void MoviePlayer::play(void) { _scr->clearScreen(); _framesSkipped = 0; _ticks = _sys->getMillis(); + _bgSoundStream = Audio::AudioStream::openStreamFile(sequenceList[_id]); if (_bgSoundStream) { _snd->playInputStream(Audio::Mixer::kSFXSoundType, &_bgSoundHandle, _bgSoundStream); } @@ -318,9 +319,6 @@ bool MoviePlayerDXA::load(uint32 id) { _frameHeight = getHeight(); _frameX = (640 - _frameWidth) / 2; _frameY = (480 - _frameHeight) / 2; - if (!_bgSoundStream) { - _bgSoundStream = Audio::AudioStream::openStreamFile(sequenceList[id]); - } return true; } return false; @@ -395,8 +393,8 @@ void MoviePlayerMPEG::insertOverlay(OverlayColor *buf, uint8 *ovl, OverlayColor bool MoviePlayerMPEG::load(uint32 id) { if (MoviePlayer::load(id)) { - _anim = new AnimationState(this, _scr, _snd, _sys); - return _anim->init(sequenceList[id], _bgSoundStream); + _anim = new AnimationState(this, _scr, _sys); + return _anim->init(sequenceList[id]); } return false; } @@ -450,11 +448,8 @@ void MoviePlayerMPEG::processFrame(void) { #endif } -void MoviePlayerMPEG::syncFrame(void) { -} - -AnimationState::AnimationState(MoviePlayer *player, Screen *scr, Audio::Mixer *snd, OSystem *sys) - : BaseAnimationState(snd, sys, 640, 400), _player(player), _scr(scr) { +AnimationState::AnimationState(MoviePlayer *player, Screen *scr, OSystem *sys) + : BaseAnimationState(sys, 640, 400), _player(player), _scr(scr) { } AnimationState::~AnimationState(void) { diff --git a/engines/sword1/animation.h b/engines/sword1/animation.h index 1b484e9583..07aa5241f0 100644 --- a/engines/sword1/animation.h +++ b/engines/sword1/animation.h @@ -120,7 +120,7 @@ private: Screen *_scr; public: - AnimationState(MoviePlayer *player, Screen *scr, Audio::Mixer *snd, OSystem *sys); + AnimationState(MoviePlayer *player, Screen *scr, OSystem *sys); ~AnimationState(void); OverlayColor *giveRgbBuffer(void); @@ -149,7 +149,6 @@ protected: bool initOverlays(uint32 id); bool decodeFrame(void); void processFrame(void); - void syncFrame(void); void updateScreen(void); void handleScreenChanged(void); }; diff --git a/engines/sword2/animation.cpp b/engines/sword2/animation.cpp index 9f134621ec..bf60623f92 100644 --- a/engines/sword2/animation.cpp +++ b/engines/sword2/animation.cpp @@ -75,6 +75,7 @@ MoviePlayer::MoviePlayer(Sword2Engine *vm) { _vm = vm; _mixer = _vm->_mixer; _system = _vm->_system; + _name = NULL; _textSurface = NULL; _bgSoundStream = NULL; _ticks = 0; @@ -96,6 +97,7 @@ MoviePlayer::MoviePlayer(Sword2Engine *vm) { } MoviePlayer::~MoviePlayer() { + free(_name); } void MoviePlayer::updatePalette(byte *pal, bool packed) { @@ -278,6 +280,8 @@ bool MoviePlayer::load(const char *name, MovieTextObject *text[]) { _currentText = 0; _currentFrame = 0; + _name = strdup(name); + for (int i = 0; i < ARRAYSIZE(_movies); i++) { if (scumm_stricmp(name, _movies[i].name) == 0) { _seamless = _movies[i].seamless; @@ -335,8 +339,8 @@ void MoviePlayer::play(int32 leadIn, int32 leadOut) { #endif _framesSkipped = 0; - _ticks = _system->getMillis(); + _bgSoundStream = Audio::AudioStream::openStreamFile(_name); if (_bgSoundStream) { _mixer->playInputStream(Audio::Mixer::kSFXSoundType, &_bgSoundHandle, _bgSoundStream); @@ -504,8 +508,6 @@ bool MoviePlayerDXA::load(const char *name, MovieTextObject *text[]) { _frameX = (_vm->_screen->getScreenWide() - _frameWidth) / 2; _frameY = (_vm->_screen->getScreenDeep() - _frameHeight) / 2; - _bgSoundStream = Audio::AudioStream::openStreamFile(name); - return true; } @@ -566,11 +568,8 @@ bool MoviePlayerMPEG::decodeFrame() { return result; } -void MoviePlayerMPEG::syncFrame() { -} - AnimationState::AnimationState(Sword2Engine *vm, MoviePlayer *player) - : BaseAnimationState(vm->_mixer, vm->_system, 640, 480) { + : BaseAnimationState(vm->_system, 640, 480) { _vm = vm; _player = player; } diff --git a/engines/sword2/animation.h b/engines/sword2/animation.h index 337ee2b630..99c4231585 100644 --- a/engines/sword2/animation.h +++ b/engines/sword2/animation.h @@ -57,6 +57,8 @@ protected: Audio::Mixer *_mixer; OSystem *_system; + char *_name; + byte _originalPalette[4 * 256]; byte *_textSurface; @@ -156,7 +158,6 @@ protected: AnimationState *_anim; virtual bool decodeFrame(); - virtual void syncFrame(); #ifndef BACKEND_8BIT void handleScreenChanged(); diff --git a/graphics/animation.cpp b/graphics/animation.cpp index a49d33e4a0..7951e7f2d6 100644 --- a/graphics/animation.cpp +++ b/graphics/animation.cpp @@ -22,7 +22,6 @@ #include "common/stdafx.h" #include "graphics/animation.h" -#include "sound/audiostream.h" #include "common/config-manager.h" #include "common/file.h" #include "common/system.h" @@ -31,8 +30,8 @@ namespace Graphics { -BaseAnimationState::BaseAnimationState(Audio::Mixer *snd, OSystem *sys, int width, int height) - : _movieWidth(width), _movieHeight(height), _frameWidth(width), _frameHeight(height), _snd(snd), _sys(sys) { +BaseAnimationState::BaseAnimationState(OSystem *sys, int width, int height) + : _movieWidth(width), _movieHeight(height), _frameWidth(width), _frameHeight(height), _sys(sys) { #ifndef BACKEND_8BIT const int screenW = _sys->getOverlayWidth(); const int screenH = _sys->getOverlayHeight(); @@ -51,7 +50,6 @@ BaseAnimationState::BaseAnimationState(Audio::Mixer *snd, OSystem *sys, int widt BaseAnimationState::~BaseAnimationState() { #ifdef USE_MPEG2 - _snd->stopHandle(_bgSound); if (_mpegDecoder) mpeg2_close(_mpegDecoder); delete _mpegFile; @@ -61,18 +59,16 @@ BaseAnimationState::~BaseAnimationState() { free(_colorTab); free(_rgbToPix); #endif - delete _bgSoundStream; #endif } -bool BaseAnimationState::init(const char *name, void *audioArg) { +bool BaseAnimationState::init(const char *name) { #ifdef USE_MPEG2 char tempFile[512]; _mpegDecoder = NULL; _mpegFile = NULL; - _bgSoundStream = NULL; #ifdef BACKEND_8BIT @@ -146,17 +142,6 @@ bool BaseAnimationState::init(const char *name, void *audioArg) { _mpegInfo = mpeg2_info(_mpegDecoder); _frameNum = 0; - _frameSkipped = 0; - _ticks = _sys->getMillis(); - - // Play audio - _bgSoundStream = createAudioStream(name, audioArg); - - if (_bgSoundStream != NULL) { - _snd->playInputStream(Audio::Mixer::kSFXSoundType, &_bgSound, _bgSoundStream, -1, 255, 0, false); - } else { - warning("Cutscene: Could not open Audio Track for %s", name); - } return true; #else /* USE_MPEG2 */ @@ -164,10 +149,6 @@ bool BaseAnimationState::init(const char *name, void *audioArg) { #endif } -Audio::AudioStream *BaseAnimationState::createAudioStream(const char *name, void *arg) { - return Audio::AudioStream::openStreamFile(name); -} - bool BaseAnimationState::decodeFrame() { #ifdef USE_MPEG2 mpeg2_state_t state; @@ -188,39 +169,8 @@ bool BaseAnimationState::decodeFrame() { case STATE_SLICE: case STATE_END: if (_mpegInfo->display_fbuf) { - /* simple audio video sync code: - * we calculate the actual frame by taking the elapsed audio time and try - * to stay inside +- 1 frame of this calculated frame number by dropping - * frames if we run behind and delaying if we are too fast - */ - - if (checkPaletteSwitch() || (_bgSoundStream == NULL) || - ((_snd->getSoundElapsedTime(_bgSound) * 12) / 1000 < _frameNum + 1) || - _frameSkipped > 10) { - if (_frameSkipped > 10) { - warning("force frame %i redraw", _frameNum); - _frameSkipped = 0; - } - drawYUV(sequence_i->width, sequence_i->height, _mpegInfo->display_fbuf->buf); - - if (_bgSoundStream && _snd->isSoundHandleActive(_bgSound)) { - while (_snd->isSoundHandleActive(_bgSound) && (_snd->getSoundElapsedTime(_bgSound) * 12) / 1000 < _frameNum) { - _sys->delayMillis(10); - } - // In case the background sound ends prematurely, update - // _ticks so that we can still fall back on the no-sound - // sync case for the subsequent frames. - _ticks = _sys->getMillis(); - } else { - _ticks += 83; - while (_sys->getMillis() < _ticks) - _sys->delayMillis(10); - } - } else { - warning("dropped frame %i", _frameNum); - _frameSkipped++; - } - + checkPaletteSwitch(); + drawYUV(sequence_i->width, sequence_i->height, _mpegInfo->display_fbuf->buf); #ifdef BACKEND_8BIT buildLookup(_palNum + 1, _lutCalcNum); #endif diff --git a/graphics/animation.h b/graphics/animation.h index 1881f0149c..aff644d2d3 100644 --- a/graphics/animation.h +++ b/graphics/animation.h @@ -25,12 +25,6 @@ #include "common/scummsys.h" -#include "sound/mixer.h" - -namespace Audio { - class AudioStream; -} - // Uncomment this if you are using libmpeg2 0.3.1. // #define USE_MPEG2_0_3_1 @@ -72,6 +66,8 @@ namespace Common { class File; } +class OSystem; + namespace Graphics { class BaseAnimationState { @@ -86,12 +82,9 @@ protected: int _movieScale; #endif - Audio::Mixer *_snd; OSystem *_sys; uint _frameNum; - uint _frameSkipped; - uint32 _ticks; #ifdef USE_MPEG2 mpeg2dec_t *_mpegDecoder; @@ -100,9 +93,6 @@ protected: Common::File *_mpegFile; - Audio::SoundHandle _bgSound; - Audio::AudioStream *_bgSoundStream; - #ifdef BACKEND_8BIT int _palNum; int _maxPalNum; @@ -129,10 +119,10 @@ protected: #endif public: - BaseAnimationState(Audio::Mixer *snd, OSystem *sys, int width, int height); + BaseAnimationState(OSystem *sys, int width, int height); virtual ~BaseAnimationState(); - bool init(const char *name, void *audioArg = NULL); + bool init(const char *name); bool decodeFrame(); void handleScreenChanged(); void updateScreen(); @@ -147,7 +137,6 @@ public: protected: bool checkPaletteSwitch(); virtual void drawYUV(int width, int height, byte *const *dat) = 0; - virtual Audio::AudioStream *createAudioStream(const char *name, void *arg); #ifdef BACKEND_8BIT void buildLookup(int p, int lines); |