aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sound/audiostream.cpp37
1 files changed, 9 insertions, 28 deletions
diff --git a/sound/audiostream.cpp b/sound/audiostream.cpp
index 0312992802..5a25d61468 100644
--- a/sound/audiostream.cpp
+++ b/sound/audiostream.cpp
@@ -150,7 +150,6 @@ inline int16 WrappedMemoryStream<stereo, is16Bit, isUnsigned>::readIntern() {
template<bool stereo, bool is16Bit, bool isUnsigned>
int WrappedMemoryStream<stereo, is16Bit, isUnsigned>::readBuffer(int16 *buffer, int numSamples) {
int samples = 0;
-#if 1
while (samples < numSamples && !eosIntern()) {
const byte *endMarker = (_pos > _end) ? _bufferEnd : _end;
const int len = MIN(numSamples, (endMarker - _pos) / (is16Bit ? 2 : 1));
@@ -163,11 +162,6 @@ int WrappedMemoryStream<stereo, is16Bit, isUnsigned>::readBuffer(int16 *buffer,
if (_pos >= _bufferEnd)
_pos = _pos - (_bufferEnd - _bufferStart);
}
-#else
- for (samples = 0; samples < numSamples && !eosIntern(); samples++) {
- *buffer++ = readIntern();
- }
-#endif
return samples;
}
@@ -414,9 +408,7 @@ inline int16 MP3InputStream::readIntern() {
int MP3InputStream::readBuffer(int16 *buffer, int numSamples) {
int samples = 0;
-#if 1
- if (_isStereo)
- assert(_curChannel == 0);
+ assert(_curChannel == 0); // Paranoia check
while (samples < numSamples && !eosIntern()) {
const int len = MIN(numSamples, (int)(_synth.pcm.length - _posInFrame) * (_isStereo ? 2 : 1));
while (samples < len) {
@@ -432,11 +424,6 @@ int MP3InputStream::readBuffer(int16 *buffer, int numSamples) {
refill();
}
}
-#else
- for (samples = 0; samples < numSamples && !eosIntern(); samples++) {
- *buffer++ = readIntern();
- }
-#endif
return samples;
}
@@ -460,7 +447,8 @@ class VorbisInputStream : public MusicStream {
bool _eofFlag;
int _numChannels;
int16 _buffer[4096];
- int16 *_pos;
+ const int16 * const _bufferEnd;
+ const int16 *_pos;
void refill();
inline int16 readIntern();
@@ -483,8 +471,8 @@ public:
VorbisInputStream::VorbisInputStream(OggVorbis_File *file, int duration)
- : _ov_file(file) {
- _pos = _buffer + ARRAYSIZE(_buffer);
+ : _ov_file(file), _bufferEnd(_buffer + ARRAYSIZE(_buffer)) {
+ _pos = _bufferEnd;
_numChannels = ov_info(_ov_file, -1)->channels;
if (duration)
@@ -496,7 +484,7 @@ VorbisInputStream::VorbisInputStream(OggVorbis_File *file, int duration)
}
inline int16 VorbisInputStream::readIntern() {
- if (_pos >= _buffer + ARRAYSIZE(_buffer)) {
+ if (_pos >= _bufferEnd) {
refill();
}
return *_pos++;
@@ -505,30 +493,23 @@ inline int16 VorbisInputStream::readIntern() {
inline bool VorbisInputStream::eosIntern() const {
if (_eofFlag)
return true;
- if (_pos < _buffer + ARRAYSIZE(_buffer))
+ if (_pos < _bufferEnd)
return false;
return (_end_pos <= ov_pcm_tell(_ov_file));
}
int VorbisInputStream::readBuffer(int16 *buffer, int numSamples) {
int samples = 0;
-#if 1
- const int16 * const bufferEnd = _buffer + ARRAYSIZE(_buffer);
while (samples < numSamples && !eosIntern()) {
- if (_pos >= bufferEnd) {
+ if (_pos >= _bufferEnd) {
refill();
}
- const int len = MIN(numSamples, bufferEnd - _pos);
+ const int len = MIN(numSamples, _bufferEnd - _pos);
memcpy(buffer, _pos, len * 2);
buffer += len;
_pos += len;
samples += len;
}
-#else
- for (; samples < numSamples && !eosIntern(); samples++) {
- *buffer++ = readIntern();
- }
-#endif
return samples;
}