From fe1617ac513932b4ae5e202ad6bb4ee61289ecb0 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 15 Jul 2017 11:29:21 -0400 Subject: TITANIC: Fix pause during intro credits cutscene --- engines/titanic/support/avi_surface.cpp | 19 ++++++++++++++----- engines/titanic/support/movie.cpp | 1 - 2 files changed, 14 insertions(+), 6 deletions(-) (limited to 'engines/titanic/support') diff --git a/engines/titanic/support/avi_surface.cpp b/engines/titanic/support/avi_surface.cpp index 69c006e6e8..11b6b68ca4 100644 --- a/engines/titanic/support/avi_surface.cpp +++ b/engines/titanic/support/avi_surface.cpp @@ -472,11 +472,20 @@ Graphics::ManagedSurface *AVISurface::duplicateTransparency() const { } void AVISurface::playCutscene(const Rect &r, uint startFrame, uint endFrame) { - bool isDifferent = _movieFrameSurface[0]->w != r.width() || - _movieFrameSurface[0]->h != r.height(); - - startAtFrame(startFrame); - _currentFrame = startFrame; + bool isDifferent = false; + + if (_currentFrame != ((int)startFrame - 1) || startFrame == 0) { + // Start video playback at the desired starting frame + setFrame(startFrame); + isDifferent = _movieFrameSurface[0]->w != r.width() || + _movieFrameSurface[0]->h != r.height(); + + startAtFrame(startFrame); + _currentFrame = startFrame; + } else { + // Already in position, so pick up where we left off + _decoder->start(); + } while (_currentFrame < (int)endFrame && !g_vm->shouldQuit()) { if (isNextFrame()) { diff --git a/engines/titanic/support/movie.cpp b/engines/titanic/support/movie.cpp index 3095715bc9..eb65cf1a8a 100644 --- a/engines/titanic/support/movie.cpp +++ b/engines/titanic/support/movie.cpp @@ -124,7 +124,6 @@ void OSMovie::playCutscene(const Rect &drawRect, uint startFrame, uint endFrame) CEventTarget eventTarget; g_vm->_events->addTarget(&eventTarget); - _aviSurface.setFrame(startFrame); _aviSurface.playCutscene(drawRect, startFrame, endFrame); g_vm->_events->removeTarget(); -- cgit v1.2.3