aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common/bitstream.h11
1 files changed, 8 insertions, 3 deletions
diff --git a/common/bitstream.h b/common/bitstream.h
index ae5677da1a..6b9ab97237 100644
--- a/common/bitstream.h
+++ b/common/bitstream.h
@@ -50,6 +50,7 @@ private:
uint32 _value; ///< Current value.
uint8 _inValue; ///< Position within the current value.
+ uint32 _size;
/** Read a data value. */
inline uint32 readData() {
@@ -75,7 +76,7 @@ private:
/** Read the next data value. */
inline void readValue() {
- if ((size() - pos()) < valueBits)
+ if ((_size - pos()) < valueBits)
error("BitStreamImpl::readValue(): End of bit stream reached");
_value = readData();
@@ -94,6 +95,8 @@ public:
if ((valueBits != 8) && (valueBits != 16) && (valueBits != 32))
error("BitStreamImpl: Invalid memory layout %d, %d, %d", valueBits, isLE, isMSB2LSB);
+
+ _size = (_stream->size() & ~((uint32) ((valueBits >> 3) - 1))) * 8;
}
/** Create a bit stream using this input data stream. */
@@ -102,6 +105,8 @@ public:
if ((valueBits != 8) && (valueBits != 16) && (valueBits != 32))
error("BitStreamImpl: Invalid memory layout %d, %d, %d", valueBits, isLE, isMSB2LSB);
+
+ _size = (_stream->size() & ~((uint32) ((valueBits >> 3) - 1))) * 8;
}
~BitStreamImpl() {
@@ -253,11 +258,11 @@ public:
/** Return the stream size in bits. */
uint32 size() const {
- return (_stream->size() & ~((uint32) ((valueBits >> 3) - 1))) * 8;
+ return _size;
}
bool eos() const {
- return _stream->eos() || (pos() >= size());
+ return _stream->eos() || (pos() >= _size);
}
};