self.decode_frame_intra(&mut br, &mut buf, vinfo.get_width(), vinfo.get_height())?;
extend_edges(&mut buf, 1 << self.tsize);
} else {
- let mut prev = self.frmmgr.clone_ref().unwrap();
+ let pref = self.frmmgr.clone_ref();
+ if pref.is_none() { return Err(DecoderError::MissingReference); }
+ let mut prev = pref.unwrap();
extend_edges(&mut prev, 1 << self.tsize);
self.decode_frame_inter(&mut br, &mut buf, &mut prev, vinfo.get_width(), vinfo.get_height())?;
extend_edges(&mut buf, 1 << self.tsize);
}
Ok(frm.into_ref())
}
+ fn flush(&mut self) {
+ self.frmmgr.clear();
+ }
}
-pub fn get_decoder() -> Box<dyn NADecoder> {
+pub fn get_decoder() -> Box<dyn NADecoder + Send> {
Box::new(ClearVideoDecoder::new(false))
}
-pub fn get_decoder_rm() -> Box<dyn NADecoder> {
+pub fn get_decoder_rm() -> Box<dyn NADecoder + Send> {
Box::new(ClearVideoDecoder::new(true))
}
const CLV_AC_ESCAPE: u16 = 0x1BFF;
-const ZIGZAG: &[usize] = &[
- 0, 1, 8, 16, 9, 2, 3, 10,
- 17, 24, 32, 25, 18, 11, 4, 5,
- 12, 19, 26, 33, 40, 48, 41, 34,
- 27, 20, 13, 6, 7, 14, 21, 28,
- 35, 42, 49, 56, 57, 50, 43, 36,
- 29, 22, 15, 23, 30, 37, 44, 51,
- 58, 59, 52, 45, 38, 31, 39, 46,
- 53, 60, 61, 54, 47, 55, 62, 63
-];
-
const CLV_BIAS_ESCAPE: u16 = 0x100;
const CLV_MVY_0_BITS: &[u8] = &[