X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-duck%2Fsrc%2Fcodecs%2Fvpcommon.rs;h=d1f6d446266041824673c6ff41de987c032d43a0;hb=503368d15e17aa865c8abc6ebcc2943ad822867b;hp=0392a383b5248a4647e3b734b43534668e07c4f2;hpb=3584b223ce417fe167dc90cb9a40e173f34823c0;p=nihav.git diff --git a/nihav-duck/src/codecs/vpcommon.rs b/nihav-duck/src/codecs/vpcommon.rs index 0392a38..d1f6d44 100644 --- a/nihav-duck/src/codecs/vpcommon.rs +++ b/nihav-duck/src/codecs/vpcommon.rs @@ -68,8 +68,21 @@ impl VPShuffler { None } } + pub fn has_refs(&self) -> bool { + self.lastframe.is_some() + } } +pub const VP56_COEF_BASE: [i16; 6] = [ 5, 7, 11, 19, 35, 67 ]; +pub const VP56_COEF_ADD_PROBS: [[u8; 12]; 6] = [ + [ 159, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], + [ 165, 145, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], + [ 173, 148, 140, 128, 0, 0, 0, 0, 0, 0, 0, 0 ], + [ 176, 155, 140, 135, 128, 0, 0, 0, 0, 0, 0, 0 ], + [ 180, 157, 141, 134, 130, 128, 0, 0, 0, 0, 0, 0 ], + [ 254, 254, 243, 230, 196, 177, 153, 140, 133, 130, 129, 128 ], +]; + #[allow(dead_code)] pub struct BoolCoder<'a> { pub src: &'a [u8], @@ -110,6 +123,20 @@ impl<'a> BoolCoder<'a> { } val } + pub fn read_byte(&mut self) -> u8 { + let mut val = 0u8; + for _ in 0..8 { + val = (val << 1) | (self.read_prob(128) as u8); + } + val + } + pub fn read_sbits(&mut self, bits: u8) -> i32 { + let mut val = if self.read_prob(128) { -1i32 } else { 0i32 }; + for _ in 1..bits { + val = (val << 1) | (self.read_prob(128) as i32); + } + val + } pub fn read_probability(&mut self) -> u8 { let val = self.read_bits(7) as u8; if val == 0 {