diff options
author | Thomas Fach-Pedersen | 2014-05-20 11:30:16 +0200 |
---|---|---|
committer | Eugene Sandulenko | 2016-09-29 22:33:11 +0200 |
commit | a67e9e16bdbb5acbb2d1eb52a87c3eb2d128c44d (patch) | |
tree | ee7a8fc9e98d09228948869f312d04b9db367e43 /engines/bladerunner/vqa_player.cpp | |
parent | 5fd05a41d7908dd63420c91134965b7d14c4b3ae (diff) | |
download | scummvm-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.cpp | 25 |
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; } |