[Scummvm-cvs-logs] CVS: scummvm/scumm/imuse_digi dimuse.cpp,1.21,1.22 dimuse.h,1.13,1.14 dimuse_sndmgr.cpp,1.19,1.20 dimuse_sndmgr.h,1.13,1.14

Pawel Kolodziejski aquadran at users.sourceforge.net
Fri Jan 9 23:08:00 CET 2004


Update of /cvsroot/scummvm/scummvm/scumm/imuse_digi
In directory sc8-pr-cvs1:/tmp/cvs-serv23562

Modified Files:
	dimuse.cpp dimuse.h dimuse_sndmgr.cpp dimuse_sndmgr.h 
Log Message:
removed stackLock and added locking tracks to prevent removed

Index: dimuse.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse.cpp,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -d -r1.21 -r1.22
--- dimuse.cpp	10 Jan 2004 03:58:22 -0000	1.21
+++ dimuse.cpp	10 Jan 2004 07:07:19 -0000	1.22
@@ -72,7 +72,7 @@
 					continue;
 				}
 			} else if (_track[l].stream) {
-				if (_track[l].toBeRemoved) {
+				if ((!_track[l].locked) && (_track[l].toBeRemoved)) {
 					debug(5, "IMuseDigital::callback(): stoped sound: %d", _track[l].idSound);
 					if (_track[l].stream)
 						_track[l].stream->finish();
@@ -289,6 +289,7 @@
 				_curMusicId = soundId;
 			}
 
+			_track[l].locked = false;
 			_track[l].used = true;
 			return;
 		}
@@ -299,11 +300,13 @@
 void IMuseDigital::stopMusic() {
 	debug(5, "IMuseDigital::stopMusic()");
 	for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
+		_track[l].locked = true;
 		if ((_track[l].idSound == _curMusicId) && _track[l].used) {
 			if (_track[l].stream) {
 				_track[l].toBeRemoved = true;
 			}
 		}
+		_track[l].locked = false;
 	}
 	_curMusicId = -1;
 }
@@ -311,6 +314,7 @@
 void IMuseDigital::stopSound(int soundId) {
 	debug(5, "IMuseDigital::stopSound(%d)", soundId);
 	for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
+		_track[l].locked = true;
 		if ((_track[l].idSound == soundId) && _track[l].used) {
 			if (_track[l].stream) {
 				_track[l].toBeRemoved = true;
@@ -318,18 +322,21 @@
 			else if (_track[l].stream2)
 				_vm->_mixer->stopHandle(_track[l].handle);
 		}
+		_track[l].locked = false;
 	}
 }
 
 void IMuseDigital::stopAllSounds(bool waitForStop) {
 	debug(5, "IMuseDigital::stopAllSounds");
 	for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
+		_track[l].locked = true;
 		if (_track[l].used) {
 			if (_track[l].stream) {
 				_track[l].toBeRemoved = true;
 			} else if (_track[l].stream2)
 				_vm->_mixer->stopHandle(_track[l].handle);
 		}
+		_track[l].locked = false;
 	}
 	_curMusicId = -1;
 
@@ -347,9 +354,11 @@
 
 void IMuseDigital::pause(bool p) {
 	for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
+		_track[l].locked = true;
 		if (_track[l].used) {
 			_vm->_mixer->pauseHandle(_track[l].handle, p);
 		}
+		_track[l].locked = false;
 	}
 	_pause = p;
 }
