diff options
author | Willem Jan Palenstijn | 2015-07-19 20:24:49 +0200 |
---|---|---|
committer | Willem Jan Palenstijn | 2015-07-19 20:26:50 +0200 |
commit | 1a4f477d61704f85a235228f9f2d12077b369930 (patch) | |
tree | 220ba4c662dd39fe341da47c27ef59d5ef31384a /engines/made/pmvplayer.cpp | |
parent | b52d48e0da709e6b78bf08a3cf4b2df3e100b500 (diff) | |
download | scummvm-rg350-1a4f477d61704f85a235228f9f2d12077b369930.tar.gz scummvm-rg350-1a4f477d61704f85a235228f9f2d12077b369930.tar.bz2 scummvm-rg350-1a4f477d61704f85a235228f9f2d12077b369930.zip |
MADE: Fix movie audio glitches caused by reset of audio decoder
The sound buffer used in decompressSound() is now stored so that
it can be re-used in the next call of decompressSound, specifically
in chunk type 1.
This caused some clicking/static in the intro of Return to Zork.
Thanks to eriktorbjorn for noticing the glitch and writing most of the patch.
Diffstat (limited to 'engines/made/pmvplayer.cpp')
-rw-r--r-- | engines/made/pmvplayer.cpp | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/engines/made/pmvplayer.cpp b/engines/made/pmvplayer.cpp index 6ea0dc24d0..453e2a4872 100644 --- a/engines/made/pmvplayer.cpp +++ b/engines/made/pmvplayer.cpp @@ -118,6 +118,8 @@ bool PmvPlayer::play(const char *filename) { // get it to work well? _audioStream = Audio::makeQueuingAudioStream(soundFreq, false); + SoundDecoderData *soundDecoderData = new SoundDecoderData(); + while (!_vm->shouldQuit() && !_aborted && !_fd->eos() && frameNumber < frameCount) { int32 frameTime = _vm->_system->getMillis(); @@ -153,7 +155,7 @@ bool PmvPlayer::play(const char *filename) { soundSize = chunkCount * chunkSize; soundData = (byte *)malloc(soundSize); - decompressSound(audioData + 8, soundData, chunkSize, chunkCount); + decompressSound(audioData + 8, soundData, chunkSize, chunkCount, NULL, soundDecoderData); _audioStream->queueBuffer(soundData, soundSize, DisposeAfterUse::YES, Audio::FLAG_UNSIGNED); } @@ -213,6 +215,7 @@ bool PmvPlayer::play(const char *filename) { } + delete soundDecoderData; delete[] frameData; _audioStream->finish(); |