From f6aa8d00689b4f4d4f3c3cf840efc1a4eb460aaf Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Tue, 9 Feb 2010 21:51:47 +0000 Subject: Fix SubLoopingAudioStream's readBuffer implementation. svn-id: r48018 --- sound/audiostream.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/sound/audiostream.cpp b/sound/audiostream.cpp index 763b8eb887..57db44de1f 100644 --- a/sound/audiostream.cpp +++ b/sound/audiostream.cpp @@ -180,11 +180,14 @@ SubLoopingAudioStream::~SubLoopingAudioStream() { } int SubLoopingAudioStream::readBuffer(int16 *buffer, const int numSamples) { + if (_done) + return 0; + int framesLeft = MIN(_loopEnd.frameDiff(_pos), numSamples); int framesRead = _parent->readBuffer(buffer, framesLeft); _pos = _pos.addFrames(framesRead); - if (framesLeft < numSamples || framesRead < framesLeft) { + if (_pos == _loopEnd) { if (_loops != 0) { --_loops; if (!_loops) { @@ -200,13 +203,10 @@ int SubLoopingAudioStream::readBuffer(int16 *buffer, const int numSamples) { _pos = _loopStart; framesLeft = numSamples - framesLeft; - framesRead += _parent->readBuffer(buffer + framesRead, framesLeft); - - if (_parent->endOfStream()) - _done = true; + return framesRead + readBuffer(buffer + framesRead, framesLeft); + } else { + return framesRead; } - - return framesRead; } #pragma mark - -- cgit v1.2.3