diff options
author | Max Horn | 2011-03-23 16:14:39 +0100 |
---|---|---|
committer | Max Horn | 2011-03-23 16:49:41 +0100 |
commit | e70fd59b3505619cccb6f3280a4cf0fb57aefa97 (patch) | |
tree | 055c9719a41c4706baa4e5c4837e5fd31da95486 /engines/agos/agos.cpp | |
parent | 29847ea42da3e597d3496972c80ce49bea76da20 (diff) | |
download | scummvm-rg350-e70fd59b3505619cccb6f3280a4cf0fb57aefa97.tar.gz scummvm-rg350-e70fd59b3505619cccb6f3280a4cf0fb57aefa97.tar.bz2 scummvm-rg350-e70fd59b3505619cccb6f3280a4cf0fb57aefa97.zip |
ENGINES: Further simplify pseudo MidiDrivers; fix some regressions
The regression affected AGOS and maybe some others; specifically,
the real MidiDriver would have been deleted twice -- I previously
missed that the Engine instances takes care of freeing the real
MidiDriver, not the MidiPlayer wrapping it.
This commit should clarify the ownership of the real MidiDriver for
most pseudo MidiDrivers.
Diffstat (limited to 'engines/agos/agos.cpp')
-rw-r--r-- | engines/agos/agos.cpp | 27 |
1 files changed, 3 insertions, 24 deletions
diff --git a/engines/agos/agos.cpp b/engines/agos/agos.cpp index 7b6d4cf3e3..498c7e4961 100644 --- a/engines/agos/agos.cpp +++ b/engines/agos/agos.cpp @@ -470,7 +470,6 @@ AGOSEngine::AGOSEngine(OSystem *syst) _planarBuf = 0; _midiEnabled = false; - _nativeMT32 = false; _vgaTickCounter = 0; @@ -555,30 +554,13 @@ Common::Error AGOSEngine::init() { ((getFeatures() & GF_TALKIE) && getPlatform() == Common::kPlatformAcorn) || (getPlatform() == Common::kPlatformPC)) { - // Setup midi driver - MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_ADLIB | MDT_MIDI | (getGameType() == GType_SIMON1 ? MDT_PREFER_MT32 : MDT_PREFER_GM)); - _nativeMT32 = ((MidiDriver::getMusicType(dev) == MT_MT32) || ConfMan.getBool("native_mt32")); - - _driver = MidiDriver::createMidi(dev); - - if (_nativeMT32) - _driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE); - - _midi.setNativeMT32(_nativeMT32); - _midi.mapMT32toGM(getGameType() != GType_SIMON2 && !_nativeMT32); - - _midi.setDriver(_driver); - - int ret = _midi.open(); + int ret = _midi.open(getGameType()); if (ret) - warning("MIDI Player init failed: \"%s\"", MidiDriver::getErrorName (ret)); + warning("MIDI Player init failed: \"%s\"", MidiDriver::getErrorName(ret)); _midi.setVolume(ConfMan.getInt("music_volume"), ConfMan.getInt("sfx_volume")); - _midiEnabled = true; - } else { - _driver = NULL; } // Setup mixer @@ -734,7 +716,7 @@ void AGOSEngine_Simon2::setupGame() { _itemMemSize = 20000; _tableMemSize = 100000; // Check whether to use MT-32 MIDI tracks in Simon the Sorcerer 2 - if (getGameType() == GType_SIMON2 && _nativeMT32) + if (getGameType() == GType_SIMON2 && _midi.hasNativeMT32()) _musicIndexBase = (1128 + 612) / 4; else _musicIndexBase = 1128 / 4; @@ -895,9 +877,6 @@ void AGOSEngine::setupGame() { } AGOSEngine::~AGOSEngine() { - _midi.close(); - delete _driver; - _system->getAudioCDManager()->stop(); for (uint i = 0; i < _itemHeap.size(); i++) { |