From a67e9e16bdbb5acbb2d1eb52a87c3eb2d128c44d Mon Sep 17 00:00:00 2001 From: Thomas Fach-Pedersen Date: Tue, 20 May 2014 11:30:16 +0200 Subject: BLADERUNNER: Rebuild VQADecoder on top of Video::VideoDecoder --- engines/bladerunner/vqa_player.cpp | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) (limited to 'engines/bladerunner/vqa_player.cpp') 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; } -- cgit v1.2.3