aboutsummaryrefslogtreecommitdiff
path: root/sound/audiostream.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sound/audiostream.cpp')
-rw-r--r--sound/audiostream.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/sound/audiostream.cpp b/sound/audiostream.cpp
index 4363de3749..d0711266b1 100644
--- a/sound/audiostream.cpp
+++ b/sound/audiostream.cpp
@@ -200,13 +200,24 @@ int LinearMemoryStream<stereo, is16Bit, isUnsigned, isLE>::readBuffer(int16 *buf
} else \
return new LinearMemoryStream<STEREO, false, UNSIGNED, false>(rate, ptr, len, loopOffset, loopLen, autoFree)
-AudioStream *makeLinearInputStream(int rate, byte flags, const byte *ptr, uint32 len, uint loopOffset, uint loopLen) {
+AudioStream *makeLinearInputStream(const byte *ptr, uint32 len, int rate, byte flags, uint loopStart, uint loopEnd) {
const bool isStereo = (flags & Audio::Mixer::FLAG_STEREO) != 0;
const bool is16Bit = (flags & Audio::Mixer::FLAG_16BITS) != 0;
const bool isUnsigned = (flags & Audio::Mixer::FLAG_UNSIGNED) != 0;
const bool isLE = (flags & Audio::Mixer::FLAG_LITTLE_ENDIAN) != 0;
const bool autoFree = (flags & Audio::Mixer::FLAG_AUTOFREE) != 0;
+ uint loopOffset = 0, loopLen = 0;
+ if (flags & Audio::Mixer::FLAG_LOOP) {
+ if (loopEnd == 0)
+ loopEnd = len;
+ assert(loopStart <= loopEnd);
+ assert(loopEnd <= len);
+
+ loopOffset = loopStart;
+ loopLen = loopEnd - loopStart;
+ }
+
if (isStereo) {
if (isUnsigned) {
MAKE_LINEAR(true, true);