BitReader{ cache: 0, pos: 0, bits: 0, src, mode }
}
+ /// Returns the data bitstream reader uses.
+ pub fn get_data(&self) -> &'a [u8] { self.src }
+
/// Reports the current bit position in the bitstream (usually simply the number of bits read so far).
pub fn tell(&self) -> usize {
self.pos * 8 - (self.bits as usize)
if nbits == 0 { return Ok(0) }
if nbits > 32 { return Err(TooManyBitsRequested) }
if self.bits < nbits {
- if let Err(err) = self.refill() { return Err(err) }
+ self.refill()?;
if self.bits < nbits { return Err(BitstreamEnd) }
}
let res = self.read_cache(nbits);
pub fn read_s(&mut self, nbits: u8) -> BitReaderResult<i32> {
if nbits == 0 || nbits > 32 { return Err(TooManyBitsRequested) }
if self.bits < nbits {
- if let Err(err) = self.refill() { return Err(err) }
+ self.refill()?;
if self.bits < nbits { return Err(BitstreamEnd) }
}
let res = self.read_cache_s(nbits);
#[inline(always)]
pub fn read_bool(&mut self) -> BitReaderResult<bool> {
if self.bits < 1 {
- if let Err(err) = self.refill() { return Err(err) }
+ self.refill()?;
if self.bits < 1 { return Err(BitstreamEnd) }
}
let res = self.read_cache(1);
self.reset_cache();
self.pos += ((skip_bits / 32) * 4) as usize;
skip_bits &= 0x1F;
- self.refill()?;
if skip_bits > 0 {
+ self.refill()?;
+ if u32::from(self.bits) < skip_bits {
+ return Err(BitstreamEnd);
+ }
self.skip_cache(skip_bits as u8);
}
Ok(())