[Scummvm-cvs-logs] CVS: scummvm/scumm debugger.cpp,1.133,1.134 imuse.cpp,2.120,2.121 imuse.h,1.53,1.54 imuse_internal.h,2.34,2.35 scumm.cpp,1.277,1.278

Jerome Fisher kingguppy at users.sourceforge.net
Sat Nov 27 09:13:56 CET 2004


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

Modified Files:
	debugger.cpp imuse.cpp imuse.h imuse_internal.h scumm.cpp 
Log Message:
To really, truly fix the multi-midi race condition, the adlib driver is now always created before iMuse initialisation. This necessitated removing the multimidi toggle from the debug console.


Index: debugger.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/debugger.cpp,v
retrieving revision 1.133
retrieving revision 1.134
diff -u -d -r1.133 -r1.134
--- debugger.cpp	27 Nov 2004 02:26:21 -0000	1.133
+++ debugger.cpp	27 Nov 2004 14:53:36 -0000	1.134
@@ -144,15 +144,6 @@
 			DebugPrintf("AAAIIIEEEEEE!\n");
 			DebugPrintf("Shutting down all music tracks\n");
 			return true;
-		} else if (!strcmp (argv[1], "multimidi")) {
-			if (argc > 2 && (!strcmp(argv[2], "on") || !strcmp(argv[2], "off"))) {
-				if (_vm->_imuse)
-					_vm->_imuse->property(IMuse::PROP_MULTI_MIDI, !strcmp(argv[2], "on"));
-				DebugPrintf("MultiMidi mode switched %s.\n", argv[2]);
-			} else {
-				DebugPrintf("Specify \"on\" or \"off\" to switch.\n");
-			}
-			return true;
 		} else if (!strcmp(argv[1], "play")) {
 			if (argc > 2 && (!strcmp(argv[2], "random") || atoi(argv[2]) != 0)) {
 				int sound = atoi(argv[2]);
@@ -186,7 +177,6 @@
 
 	DebugPrintf("Available iMuse commands:\n");
 	DebugPrintf("  panic - Stop all music tracks\n");
-	DebugPrintf("  multimidi on/off - Toggle dual MIDI drivers\n");
 	DebugPrintf("  play # - Play a music resource\n");
 	DebugPrintf("  stop # - Stop a music resource\n");
 	return true;

Index: imuse.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse.cpp,v
retrieving revision 2.120
retrieving revision 2.121
diff -u -d -r2.120 -r2.121
--- imuse.cpp	27 Nov 2004 13:27:17 -0000	2.120
+++ imuse.cpp	27 Nov 2004 14:53:36 -0000	2.121
@@ -1077,24 +1077,6 @@
 			initMT32(_midi_native);
 		break;
 
-	case IMuse::PROP_MULTI_MIDI:
-		_enable_multi_midi = (value > 0);
-		if (!_enable_multi_midi && _midi_native && _midi_adlib) {
-			MidiDriver *driver = _midi_adlib;
-			_midi_adlib = NULL;
-			int i;
-			for (i = 0; i < ARRAYSIZE(_players); ++i) {
-				if (_players[i].isActive() && _players[i].getMidiDriver() == driver)
-					_players[i].clear();
-			}
-			driver->close();
-			// FIXME: shouldn't we delete 'driver' here, too ?
-		} else if (_enable_multi_midi && _midi_adlib == NULL) {
-			_midi_adlib = MidiDriver_ADLIB_create(_mixer);
-			initMidiDriver(_midi_adlib);
-		}
-		break;
-
 	case IMuse::PROP_OLD_ADLIB_INSTRUMENTS:
 		_old_adlib_instruments = (value > 0);
 		break;
@@ -1120,25 +1102,21 @@
 	_base_sounds = base;
 }
 
-IMuseInternal *IMuseInternal::create(OSystem *syst, SoundMixer *mixer, MidiDriver *native_midi) {
+IMuseInternal *IMuseInternal::create(OSystem *syst, MidiDriver *nativeMidiDriver, MidiDriver *adlibMidiDriver) {
 	IMuseInternal *i = new IMuseInternal;
-	i->initialize(syst, mixer, native_midi);
+	i->initialize(syst, nativeMidiDriver, adlibMidiDriver);
 	return i;
 }
 
-int IMuseInternal::initialize(OSystem *syst, SoundMixer *mixer, MidiDriver *native_midi) {
+int IMuseInternal::initialize(OSystem *syst, MidiDriver *native_midi, MidiDriver *adlib_midi) {
 	int i;
 
-	_mixer = mixer;
 	_midi_native = native_midi;
-	if (native_midi)
+	_midi_adlib = adlib_midi;
+	if (native_midi != NULL)
 		initMidiDriver(_midi_native);
-	if (!native_midi || _enable_multi_midi) {
-		_midi_adlib = MidiDriver_ADLIB_create(_mixer);
-		initMidiDriver(_midi_adlib);
-	} else {
-		_midi_adlib = NULL;
-	}
+	if (adlib_midi != NULL)
+		initMidiDriver(adlib_midi);
 
 	if (!_tempoFactor) _tempoFactor = 100;
 	_master_volume = 255;
@@ -1785,8 +1763,8 @@
 // The IMuse::create method provides a front-end factory
 // for creating IMuseInternal without exposing that class
 // to the client.
-IMuse *IMuse::create(OSystem *syst, SoundMixer *mixer, MidiDriver *midi) {
-	IMuseInternal *engine = IMuseInternal::create(syst, mixer, midi);
+IMuse *IMuse::create(OSystem *syst, MidiDriver *nativeMidiDriver, MidiDriver *adlibMidiDriver) {
+	IMuseInternal *engine = IMuseInternal::create(syst, nativeMidiDriver, adlibMidiDriver);
 	return new IMuse(syst, engine);
 }
 

Index: imuse.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse.h,v
retrieving revision 1.53
retrieving revision 1.54
diff -u -d -r1.53 -r1.54
--- imuse.h	6 Jan 2004 12:45:30 -0000	1.53
+++ imuse.h	27 Nov 2004 14:53:37 -0000	1.54
@@ -29,7 +29,6 @@
 
 class MidiDriver;
 class OSystem;
-class SoundMixer;
 
 namespace Scumm {
 
@@ -53,7 +52,6 @@
 	enum {
 		PROP_TEMPO_BASE,
 		PROP_NATIVE_MT32,
-		PROP_MULTI_MIDI,
 		PROP_OLD_ADLIB_INSTRUMENTS,
 		PROP_LIMIT_PLAYERS,
 		PROP_RECYCLE_PLAYERS,
@@ -79,7 +77,7 @@
 	void terminate();
 
 	// Factory methods
-	static IMuse *create(OSystem *syst, SoundMixer *mixer, MidiDriver *midi);
+	static IMuse *create(OSystem *syst, MidiDriver *nativeMidiDriver, MidiDriver *adlibMidiDriver);
 };
 
 } // End of namespace Scumm

Index: imuse_internal.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_internal.h,v
retrieving revision 2.34
retrieving revision 2.35
diff -u -d -r2.34 -r2.35
--- imuse_internal.h	6 Jan 2004 12:45:30 -0000	2.34
+++ imuse_internal.h	27 Nov 2004 14:53:37 -0000	2.35
@@ -28,7 +28,6 @@
 
 class MidiParser;
 class OSystem;
-class SoundMixer;
 
 namespace Scumm {
 
@@ -354,8 +353,6 @@
 	MidiDriver *_midi_native;
 
 	byte **_base_sounds;
-	
-	SoundMixer *_mixer;
 
 protected:
 	bool _paused;
@@ -440,7 +437,7 @@
 public:
 	IMuseInternal();
 
-	int initialize(OSystem *syst, SoundMixer *mixer, MidiDriver *midi);
+	int initialize(OSystem *syst, MidiDriver *nativeMidiDriver, MidiDriver *adlibMidiDriver);
 	void reallocateMidiChannels(MidiDriver *midi);
 	void setGlobalAdlibInstrument(byte slot, byte *data);
 	void copyGlobalAdlibInstrument(byte slot, Instrument *dest);
@@ -466,7 +463,7 @@
 	void setBase(byte **base);
 	uint32 property(int prop, uint32 value);
 
-	static IMuseInternal *create(OSystem *syst, SoundMixer *mixer, MidiDriver *midi);
+	static IMuseInternal *create(OSystem *syst, MidiDriver *nativeMidiDriver, MidiDriver *adlibMidiDriver);
 };
 
 } // End of namespace Scumm

Index: scumm.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/scumm.cpp,v
retrieving revision 1.277
retrieving revision 1.278
diff -u -d -r1.277 -r1.278
--- scumm.cpp	24 Nov 2004 00:14:02 -0000	1.277
+++ scumm.cpp	27 Nov 2004 14:53:37 -0000	1.278
@@ -1353,16 +1353,21 @@
 	} else if (((_midiDriver == MD_PCJR) || (_midiDriver == MD_PCSPK)) && ((_version > 2) && (_version < 5))) {
 		_musicEngine = new Player_V2(this, _midiDriver != MD_PCSPK);
 	} else if (_version > 2 && _heversion <= 60) {
-		MidiDriver *driver = GameDetector::createMidi(_midiDriver);
-		if (driver && _native_mt32)
-			driver->property (MidiDriver::PROP_CHANNEL_MASK, 0x03FE);
-		_musicEngine = _imuse = IMuse::create(_system, _mixer, driver);
+		MidiDriver *nativeMidiDriver = GameDetector::createMidi(_midiDriver);
+		if (nativeMidiDriver != NULL && _native_mt32)
+			nativeMidiDriver->property (MidiDriver::PROP_CHANNEL_MASK, 0x03FE);
+		bool multi_midi = ConfMan.getBool("multi_midi") && _midiDriver != MD_NULL && (midi & MDT_ADLIB);
+		MidiDriver *adlibMidiDriver;
+		if (nativeMidiDriver == NULL || multi_midi)
+			adlibMidiDriver = MidiDriver_ADLIB_create(_mixer);
+		else
+			adlibMidiDriver = NULL;
+
+		_musicEngine = _imuse = IMuse::create(_system, nativeMidiDriver, adlibMidiDriver);
 		if (_imuse) {
 			if (ConfMan.hasKey("tempo"))
 				_imuse->property(IMuse::PROP_TEMPO_BASE, ConfMan.getInt("tempo"));
 			_imuse->property(IMuse::PROP_OLD_ADLIB_INSTRUMENTS, (_features & GF_SMALL_HEADER) ? 1 : 0);
-			_imuse->property(IMuse::PROP_MULTI_MIDI, ConfMan.getBool("multi_midi") &&
-			                 _midiDriver != MD_NULL && (midi & MDT_ADLIB));
 			_imuse->property(IMuse::PROP_NATIVE_MT32, _native_mt32);
 			if (_features & GF_HUMONGOUS || midi == MDT_TOWNS) {
 				_imuse->property(IMuse::PROP_LIMIT_PLAYERS, 1);





More information about the Scummvm-git-logs mailing list