aboutsummaryrefslogtreecommitdiff
path: root/sound/decoders
diff options
context:
space:
mode:
authorMax Horn2010-03-08 10:27:42 +0000
committerMax Horn2010-03-08 10:27:42 +0000
commitf24cc1c8be08448c8412afef29be3ffa4ff09dd5 (patch)
tree28c0d14608cae4af3685afb41da2e7651b77a20e /sound/decoders
parent50116130efedc66ec8261df6080fb7ca6fe079f7 (diff)
downloadscummvm-rg350-f24cc1c8be08448c8412afef29be3ffa4ff09dd5.tar.gz
scummvm-rg350-f24cc1c8be08448c8412afef29be3ffa4ff09dd5.tar.bz2
scummvm-rg350-f24cc1c8be08448c8412afef29be3ffa4ff09dd5.zip
Tweak makeVOCDiskStream
* now takes a SeekableReadStream *pointer* like (almost) all other audiostream factories * fix potential memory leak in it * rename takeOwnershipOfStream to disposeAfterUse for consistency svn-id: r48184
Diffstat (limited to 'sound/decoders')
-rw-r--r--sound/decoders/voc.cpp34
-rw-r--r--sound/decoders/voc.h4
2 files changed, 22 insertions, 16 deletions
diff --git a/sound/decoders/voc.cpp b/sound/decoders/voc.cpp
index 9acc4430d9..5663861f05 100644
--- a/sound/decoders/voc.cpp
+++ b/sound/decoders/voc.cpp
@@ -299,40 +299,40 @@ int parseVOCFormat(Common::SeekableReadStream& stream, RawStreamBlock* block, in
return currentBlock;
}
-AudioStream *makeVOCDiskStream(Common::SeekableReadStream &stream, byte flags, DisposeAfterUse::Flag takeOwnership) {
+AudioStream *makeVOCDiskStream(Common::SeekableReadStream *stream, byte flags, DisposeAfterUse::Flag disposeAfterUse) {
const int MAX_AUDIO_BLOCKS = 256;
RawStreamBlock *block = new RawStreamBlock[MAX_AUDIO_BLOCKS];
int rate, loops, begin_loop, end_loop;
- int numBlocks = parseVOCFormat(stream, block, rate, loops, begin_loop, end_loop);
+ int numBlocks = parseVOCFormat(*stream, block, rate, loops, begin_loop, end_loop);
AudioStream *audioStream = 0;
// Create an audiostream from the data. Note the numBlocks may be 0,
// e.g. when invalid data is encountered. See bug #2890038.
if (numBlocks)
- audioStream = makeRawDiskStream_OLD(&stream, block, numBlocks, rate, flags, takeOwnership/*, begin_loop, end_loop*/);
+ audioStream = makeRawDiskStream_OLD(stream, block, numBlocks, rate, flags, disposeAfterUse/*, begin_loop, end_loop*/);
delete[] block;
return audioStream;
}
-SeekableAudioStream *makeVOCDiskStreamNoLoop(Common::SeekableReadStream &stream, byte flags, DisposeAfterUse::Flag takeOwnership) {
+SeekableAudioStream *makeVOCDiskStreamNoLoop(Common::SeekableReadStream *stream, byte flags, DisposeAfterUse::Flag disposeAfterUse) {
const int MAX_AUDIO_BLOCKS = 256;
RawStreamBlock *block = new RawStreamBlock[MAX_AUDIO_BLOCKS];
int rate, loops, begin_loop, end_loop;
- int numBlocks = parseVOCFormat(stream, block, rate, loops, begin_loop, end_loop);
+ int numBlocks = parseVOCFormat(*stream, block, rate, loops, begin_loop, end_loop);
SeekableAudioStream *audioStream = 0;
// Create an audiostream from the data. Note the numBlocks may be 0,
// e.g. when invalid data is encountered. See bug #2890038.
if (numBlocks)
- audioStream = makeRawDiskStream_OLD(&stream, block, numBlocks, rate, flags, takeOwnership);
+ audioStream = makeRawDiskStream_OLD(stream, block, numBlocks, rate, flags, disposeAfterUse);
delete[] block;
@@ -342,16 +342,19 @@ SeekableAudioStream *makeVOCDiskStreamNoLoop(Common::SeekableReadStream &stream,
#endif
-AudioStream *makeVOCStream(Common::SeekableReadStream &stream, byte flags, uint loopStart, uint loopEnd, DisposeAfterUse::Flag takeOwnershipOfStream) {
+AudioStream *makeVOCStream(Common::SeekableReadStream *stream, byte flags, uint loopStart, uint loopEnd, DisposeAfterUse::Flag disposeAfterUse) {
#ifdef STREAM_AUDIO_FROM_DISK
- return makeVOCDiskStream(stream, flags, takeOwnershipOfStream);
+ return makeVOCDiskStream(stream, flags, disposeAfterUse);
#else
int size, rate;
- byte *data = loadVOCFromStream(stream, size, rate);
+ byte *data = loadVOCFromStream(*stream, size, rate);
- if (!data)
+ if (!data) {
+ if (disposeAfterUse == DisposeAfterUse::YES)
+ delete stream;
return 0;
+ }
SeekableAudioStream *s = Audio::makeRawStream(data, size, rate, flags);
@@ -379,16 +382,19 @@ AudioStream *makeVOCStream(Common::SeekableReadStream &stream, byte flags, uint
#endif
}
-SeekableAudioStream *makeVOCStream(Common::SeekableReadStream &stream, byte flags, DisposeAfterUse::Flag takeOwnershipOfStream) {
+SeekableAudioStream *makeVOCStream(Common::SeekableReadStream *stream, byte flags, DisposeAfterUse::Flag disposeAfterUse) {
#ifdef STREAM_AUDIO_FROM_DISK
- return makeVOCDiskStreamNoLoop(stream, flags, takeOwnershipOfStream);
+ return makeVOCDiskStreamNoLoop(*stream, flags, disposeAfterUse);
#else
int size, rate;
- byte *data = loadVOCFromStream(stream, size, rate);
+ byte *data = loadVOCFromStream(*stream, size, rate);
- if (!data)
+ if (!data) {
+ if (disposeAfterUse == DisposeAfterUse::YES)
+ delete stream;
return 0;
+ }
return makeRawStream(data, size, rate, flags);
#endif
diff --git a/sound/decoders/voc.h b/sound/decoders/voc.h
index 191f42db02..79956ee62a 100644
--- a/sound/decoders/voc.h
+++ b/sound/decoders/voc.h
@@ -95,12 +95,12 @@ extern byte *loadVOCFromStream(Common::ReadStream &stream, int &size, int &rate)
*
* This function uses loadVOCFromStream() internally.
*/
-AudioStream *makeVOCStream(Common::SeekableReadStream &stream, byte flags = 0, uint loopStart = 0, uint loopEnd = 0, DisposeAfterUse::Flag disposeAfterUse = DisposeAfterUse::NO);
+AudioStream *makeVOCStream(Common::SeekableReadStream *stream, byte flags = 0, uint loopStart = 0, uint loopEnd = 0, DisposeAfterUse::Flag disposeAfterUse = DisposeAfterUse::NO);
/**
* This does not use any of the looping features of VOC files!
*/
-SeekableAudioStream *makeVOCStream(Common::SeekableReadStream &stream, byte flags, DisposeAfterUse::Flag disposeAfterUse);
+SeekableAudioStream *makeVOCStream(Common::SeekableReadStream *stream, byte flags, DisposeAfterUse::Flag disposeAfterUse);
} // End of namespace Audio