aboutsummaryrefslogtreecommitdiff
path: root/engines/bladerunner/vqa_player.cpp
diff options
context:
space:
mode:
authorPeter Kohaut2016-10-28 22:34:04 +0200
committerPeter Kohaut2016-10-28 22:34:04 +0200
commit1b40c5bf55c24a090632765335d871c198004120 (patch)
treec8b40484c403a2192b6fddda343df896f8ab732d /engines/bladerunner/vqa_player.cpp
parentebf173b9ce4305a373c0e24171ed7dec51093c5e (diff)
downloadscummvm-rg350-1b40c5bf55c24a090632765335d871c198004120.tar.gz
scummvm-rg350-1b40c5bf55c24a090632765335d871c198004120.tar.bz2
scummvm-rg350-1b40c5bf55c24a090632765335d871c198004120.zip
BLADERUNNER: fixed memory leaks & overflows
fixed few memory leaks fixed overflows prepared more logic for looping but its not yet working correctly - still figuring out original code for vqadecoder
Diffstat (limited to 'engines/bladerunner/vqa_player.cpp')
-rw-r--r--engines/bladerunner/vqa_player.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/engines/bladerunner/vqa_player.cpp b/engines/bladerunner/vqa_player.cpp
index f875b84cce..4fb19cf561 100644
--- a/engines/bladerunner/vqa_player.cpp
+++ b/engines/bladerunner/vqa_player.cpp
@@ -121,7 +121,7 @@ void VQAPlayer::updateLights(Lights *lights) {
_decoder.decodeLights(lights);
}
-bool VQAPlayer::setLoop(int loop) {
+bool VQAPlayer::setLoop(int loop, int unknown, int loopMode, void(*callback)(void*, int, int), void *callbackData) {
int begin, end;
if (!_decoder.getLoopBeginAndEndFrame(loop, &begin, &end)) {
return false;
@@ -131,6 +131,9 @@ bool VQAPlayer::setLoop(int loop) {
_loopBegin = begin;
_loopEnd = end;
+ _callbackLoopEnded = callback;
+ _callbackData = callbackData;
+
// warning("\t\t\tActive Loop: %d - %d\n", begin, end);
return true;
@@ -158,6 +161,9 @@ int VQAPlayer::calcNextFrame(int frame) const {
if (_curLoop != -1 && frame >= _loopEnd) {
frame = _loopBegin;
+ if (_callbackLoopEnded != nullptr) {
+ _callbackLoopEnded(_callbackData, 0, _curLoop);
+ }
} else {
frame++;
}