diff options
Diffstat (limited to 'src/music/qtmidi.cpp')
-rw-r--r-- | src/music/qtmidi.cpp | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/src/music/qtmidi.cpp b/src/music/qtmidi.cpp index 074963992..bb4ef91d2 100644 --- a/src/music/qtmidi.cpp +++ b/src/music/qtmidi.cpp @@ -121,8 +121,9 @@ static bool LoadMovieForMIDIFile(const char *path, Movie *moov) if (ret < 4) return false; DEBUG(driver, 3, "qtmidi: header is '%.4s'", magic); - if (magic[0] != 'M' || magic[1] != 'T' || magic[2] != 'h' || magic[3] != 'd') + if (magic[0] != 'M' || magic[1] != 'T' || magic[2] != 'h' || magic[3] != 'd') { return false; + } if (noErr != FSPathMakeRef((const UInt8 *) path, &fsref, NULL)) return false; SetMIDITypeIfNeeded(&fsref); @@ -218,13 +219,15 @@ bool MusicDriver_QtMidi::IsSongPlaying() case QT_STATE_STOP: /* Do nothing. */ break; + case QT_STATE_PLAY: MoviesTask(_quicktime_movie, 0); /* Check wether movie ended. */ if (IsMovieDone(_quicktime_movie) || (GetMovieTime(_quicktime_movie, NULL) >= - GetMovieDuration(_quicktime_movie))) + GetMovieDuration(_quicktime_movie))) { _quicktime_state = QT_STATE_STOP; + } } return _quicktime_state == QT_STATE_PLAY; @@ -247,8 +250,11 @@ void MusicDriver_QtMidi::Stop() DEBUG(driver, 3, "qtmidi: stopping not needed, already idle"); /* Do nothing. */ break; + case QT_STATE_PLAY: StopSong(); + /* Fall-through */ + case QT_STATE_STOP: DisposeMovie(_quicktime_movie); } @@ -272,12 +278,14 @@ void MusicDriver_QtMidi::PlaySong(const char *filename) case QT_STATE_PLAY: StopSong(); DEBUG(driver, 3, "qtmidi: previous tune stopped"); - /* XXX Fall-through -- no break needed. */ + /* Fall-through -- no break needed. */ + case QT_STATE_STOP: DisposeMovie(_quicktime_movie); DEBUG(driver, 3, "qtmidi: previous tune disposed"); _quicktime_state = QT_STATE_IDLE; - /* XXX Fall-through -- no break needed. */ + /* Fall-through -- no break needed. */ + case QT_STATE_IDLE: LoadMovieForMIDIFile(filename, &_quicktime_movie); SetMovieVolume(_quicktime_movie, VOLUME); @@ -297,11 +305,13 @@ void MusicDriver_QtMidi::StopSong() switch (_quicktime_state) { case QT_STATE_IDLE: - /* XXX Fall-through -- no break needed. */ + /* Fall-through -- no break needed. */ + case QT_STATE_STOP: DEBUG(driver, 3, "qtmidi: stop requested, but already idle"); /* Do nothing. */ break; + case QT_STATE_PLAY: StopMovie(_quicktime_movie); _quicktime_state = QT_STATE_STOP; @@ -330,6 +340,7 @@ void MusicDriver_QtMidi::SetVolume(byte vol) case QT_STATE_IDLE: /* Do nothing. */ break; + case QT_STATE_PLAY: case QT_STATE_STOP: SetMovieVolume(_quicktime_movie, VOLUME); |