aboutsummaryrefslogtreecommitdiff
path: root/sound
diff options
context:
space:
mode:
authorPaweł Kołodziejski2004-04-26 20:48:09 +0000
committerPaweł Kołodziejski2004-04-26 20:48:09 +0000
commitd2fa7bbcc7f836406fa69028f58fb6e61d8901bc (patch)
treeca7e90b017deeaf72d1338528a1a6776f48fb3c6 /sound
parentf7084c20e95ecb1fa508d0690eaf74e1c566f528 (diff)
downloadscummvm-rg350-d2fa7bbcc7f836406fa69028f58fb6e61d8901bc.tar.gz
scummvm-rg350-d2fa7bbcc7f836406fa69028f58fb6e61d8901bc.tar.bz2
scummvm-rg350-d2fa7bbcc7f836406fa69028f58fb6e61d8901bc.zip
synced code free space with buffer changes
svn-id: r13646
Diffstat (limited to 'sound')
-rw-r--r--sound/audiostream.cpp32
1 files changed, 21 insertions, 11 deletions
diff --git a/sound/audiostream.cpp b/sound/audiostream.cpp
index 02889fc714..26d7892e07 100644
--- a/sound/audiostream.cpp
+++ b/sound/audiostream.cpp
@@ -198,8 +198,10 @@ protected:
byte *_end;
bool _finalized;
const int _rate;
+ uint32 _freeSpace;
inline bool eosIntern() const { return _end == _pos; };
+ void updateFreeSpace();
public:
AppendableMemoryStream(int rate, uint bufferSize);
~AppendableMemoryStream() { free(_bufferStart); }
@@ -217,6 +219,16 @@ public:
uint32 getFreeSpace();
};
+template<bool stereo, bool is16Bit, bool isUnsigned>
+void AppendableMemoryStream<stereo, is16Bit, isUnsigned>::updateFreeSpace() {
+ if (_pos <= _end) {
+ uint32 free_from_end = _bufferEnd - _end;
+ uint32 free_to_pos = _pos - _bufferStart;
+ _freeSpace = free_from_end + free_to_pos;
+ } else {
+ _freeSpace = _pos - _end;
+ }
+}
template<bool stereo, bool is16Bit, bool isUnsigned>
AppendableMemoryStream<stereo, is16Bit, isUnsigned>::AppendableMemoryStream(int rate, uint bufferSize)
@@ -231,6 +243,8 @@ AppendableMemoryStream<stereo, is16Bit, isUnsigned>::AppendableMemoryStream(int
_bufferStart = (byte *)malloc(bufferSize);
_pos = _end = _bufferStart;
_bufferEnd = _bufferStart + bufferSize;
+
+ updateFreeSpace();
}
template<bool stereo, bool is16Bit, bool isUnsigned>
@@ -244,6 +258,8 @@ inline int16 AppendableMemoryStream<stereo, is16Bit, isUnsigned>::read() {
int16 val = READSAMPLE(is16Bit, isUnsigned, _pos);
_pos += (is16Bit ? 2 : 1);
+ updateFreeSpace();
+
return val;
}
@@ -263,6 +279,9 @@ int AppendableMemoryStream<stereo, is16Bit, isUnsigned>::readBuffer(int16 *buffe
samples++;
}
}
+
+ updateFreeSpace();
+
return samples;
}
@@ -297,21 +316,12 @@ void AppendableMemoryStream<stereo, is16Bit, isUnsigned>::append(const byte *dat
memcpy(_end, data, len);
_end += len;
}
+ updateFreeSpace();
}
template<bool stereo, bool is16Bit, bool isUnsigned>
uint32 AppendableMemoryStream<stereo, is16Bit, isUnsigned>::getFreeSpace() {
- uint32 free;
-
- if (_pos <= _end) {
- uint32 free_from_end = _bufferEnd - _end;
- uint32 free_to_pos = _pos - _bufferStart;
- free = free_from_end + free_to_pos;
- } else {
- free = _pos - _end;
- }
-
- return free;
+ return _freeSpace;
}
#pragma mark -