}
}
+// Special version that assumes br->pos_ <= br_len_.
+static int IsEndOfStreamSpecial(const VP8LBitReader* const br) {
+ assert(br->pos_ <= br->len_);
+ return br->pos_ == br->len_ && br->bit_pos_ >= LBITS;
+}
+
+static int IsEndOfStream(const VP8LBitReader* const br) {
+ return (br->pos_ > br->len_) || IsEndOfStreamSpecial(br);
+}
+
void VP8LBitReaderSetBuffer(VP8LBitReader* const br,
const uint8_t* const buf, size_t len) {
assert(br != NULL);
assert(buf != NULL);
assert(len < 0xfffffff8u); // can't happen with a RIFF chunk.
- br->eos_ = (br->pos_ >= len);
br->buf_ = buf;
br->len_ = len;
+ br->eos_ = IsEndOfStream(br);
}
// If not at EOS, reload up to LBITS byte-by-byte
}
#endif
ShiftBytes(br); // Slow path.
- if (br->pos_ == br->len_ && br->bit_pos_ >= LBITS) {
- br->eos_ = 1;
- }
+ br->eos_ = IsEndOfStreamSpecial(br);
}
}
const int new_bits = br->bit_pos_ + n_bits;
br->bit_pos_ = new_bits;
// If this read is going to cross the read buffer, set the eos flag.
- if (br->pos_ == br->len_) {
- if (new_bits >= LBITS) {
- br->eos_ = 1;
- }
- }
+ br->eos_ = IsEndOfStreamSpecial(br);
ShiftBytes(br);
return val;
} else {