check for missing reference frames in various decoders
[nihav.git] / nihav-commonfmt / src / codecs / clearvideo.rs
index 46cbb5435c406752b789fe231111a68a4c186feb..953e3c097004030ec5cfeab6943c6bdc48c6a029 100644 (file)
@@ -683,7 +683,9 @@ impl NADecoder for ClearVideoDecoder {
             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);
@@ -698,6 +700,9 @@ impl NADecoder for ClearVideoDecoder {
         }
         Ok(frm.into_ref())
     }
+    fn flush(&mut self) {
+        self.frmmgr.clear();
+    }
 }
 
 pub fn get_decoder() -> Box<dyn NADecoder> {
@@ -815,17 +820,6 @@ const CLV_AC_BITS: &[u8] = &[
 
 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] = &[