aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTravis Howell2009-05-18 10:40:22 +0000
committerTravis Howell2009-05-18 10:40:22 +0000
commite59e65aa993a7af0bedf03e5d3e2b3cfade64fc5 (patch)
treed6f898bb923610a98dfe4110ad6fce7e4e6f774a
parentecd893ca48f6082fdf9c0d872c4ec7dcc6e8526a (diff)
downloadscummvm-rg350-e59e65aa993a7af0bedf03e5d3e2b3cfade64fc5.tar.gz
scummvm-rg350-e59e65aa993a7af0bedf03e5d3e2b3cfade64fc5.tar.bz2
scummvm-rg350-e59e65aa993a7af0bedf03e5d3e2b3cfade64fc5.zip
Fix crash when any movie is played in the Macintosh version of The Feebles Files, a regression caused by revision 36085.
svn-id: r40679
-rw-r--r--sound/wave.cpp25
1 files changed, 18 insertions, 7 deletions
diff --git a/sound/wave.cpp b/sound/wave.cpp
index af7405418e..76ba5178a5 100644
--- a/sound/wave.cpp
+++ b/sound/wave.cpp
@@ -176,16 +176,27 @@ AudioStream *makeWAVStream(Common::SeekableReadStream *stream, bool disposeAfter
}
if (type == 17) { // MS IMA ADPCM
- return Audio::makeADPCMStream(stream, disposeAfterUse, size, Audio::kADPCMMSIma, rate, (flags & Audio::Mixer::FLAG_STEREO) ? 2 : 1, blockAlign);
+ Audio::AudioStream *sndStream = Audio::makeADPCMStream(stream, false, size, Audio::kADPCMMSIma, rate, (flags & Audio::Mixer::FLAG_STEREO) ? 2 : 1, blockAlign);
+ data = (byte *)malloc(size * 4);
+ assert(data);
+ size = sndStream->readBuffer((int16*)data, size * 2);
+ size *= 2; // 16bits.
+ delete sndStream;
} else if (type == 2) { // MS ADPCM
- return Audio::makeADPCMStream(stream, disposeAfterUse, size, Audio::kADPCMMS, rate, (flags & Audio::Mixer::FLAG_STEREO) ? 2 : 1, blockAlign);
+ Audio::AudioStream *sndStream = Audio::makeADPCMStream(stream, false, size, Audio::kADPCMMS, rate, (flags & Audio::Mixer::FLAG_STEREO) ? 2 : 1, blockAlign);
+ data = (byte *)malloc(size * 4);
+ assert(data);
+ size = sndStream->readBuffer((int16*)data, size * 2);
+ size *= 2; // 16bits.
+ delete sndStream;
+ } else {
+ // Plain data. Just read everything at once.
+ // TODO: More elegant would be to wrap the stream.
+ data = (byte *)malloc(size);
+ assert(data);
+ stream->read(data, size);
}
- // Plain data. Just read everything at once.
- // TODO: More elegant would be to wrap the stream.
- data = (byte *)malloc(size);
- assert(data);
- stream->read(data, size);
if (disposeAfterUse)
delete stream;