diff options
author | Matthew Hoops | 2015-06-04 18:44:13 -0400 |
---|---|---|
committer | Matthew Hoops | 2015-06-04 19:47:37 -0400 |
commit | b986b44827664c0f1e1b7ae5908d9d8f52def73d (patch) | |
tree | 57492f4ac49ddf42b0b5d0d9853bc37d7441af63 | |
parent | 4266d76ce4d81d3e29cf323e3e9e9ab77130fe87 (diff) | |
download | scummvm-rg350-b986b44827664c0f1e1b7ae5908d9d8f52def73d.tar.gz scummvm-rg350-b986b44827664c0f1e1b7ae5908d9d8f52def73d.tar.bz2 scummvm-rg350-b986b44827664c0f1e1b7ae5908d9d8f52def73d.zip |
AUDIO: Do not read the entire AIFF buffer into memory
-rw-r--r-- | audio/decoders/aiff.cpp | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/audio/decoders/aiff.cpp b/audio/decoders/aiff.cpp index b714721c02..ef666d1d23 100644 --- a/audio/decoders/aiff.cpp +++ b/audio/decoders/aiff.cpp @@ -30,6 +30,7 @@ #include "common/endian.h" #include "common/stream.h" +#include "common/substream.h" #include "common/textconsole.h" #include "audio/decoders/aiff.h" @@ -159,7 +160,7 @@ bool loadAIFFFromStream(Common::SeekableReadStream &stream, int &size, int &rate SeekableAudioStream *makeAIFFStream(Common::SeekableReadStream *stream, DisposeAfterUse::Flag disposeAfterUse) { int size, rate; - byte *data, flags; + byte flags; if (!loadAIFFFromStream(*stream, size, rate, flags)) { if (disposeAfterUse == DisposeAfterUse::YES) @@ -167,15 +168,10 @@ SeekableAudioStream *makeAIFFStream(Common::SeekableReadStream *stream, return 0; } - data = (byte *)malloc(size); - assert(data); - stream->read(data, size); + Common::SeekableReadStream *dataStream = new Common::SeekableSubReadStream(stream, stream->pos(), stream->pos() + size, disposeAfterUse); - if (disposeAfterUse == DisposeAfterUse::YES) - delete stream; - - // Since we allocated our own buffer for the data, we must specify DisposeAfterUse::YES. - return makeRawStream(data, size, rate, flags); + // Since we allocated our own stream for the data, we must specify DisposeAfterUse::YES. + return makeRawStream(dataStream, rate, flags); } } // End of namespace Audio |