[Scummvm-cvs-logs] SF.net SVN: scummvm:[48184] scummvm/trunk

fingolfin at users.sourceforge.net fingolfin at users.sourceforge.net
Mon Mar 8 11:27:43 CET 2010


Revision: 48184
          http://scummvm.svn.sourceforge.net/scummvm/?rev=48184&view=rev
Author:   fingolfin
Date:     2010-03-08 10:27:42 +0000 (Mon, 08 Mar 2010)

Log Message:
-----------
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

Modified Paths:
--------------
    scummvm/trunk/engines/agos/sound.cpp
    scummvm/trunk/engines/kyra/sound.cpp
    scummvm/trunk/engines/scumm/sound.cpp
    scummvm/trunk/engines/touche/resource.cpp
    scummvm/trunk/sound/decoders/voc.cpp
    scummvm/trunk/sound/decoders/voc.h

Modified: scummvm/trunk/engines/agos/sound.cpp
===================================================================
--- scummvm/trunk/engines/agos/sound.cpp	2010-03-08 00:54:05 UTC (rev 48183)
+++ scummvm/trunk/engines/agos/sound.cpp	2010-03-08 10:27:42 UTC (rev 48184)
@@ -260,7 +260,7 @@
 Audio::AudioStream *VocSound::makeAudioStream(uint sound) {
 	assert(_offsets);
 	_file->seek(_offsets[sound], SEEK_SET);
-	return Audio::makeVOCStream(*_file, _flags);
+	return Audio::makeVOCStream(_file, _flags);
 }
 
 void VocSound::playSound(uint sound, uint loopSound, Audio::Mixer::SoundType type, Audio::SoundHandle *handle, bool loop, int vol) {

Modified: scummvm/trunk/engines/kyra/sound.cpp
===================================================================
--- scummvm/trunk/engines/kyra/sound.cpp	2010-03-08 00:54:05 UTC (rev 48183)
+++ scummvm/trunk/engines/kyra/sound.cpp	2010-03-08 10:27:42 UTC (rev 48184)
@@ -245,9 +245,9 @@
 Audio::SeekableAudioStream *makeVOCStream(Common::SeekableReadStream *stream, DisposeAfterUse::Flag disposeAfterUse) {
 
 #ifdef STREAM_AUDIO_FROM_DISK
-	Audio::SeekableAudioStream *as = Audio::makeVOCStream(*stream, Audio::FLAG_UNSIGNED, disposeAfterUse);
+	Audio::SeekableAudioStream *as = Audio::makeVOCStream(stream, Audio::FLAG_UNSIGNED, disposeAfterUse);
 #else
-	Audio::SeekableAudioStream *as = Audio::makeVOCStream(*stream, Audio::FLAG_UNSIGNED, DisposeAfterUse::NO);
+	Audio::SeekableAudioStream *as = Audio::makeVOCStream(stream, Audio::FLAG_UNSIGNED, DisposeAfterUse::NO);
 
 	if (disposeAfterUse)
 		delete stream;

Modified: scummvm/trunk/engines/scumm/sound.cpp
===================================================================
--- scummvm/trunk/engines/scumm/sound.cpp	2010-03-08 00:54:05 UTC (rev 48183)
+++ scummvm/trunk/engines/scumm/sound.cpp	2010-03-08 10:27:42 UTC (rev 48184)
@@ -662,7 +662,7 @@
 #endif
 			break;
 		default:
-			input = Audio::makeVOCStream(*_sfxFile, Audio::FLAG_UNSIGNED);
+			input = Audio::makeVOCStream(_sfxFile, Audio::FLAG_UNSIGNED);
 			break;
 		}
 

Modified: scummvm/trunk/engines/touche/resource.cpp
===================================================================
--- scummvm/trunk/engines/touche/resource.cpp	2010-03-08 00:54:05 UTC (rev 48183)
+++ scummvm/trunk/engines/touche/resource.cpp	2010-03-08 10:27:42 UTC (rev 48184)
@@ -588,7 +588,7 @@
 		uint32 size;
 		const uint32 offs = res_getDataOffset(kResourceTypeSound, num, &size);
 		_fData.seek(offs);
-		Audio::AudioStream *stream = Audio::makeVOCStream(_fData, Audio::FLAG_UNSIGNED);
+		Audio::AudioStream *stream = Audio::makeVOCStream(&_fData, Audio::FLAG_UNSIGNED);
 		if (stream) {
 			_mixer->playInputStream(Audio::Mixer::kSFXSoundType, &_sfxHandle, stream);
 		}
@@ -646,7 +646,7 @@
 				return;
 			}
 			_fSpeech[i].seek(offs);
-			stream = Audio::makeVOCStream(_fSpeech[i], Audio::FLAG_UNSIGNED);
+			stream = Audio::makeVOCStream(&_fSpeech[i], Audio::FLAG_UNSIGNED);
 		} else {
 			if (num >= 750) {
 				num -= 750;

Modified: scummvm/trunk/sound/decoders/voc.cpp
===================================================================
--- scummvm/trunk/sound/decoders/voc.cpp	2010-03-08 00:54:05 UTC (rev 48183)
+++ scummvm/trunk/sound/decoders/voc.cpp	2010-03-08 10:27:42 UTC (rev 48184)
@@ -299,40 +299,40 @@
 	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 @@
 #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 @@
 #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

Modified: scummvm/trunk/sound/decoders/voc.h
===================================================================
--- scummvm/trunk/sound/decoders/voc.h	2010-03-08 00:54:05 UTC (rev 48183)
+++ scummvm/trunk/sound/decoders/voc.h	2010-03-08 10:27:42 UTC (rev 48184)
@@ -95,12 +95,12 @@
  *
  * 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
 


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list