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

fingolfin at users.sourceforge.net fingolfin at users.sourceforge.net
Sat Jan 5 21:59:34 CET 2008


Revision: 30262
          http://scummvm.svn.sourceforge.net/scummvm/?rev=30262&view=rev
Author:   fingolfin
Date:     2008-01-05 12:59:33 -0800 (Sat, 05 Jan 2008)

Log Message:
-----------
When loading and before starting  an iMuse Digitial track, reset it completely to zero

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 20:53:23 UTC (rev 30261)
+++ scummvm/trunk/engines/scumm/imuse_digi/dimuse.cpp	2008-01-05 20:59:33 UTC (rev 30262)
@@ -151,27 +151,26 @@
 
 	for (int l = 0; l < MAX_DIGITAL_TRACKS + MAX_DIGITAL_FADETRACKS; l++) {
 		Track *track = _track[l];
-		if (!ser->isSaving()) {
-			track->sndDataExtComp = false;
+		if (ser->isLoading()) {
+			memset(track, 0, sizeof(Track));
 		}
 		ser->saveLoadEntries(track, trackEntries);
-		if (!ser->isSaving()) {
+		if (ser->isLoading()) {
 			if (!track->used)
 				continue;
 			if ((track->toBeRemoved) || (track->souStreamUsed) || (track->curRegion == -1)) {
-				track->streamSou= NULL;
-				track->stream = NULL;
 				track->used = false;
 				continue;
 			}
+			
+			// TODO: The code below has a lot in common with that in IMuseDigital::startSound.
+			// Try to refactor them to reduce the code duplication.
 
 			track->soundDesc = _sound->openSound(track->soundId,
 									track->soundName, track->soundType,
 									track->volGroupId, -1);
 			if (!track->soundDesc) {
 				warning("IMuseDigital::saveOrLoad: Can't open sound so will not be resumed, propably on diffrent CD");
-				track->streamSou = NULL;
-				track->stream = NULL;
 				track->used = false;
 				continue;
 			}
@@ -205,7 +204,6 @@
 				track->mixerFlags |= kFlagLittleEndian;
 #endif
 
-			track->streamSou = NULL;
 			track->stream = Audio::makeAppendableAudioStream(freq, makeMixerFlags(track->mixerFlags));
 
 			const int pan = (track->pan != 64) ? 2 * track->pan - 127 : 0;

Modified: scummvm/trunk/engines/scumm/imuse_digi/dimuse_script.cpp
===================================================================
--- scummvm/trunk/engines/scumm/imuse_digi/dimuse_script.cpp	2008-01-05 20:53:23 UTC (rev 30261)
+++ scummvm/trunk/engines/scumm/imuse_digi/dimuse_script.cpp	2008-01-05 20:59:33 UTC (rev 30262)
@@ -404,17 +404,17 @@
 				assert(track->stream);
 				_mixer->stopHandle(track->mixChanHandle);
 				delete track->stream;
-				track->stream = NULL;
 				_sound->closeSound(track->soundDesc);
-				track->soundDesc = NULL;
 			} else if (track->streamSou) {
 				assert(track->streamSou);
 				_mixer->stopHandle(track->mixChanHandle);
 				delete track->streamSou;
-				track->streamSou = NULL;
 			}
 
 			// Mark the track as unused
+			track->soundDesc = NULL;
+			track->streamSou = NULL;
+			track->stream = NULL;
 			track->used = false;
 		}
 	}

Modified: scummvm/trunk/engines/scumm/imuse_digi/dimuse_track.cpp
===================================================================
--- scummvm/trunk/engines/scumm/imuse_digi/dimuse_track.cpp	2008-01-05 20:53:23 UTC (rev 30261)
+++ scummvm/trunk/engines/scumm/imuse_digi/dimuse_track.cpp	2008-01-05 20:59:33 UTC (rev 30262)
@@ -92,24 +92,17 @@
 	}
 
 	Track *track = _track[l];
+	
+	// Reset the track
+	memset(track, 0, sizeof(Track));
 
 	track->pan = 64;
 	track->vol = volume * 1000;
-	track->volFadeDest = 0;
-	track->volFadeStep = 0;
-	track->volFadeDelay = 0;
-	track->volFadeUsed = false;
 	track->soundId = soundId;
-	track->mixerStreamRunning = false;
 	track->volGroupId = volGroupId;
 	track->curHookId = hookId;
 	track->soundPriority = priority;
 	track->curRegion = -1;
-	track->dataOffset = 0;
-	track->regionOffset = 0;
-	track->dataMod12Bit = 0;
-	track->mixerFlags = 0;
-	track->toBeRemoved = false;
 	track->soundType = soundType;
 
 	int bits = 0, freq = 0, channels = 0;
@@ -117,11 +110,7 @@
 	track->souStreamUsed = (input != 0);
 
 	if (track->souStreamUsed) {
-		track->feedSize = 0;
-		track->soundName[0] = 0;
-		track->soundDesc = NULL;
 		track->streamSou = input;
-		track->stream = NULL;
 		track->mixerStreamRunning = false;
 	} else {
 		strcpy(track->soundName, soundName);
@@ -177,7 +166,6 @@
 		if (track->volGroupId == 3)
 			type = Audio::Mixer::kMusicSoundType;
 
-		track->streamSou = NULL;
 		track->stream = Audio::makeAppendableAudioStream(freq, makeMixerFlags(track->mixerFlags));
 		_mixer->playInputStream(type, &track->mixChanHandle, track->stream, -1, vol, pan, false);
 		track->mixerStreamRunning = true;


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