[Scummvm-cvs-logs] SF.net SVN: scummvm:[40679] scummvm/trunk/sound/wave.cpp

Kirben at users.sourceforge.net Kirben at users.sourceforge.net
Mon May 18 12:40:22 CEST 2009


Revision: 40679
          http://scummvm.svn.sourceforge.net/scummvm/?rev=40679&view=rev
Author:   Kirben
Date:     2009-05-18 10:40:22 +0000 (Mon, 18 May 2009)

Log Message:
-----------
Fix crash when any movie is played in the Macintosh version of The Feebles Files, a regression caused by revision 36085.

Revision Links:
--------------
    http://scummvm.svn.sourceforge.net/scummvm/?rev=36085&view=rev

Modified Paths:
--------------
    scummvm/trunk/sound/wave.cpp

Modified: scummvm/trunk/sound/wave.cpp
===================================================================
--- scummvm/trunk/sound/wave.cpp	2009-05-18 09:59:54 UTC (rev 40678)
+++ scummvm/trunk/sound/wave.cpp	2009-05-18 10:40:22 UTC (rev 40679)
@@ -176,16 +176,27 @@
 	}
 
 	if (type == 17) { // MS IMA ADPCM
-		return Audio::makeADPCMStream(stream, disposeAfterUse, size, Audio::kADPCMMSIma, rate, (flags & Audio::Mixer::FLAG_STEREO) ? 2 : 1, blockAlign);
+		Audio::AudioStream *sndStream = Audio::makeADPCMStream(stream, false, size, Audio::kADPCMMSIma, rate, (flags & Audio::Mixer::FLAG_STEREO) ? 2 : 1, blockAlign);
+		data = (byte *)malloc(size * 4);
+		assert(data);
+		size = sndStream->readBuffer((int16*)data, size * 2);
+		size *= 2; // 16bits.
+		delete sndStream;
 	} else if (type == 2) { // MS ADPCM
-		return Audio::makeADPCMStream(stream, disposeAfterUse, size, Audio::kADPCMMS, rate, (flags & Audio::Mixer::FLAG_STEREO) ? 2 : 1, blockAlign);
+		Audio::AudioStream *sndStream = Audio::makeADPCMStream(stream, false, size, Audio::kADPCMMS, rate, (flags & Audio::Mixer::FLAG_STEREO) ? 2 : 1, blockAlign);
+		data = (byte *)malloc(size * 4);
+		assert(data);
+		size = sndStream->readBuffer((int16*)data, size * 2);
+		size *= 2; // 16bits.
+		delete sndStream;
+	} else {
+		// Plain data. Just read everything at once.
+		// TODO: More elegant would be to wrap the stream.
+		data = (byte *)malloc(size);
+		assert(data);
+		stream->read(data, size);
 	}
 
-	// Plain data. Just read everything at once.
-	// TODO: More elegant would be to wrap the stream.
-	data = (byte *)malloc(size);
-	assert(data);
-	stream->read(data, size);
 	if (disposeAfterUse)
 		delete stream;
 


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