[Scummvm-cvs-logs] CVS: scummvm/scumm/imuse_digi dimuse.cpp,1.77,1.78 dimuse.h,1.45,1.46 dimuse_script.cpp,1.6,1.7 dimuse_sndmgr.cpp,1.37,1.38 dimuse_track.cpp,1.6,1.7
Pawel Kolodziejski
aquadran at users.sourceforge.net
Mon Apr 26 00:48:03 CEST 2004
Update of /cvsroot/scummvm/scummvm/scumm/imuse_digi
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9963/imuse_digi
Modified Files:
dimuse.cpp dimuse.h dimuse_script.cpp dimuse_sndmgr.cpp
dimuse_track.cpp
Log Message:
fixed stopping imuse sounds
Index: dimuse.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse.cpp,v
retrieving revision 1.77
retrieving revision 1.78
diff -u -d -r1.77 -r1.78
--- dimuse.cpp 25 Apr 2004 17:24:03 -0000 1.77
+++ dimuse.cpp 26 Apr 2004 07:47:12 -0000 1.78
@@ -58,11 +58,9 @@
}
IMuseDigital::~IMuseDigital() {
- stopAllSounds(true);
- {
- Common::StackLock lock(_mutex, "IMuseDigital::~IMuseDigital()");
- _vm->_timer->removeTimerProc(timer_handler);
- }
+ Common::StackLock lock(_mutex, "IMuseDigital::~IMuseDigital()");
+ stopAllSounds();
+ _vm->_timer->removeTimerProc(timer_handler);
for (int l = 0; l < MAX_DIGITAL_TRACKS + MAX_DIGITAL_FADETRACKS; l++) {
delete _track[l];
}
Index: dimuse.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse.h,v
retrieving revision 1.45
retrieving revision 1.46
diff -u -d -r1.45 -r1.46
--- dimuse.h 25 Apr 2004 17:24:16 -0000 1.45
+++ dimuse.h 26 Apr 2004 07:47:12 -0000 1.46
@@ -148,8 +148,7 @@
void setFade(int soundId, int destVolume, int delay60HzTicks);
void setMasterVolume(int vol) {}
void stopSound(int soundId);
- void stopAllSounds() { stopAllSounds(false); }
- void stopAllSounds(bool waitForStop);
+ void stopAllSounds();
void pause(bool pause);
void parseScriptCmds(int a, int b, int c, int d, int e, int f, int g, int h);
void refreshScripts();
Index: dimuse_script.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse_script.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- dimuse_script.cpp 12 Apr 2004 13:34:34 -0000 1.6
+++ dimuse_script.cpp 26 Apr 2004 07:47:12 -0000 1.7
@@ -256,12 +256,19 @@
Common::StackLock lock(_mutex, "IMuseDigital::stopSound()");
debug(5, "IMuseDigital::stopSound(%d)", soundId);
for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
- if ((_track[l]->soundId == soundId) && _track[l]->used) {
+ if ((_track[l]->soundId == soundId) && (_track[l]->used)) {
if (_track[l]->stream) {
- _track[l]->toBeRemoved = true;
- }
- else if (_track[l]->stream2)
+ _track[l]->stream->finish();
+ _track[l]->stream = NULL;
_vm->_mixer->stopHandle(_track[l]->handle);
+ _sound->closeSound(_track[l]->soundHandle);
+ _track[l]->soundHandle = NULL;
+ } else if (_track[l]->stream2) {
+ _vm->_mixer->stopHandle(_track[l]->handle);
+ delete _track[l]->stream2;
+ _track[l]->stream2 = NULL;
+ }
+ _track[l]->used = false;
}
}
}
@@ -337,33 +344,25 @@
return height;
}
-void IMuseDigital::stopAllSounds(bool waitForStop) {
+void IMuseDigital::stopAllSounds() {
+ Common::StackLock lock(_mutex, "IMuseDigital::stopAllSounds()");
debug(5, "IMuseDigital::stopAllSounds");
- {
- Common::StackLock lock(_mutex, "IMuseDigital::stopAllSounds()");
- for (int l = 0; l < MAX_DIGITAL_TRACKS + MAX_DIGITAL_FADETRACKS; l++) {
- if (_track[l]->used) {
- if (_track[l]->stream) {
- _track[l]->toBeRemoved = true;
- } else if (_track[l]->stream2)
- _vm->_mixer->stopHandle(_track[l]->handle);
- }
- }
- }
-
- // FIXME: ignore wait, it can cause deadlock, it need better implementaion
- return;
- if (waitForStop) {
- bool used;
- do {
- used = false;
- for (int l = 0; l < MAX_DIGITAL_TRACKS + MAX_DIGITAL_FADETRACKS; l++) {
- if (_track[l]->used)
- used = true;
+ for (int l = 0; l < MAX_DIGITAL_TRACKS + MAX_DIGITAL_FADETRACKS; l++) {
+ if (_track[l]->used) {
+ if (_track[l]->stream) {
+ _track[l]->stream->finish();
+ _track[l]->stream = NULL;
+ _vm->_mixer->stopHandle(_track[l]->handle);
+ _sound->closeSound(_track[l]->soundHandle);
+ _track[l]->soundHandle = NULL;
+ } else if (_track[l]->stream2) {
+ _vm->_mixer->stopHandle(_track[l]->handle);
+ delete _track[l]->stream2;
+ _track[l]->stream2 = NULL;
}
- g_system->delay_msecs(10);
- } while (used);
+ _track[l]->used = false;
+ }
}
}
Index: dimuse_sndmgr.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse_sndmgr.cpp,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -d -r1.37 -r1.38
--- dimuse_sndmgr.cpp 25 Apr 2004 19:51:46 -0000 1.37
+++ dimuse_sndmgr.cpp 26 Apr 2004 07:47:12 -0000 1.38
@@ -232,7 +232,7 @@
if (_disk != _vm->VAR(_vm->VAR_CURRENTDISK)) {
_vm->_imuseDigital->parseScriptCmds(0x1000, 0, 0, 0, 0, 0, 0, 0);
_vm->_imuseDigital->parseScriptCmds(0x2000, 0, 0, 0, 0, 0, 0, 0);
- _vm->_imuseDigital->stopAllSounds(true);
+ _vm->_imuseDigital->stopAllSounds();
_sounds[slot].bundle->closeFile();
}
@@ -263,7 +263,7 @@
if (_disk != _vm->VAR(_vm->VAR_CURRENTDISK)) {
_vm->_imuseDigital->parseScriptCmds(0x1000, 0, 0, 0, 0, 0, 0, 0);
_vm->_imuseDigital->parseScriptCmds(0x2000, 0, 0, 0, 0, 0, 0, 0);
- _vm->_imuseDigital->stopAllSounds(true);
+ _vm->_imuseDigital->stopAllSounds();
_sounds[slot].bundle->closeFile();
}
Index: dimuse_track.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse_track.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- dimuse_track.cpp 25 Apr 2004 17:24:17 -0000 1.6
+++ dimuse_track.cpp 26 Apr 2004 07:47:12 -0000 1.7
@@ -105,7 +105,7 @@
int bits = 0, freq = 0, channels = 0;
if (input) {
- _track[l]->iteration = 1; // ?
+ _track[l]->iteration = 0;
// Do nothing here, we already have an audio stream
} else {
_track[l]->soundHandle = _sound->openSound(soundId, soundName, soundType, volGroupId);
More information about the Scummvm-git-logs
mailing list