[Scummvm-cvs-logs] CVS: scummvm/queen music.cpp,1.11,1.12 music.h,1.9,1.10
Joost Peters
joostp at users.sourceforge.net
Sun Jan 25 04:55:05 CET 2004
- Previous message: [Scummvm-cvs-logs] CVS: scummvm/queen music.cpp,1.9,1.10 music.h,1.6,1.7 musicdata.cpp,1.3,1.4 sound.cpp,1.31,1.32 sound.h,1.14,1.15
- Next message: [Scummvm-cvs-logs] CVS: scummvm/scumm/insane insane.cpp,1.6,1.7 insane_ben.cpp,1.4,1.5 insane_enemy.cpp,1.4,1.5 insane_iact.cpp,1.4,1.5 insane_scenes.cpp,1.4,1.5
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/scummvm/scummvm/queen
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19027/queen
Modified Files:
music.cpp music.h
Log Message:
- Cope better with invalid music (fixes 100% CPU usage)
- Some const'ness
Index: music.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/queen/music.cpp,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- music.cpp 24 Jan 2004 22:55:09 -0000 1.11
+++ music.cpp 25 Jan 2004 12:50:15 -0000 1.12
@@ -200,13 +200,10 @@
return;
}
- //Don't play if there's only 1 song in the queue and it's a bad one
- if (!_songQueue[1] && isBadSong(_songQueue[_queuePos]))
+ //Don't play if the queue doesn't have any valid songs
+ if (!validSongs())
return;
- while(isBadSong(_songQueue[_queuePos]))
- queueUpdatePos();
-
uint16 songNum = _songQueue[_queuePos];
//Special type
@@ -223,8 +220,12 @@
songNum = _songQueue[_queuePos];
}
}
-
- _currentSong = songNum = isBadSong(songNum) ? 0 : songNum;
+
+ _currentSong = songNum = isBadSong(songNum) ? nextValidSong() : songNum;
+ if (!songNum) {
+ stopMusic();
+ return;
+ }
_parser->loadMusic(_musicData + songOffset(songNum), songLength(songNum));
_parser->setTrack(0);
//debug(0, "Playing song %d [queue position: %d]", songNum, _queuePos);
@@ -256,7 +257,7 @@
return (uint8) _rnd.getRandomNumber(queueSize - 1) & 0xFF;
}
- bool MusicPlayer::isBadSong(uint16 songNum) {
+ bool MusicPlayer::isBadSong(uint16 songNum) const {
//Songs which are (apparently?) bogus
//Atleast they don't contain a valid MThd/MTrk
switch(songNum) {
@@ -272,19 +273,55 @@
break;
}
}
+
+ uint8 MusicPlayer::validSongs() const {
+ uint8 valid = 0;
+ for (int i = 0; i < MUSIC_QUEUE_SIZE; i++)
+ if (_songQueue[i] && !isBadSong(_songQueue[i]))
+ valid++;
+
+ return valid;
+ }
+
+ uint16 MusicPlayer::nextValidSong() {
+ if (_randomLoop && validSongs() > 1) {
+ uint8 pos = randomQueuePos();
+ while(isBadSong(_songQueue[pos]))
+ pos = randomQueuePos();
+ _queuePos = pos;
+ return _songQueue[pos];
+ }
+ if (!_looping && validSongs() < 2)
+ return 0;
+
+ for (int i = _queuePos + 1; i < MUSIC_QUEUE_SIZE; i++)
+ if (_songQueue[i] && !isBadSong(_songQueue[i])) {
+ _queuePos = i;
+ return _songQueue[i];
+ }
+
+ for (int i = 0; i < _queuePos; i++)
+ if (_songQueue[i] && !isBadSong(_songQueue[i])) {
+ _queuePos = i;
+ return _songQueue[i];
+ }
+
+ return 0;
+ }
+
void MusicPlayer::stopMusic() {
_isPlaying = false;
_parser->unloadMusic();
}
- uint32 MusicPlayer::songOffset(uint16 songNum) {
+ uint32 MusicPlayer::songOffset(uint16 songNum) const {
uint16 offsLo = READ_LE_UINT16(_musicData + (songNum * 4) + 2);
uint16 offsHi = READ_LE_UINT16(_musicData + (songNum * 4) + 4);
return (offsHi << 4) | offsLo;
}
- uint32 MusicPlayer::songLength(uint16 songNum) {
+ uint32 MusicPlayer::songLength(uint16 songNum) const {
if (songNum < _numSongs)
return (songOffset(songNum + 1) - songOffset(songNum));
return (_musicDataSize - songOffset(songNum));
Index: music.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/queen/music.h,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- music.h 24 Jan 2004 22:55:09 -0000 1.9
+++ music.h 25 Jan 2004 12:50:29 -0000 1.10
@@ -66,9 +66,11 @@
void queueUpdatePos();
uint8 randomQueuePos();
static void onTimer(void *data);
- bool isBadSong(uint16 songNum);
- uint32 songOffset(uint16 songNum);
- uint32 songLength(uint16 songNum);
+ bool isBadSong(uint16 songNum) const;
+ uint8 validSongs() const;
+ uint16 nextValidSong();
+ uint32 songOffset(uint16 songNum) const;
+ uint32 songLength(uint16 songNum) const;
MidiDriver *_driver;
MidiParser *_parser;
- Previous message: [Scummvm-cvs-logs] CVS: scummvm/queen music.cpp,1.9,1.10 music.h,1.6,1.7 musicdata.cpp,1.3,1.4 sound.cpp,1.31,1.32 sound.h,1.14,1.15
- Next message: [Scummvm-cvs-logs] CVS: scummvm/scumm/insane insane.cpp,1.6,1.7 insane_ben.cpp,1.4,1.5 insane_enemy.cpp,1.4,1.5 insane_iact.cpp,1.4,1.5 insane_scenes.cpp,1.4,1.5
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Scummvm-git-logs
mailing list