aboutsummaryrefslogtreecommitdiff
path: root/engines/scumm/imuse_digi
diff options
context:
space:
mode:
authorTorbjörn Andersson2019-01-05 20:09:23 +0100
committerFilippos Karapetis2019-07-14 14:58:19 +0300
commit1e23d43006705a1d25e04d9cc90674044789cb92 (patch)
tree74982033219756724bc69b27cfc962531682b502 /engines/scumm/imuse_digi
parent4eef7a42e3f45a18a57674898f5fb5409f6daf5d (diff)
downloadscummvm-rg350-1e23d43006705a1d25e04d9cc90674044789cb92.tar.gz
scummvm-rg350-1e23d43006705a1d25e04d9cc90674044789cb92.tar.bz2
scummvm-rg350-1e23d43006705a1d25e04d9cc90674044789cb92.zip
SCUMM: Silence GCC memset() warnings
Recent GCC versions complain if you memset() a class or struct that contain non-POD data types. Get around that by either initializing the object when created, or by adding a reset() method.
Diffstat (limited to 'engines/scumm/imuse_digi')
-rw-r--r--engines/scumm/imuse_digi/dimuse.cpp6
-rw-r--r--engines/scumm/imuse_digi/dimuse_script.cpp6
-rw-r--r--engines/scumm/imuse_digi/dimuse_track.cpp4
-rw-r--r--engines/scumm/imuse_digi/dimuse_track.h29
4 files changed, 36 insertions, 9 deletions
diff --git a/engines/scumm/imuse_digi/dimuse.cpp b/engines/scumm/imuse_digi/dimuse.cpp
index b6955212a9..de5b1634ed 100644
--- a/engines/scumm/imuse_digi/dimuse.cpp
+++ b/engines/scumm/imuse_digi/dimuse.cpp
@@ -55,7 +55,7 @@ IMuseDigital::IMuseDigital(ScummEngine_v7 *scumm, Audio::Mixer *mixer, int fps)
for (int l = 0; l < MAX_DIGITAL_TRACKS + MAX_DIGITAL_FADETRACKS; l++) {
_track[l] = new Track;
assert(_track[l]);
- memset(_track[l], 0, sizeof(Track));
+ _track[l]->reset();
_track[l]->trackId = l;
}
_vm->getTimerManager()->installTimerProc(timer_handler, 1000000 / _callbackFps, this, "IMuseDigital");
@@ -147,7 +147,7 @@ void IMuseDigital::saveLoadEarly(Common::Serializer &s) {
for (int l = 0; l < MAX_DIGITAL_TRACKS + MAX_DIGITAL_FADETRACKS; l++) {
Track *track = _track[l];
if (s.isLoading()) {
- memset(track, 0, sizeof(Track));
+ track->reset();
}
syncWithSerializer(s, *track);
if (s.isLoading()) {
@@ -210,7 +210,7 @@ void IMuseDigital::callback() {
// mark it as unused.
if (!track->stream) {
if (!_mixer->isSoundHandleActive(track->mixChanHandle))
- memset(track, 0, sizeof(Track));
+ track->reset();
continue;
}
diff --git a/engines/scumm/imuse_digi/dimuse_script.cpp b/engines/scumm/imuse_digi/dimuse_script.cpp
index 3913a1a1f0..8d1e7a4bfd 100644
--- a/engines/scumm/imuse_digi/dimuse_script.cpp
+++ b/engines/scumm/imuse_digi/dimuse_script.cpp
@@ -180,7 +180,7 @@ void IMuseDigital::flushTrack(Track *track) {
}
if (!_mixer->isSoundHandleActive(track->mixChanHandle)) {
- memset(track, 0, sizeof(Track));
+ track->reset();
}
}
@@ -191,7 +191,7 @@ void IMuseDigital::flushTracks() {
Track *track = _track[l];
if (track->used && track->toBeRemoved && !_mixer->isSoundHandleActive(track->mixChanHandle)) {
debug(5, "flushTracks() - soundId:%d", track->soundId);
- memset(track, 0, sizeof(Track));
+ track->reset();
}
}
}
@@ -438,7 +438,7 @@ void IMuseDigital::stopAllSounds() {
}
// Mark the track as unused
- memset(track, 0, sizeof(Track));
+ track->reset();
}
}
}
diff --git a/engines/scumm/imuse_digi/dimuse_track.cpp b/engines/scumm/imuse_digi/dimuse_track.cpp
index 28ad64670c..92ef823db1 100644
--- a/engines/scumm/imuse_digi/dimuse_track.cpp
+++ b/engines/scumm/imuse_digi/dimuse_track.cpp
@@ -67,7 +67,7 @@ int IMuseDigital::allocSlot(int priority) {
}
// Mark it as unused
- memset(track, 0, sizeof(Track));
+ track->reset();
debug(5, "IMuseDigital::allocSlot(): Removed sound %d from track %d", _track[trackId]->soundId, trackId);
} else {
@@ -93,7 +93,7 @@ void IMuseDigital::startSound(int soundId, const char *soundName, int soundType,
Track *track = _track[l];
// Reset the track
- memset(track, 0, sizeof(Track));
+ track->reset();
track->pan = 64;
track->vol = volume * 1000;
diff --git a/engines/scumm/imuse_digi/dimuse_track.h b/engines/scumm/imuse_digi/dimuse_track.h
index ef0a8adb21..9f62fe95b9 100644
--- a/engines/scumm/imuse_digi/dimuse_track.h
+++ b/engines/scumm/imuse_digi/dimuse_track.h
@@ -75,7 +75,34 @@ struct Track {
Audio::SoundHandle mixChanHandle; // sound mixer's channel handle
Audio::QueuingAudioStream *stream; // sound mixer's audio stream handle for *.la1 and *.bun
- Track() : soundId(-1), used(false), stream(NULL) {
+ Track() : soundId(-1), used(false), stream(nullptr) {
+ }
+
+ void reset() {
+ trackId = 0;
+ pan = 0;
+ vol = 0;
+ volFadeDest = 0;
+ volFadeStep = 0;
+ volFadeDelay = 0;
+ volFadeUsed = false;
+ soundId = 0;
+ memset(soundName, 0, sizeof(soundName));
+ used = false;
+ toBeRemoved = false;
+ souStreamUsed = false;
+ sndDataExtComp = false;
+ soundPriority = 0;
+ regionOffset = 0;
+ dataOffset = 0;
+ curRegion = 0;
+ curHookId = 0;
+ soundType = 0;
+ feedSize = 0;
+ dataMod12Bit = 0;
+ mixerFlags = 0;
+ soundDesc = nullptr;
+ stream = nullptr;
}
int getPan() const { return (pan != 64) ? 2 * pan - 127 : 0; }