[Scummvm-cvs-logs] CVS: scummvm/scumm/imuse_digi dimuse.cpp,1.77,1.78 dimuse.h,1.45,1.46 dimuse_script.cpp,1.6,1.7 dimuse_sndmgr.cpp,1.37,1.38 dimuse_track.cpp,1.6,1.7

Pawel Kolodziejski aquadran at users.sourceforge.net
Mon Apr 26 00:48:03 CEST 2004


Update of /cvsroot/scummvm/scummvm/scumm/imuse_digi
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9963/imuse_digi

Modified Files:
	dimuse.cpp dimuse.h dimuse_script.cpp dimuse_sndmgr.cpp 
	dimuse_track.cpp 
Log Message:
fixed stopping imuse sounds

Index: dimuse.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse.cpp,v
retrieving revision 1.77
retrieving revision 1.78
diff -u -d -r1.77 -r1.78
--- dimuse.cpp	25 Apr 2004 17:24:03 -0000	1.77
+++ dimuse.cpp	26 Apr 2004 07:47:12 -0000	1.78
@@ -58,11 +58,9 @@
 }
 
 IMuseDigital::~IMuseDigital() {
-	stopAllSounds(true);
-	{
-		Common::StackLock lock(_mutex, "IMuseDigital::~IMuseDigital()");
-		_vm->_timer->removeTimerProc(timer_handler);
-	}
+	Common::StackLock lock(_mutex, "IMuseDigital::~IMuseDigital()");
+	stopAllSounds();
+	_vm->_timer->removeTimerProc(timer_handler);
 	for (int l = 0; l < MAX_DIGITAL_TRACKS + MAX_DIGITAL_FADETRACKS; l++) {
 		delete _track[l];
 	}

Index: dimuse.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse.h,v
retrieving revision 1.45
retrieving revision 1.46
diff -u -d -r1.45 -r1.46
--- dimuse.h	25 Apr 2004 17:24:16 -0000	1.45
+++ dimuse.h	26 Apr 2004 07:47:12 -0000	1.46
@@ -148,8 +148,7 @@
 	void setFade(int soundId, int destVolume, int delay60HzTicks);
 	void setMasterVolume(int vol) {}
 	void stopSound(int soundId);
-	void stopAllSounds() { stopAllSounds(false); }
-	void stopAllSounds(bool waitForStop);
+	void stopAllSounds();
 	void pause(bool pause);
 	void parseScriptCmds(int a, int b, int c, int d, int e, int f, int g, int h);
 	void refreshScripts();

Index: dimuse_script.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse_script.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- dimuse_script.cpp	12 Apr 2004 13:34:34 -0000	1.6
+++ dimuse_script.cpp	26 Apr 2004 07:47:12 -0000	1.7
@@ -256,12 +256,19 @@
 	Common::StackLock lock(_mutex, "IMuseDigital::stopSound()");
 	debug(5, "IMuseDigital::stopSound(%d)", soundId);
 	for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
-		if ((_track[l]->soundId == soundId) && _track[l]->used) {
+		if ((_track[l]->soundId == soundId) && (_track[l]->used)) {
 			if (_track[l]->stream) {
-				_track[l]->toBeRemoved = true;
-			}
-			else if (_track[l]->stream2)
+				_track[l]->stream->finish();
+				_track[l]->stream = NULL;
 				_vm->_mixer->stopHandle(_track[l]->handle);
+				_sound->closeSound(_track[l]->soundHandle);
+				_track[l]->soundHandle = NULL;
+			} else if (_track[l]->stream2) {
+				_vm->_mixer->stopHandle(_track[l]->handle);
+				delete _track[l]->stream2;
+				_track[l]->stream2 = NULL;
+			}
+			_track[l]->used = false;
 		}
 	}
 }
@@ -337,33 +344,25 @@
 	return height;
 }
 