@@ -376,11 +385,13 @@
 		case 0x600: // set volume
 			debug(5, "ImuseSetParam (0x600), sample(%d), volume(%d)", sample, d);
 			for (l = 0; l < MAX_DIGITAL_TRACKS; l++) {
+				_track[l].locked = true;
 				if ((_track[l].idSound == sample) && _track[l].used) {
 					_track[l].vol = d * 1000;
 //					if (_track[l].volFadeUsed)
 //						_track[l].volFadeStep = (_track[l].volFadeDest - _track[l].vol) * 60 * 40 / (1000 * _track[chan].volFadeDelay);
 				}
+				_track[l].locked = false;
 			}
 			if (l == -1) {
 				debug(5, "ImuseSetParam (0x600), sample(%d) not exist in channels", sample);
@@ -390,9 +401,11 @@
 		case 0x700: // set pan
 			debug(5, "ImuseSetParam (0x700), sample(%d), pan(%d)", sample, d);
 			for (l = 0; l < MAX_DIGITAL_TRACKS; l++) {
+				_track[l].locked = true;
 				if ((_track[l].idSound == sample) && _track[l].used) {
 					_track[l].pan = d;
 				}
+				_track[l].locked = false;
 			}
 			if (l == -1) {
 				debug(5, "ImuseSetParam (0x700), sample(%d) not exist in channels", sample);
@@ -413,6 +426,7 @@
 				return;
 			}
 			for (l = 0; l < MAX_DIGITAL_TRACKS; l++) {
+				_track[l].locked = true;
 				if ((_track[l].idSound == sample) && _track[l].used) {
 					_track[l].volFadeDelay = e;
 					_track[l].volFadeDest = d * 1000;
@@ -420,6 +434,7 @@
 					_track[l].volFadeUsed = true;
 					debug(5, "ImuseFadeParam: vol %d, volDest %d, step %d", _track[l].vol, d * 1000, _track[l].volFadeStep);
 				}
+				_track[l].locked = false;
 			}
 			if (chan == -1) {
 				debug(5, "ImuseFadeParam (0x600), sample %d not exist in channels", sample);
@@ -583,6 +598,7 @@
 	msPos /= 16;
 	if (msPos < 65536) {
 		for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
+			_track[l].locked = true;
 			if ((_track[l].idSound == soundId) && _track[l].used) {
 				_sound->getSyncSizeAndPtrById(_track[l].soundHandle, syncId, sync_size, &sync_ptr);
 				if ((sync_size != 0) && (sync_ptr != NULL)) {
@@ -600,19 +616,24 @@
 
 					width = sync_ptr[2];
 					height = sync_ptr[3];
+					_track[l].locked = false;
 					return;
 				}
 			}
+			_track[l].locked = false;
 		}
 	}
 }
 
 int32 IMuseDigital::getPosInMs(int soundId) {
 	for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
+		_track[l].locked = true;
 		if ((_track[l].idSound == soundId) && _track[l].used) {
 			int32 pos = 1000 * _track[l].trackOffset / _track[l].iteration;
+			_track[l].locked = false;
 			return pos;
 		}
+		_track[l].locked = false;
 	}
 
 	return 0;

Index: dimuse.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse.h,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -d -r1.13 -r1.14
--- dimuse.h	9 Jan 2004 22:10:32 -0000	1.13
+++ dimuse.h	10 Jan 2004 07:07:19 -0000	1.14
@@ -57,6 +57,7 @@
 		int soundGroup;
 		int iteration;
 		int mod;
+		bool locked;
 		int32 pullSize;
 		ImuseDigiSndMgr::soundStruct *soundHandle;
 		PlayingSoundHandle handle;

Index: dimuse_sndmgr.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse_sndmgr.cpp,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -d -r1.19 -r1.20
--- dimuse_sndmgr.cpp	9 Jan 2004 22:36:40 -0000	1.19
+++ dimuse_sndmgr.cpp	10 Jan 2004 07:07:19 -0000	1.20
@@ -31,7 +31,6 @@
 ImuseDigiSndMgr::ImuseDigiSndMgr(ScummEngine *scumm) {
 	memset(&_sounds, 0, sizeof(_sounds));
 	_vm = scumm;
-	_mutex = g_system->create_mutex();
 	_disk = 0;
 	_cacheBundleDir = new BundleDirCache();
 	BundleCodecs::initializeImcTables();
@@ -42,8 +41,6 @@
 		if (&_sounds[l])
 			closeSound(&_sounds[l]);
 	}
-	delete _cacheBundleDir;
-	g_system->delete_mutex(_mutex);
 #ifdef __PALM_OS__
 	BundleCodecs::releaseImcTables();
 #endif
