[Scummvm-cvs-logs] SF.net SVN: scummvm:[46579] scummvm/trunk/engines/sci
thebluegr at users.sourceforge.net
thebluegr at users.sourceforge.net
Sat Dec 26 14:20:07 CET 2009
Revision: 46579
http://scummvm.svn.sourceforge.net/scummvm/?rev=46579&view=rev
Author: thebluegr
Date: 2009-12-26 13:20:07 +0000 (Sat, 26 Dec 2009)
Log Message:
-----------
Hopefully fixed the freezes/deadlocks in the new music code (e.g. in LSL5 and Castle of Dr. Brain)
Modified Paths:
--------------
scummvm/trunk/engines/sci/engine/savegame.cpp
scummvm/trunk/engines/sci/sfx/music.cpp
scummvm/trunk/engines/sci/sfx/music.h
Modified: scummvm/trunk/engines/sci/engine/savegame.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/savegame.cpp 2009-12-26 11:54:57 UTC (rev 46578)
+++ scummvm/trunk/engines/sci/engine/savegame.cpp 2009-12-26 13:20:07 UTC (rev 46579)
@@ -628,12 +628,11 @@
if (s.isLoading()) {
music->stopAll();
- music->resizeList(songcount);
for (int i = 0; i < songcount; i++) {
MusicEntry *curSong = new MusicEntry();
syncSong(s, curSong);
- music->setSlot(i, curSong);
+ music->pushBackSlot(curSong);
}
} else {
for (int i = 0; i < songcount; i++) {
Modified: scummvm/trunk/engines/sci/sfx/music.cpp
===================================================================
--- scummvm/trunk/engines/sci/sfx/music.cpp 2009-12-26 11:54:57 UTC (rev 46578)
+++ scummvm/trunk/engines/sci/sfx/music.cpp 2009-12-26 13:20:07 UTC (rev 46579)
@@ -43,6 +43,10 @@
SciMusic::SciMusic(SciVersion soundVersion)
: _soundVersion(soundVersion) {
+
+ // Reserve some space in the playlist, to avoid expensive insertion
+ // operations
+ _playList.reserve(10);
}
SciMusic::~SciMusic() {
@@ -370,6 +374,8 @@
}
//---------------------------------------------
void SciMusic::doFade(MusicEntry *pSnd) {
+ // This is called from inside onTimer, where the mutex is already locked
+
if (pSnd->fadeTicker)
pSnd->fadeTicker--;
else {
@@ -401,10 +407,13 @@
_pMixer->playInputStream(Audio::Mixer::kSFXSoundType, &pSnd->hCurrentAud,
pSnd->pStreamAud, -1, pSnd->volume, 0, false);
} else if (pSnd->pMidiParser) {
+ _mutex.lock();
pSnd->pMidiParser->setVolume(pSnd->volume);
if (pSnd->status == kSndStatusStopped)
pSnd->pMidiParser->jumpToTick(0);
+ _mutex.unlock();
}
+
pSnd->status = kSndStatusPlaying;
}
//---------------------------------------------
@@ -434,9 +443,8 @@
//---------------------------------------------
void SciMusic::soundKill(MusicEntry *pSnd) {
- _mutex.lock();
+ pSnd->status = kSndStatusStopped;
- pSnd->status = kSndStatusStopped;
if (pSnd->pMidiParser) {
pSnd->pMidiParser->unloadMusic();
delete pSnd->pMidiParser;
@@ -447,6 +455,8 @@
pSnd->pStreamAud = NULL;
}
+ _mutex.lock();
+
uint sz = _playList.size(), i;
// Remove sound from playlist
for (i = 0; i < sz; i++) {
@@ -459,7 +469,6 @@
}
_mutex.unlock();
-
}
//---------------------------------------------
void SciMusic::soundPause(MusicEntry *pSnd) {
Modified: scummvm/trunk/engines/sci/sfx/music.h
===================================================================
--- scummvm/trunk/engines/sci/sfx/music.h 2009-12-26 11:54:57 UTC (rev 46578)
+++ scummvm/trunk/engines/sci/sfx/music.h 2009-12-26 13:20:07 UTC (rev 46579)
@@ -135,11 +135,6 @@
}
MusicEntry *getSlot(int slot) { return _playList[slot]; }
- void setSlot(uint32 slot, MusicEntry *slotEntry) {
- _mutex.lock();
- _playList[slot] = slotEntry;
- _mutex.unlock();
- }
void pushBackSlot(MusicEntry *slotEntry) {
_mutex.lock();
@@ -149,12 +144,6 @@
uint32 listSize() { return _playList.size(); }
- void resizeList(uint32 newSize) {
- _mutex.lock();
- _playList.resize(newSize);
- _mutex.unlock();
- }
-
uint16 _savelen;
protected:
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list