From b986b44827664c0f1e1b7ae5908d9d8f52def73d Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Thu, 4 Jun 2015 18:44:13 -0400 Subject: AUDIO: Do not read the entire AIFF buffer into memory --- audio/decoders/aiff.cpp | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) (limited to 'audio/decoders') 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 -- cgit v1.2.3