[Scummvm-cvs-logs] SF.net SVN: scummvm: [30277] scummvm/trunk/engines/scumm/imuse_digi

fingolfin at users.sourceforge.net fingolfin at users.sourceforge.net
Sun Jan 6 00:53:28 CET 2008


Revision: 30277
          http://scummvm.svn.sourceforge.net/scummvm/?rev=30277&view=rev
Author:   fingolfin
Date:     2008-01-05 15:53:28 -0800 (Sat, 05 Jan 2008)

Log Message:
-----------
Let the audio mixer take care of (i.e. dispose) the Track::stream object, too

Modified Paths:
--------------
    scummvm/trunk/engines/scumm/imuse_digi/dimuse.cpp
    scummvm/trunk/engines/scumm/imuse_digi/dimuse_script.cpp
    scummvm/trunk/engines/scumm/imuse_digi/dimuse_track.cpp

Modified: scummvm/trunk/engines/scumm/imuse_digi/dimuse.cpp
===================================================================
--- scummvm/trunk/engines/scumm/imuse_digi/dimuse.cpp	2008-01-05 23:52:27 UTC (rev 30276)
+++ scummvm/trunk/engines/scumm/imuse_digi/dimuse.cpp	2008-01-05 23:53:28 UTC (rev 30277)
@@ -206,7 +206,7 @@
 
 			track->stream = Audio::makeAppendableAudioStream(freq, makeMixerFlags(track->mixerFlags));
 
-			_mixer->playInputStream(track->getType(), &track->mixChanHandle, track->stream, -1, track->getVol(), track->getPan(), false);
+			_mixer->playInputStream(track->getType(), &track->mixChanHandle, track->stream, -1, track->getVol(), track->getPan());
 			_mixer->pauseHandle(track->mixChanHandle, true);
 		}
 	}

Modified: scummvm/trunk/engines/scumm/imuse_digi/dimuse_script.cpp
===================================================================
--- scummvm/trunk/engines/scumm/imuse_digi/dimuse_script.cpp	2008-01-05 23:52:27 UTC (rev 30276)
+++ scummvm/trunk/engines/scumm/imuse_digi/dimuse_script.cpp	2008-01-05 23:53:28 UTC (rev 30277)
@@ -165,22 +165,26 @@
 
 void IMuseDigital::flushTrack(Track *track) {
 	track->toBeRemoved = true;
-	if (!track->souStreamUsed) {
-		assert(track->stream);
-		// Finalize the appendable stream
+
+	if (track->souStreamUsed) {
+		_mixer->stopHandle(track->mixChanHandle);
+	} else if (track->stream) {
+		// Finalize the appendable stream, then remove our reference to it.
+		// Note that there might still be some data left in the buffers of the
+		// appendable stream. We play it nice and wait till all of it
+		// played. The audio mixer will take care of it afterwards (and dispose it).
 		track->stream->finish();
-		// There might still be some data left in the buffers of the
-		// appendable stream. We play it nice and wait till all of it
-		// played.
-		if (track->stream->endOfStream()) {
-			_mixer->stopHandle(track->mixChanHandle);
-			delete track->stream;
+		track->stream = 0;
+		if (track->soundDesc)
 			_sound->closeSound(track->soundDesc);
-			memset(track, 0, sizeof(Track));
-		}
-	} else {
-		_mixer->stopHandle(track->mixChanHandle);
+	}
+
+	if (!_mixer->isSoundHandleActive(track->mixChanHandle)) {
 		memset(track, 0, sizeof(Track));
+		
+		// Still set toBeRemoved to true in case we are running inside the callback()
+		// function
+		track->toBeRemoved = true;
 	}
 }
 
@@ -396,9 +400,7 @@
 			// as we are protected by a mutex, and this method is never called
 			// from IMuseDigital::callback either.
 			_mixer->stopHandle(track->mixChanHandle);
-			if (!track->souStreamUsed) {
-				assert(track->stream);
-				delete track->stream;
+			if (track->soundDesc) {
 				_sound->closeSound(track->soundDesc);
 			}
 

Modified: scummvm/trunk/engines/scumm/imuse_digi/dimuse_track.cpp
===================================================================
--- scummvm/trunk/engines/scumm/imuse_digi/dimuse_track.cpp	2008-01-05 23:52:27 UTC (rev 30276)
+++ scummvm/trunk/engines/scumm/imuse_digi/dimuse_track.cpp	2008-01-05 23:53:28 UTC (rev 30277)
@@ -63,9 +63,7 @@
 
 			// Stop the track immediately
 			_mixer->stopHandle(track->mixChanHandle);
-			if (!track->souStreamUsed) {
-				assert(track->stream);
-				delete track->stream;
+			if (!track->soundDesc) {
 				_sound->closeSound(track->soundDesc);
 			}
 
@@ -156,7 +154,7 @@
 #endif
 
 		track->stream = Audio::makeAppendableAudioStream(freq, makeMixerFlags(track->mixerFlags));
-		_mixer->playInputStream(track->getType(), &track->mixChanHandle, track->stream, -1, track->getVol(), track->getPan(), false);
+		_mixer->playInputStream(track->getType(), &track->mixChanHandle, track->stream, -1, track->getVol(), track->getPan());
 	}
 
 	track->used = true;
@@ -317,7 +315,7 @@
 
 	// Create an appendable output buffer
 	fadeTrack->stream = Audio::makeAppendableAudioStream(_sound->getFreq(fadeTrack->soundDesc), makeMixerFlags(fadeTrack->mixerFlags));
-	_mixer->playInputStream(track->getType(), &fadeTrack->mixChanHandle, fadeTrack->stream, -1, fadeTrack->getVol(), fadeTrack->getPan(), false);
+	_mixer->playInputStream(track->getType(), &fadeTrack->mixChanHandle, fadeTrack->stream, -1, fadeTrack->getVol(), fadeTrack->getPan());
 	fadeTrack->used = true;
 
 	return fadeTrack;


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