From d2fa7bbcc7f836406fa69028f58fb6e61d8901bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Ko=C5=82odziejski?= Date: Mon, 26 Apr 2004 20:48:09 +0000 Subject: [PATCH] synced code free space with buffer changes svn-id: r13646 --- sound/audiostream.cpp | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/sound/audiostream.cpp b/sound/audiostream.cpp index 02889fc7140..26d7892e074 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 +void AppendableMemoryStream::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 AppendableMemoryStream::AppendableMemoryStream(int rate, uint bufferSize) @@ -231,6 +243,8 @@ AppendableMemoryStream::AppendableMemoryStream(int _bufferStart = (byte *)malloc(bufferSize); _pos = _end = _bufferStart; _bufferEnd = _bufferStart + bufferSize; + + updateFreeSpace(); } template @@ -244,6 +258,8 @@ inline int16 AppendableMemoryStream::read() { int16 val = READSAMPLE(is16Bit, isUnsigned, _pos); _pos += (is16Bit ? 2 : 1); + updateFreeSpace(); + return val; } @@ -263,6 +279,9 @@ int AppendableMemoryStream::readBuffer(int16 *buffe samples++; } } + + updateFreeSpace(); + return samples; } @@ -297,21 +316,12 @@ void AppendableMemoryStream::append(const byte *dat memcpy(_end, data, len); _end += len; } + updateFreeSpace(); } template uint32 AppendableMemoryStream::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 -