aboutsummaryrefslogtreecommitdiff
path: root/engines/bladerunner/outtake.cpp
diff options
context:
space:
mode:
authorThanasis Antoniou2019-09-01 16:39:03 +0300
committerThanasis Antoniou2019-09-01 16:39:36 +0300
commitfd7fd3a18b7310aef8203ef5be2b37a9fc3eaed7 (patch)
tree3a0cc5e0d32a36a29999f77d7783b2efe768da93 /engines/bladerunner/outtake.cpp
parenta37f35695c21106d49ce7a3991e9cddd487e9eda (diff)
downloadscummvm-rg350-fd7fd3a18b7310aef8203ef5be2b37a9fc3eaed7.tar.gz
scummvm-rg350-fd7fd3a18b7310aef8203ef5be2b37a9fc3eaed7.tar.bz2
scummvm-rg350-fd7fd3a18b7310aef8203ef5be2b37a9fc3eaed7.zip
BLADERUNNER: Isolate new frame limiter code in new class
Diffstat (limited to 'engines/bladerunner/outtake.cpp')
-rw-r--r--engines/bladerunner/outtake.cpp23
1 files changed, 11 insertions, 12 deletions
diff --git a/engines/bladerunner/outtake.cpp b/engines/bladerunner/outtake.cpp
index ba02bda21e..2f49099455 100644
--- a/engines/bladerunner/outtake.cpp
+++ b/engines/bladerunner/outtake.cpp
@@ -24,6 +24,7 @@
#include "bladerunner/bladerunner.h"
#include "bladerunner/chapters.h"
+#include "bladerunner/framelimiter.h"
#include "bladerunner/subtitles.h"
#include "bladerunner/vqa_player.h"
#include "bladerunner/time.h"
@@ -37,10 +38,16 @@ namespace BladeRunner {
OuttakePlayer::OuttakePlayer(BladeRunnerEngine *vm) {
_vm = vm;
_surfaceVideo.create(_vm->_surfaceBack.w, _vm->_surfaceBack.h, _vm->_surfaceBack.format);
+ _framelimiter = new Framelimiter(_vm, Framelimiter::kDefaultFpsRate, Framelimiter::kDefaultUseDelayMillis);
}
OuttakePlayer::~OuttakePlayer() {
_surfaceVideo.free();
+
+ if (_framelimiter) {
+ delete _framelimiter;
+ _framelimiter = nullptr;
+ }
}
void OuttakePlayer::play(const Common::String &name, bool noLocalization, int container) {
@@ -70,28 +77,20 @@ void OuttakePlayer::play(const Common::String &name, bool noLocalization, int co
_vm->_vqaIsPlaying = true;
_vm->_vqaStopIsRequested = false;
- uint32 timeNow = 0;
- bool firstFrame = true;
- _timeLast = _vm->_time->currentSystem();
+ _framelimiter->init();
while (!_vm->_vqaStopIsRequested && !_vm->shouldQuit()) {
_vm->handleEvents();
if (!_vm->_windowIsActive) {
- _timeLast = _vm->_time->currentSystem();
+ _framelimiter->init();
continue;
}
- timeNow = _vm->_time->currentSystem();
- // unsigned difference is intentional
- if (timeNow - _timeLast < _vm->kUpdateFrameTimeInMs && !firstFrame) {
+ if (!_framelimiter->shouldExecuteScreenUpdate()) {
continue;
}
- if (firstFrame) {
- firstFrame = false;
- }
-
int frame = vqaPlayer.update();
blit(_surfaceVideo, _vm->_surfaceFront); // This helps to make subtitles disappear properly, if the video is rendered in separate surface and then pushed to the front surface
if (frame == -3) { // end of video
@@ -103,7 +102,7 @@ void OuttakePlayer::play(const Common::String &name, bool noLocalization, int co
_vm->_subtitles->tickOuttakes(_vm->_surfaceFront);
_vm->blitToScreen(_vm->_surfaceFront);
}
- _timeLast = timeNow;
+ _framelimiter->postScreenUpdate();
}
_vm->_vqaIsPlaying = false;