aboutsummaryrefslogtreecommitdiff
path: root/engines/bladerunner/vqa_player.cpp
diff options
context:
space:
mode:
authorThomas Fach-Pedersen2014-05-20 11:30:16 +0200
committerEugene Sandulenko2016-09-29 22:33:11 +0200
commita67e9e16bdbb5acbb2d1eb52a87c3eb2d128c44d (patch)
treeee7a8fc9e98d09228948869f312d04b9db367e43 /engines/bladerunner/vqa_player.cpp
parent5fd05a41d7908dd63420c91134965b7d14c4b3ae (diff)
downloadscummvm-rg350-a67e9e16bdbb5acbb2d1eb52a87c3eb2d128c44d.tar.gz
scummvm-rg350-a67e9e16bdbb5acbb2d1eb52a87c3eb2d128c44d.tar.bz2
scummvm-rg350-a67e9e16bdbb5acbb2d1eb52a87c3eb2d128c44d.zip
BLADERUNNER: Rebuild VQADecoder on top of Video::VideoDecoder
Diffstat (limited to 'engines/bladerunner/vqa_player.cpp')
-rw-r--r--engines/bladerunner/vqa_player.cpp25
1 files changed, 24 insertions, 1 deletions
diff --git a/engines/bladerunner/vqa_player.cpp b/engines/bladerunner/vqa_player.cpp
index 8b614813a7..f05e14ba44 100644
--- a/engines/bladerunner/vqa_player.cpp
+++ b/engines/bladerunner/vqa_player.cpp
@@ -24,6 +24,8 @@
#include "bladerunner/bladerunner.h"
+#include "audio/decoders/raw.h"
+
#include "common/system.h"
namespace BladeRunner {
@@ -39,6 +41,8 @@ bool VQAPlayer::open(const Common::String &name) {
return false;
}
+ _audioStream = Audio::makeQueuingAudioStream(_decoder._header.freq, _decoder._header.channels == 2);
+
return true;
}
@@ -78,12 +82,31 @@ int VQAPlayer::update() {
else
++_curFrame;
- if (_curFrame >= _decoder._header.numFrames)
+ if (_curFrame >= _decoder._header.numFrames) {
+ if (_audioStream)
+ _audioStream->finish();
return -3;
+ }
_decoder.readFrame();
_decoder.decodeFrame((uint16*)_surface->getPixels());
+ if (_audioStream) {
+ int16 *audioFrame = (int16*)malloc(2940);
+ memcpy(audioFrame, _decoder.getAudioFrame(), 2940);
+ _audioStream->queueBuffer((byte*)audioFrame, 2940, DisposeAfterUse::YES, Audio::FLAG_16BITS | Audio::FLAG_LITTLE_ENDIAN);
+
+ if (!_audioStarted)
+ _vm->_mixer->playStream(
+ Audio::Mixer::kPlainSoundType,
+ &_soundHandle,
+ _audioStream,
+ -1
+ );
+
+ _audioStarted = true;
+ }
+
return _curFrame;
}