[Scummvm-cvs-logs] CVS: scummvm/scumm/imuse_digi dimuse.cpp,1.137,1.138 dimuse_script.cpp,1.43,1.44 dimuse_track.cpp,1.59,1.60

Pawel Kolodziejski aquadran at users.sourceforge.net
Sun Feb 5 11:59:01 CET 2006


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

Modified Files:
	dimuse.cpp dimuse_script.cpp dimuse_track.cpp 
Log Message:
- changed logic of allocation fade tracks, now each normal track have own static fade track, (i know about affect on savagame state of imuse, but it's minor thing),
- added more thread locks, i hope they are create deadlocks somewhere


Index: dimuse.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse.cpp,v
retrieving revision 1.137
retrieving revision 1.138
diff -u -d -r1.137 -r1.138
--- dimuse.cpp	5 Feb 2006 13:46:39 -0000	1.137
+++ dimuse.cpp	5 Feb 2006 19:57:58 -0000	1.138
@@ -378,10 +378,12 @@
 			if (track->curHookId == sampleHookId) {
 				if (fadeDelay != 0) {
 					Track *fadeTrack = cloneToFadeOutTrack(track, fadeDelay);
-					fadeTrack->dataOffset = _sound->getRegionOffset(fadeTrack->soundHandle, fadeTrack->curRegion);
-					fadeTrack->regionOffset = 0;
-					debug(5, "switchToNextRegion-sound(%d) select region %d, curHookId: %d", fadeTrack->soundId, fadeTrack->curRegion, fadeTrack->curHookId);
-					fadeTrack->curHookId = 0;
+					if (fadeTrack) {
+						fadeTrack->dataOffset = _sound->getRegionOffset(fadeTrack->soundHandle, fadeTrack->curRegion);
+						fadeTrack->regionOffset = 0;
+						debug(5, "switchToNextRegion-sound(%d) select region %d, curHookId: %d", fadeTrack->soundId, fadeTrack->curRegion, fadeTrack->curHookId);
+						fadeTrack->curHookId = 0;
+					}
 				}
 				track->curRegion = region;
 				debug(5, "switchToNextRegion-sound(%d) jump to region %d, curHookId: %d", track->soundId, track->curRegion, track->curHookId);
@@ -390,9 +392,11 @@
 		} else {
 			if (fadeDelay != 0) {
 				Track *fadeTrack = cloneToFadeOutTrack(track, fadeDelay);
-				fadeTrack->dataOffset = _sound->getRegionOffset(fadeTrack->soundHandle, fadeTrack->curRegion);
-				fadeTrack->regionOffset = 0;
-				debug(5, "switchToNextRegion-sound(%d) select region %d, curHookId: %d", fadeTrack->soundId, fadeTrack->curRegion, fadeTrack->curHookId);
+				if (fadeTrack) {
+					fadeTrack->dataOffset = _sound->getRegionOffset(fadeTrack->soundHandle, fadeTrack->curRegion);
+					fadeTrack->regionOffset = 0;
+					debug(5, "switchToNextRegion-sound(%d) select region %d, curHookId: %d", fadeTrack->soundId, fadeTrack->curRegion, fadeTrack->curHookId);
+				}
 			}
 			track->curRegion = region;
 			debug(5, "switchToNextRegion-sound(%d) jump to region %d, curHookId: %d", track->soundId, track->curRegion, track->curHookId);

Index: dimuse_script.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse_script.cpp,v
retrieving revision 1.43
retrieving revision 1.44
diff -u -d -r1.43 -r1.44
--- dimuse_script.cpp	5 Feb 2006 14:57:48 -0000	1.43
+++ dimuse_script.cpp	5 Feb 2006 19:57:59 -0000	1.44
@@ -160,6 +160,7 @@
 }
 
 void IMuseDigital::flushTracks() {
+	Common::StackLock lock(_mutex, "IMuseDigital::flushTracks()");
 	debug(5, "flushTracks()");
 	for (int l = 0; l < MAX_DIGITAL_TRACKS + MAX_DIGITAL_FADETRACKS; l++) {
 		Track *track = _track[l];
@@ -190,6 +191,7 @@
 }
 
 void IMuseDigital::refreshScripts() {
+	Common::StackLock lock(_mutex, "IMuseDigital::refreshScripts()");
 	debug(5, "refreshScripts()");
 	bool found = false;
 	for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
@@ -236,6 +238,7 @@
 
 	msPos /= 16;
 	if (msPos < 65536) {
+		Common::StackLock lock(_mutex, "IMuseDigital::getLipSync()");
 		for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
 			Track *track = _track[l];
 			if ((track->soundId == soundId) && track->used && !track->toBeRemoved) {
@@ -263,6 +266,7 @@
 }
 
 int32 IMuseDigital::getPosInMs(int soundId) {
+	Common::StackLock lock(_mutex, "IMuseDigital::getPosInMs()");
 	for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
 		Track *track = _track[l];
 		if ((track->soundId == soundId) && track->used && !track->toBeRemoved) {
@@ -275,6 +279,7 @@
 }
 
 int IMuseDigital::getSoundStatus(int sound) const {
+	Common::StackLock lock(_mutex, "IMuseDigital::getSoundStatus()");
 	debug(5, "IMuseDigital::getSoundStatus(%d)", sound);
 	for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
 		Track *track = _track[l];
@@ -290,6 +295,7 @@
 }
 
 void IMuseDigital::stopSound(int soundId) {
+	Common::StackLock lock(_mutex, "IMuseDigital::stopSound()");
 	debug(5, "IMuseDigital::stopSound(%d)", soundId);
 	for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
 		Track *track = _track[l];
@@ -300,6 +306,7 @@
 }
 
 int32 IMuseDigital::getCurMusicPosInMs() {
+	Common::StackLock lock(_mutex, "IMuseDigital::getCurMusicPosInMs()");
 	int soundId = -1;
 
 	for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
@@ -315,6 +322,7 @@
 }
 
 int32 IMuseDigital::getCurVoiceLipSyncWidth() {
+	Common::StackLock lock(_mutex, "IMuseDigital::getCurVoiceLipSyncWidth()");
 	int32 msPos = getPosInMs(kTalkSoundID) + 50;
 	int32 width = 0, height = 0;
 
@@ -324,6 +332,7 @@
 }
 
 int32 IMuseDigital::getCurVoiceLipSyncHeight() {
+	Common::StackLock lock(_mutex, "IMuseDigital::getCurVoiceLipSyncHeight()");
 	int32 msPos = getPosInMs(kTalkSoundID) + 50;
 	int32 width = 0, height = 0;
 
@@ -333,6 +342,7 @@
 }
 
 int32 IMuseDigital::getCurMusicLipSyncWidth(int syncId) {
+	Common::StackLock lock(_mutex, "IMuseDigital::getCurMusicLipSyncWidth()");
 	int soundId = -1;
 
 	for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
@@ -351,6 +361,7 @@
 }
 
 int32 IMuseDigital::getCurMusicLipSyncHeight(int syncId) {
+	Common::StackLock lock(_mutex, "IMuseDigital::getCurMusicLipSyncHeight()");
 	int soundId = -1;
 
 	for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {

Index: dimuse_track.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse_track.cpp,v
retrieving revision 1.59
retrieving revision 1.60
diff -u -d -r1.59 -r1.60
--- dimuse_track.cpp	5 Feb 2006 13:46:39 -0000	1.59
+++ dimuse_track.cpp	5 Feb 2006 19:57:59 -0000	1.60
@@ -186,6 +186,7 @@
 }
 
 void IMuseDigital::setPriority(int soundId, int priority) {
+	Common::StackLock lock(_mutex, "IMuseDigital::setPriority()");
 	debug(5, "IMuseDigital::setPriority(%d, %d)", soundId, priority);
 	assert ((priority >= 0) && (priority <= 127));
 
@@ -198,6 +199,7 @@
 }
 
 void IMuseDigital::setVolume(int soundId, int volume) {
+	Common::StackLock lock(_mutex, "IMuseDigital::setVolume()");
 	debug(5, "IMuseDigital::setVolume(%d, %d)", soundId, volume);
 
 	for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
@@ -220,6 +222,7 @@
 }
 
 int IMuseDigital::getCurMusicSoundId() {
+	Common::StackLock lock(_mutex, "IMuseDigital::getCurMusicSoundId()");
 	int soundId = -1;
 
 	for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
@@ -233,6 +236,7 @@
 }
 
 char *IMuseDigital::getCurMusicSoundName() {
+	Common::StackLock lock(_mutex, "IMuseDigital::getCurMusicSoundName()");
 	char *soundName = NULL;
 
 	for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
@@ -246,6 +250,7 @@
 }
 
 void IMuseDigital::setPan(int soundId, int pan) {
+	Common::StackLock lock(_mutex, "IMuseDigital::setPan()");
 	debug(5, "IMuseDigital::setPan(%d, %d)", soundId, pan);
 
 	for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
@@ -257,6 +262,7 @@
 }
 
 void IMuseDigital::selectVolumeGroup(int soundId, int volGroupId) {
+	Common::StackLock lock(_mutex, "IMuseDigital::selectVolumeGroup()");
 	debug(5, "IMuseDigital::setGroupVolume(%d, %d)", soundId, volGroupId);
 	assert((volGroupId >= 1) && (volGroupId <= 4));
 
@@ -287,7 +293,9 @@
 }
 
 void IMuseDigital::fadeOutMusic(int fadeDelay) {
+	Common::StackLock lock(_mutex, "IMuseDigital::fadeOutMusic()");
 	debug(5, "IMuseDigital::fadeOutMusic");
+
 	for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
 		Track *track = _track[l];
 		if (track->used && !track->toBeRemoved && (track->volGroupId == IMUSE_VOLGRP_MUSIC)) {
@@ -298,45 +306,40 @@
 }
 
 IMuseDigital::Track *IMuseDigital::cloneToFadeOutTrack(Track *track, int fadeDelay) {
+	Common::StackLock lock(_mutex, "IMuseDigital::cloneToFadeOutTrack()");
 	assert(track);
 	Track *fadeTrack = 0;
 
 	debug(5, "IMuseDigital::cloneToFadeOutTrack(%d, %d)", track->trackId, fadeDelay);
 
-	{
-		Common::StackLock lock(_mutex, "IMuseDigital::cloneToFadeOutTrack()");
-		for (int l = MAX_DIGITAL_TRACKS; l < MAX_DIGITAL_TRACKS + MAX_DIGITAL_FADETRACKS; l++) {
-			if (!_track[l]->used) {
-				fadeTrack = _track[l];
-				break;
-			}
-		}
-		if (fadeTrack == 0)
-			error("IMuseDigital::cloneToFadeOutTrack() Can't find free fade track");
-
-		fadeTrack->pan = track->pan;
-		fadeTrack->vol = track->vol;
-		fadeTrack->volGroupId = track->volGroupId;
-		fadeTrack->priority = track->priority;
-		fadeTrack->soundId = track->soundId;
-		fadeTrack->dataOffset = track->dataOffset;
-		fadeTrack->regionOffset = track->regionOffset;
-		fadeTrack->curRegion = track->curRegion;
-		fadeTrack->curHookId = track->curHookId;
-		fadeTrack->iteration = track->iteration;
-		fadeTrack->mixerFlags = track->mixerFlags;
-		fadeTrack->mod = track->mod;
-		fadeTrack->toBeRemoved = track->toBeRemoved;
-		fadeTrack->readyToRemove = track->readyToRemove;
-		fadeTrack->souStream = track->souStream;
-		fadeTrack->started = track->started;
-		fadeTrack->stream2 = track->stream2;
-		strcpy(fadeTrack->soundName, track->soundName);
-		fadeTrack->soundType = track->soundType;
-		fadeTrack->soundHandle = _sound->cloneSound(track->soundHandle);
-		assert(fadeTrack->soundHandle);
+	if (_track[track->trackId + MAX_DIGITAL_TRACKS]->used) {
+		warning("IMuseDigital::cloneToFadeOutTrack: Not free fade track");
+		return NULL;
 	}
 
+	fadeTrack = _track[track->trackId + MAX_DIGITAL_TRACKS];
+	fadeTrack->pan = track->pan;
+	fadeTrack->vol = track->vol;
+	fadeTrack->volGroupId = track->volGroupId;
+	fadeTrack->priority = track->priority;
+	fadeTrack->soundId = track->soundId;
+	fadeTrack->dataOffset = track->dataOffset;
+	fadeTrack->regionOffset = track->regionOffset;
+	fadeTrack->curRegion = track->curRegion;
+	fadeTrack->curHookId = track->curHookId;
+	fadeTrack->iteration = track->iteration;
+	fadeTrack->mixerFlags = track->mixerFlags;
+	fadeTrack->mod = track->mod;
+	fadeTrack->toBeRemoved = track->toBeRemoved;
+	fadeTrack->readyToRemove = track->readyToRemove;
+	fadeTrack->souStream = track->souStream;
+	fadeTrack->started = track->started;
+	fadeTrack->stream2 = track->stream2;
+	strcpy(fadeTrack->soundName, track->soundName);
+	fadeTrack->soundType = track->soundType;
+	fadeTrack->soundHandle = _sound->cloneSound(track->soundHandle);
+	assert(fadeTrack->soundHandle);
+
 	fadeTrack->volFadeDelay = fadeDelay;
 	fadeTrack->volFadeDest = 0;
 	fadeTrack->volFadeStep = (fadeTrack->volFadeDest - fadeTrack->vol) * 60 * (1000 / _callbackFps) / (1000 * fadeDelay);





More information about the Scummvm-git-logs mailing list