[Scummvm-git-logs] scummvm master -> c70ef14f244f5a3c408c8b841cb122d634239d66

aquadran aquadran at gmail.com
Fri Oct 1 20:40:11 UTC 2021


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
c70ef14f24 GRIM: Partially revert 6bb4658ea6 to work around bug #12932


Commit: c70ef14f244f5a3c408c8b841cb122d634239d66
    https://github.com/scummvm/scummvm/commit/c70ef14f244f5a3c408c8b841cb122d634239d66
Author: Torbjörn Andersson (eriktorbjorn at users.sourceforge.net)
Date: 2021-10-01T22:39:42+02:00

Commit Message:
GRIM: Partially revert 6bb4658ea6 to work around bug #12932

The moveToFadeOutTrack() function was introduced many years ago to fix
"sound skipping a bit when a fade out track starts". Unfortunately,
while this may have worked flawlessly back then it causes crashes in
certain cases now.

The point of this is to avoid the crash for the upcoming release. A more
long-term solution should be in the works.

Changed paths:
    engines/grim/imuse/imuse.h
    engines/grim/imuse/imuse_track.cpp


diff --git a/engines/grim/imuse/imuse.h b/engines/grim/imuse/imuse.h
index e22c230acc..c151edccd9 100644
--- a/engines/grim/imuse/imuse.h
+++ b/engines/grim/imuse/imuse.h
@@ -65,7 +65,6 @@ private:
 	void fadeOutMusic(int fadeDelay);
 	void fadeOutMusicAndStartNew(int fadeDelay, const char *filename, int hookId, int vol, int pan);
 	Track *cloneToFadeOutTrack(Track *track, int fadeDelay);
-	Track *moveToFadeOutTrack(Track *track, int fadeDelay);
 
 	void playMusic(const ImuseTable *table, int atribPos, bool sequence);
 
diff --git a/engines/grim/imuse/imuse_track.cpp b/engines/grim/imuse/imuse_track.cpp
index 80df2fc16b..cdb8f85a11 100644
--- a/engines/grim/imuse/imuse_track.cpp
+++ b/engines/grim/imuse/imuse_track.cpp
@@ -345,7 +345,8 @@ void Imuse::fadeOutMusic(int duration) {
 	for (int l = 0; l < MAX_IMUSE_TRACKS; l++) {
 		Track *track = _track[l];
 		if (track->used && !track->toBeRemoved && (track->volGroupId == IMUSE_VOLGRP_MUSIC)) {
-			moveToFadeOutTrack(track, duration);
+			cloneToFadeOutTrack(track, duration);
+			flushTrack(track);
 			return;
 		}
 	}
@@ -358,7 +359,8 @@ void Imuse::fadeOutMusicAndStartNew(int fadeDelay, const char *filename, int hoo
 		Track *track = _track[l];
 		if (track->used && !track->toBeRemoved && (track->volGroupId == IMUSE_VOLGRP_MUSIC)) {
 			startMusicWithOtherPos(filename, 0, vol, pan, track);
-			moveToFadeOutTrack(track, fadeDelay);
+			cloneToFadeOutTrack(track, fadeDelay);
+			flushTrack(track);
 			break;
 		}
 	}
@@ -407,56 +409,4 @@ Track *Imuse::cloneToFadeOutTrack(Track *track, int fadeDelay) {
 	return fadeTrack;
 }
 
-Track *Imuse::moveToFadeOutTrack(Track *track, int fadeDelay) {
-	assert(track);
-	Track *fadeTrack;
-
-	if (track->toBeRemoved) {
-		error("moveToFadeOutTrack: Tried to move a track to be removed, please bug report");
-		return nullptr;
-	}
-
-	// Clamp fade time to remaining time in the current region
-	if (track->curRegion != -1) {
-		int remainingLen = _sound->getRegionLength(track->soundDesc, track->curRegion) - track->regionOffset;
-		int remainingTime = (remainingLen * 60) / track->feedSize;
-		if (fadeDelay > remainingTime) {
-			fadeDelay = remainingTime;
-		}
-	}
-
-	if (fadeDelay <= 0) {
-		flushTrack(track);
-		return nullptr;
-	}
-
-	assert(track->trackId < MAX_IMUSE_TRACKS);
-	fadeTrack = _track[track->trackId + MAX_IMUSE_TRACKS];
-
-	if (fadeTrack->used) {
-		flushTrack(fadeTrack);
-		g_system->getMixer()->stopHandle(fadeTrack->handle);
-	}
-
-	// Clone the settings of the given track
-	memcpy(fadeTrack, track, sizeof(Track));
-	fadeTrack->trackId = track->trackId + MAX_IMUSE_TRACKS;
-
-	// Reset the track
-	track->clear();
-
-	// Mark as used for now so the track won't be reused again this frame
-	track->used = true;
-
-	// Set the volume fading parameters to indicate a fade out
-	fadeTrack->volFadeDelay = fadeDelay;
-	fadeTrack->volFadeDest = 0;
-	fadeTrack->volFadeStep = (fadeTrack->volFadeDest - fadeTrack->vol) * 60 * (1000 / _callbackFps) / (1000 * fadeDelay);
-	fadeTrack->volFadeUsed = true;
-
-	fadeTrack->used = true;
-
-	return fadeTrack;
-}
-
 } // end of namespace Grim




More information about the Scummvm-git-logs mailing list