aboutsummaryrefslogtreecommitdiff
path: root/audio/decoders
diff options
context:
space:
mode:
authorMatthew Hoops2015-06-04 18:44:13 -0400
committerMatthew Hoops2015-06-04 19:47:37 -0400
commitb986b44827664c0f1e1b7ae5908d9d8f52def73d (patch)
tree57492f4ac49ddf42b0b5d0d9853bc37d7441af63 /audio/decoders
parent4266d76ce4d81d3e29cf323e3e9e9ab77130fe87 (diff)
downloadscummvm-rg350-b986b44827664c0f1e1b7ae5908d9d8f52def73d.tar.gz
scummvm-rg350-b986b44827664c0f1e1b7ae5908d9d8f52def73d.tar.bz2
scummvm-rg350-b986b44827664c0f1e1b7ae5908d9d8f52def73d.zip
AUDIO: Do not read the entire AIFF buffer into memory
Diffstat (limited to 'audio/decoders')
-rw-r--r--audio/decoders/aiff.cpp14
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