[Scummvm-cvs-logs] SF.net SVN: scummvm: [25928] scummvm/trunk/engines/scumm/imuse_digi
eriktorbjorn at users.sourceforge.net
eriktorbjorn at users.sourceforge.net
Fri Mar 2 18:30:30 CET 2007
Revision: 25928
http://scummvm.svn.sourceforge.net/scummvm/?rev=25928&view=rev
Author: eriktorbjorn
Date: 2007-03-02 09:30:29 -0800 (Fri, 02 Mar 2007)
Log Message:
-----------
Applied my own patch #1672572, after discussing it with Fingolfin. We no longer
store mixer flags in our savegames. Instead, we store different flags which
just happen to have the exact same values as the mixer flags have right now.
This should keep savegames working even if the mixer flags ever change.
Modified Paths:
--------------
scummvm/trunk/engines/scumm/imuse_digi/dimuse.cpp
scummvm/trunk/engines/scumm/imuse_digi/dimuse.h
scummvm/trunk/engines/scumm/imuse_digi/dimuse_track.cpp
Modified: scummvm/trunk/engines/scumm/imuse_digi/dimuse.cpp
===================================================================
--- scummvm/trunk/engines/scumm/imuse_digi/dimuse.cpp 2007-03-02 15:34:22 UTC (rev 25927)
+++ scummvm/trunk/engines/scumm/imuse_digi/dimuse.cpp 2007-03-02 17:30:29 UTC (rev 25928)
@@ -76,6 +76,21 @@
free(_audioNames);
}
+int32 IMuseDigital::makeMixerFlags(int32 flags) {
+ int32 mixerFlags = 0;
+ if (flags & kFlagUnsigned)
+ mixerFlags |= Audio::Mixer::FLAG_UNSIGNED;
+ if (flags & kFlag16Bits)
+ mixerFlags |= Audio::Mixer::FLAG_16BITS;
+ if (flags & kFlagLittleEndian)
+ mixerFlags |= Audio::Mixer::FLAG_LITTLE_ENDIAN;
+ if (flags & kFlagStereo)
+ mixerFlags |= Audio::Mixer::FLAG_STEREO;
+ if (flags & kFlagReverseStereo)
+ mixerFlags |= Audio::Mixer::FLAG_REVERSE_STEREO;
+ return mixerFlags;
+}
+
void IMuseDigital::resetState() {
_curMusicState = 0;
_curMusicSeq = 0;
@@ -122,7 +137,7 @@
MKLINE(Track, soundType, sleInt32, VER(31)),
MKLINE(Track, iteration, sleInt32, VER(31)),
MKLINE(Track, mod, sleInt32, VER(31)),
- MKLINE(Track, mixerFlags, sleInt32, VER(31)),
+ MKLINE(Track, flags, sleInt32, VER(31)),
MK_OBSOLETE(Track, mixerVol, sleInt32, VER(31), VER(42)),
MK_OBSOLETE(Track, mixerPan, sleInt32, VER(31), VER(42)),
MKLINE(Track, compressed, sleByte, VER(45)),
@@ -171,25 +186,25 @@
int channels = _sound->getChannels(track->soundHandle);
int freq = _sound->getFreq(track->soundHandle);
track->iteration = freq * channels;
- track->mixerFlags = 0;
+ track->flags = 0;
if (channels == 2)
- track->mixerFlags = Audio::Mixer::FLAG_STEREO | Audio::Mixer::FLAG_REVERSE_STEREO;
+ track->flags = kFlagStereo | kFlagReverseStereo;
if ((bits == 12) || (bits == 16)) {
- track->mixerFlags |= Audio::Mixer::FLAG_16BITS;
+ track->flags |= kFlag16Bits;
track->iteration *= 2;
} else if (bits == 8) {
- track->mixerFlags |= Audio::Mixer::FLAG_UNSIGNED;
+ track->flags |= kFlagUnsigned;
} else
error("IMuseDigital::saveOrLoad(): Can't handle %d bit samples", bits);
#ifdef SCUMM_LITTLE_ENDIAN
if (track->compressed)
- track->mixerFlags |= Audio::Mixer::FLAG_LITTLE_ENDIAN;
+ track->flags |= kFlagLittleEndian;
#endif
track->stream2 = NULL;
- track->stream = Audio::makeAppendableAudioStream(freq, track->mixerFlags);
+ track->stream = Audio::makeAppendableAudioStream(freq, makeMixerFlags(track->flags));
const int pan = (track->pan != 64) ? 2 * track->pan - 127 : 0;
const int vol = track->vol / 1000;
Modified: scummvm/trunk/engines/scumm/imuse_digi/dimuse.h
===================================================================
--- scummvm/trunk/engines/scumm/imuse_digi/dimuse.h 2007-03-02 15:34:22 UTC (rev 25927)
+++ scummvm/trunk/engines/scumm/imuse_digi/dimuse.h 2007-03-02 17:30:29 UTC (rev 25928)
@@ -44,6 +44,23 @@
class Serializer;
class ScummEngine_v7;
+// These flag bits correspond exactly to the sound mixer flags of March 2007.
+// We don't want to use the mixer flags directly, because then our saved games
+// will break in interesting ways if the mixer flags are ever assigned new
+// values. Now they should keep working, as long as these flags don't change.
+
+enum {
+ kFlagUnsigned = 1 << 0,
+ kFlag16Bits = 1 << 1,
+ kFlagLittleEndian = 1 << 2,
+ kFlagStereo = 1 << 3,
+ kFlagReverseStereo = 1 << 4
+
+ // Not used by Digital iMUSE
+ // kFlagAutoFree = 1 << 5,
+ // kFlagLoop = 1 << 6
+};
+
class IMuseDigital : public MusicEngine {
private:
@@ -76,7 +93,7 @@
int32 soundType;
int32 iteration;
int32 mod;
- int32 mixerFlags;
+ int32 flags;
ImuseDigiSndMgr::soundStruct *soundHandle;
Audio::SoundHandle handle;
@@ -104,6 +121,7 @@
int32 _curMusicSeq;
int32 _curMusicCue;
+ int32 makeMixerFlags(int32 flags);
static void timer_handler(void *refConf);
void callback();
void switchToNextRegion(Track *track);
Modified: scummvm/trunk/engines/scumm/imuse_digi/dimuse_track.cpp
===================================================================
--- scummvm/trunk/engines/scumm/imuse_digi/dimuse_track.cpp 2007-03-02 15:34:22 UTC (rev 25927)
+++ scummvm/trunk/engines/scumm/imuse_digi/dimuse_track.cpp 2007-03-02 17:30:29 UTC (rev 25928)
@@ -103,7 +103,7 @@
track->dataOffset = 0;
track->regionOffset = 0;
track->mod = 0;
- track->mixerFlags = 0;
+ track->flags = 0;
track->toBeRemoved = false;
track->readyToRemove = false;
track->soundType = soundType;
@@ -143,19 +143,19 @@
track->iteration = freq * channels;
if (channels == 2)
- track->mixerFlags = Audio::Mixer::FLAG_STEREO | Audio::Mixer::FLAG_REVERSE_STEREO;
+ track->flags = kFlagStereo | kFlagReverseStereo;
if ((bits == 12) || (bits == 16)) {
- track->mixerFlags |= Audio::Mixer::FLAG_16BITS;
+ track->flags |= kFlag16Bits;
track->iteration *= 2;
} else if (bits == 8) {
- track->mixerFlags |= Audio::Mixer::FLAG_UNSIGNED;
+ track->flags |= kFlagUnsigned;
} else
error("IMuseDigital::startSound(): Can't handle %d bit samples", bits);
#ifdef SCUMM_LITTLE_ENDIAN
if (track->compressed)
- track->mixerFlags |= Audio::Mixer::FLAG_LITTLE_ENDIAN;
+ track->flags |= kFlagLittleEndian;
#endif
}
@@ -177,7 +177,7 @@
// setup 1 second stream wrapped buffer
track->stream2 = NULL;
- track->stream = Audio::makeAppendableAudioStream(freq, track->mixerFlags);
+ track->stream = Audio::makeAppendableAudioStream(freq, makeMixerFlags(track->flags));
_mixer->playInputStream(type, &track->handle, track->stream, -1, vol, pan, false);
track->started = true;
}
@@ -328,7 +328,7 @@
fadeTrack->curRegion = track->curRegion;
fadeTrack->curHookId = track->curHookId;
fadeTrack->iteration = track->iteration;
- fadeTrack->mixerFlags = track->mixerFlags;
+ fadeTrack->flags = track->flags;
fadeTrack->mod = track->mod;
fadeTrack->toBeRemoved = track->toBeRemoved;
fadeTrack->readyToRemove = track->readyToRemove;
@@ -355,7 +355,7 @@
type = Audio::Mixer::kMusicSoundType;
// setup 1 second stream wrapped buffer
- fadeTrack->stream = Audio::makeAppendableAudioStream(_sound->getFreq(fadeTrack->soundHandle), fadeTrack->mixerFlags);
+ fadeTrack->stream = Audio::makeAppendableAudioStream(_sound->getFreq(fadeTrack->soundHandle), makeMixerFlags(fadeTrack->flags));
_mixer->playInputStream(type, &fadeTrack->handle, fadeTrack->stream, -1, fadeTrack->vol / 1000, fadeTrack->pan, false);
fadeTrack->started = true;
fadeTrack->used = true;
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