aboutsummaryrefslogtreecommitdiff
path: root/engines/bladerunner/vqa_player.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/bladerunner/vqa_player.cpp')
-rw-r--r--engines/bladerunner/vqa_player.cpp49
1 files changed, 37 insertions, 12 deletions
diff --git a/engines/bladerunner/vqa_player.cpp b/engines/bladerunner/vqa_player.cpp
index 0a04d1b786..d7b53ff94c 100644
--- a/engines/bladerunner/vqa_player.cpp
+++ b/engines/bladerunner/vqa_player.cpp
@@ -60,17 +60,17 @@ int VQAPlayer::update() {
if (_curFrame == -1) {
_curFrame = 0;
if (_curFrame >= 0) {
- _decoder.readNextPacket();
+ _decoder.readPacket(_curFrame);
if (_hasAudio)
queueAudioFrame(_decoder.decodeAudioFrame());
_surface = _decoder.decodeVideoFrame();
_zBuffer = _decoder.decodeZBuffer();
- _decoder.decodeView(_view);
+ _view = _decoder.getView();
}
_decodedFrame = calcNextFrame(_curFrame);
if (_decodedFrame >= 0) {
- _decoder.readNextPacket();
+ _decoder.readPacket(_decodedFrame);
if (_hasAudio)
queueAudioFrame(_decoder.decodeAudioFrame());
}
@@ -89,12 +89,12 @@ int VQAPlayer::update() {
if (_curFrame >= 0) {
_surface = _decoder.decodeVideoFrame();
_zBuffer = _decoder.decodeZBuffer();
- _decoder.decodeView(_view);
+ _view = _decoder.getView();
}
_decodedFrame = calcNextFrame(_curFrame);
if (_decodedFrame >= 0) {
- _decoder.readNextPacket();
+ _decoder.readPacket(_decodedFrame);
if (_hasAudio)
queueAudioFrame(_decoder.decodeAudioFrame());
}
@@ -115,21 +115,46 @@ const uint16 *VQAPlayer::getZBuffer() const {
return _zBuffer;
}
-void VQAPlayer::setLoopSpecial(int loop, bool wait) {
- _loopSpecial = loop;
- if (!wait)
- _curLoop = -1;
+bool VQAPlayer::setLoop(int loop) {
+ int begin, end;
+ if (!_decoder.getLoopBeginAndEndFrame(loop, &begin, &end)) {
+ return false;
+ }
+
+ _curLoop = loop;
+ _loopBegin = begin;
+ _loopEnd = end;
+
+ // warning("\t\t\tActive Loop: %d - %d\n", begin, end);
+
+ return true;
}
-void VQAPlayer::setLoopDefault(int loop) {
- _loopDefault = loop;
+int VQAPlayer::getLoopBeginFrame(int loop) {
+ int begin, end;
+ if (!_decoder.getLoopBeginAndEndFrame(loop, &begin, &end)) {
+ return -1;
+ }
+ return begin;
+}
+
+int VQAPlayer::getLoopEndFrame(int loop) {
+ int begin, end;
+ if (!_decoder.getLoopBeginAndEndFrame(loop, &begin, &end)) {
+ return -1;
+ }
+ return end;
}
int VQAPlayer::calcNextFrame(int frame) const {
if (frame < 0)
return -3;
- frame += 1;
+ if (_curLoop != -1 && frame >= _loopEnd) {
+ frame = _loopBegin;
+ } else {
+ frame++;
+ }
if (frame == _decoder.numFrames())
frame = -3;