]> git.nihav.org Git - nihav.git/blobdiff - nihav-duck/src/codecs/vp78.rs
avimux: do not record palette change chunks in OpenDML index
[nihav.git] / nihav-duck / src / codecs / vp78.rs
index 5f50e661f7c1333e3c1c129e15f03b20e1aafc51..e7546fe88b90f2f706fc7961ecae57e880769959 100644 (file)
@@ -25,8 +25,9 @@ impl<'a> VPTreeReader for BoolCoder<'a> {
 }
 
 #[repr(u8)]
-#[derive(Clone,Copy,PartialEq,Debug)]
+#[derive(Clone,Copy,PartialEq,Debug,Default)]
 pub enum PredMode {
+    #[default]
     DCPred,
     HPred,
     VPred,
@@ -44,10 +45,6 @@ pub enum PredMode {
     Inter,
 }
 
-impl Default for PredMode {
-    fn default() -> Self { PredMode::DCPred }
-}
-
 impl PredMode {
     pub fn to_b_mode(self) -> Self {
         if self == PredMode::DCPred {
@@ -74,6 +71,7 @@ impl PredMode {
 }
 
 #[derive(Clone,Copy,PartialEq)]
+#[allow(clippy::upper_case_acronyms)]
 pub enum DCTToken {
     Zero,
     One,
@@ -90,21 +88,20 @@ pub enum DCTToken {
 }
 
 pub fn expand_token(bc: &mut BoolCoder, token: DCTToken) -> i16 {
-    let cat;
-    match token {
-        DCTToken::Zero  => return 0,
-        DCTToken::One   => return if bc.read_bool() { -1 } else { 1 },
-        DCTToken::Two   => return if bc.read_bool() { -2 } else { 2 },
-        DCTToken::Three => return if bc.read_bool() { -3 } else { 3 },
-        DCTToken::Four  => return if bc.read_bool() { -4 } else { 4 },
-        DCTToken::Cat1  => cat = 0,
-        DCTToken::Cat2  => cat = 1,
-        DCTToken::Cat3  => cat = 2,
-        DCTToken::Cat4  => cat = 3,
-        DCTToken::Cat5  => cat = 4,
-        DCTToken::Cat6  => cat = 5,
-        _ => unreachable!(),
-    };
+    let cat = match token {
+            DCTToken::Zero  => return 0,
+            DCTToken::One   => return if bc.read_bool() { -1 } else { 1 },
+            DCTToken::Two   => return if bc.read_bool() { -2 } else { 2 },
+            DCTToken::Three => return if bc.read_bool() { -3 } else { 3 },
+            DCTToken::Four  => return if bc.read_bool() { -4 } else { 4 },
+            DCTToken::Cat1  => 0,
+            DCTToken::Cat2  => 1,
+            DCTToken::Cat3  => 2,
+            DCTToken::Cat4  => 3,
+            DCTToken::Cat5  => 4,
+            DCTToken::Cat6  => 5,
+            _ => unreachable!(),
+        };
     let mut add = 0i16;
     let add_probs = &VP56_COEF_ADD_PROBS[cat];
     for prob in add_probs.iter() {
@@ -182,6 +179,12 @@ impl PredCache {
         self.v_pred.update_row();
         self.y2_pred.update_row();
     }
+    pub fn reset_left(&mut self) {
+        self.y_pred_left = [0; 4];
+        self.u_pred_left = [0; 2];
+        self.v_pred_left = [0; 2];
+        self.y2_pred_left = 0;
+    }
 }
 
 pub const Y_MODE_TREE: &[VPTreeDef<PredMode>] = &[