-void IMuseDigital::stopAllSounds(bool waitForStop) {
+void IMuseDigital::stopAllSounds() {
+	Common::StackLock lock(_mutex, "IMuseDigital::stopAllSounds()");
 	debug(5, "IMuseDigital::stopAllSounds");
-	{
-		Common::StackLock lock(_mutex, "IMuseDigital::stopAllSounds()");
-		for (int l = 0; l < MAX_DIGITAL_TRACKS + MAX_DIGITAL_FADETRACKS; l++) {
-			if (_track[l]->used) {
-				if (_track[l]->stream) {
-					_track[l]->toBeRemoved = true;
-				} else if (_track[l]->stream2)
-					_vm->_mixer->stopHandle(_track[l]->handle);
-			}
-		}
-	}
-
-	// FIXME: ignore wait, it can cause deadlock, it need better implementaion
-	return;
 
-	if (waitForStop) {
-		bool used;
-		do {
-			used = false;
-			for (int l = 0; l < MAX_DIGITAL_TRACKS + MAX_DIGITAL_FADETRACKS; l++) {
-				if (_track[l]->used)
-					used = true;
+	for (int l = 0; l < MAX_DIGITAL_TRACKS + MAX_DIGITAL_FADETRACKS; l++) {
+		if (_track[l]->used) {
+			if (_track[l]->stream) {
+				_track[l]->stream->finish();
+				_track[l]->stream = NULL;
+				_vm->_mixer->stopHandle(_track[l]->handle);
+				_sound->closeSound(_track[l]->soundHandle);
+				_track[l]->soundHandle = NULL;
+			} else if (_track[l]->stream2) {
+				_vm->_mixer->stopHandle(_track[l]->handle);
+				delete _track[l]->stream2;
+				_track[l]->stream2 = NULL;
 			}
-			g_system->delay_msecs(10);
-		} while (used);
+			_track[l]->used = false;
+		}
 	}
 }
 

Index: dimuse_sndmgr.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse_sndmgr.cpp,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -d -r1.37 -r1.38
--- dimuse_sndmgr.cpp	25 Apr 2004 19:51:46 -0000	1.37
+++ dimuse_sndmgr.cpp	26 Apr 2004 07:47:12 -0000	1.38
@@ -232,7 +232,7 @@
 			if (_disk != _vm->VAR(_vm->VAR_CURRENTDISK)) {
 				_vm->_imuseDigital->parseScriptCmds(0x1000, 0, 0, 0, 0, 0, 0, 0);
 				_vm->_imuseDigital->parseScriptCmds(0x2000, 0, 0, 0, 0, 0, 0, 0);
-				_vm->_imuseDigital->stopAllSounds(true);
+				_vm->_imuseDigital->stopAllSounds();
 				_sounds[slot].bundle->closeFile();
 			}
 
@@ -263,7 +263,7 @@
 			if (_disk != _vm->VAR(_vm->VAR_CURRENTDISK)) {
 				_vm->_imuseDigital->parseScriptCmds(0x1000, 0, 0, 0, 0, 0, 0, 0);
 				_vm->_imuseDigital->parseScriptCmds(0x2000, 0, 0, 0, 0, 0, 0, 0);
-				_vm->_imuseDigital->stopAllSounds(true);
+				_vm->_imuseDigital->stopAllSounds();
 				_sounds[slot].bundle->closeFile();
 			}
 

Index: dimuse_track.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse_track.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- dimuse_track.cpp	25 Apr 2004 17:24:17 -0000	1.6
+++ dimuse_track.cpp	26 Apr 2004 07:47:12 -0000	1.7
@@ -105,7 +105,7 @@
 			int bits = 0, freq = 0, channels = 0;
 
 			if (input) {
-				_track[l]->iteration = 1; // ?
+				_track[l]->iteration = 0;
 				// Do nothing here, we already have an audio stream
 			} else {
 				_track[l]->soundHandle = _sound->openSound(soundId, soundName, soundType, volGroupId);





More information about the Scummvm-git-logs mailing list