@@ -209,7 +206,6 @@
 ImuseDigiSndMgr::soundStruct *ImuseDigiSndMgr::openSound(int32 soundId, const char *soundName, int soundType, int soundGroup) {
 	assert(soundId >= 0);
 	assert(soundType);
-	Common::StackLock tmpLock(_mutex);
 
 	int slot = allocSlot();
 	if (slot == -1) {
@@ -273,7 +269,6 @@
 
 void ImuseDigiSndMgr::closeSound(soundStruct *soundHandle) {
 	assert(soundHandle && checkForProperHandle(soundHandle));
-	Common::StackLock tmpLock(_mutex);
 
 	for (int l = 0; l < MAX_IMUSE_SOUNDS; l++) {
 		if (&_sounds[l] == soundHandle) {
@@ -297,50 +292,42 @@
 }
 
 int ImuseDigiSndMgr::getFreq(soundStruct *soundHandle) {
-	Common::StackLock tmpLock(_mutex);
 	assert(soundHandle && checkForProperHandle(soundHandle));
 	return soundHandle->freq;
 }
 
 int ImuseDigiSndMgr::getBits(soundStruct *soundHandle) {
-	Common::StackLock tmpLock(_mutex);
 	assert(soundHandle && checkForProperHandle(soundHandle));
 	return soundHandle->bits;
 }
 
 int ImuseDigiSndMgr::getChannels(soundStruct *soundHandle) {
-	Common::StackLock tmpLock(_mutex);
 	assert(soundHandle && checkForProperHandle(soundHandle));
 	return soundHandle->channels;
 }
 
 bool ImuseDigiSndMgr::isEndOfRegion(soundStruct *soundHandle, int region) {
-	Common::StackLock tmpLock(_mutex);
 	assert(soundHandle && checkForProperHandle(soundHandle));
 	assert(region >= 0 && region < soundHandle->numRegions);
 	return soundHandle->endFlag;
 }
 
 int ImuseDigiSndMgr::getNumRegions(soundStruct *soundHandle) {
-	Common::StackLock tmpLock(_mutex);
 	assert(soundHandle && checkForProperHandle(soundHandle));
 	return soundHandle->numRegions;
 }
 
 int ImuseDigiSndMgr::getNumJumps(soundStruct *soundHandle) {
-	Common::StackLock tmpLock(_mutex);
 	assert(soundHandle && checkForProperHandle(soundHandle));
 	return soundHandle->numJumps;
 }
 
 int ImuseDigiSndMgr::getNumMarkers(soundStruct *soundHandle) {
-	Common::StackLock tmpLock(_mutex);
 	assert(soundHandle && checkForProperHandle(soundHandle));
 	return soundHandle->numMarkers;
 }
 
 int ImuseDigiSndMgr::getJumpIdByRegionId(soundStruct *soundHandle, int number) {
-	Common::StackLock tmpLock(_mutex);
 	assert(soundHandle && checkForProperHandle(soundHandle));
 	assert(number >= 0 && number < soundHandle->numRegions);
 	for (int l = 0; l < soundHandle->numJumps; l++) {
@@ -353,7 +340,6 @@
 }
 
 void ImuseDigiSndMgr::getSyncSizeAndPtrById(soundStruct *soundHandle, int number, int32 &sync_size, byte **sync_ptr) {
-	Common::StackLock tmpLock(_mutex);
 	assert(soundHandle && checkForProperHandle(soundHandle));
 	assert(number >= 0);
 	if (number < soundHandle->numSyncs) {
@@ -366,7 +352,6 @@
 }
 
 int ImuseDigiSndMgr::getRegionIdByHookId(soundStruct *soundHandle, int number) {
-	Common::StackLock tmpLock(_mutex);
 	assert(soundHandle && checkForProperHandle(soundHandle));
 	for (int l = 0; l < soundHandle->numJumps; l++) {
 		if (soundHandle->jump[l].hookId == number) {
@@ -382,28 +367,24 @@
 }
 
 int ImuseDigiSndMgr::getJumpHookId(soundStruct *soundHandle, int number) {
-	Common::StackLock tmpLock(_mutex);
 	assert(soundHandle && checkForProperHandle(soundHandle));
 	assert(number >= 0 && number < soundHandle->numJumps);
 	return soundHandle->jump[number].hookId;
 }
 
 int ImuseDigiSndMgr::getJumpFade(soundStruct *soundHandle, int number) {
-	Common::StackLock tmpLock(_mutex);
 	assert(soundHandle && checkForProperHandle(soundHandle));
 	assert(number >= 0 && number < soundHandle->numJumps);
 	return soundHandle->jump[number].fadeDelay;
 }
 
 char *ImuseDigiSndMgr::getMarker(soundStruct *soundHandle, int number) {
-	Common::StackLock tmpLock(_mutex);
 	assert(soundHandle && checkForProperHandle(soundHandle));
 	assert(number >= 0 && number < soundHandle->numMarkers);
 	return (char *)(soundHandle->marker[number].name);
 }
 
 int32 ImuseDigiSndMgr::getDataFromRegion(soundStruct *soundHandle, int region, byte **buf, int32 offset, int32 size) {
-	Common::StackLock tmpLock(_mutex);
 	assert(soundHandle && checkForProperHandle(soundHandle));
 	assert(buf && offset >= 0 && size >= 0);
 	assert(region >= 0 && region < soundHandle->numRegions);

Index: dimuse_sndmgr.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse_sndmgr.h,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -d -r1.13 -r1.14
--- dimuse_sndmgr.h	9 Jan 2004 22:36:40 -0000	1.13
+++ dimuse_sndmgr.h	10 Jan 2004 07:07:19 -0000	1.14
@@ -103,7 +103,6 @@
 	void prepareSound(byte *ptr, int slot);
 
 	ScummEngine *_vm;
-	OSystem::MutexRef _mutex;
 	byte _disk;
 	BundleDirCache *_cacheBundleDir;
 





More information about the Scummvm-git-logs mailing list