aboutsummaryrefslogtreecommitdiff
path: root/backends/midi/stmidi.cpp
diff options
context:
space:
mode:
authorMax Horn2011-03-21 15:42:17 +0100
committerMax Horn2011-03-22 23:51:47 +0100
commit8982fff1b79aa3cc53a5c328b283e0f102cb647f (patch)
tree01e3835be4fcdf9acbbea5e7878e0c6cfdb5b5fe /backends/midi/stmidi.cpp
parent92716d71edfe1b23482306e74a1d249c4f43bb0b (diff)
downloadscummvm-rg350-8982fff1b79aa3cc53a5c328b283e0f102cb647f.tar.gz
scummvm-rg350-8982fff1b79aa3cc53a5c328b283e0f102cb647f.tar.bz2
scummvm-rg350-8982fff1b79aa3cc53a5c328b283e0f102cb647f.zip
AUDIO: Add pure virtual MidiDriver::isOpen() method
This in turn enables modifying MidiDriver_MPU401::close() to allow it to be called on a midi driver that has not yet been opened. The specific issue that triggered me to make these changes was a crash-upon-quit in HUGO, caused by it instantiating a midi driver, then encountering an error (missing hugo.dat) *before* having opened the new midi driver; the general cleanup code then tries to close the (not yet opened) midi driver -> kaboom Also fixed some engines which were leaking MidiDriver instances.
Diffstat (limited to 'backends/midi/stmidi.cpp')
-rw-r--r--backends/midi/stmidi.cpp39
1 files changed, 20 insertions, 19 deletions
diff --git a/backends/midi/stmidi.cpp b/backends/midi/stmidi.cpp
index 562c3c7ece..42f829a7a3 100644
--- a/backends/midi/stmidi.cpp
+++ b/backends/midi/stmidi.cpp
@@ -48,8 +48,9 @@
class MidiDriver_STMIDI : public MidiDriver_MPU401 {
public:
- MidiDriver_STMIDI() : _isOpen (false) { }
+ MidiDriver_STMIDI() : _isOpen (false) { }
int open();
+ bool isOpen() const { return _isOpen; }
void close();
void send(uint32 b);
void sysEx(const byte *msg, uint16 length);
@@ -59,7 +60,7 @@ private:
};
int MidiDriver_STMIDI::open() {
- if ((_isOpen) && (!Bcostat(4)))
+ if (_isOpen && (!Bcostat(4)))
return MERR_ALREADY_OPEN;
warning("ST Midi Port Open");
_isOpen = true;
@@ -123,36 +124,36 @@ void MidiDriver_STMIDI::sysEx (const byte *msg, uint16 length) {
class StMidiMusicPlugin : public MusicPluginObject {
public:
- const char *getName() const {
- return "STMIDI";
- }
+ const char *getName() const {
+ return "STMIDI";
+ }
- const char *getId() const {
- return "stmidi";
- }
+ const char *getId() const {
+ return "stmidi";
+ }
- MusicDevices getDevices() const;
- Common::Error createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle = 0) const;
+ MusicDevices getDevices() const;
+ Common::Error createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle = 0) const;
};
MusicDevices StMidiMusicPlugin::getDevices() const {
- MusicDevices devices;
- // TODO: Return a different music type depending on the configuration
- // TODO: List the available devices
- devices.push_back(MusicDevice(this, "", MT_GM));
- return devices;
+ MusicDevices devices;
+ // TODO: Return a different music type depending on the configuration
+ // TODO: List the available devices
+ devices.push_back(MusicDevice(this, "", MT_GM));
+ return devices;
}
Common::Error StMidiMusicPlugin::createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle) const {
- *mididriver = new MidiDriver_STMIDI();
+ *mididriver = new MidiDriver_STMIDI();
- return Common::kNoError;
+ return Common::kNoError;
}
//#if PLUGIN_ENABLED_DYNAMIC(STMIDI)
- //REGISTER_PLUGIN_DYNAMIC(STMIDI, PLUGIN_TYPE_MUSIC, StMidiMusicPlugin);
+ //REGISTER_PLUGIN_DYNAMIC(STMIDI, PLUGIN_TYPE_MUSIC, StMidiMusicPlugin);
//#else
- REGISTER_PLUGIN_STATIC(STMIDI, PLUGIN_TYPE_MUSIC, StMidiMusicPlugin);
+ REGISTER_PLUGIN_STATIC(STMIDI, PLUGIN_TYPE_MUSIC, StMidiMusicPlugin);
//#endif
#endif