From ae7421ae2b4cd7817fdf0d25d8c8dcb35a84946c Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Sat, 9 Oct 2004 22:51:00 +0000 Subject: Make AppendableAudioStream endianness-aware. svn-id: r15491 --- sound/audiostream.cpp | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) (limited to 'sound') diff --git a/sound/audiostream.cpp b/sound/audiostream.cpp index 5714623a13..6fc99cc4f0 100644 --- a/sound/audiostream.cpp +++ b/sound/audiostream.cpp @@ -193,7 +193,7 @@ int LinearMemoryStream::readBuffer(int16 *buf /** * Wrapped memory stream. */ -template +template class AppendableMemoryStream : public AppendableAudioStream { protected: byte *_bufferStart; @@ -220,8 +220,8 @@ public: void finish() { _finalized = true; } }; -template -AppendableMemoryStream::AppendableMemoryStream(int rate, uint bufferSize) +template +AppendableMemoryStream::AppendableMemoryStream(int rate, uint bufferSize) : _finalized(false), _rate(rate) { // Verify the buffer size is sane @@ -235,22 +235,22 @@ AppendableMemoryStream::AppendableMemoryStream(int _bufferEnd = _bufferStart + bufferSize; } -template -inline int16 AppendableMemoryStream::read() { +template +inline int16 AppendableMemoryStream::read() { assert(!eosIntern()); // Wrap around? if (_pos >= _bufferEnd) _pos = _pos - (_bufferEnd - _bufferStart); - int16 val = READSAMPLE(is16Bit, isUnsigned, _pos); + int16 val = READ_ENDIAN_SAMPLE(is16Bit, isUnsigned, _pos, isLE); _pos += (is16Bit ? 2 : 1); return val; } -template -int AppendableMemoryStream::readBuffer(int16 *buffer, const int numSamples) { +template +int AppendableMemoryStream::readBuffer(int16 *buffer, const int numSamples) { int samples = 0; while (samples < numSamples && !eosIntern()) { // Wrap around? @@ -260,7 +260,7 @@ int AppendableMemoryStream::readBuffer(int16 *buffe const byte *endMarker = (_pos > _end) ? _bufferEnd : _end; const int len = MIN(numSamples, samples + (int)(endMarker - _pos) / (is16Bit ? 2 : 1)); while (samples < len) { - *buffer++ = READSAMPLE(is16Bit, isUnsigned, _pos); + *buffer++ = READ_ENDIAN_SAMPLE(is16Bit, isUnsigned, _pos, isLE); _pos += (is16Bit ? 2 : 1); samples++; } @@ -269,8 +269,8 @@ int AppendableMemoryStream::readBuffer(int16 *buffe return samples; } -template -void AppendableMemoryStream::append(const byte *data, uint32 len) { +template +void AppendableMemoryStream::append(const byte *data, uint32 len) { // Verify the buffer size is sane if (is16Bit && stereo) @@ -384,15 +384,19 @@ AudioStream *makeLinearInputStream(int rate, byte _flags, const byte *ptr, uint3 } #define MAKE_WRAPPED(STEREO, UNSIGNED) \ - if (is16Bit) \ - return new AppendableMemoryStream(rate, len); \ - else \ - return new AppendableMemoryStream(rate, len) + if (is16Bit) { \ + if (isLE) \ + return new AppendableMemoryStream(rate, len); \ + else \ + return new AppendableMemoryStream(rate, len); \ + } else \ + return new AppendableMemoryStream(rate, len) AppendableAudioStream *makeAppendableAudioStream(int rate, byte _flags, uint32 len) { const bool isStereo = (_flags & SoundMixer::FLAG_STEREO) != 0; const bool is16Bit = (_flags & SoundMixer::FLAG_16BITS) != 0; const bool isUnsigned = (_flags & SoundMixer::FLAG_UNSIGNED) != 0; + const bool isLE = (_flags & SoundMixer::FLAG_LITTLE_ENDIAN) != 0; if (isStereo) { if (isUnsigned) { -- cgit v1.2.3