diff options
author | Max Horn | 2009-01-27 00:42:43 +0000 |
---|---|---|
committer | Max Horn | 2009-01-27 00:42:43 +0000 |
commit | 8e447d1ee93d3238d35a665c5ec63671ed890210 (patch) | |
tree | fc980ae05de56de256385cc2d2311f88897eccac /sound/wave.cpp | |
parent | c08cc29b965f31dd7c233714d0a052ab357c4bc5 (diff) | |
download | scummvm-rg350-8e447d1ee93d3238d35a665c5ec63671ed890210.tar.gz scummvm-rg350-8e447d1ee93d3238d35a665c5ec63671ed890210.tar.bz2 scummvm-rg350-8e447d1ee93d3238d35a665c5ec63671ed890210.zip |
Extended makeWAVStream by a 'disposeAfterUse' param; changed makeWAVStream to directly return the AudioStream created by makeADPCMStream
svn-id: r36085
Diffstat (limited to 'sound/wave.cpp')
-rw-r--r-- | sound/wave.cpp | 32 |
1 files changed, 14 insertions, 18 deletions
diff --git a/sound/wave.cpp b/sound/wave.cpp index 72a3992401..80bf6d42d4 100644 --- a/sound/wave.cpp +++ b/sound/wave.cpp @@ -162,35 +162,31 @@ bool loadWAVFromStream(Common::SeekableReadStream &stream, int &size, int &rate, return true; } -AudioStream *makeWAVStream(Common::SeekableReadStream &stream) { +AudioStream *makeWAVStream(Common::SeekableReadStream *stream, bool disposeAfterUse) { int size, rate; byte *data, flags; uint16 type; int blockAlign; - if (!loadWAVFromStream(stream, size, rate, flags, &type, &blockAlign)) + if (!loadWAVFromStream(*stream, size, rate, flags, &type, &blockAlign)) { + if (disposeAfterUse) + delete stream; return 0; + } if (type == 17) { // MS IMA ADPCM - 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; + return Audio::makeADPCMStream(stream, disposeAfterUse, size, Audio::kADPCMMSIma, rate, (flags & Audio::Mixer::FLAG_STEREO) ? 2 : 1, blockAlign); } else if (type == 2) { // MS ADPCM - 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 { - data = (byte *)malloc(size); - assert(data); - stream.read(data, size); + return Audio::makeADPCMStream(stream, disposeAfterUse, size, Audio::kADPCMMS, rate, (flags & Audio::Mixer::FLAG_STEREO) ? 2 : 1, blockAlign); } + // 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); + delete stream; + // Since we allocated our own buffer for the data, we must set the autofree flag. flags |= Audio::Mixer::FLAG_AUTOFREE; |