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

fingolfin at users.sourceforge.net fingolfin at users.sourceforge.net
Sun Jan 6 00:58:27 CET 2008


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

Log Message:
-----------
Made IMuseDigital::stopSound use flushTrack instead of setting track->toBeRemoved = true; cleanup in flushTrack()

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

Modified: scummvm/trunk/engines/scumm/imuse_digi/dimuse_script.cpp
===================================================================
--- scummvm/trunk/engines/scumm/imuse_digi/dimuse_script.cpp	2008-01-05 23:58:12 UTC (rev 30281)
+++ scummvm/trunk/engines/scumm/imuse_digi/dimuse_script.cpp	2008-01-05 23:58:27 UTC (rev 30282)
@@ -164,8 +164,6 @@
 }
 
 void IMuseDigital::flushTrack(Track *track) {
-	track->toBeRemoved = true;
-
 	if (track->souStreamUsed) {
 		_mixer->stopHandle(track->mixChanHandle);
 	} else if (track->stream) {
@@ -175,17 +173,20 @@
 		// played. The audio mixer will take care of it afterwards (and dispose it).
 		track->stream->finish();
 		track->stream = 0;
-		if (track->soundDesc)
+		if (track->soundDesc) {
 			_sound->closeSound(track->soundDesc);
+			track->soundDesc = 0;
+		}
 	}
 
 	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;
+	
 	}
+
+	// Set toBeRemoved to true, even if we just stopped the sound completly
+	// (and thus set "used" to false);
+	track->toBeRemoved = true;
 }
 
 void IMuseDigital::flushTracks() {
@@ -310,7 +311,7 @@
 	for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
 		Track *track = _track[l];
 		if ((track->soundId == soundId) && track->used && !track->toBeRemoved) {
-			track->toBeRemoved = true;
+			flushTrack();
 		}
 	}
 }


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