fix clippy warnings
[nihav.git] / nihav-mpeg / src / codecs / aac / sbr / bs.rs
index 292a32af9243522a614a6f73a1283bd994f47b69..dbce7276c553aabf6c8de221087ec9fe03215b45 100644 (file)
@@ -107,14 +107,14 @@ fn read_grid(br: &mut BitReader, chan: &mut SBRChannel) -> DecoderResult<()> {
             for el in chan.freq_res[..chan.num_env].iter_mut() {
                 *el = freq_res;
             }
+            chan.env_border[0] = 0;
             if chan.num_env > 1 {
                 let delta = (MAX_SLOTS + chan.num_env / 2) / chan.num_env;
-                chan.env_border[0] = delta;
-                for i in 0..chan.num_env - 1 {
-                    chan.env_border[i + 1] = chan.env_border[i] + delta;
+                for i in 1..chan.num_env {
+                    chan.env_border[i] = chan.env_border[i - 1] + delta;
                 }
             }
-            chan.env_border[chan.num_env - 1] = MAX_SLOTS;
+            chan.env_border[chan.num_env] = MAX_SLOTS;
         },
         FrameClass::FixVar => {
             let var_bord_1              = br.read(2)? as u8;
@@ -129,9 +129,10 @@ fn read_grid(br: &mut BitReader, chan: &mut SBRChannel) -> DecoderResult<()> {
                 *el                 = br.read_bool()?;
             }
 
-            chan.env_border[chan.num_env - 1] = MAX_SLOTS + usize::from(var_bord_1);
+            chan.env_border[0] = 0;
+            chan.env_border[chan.num_env] = MAX_SLOTS + usize::from(var_bord_1);
             for (i, &delta) in (1..chan.num_env).rev().zip(rel_bord_1.iter()) {
-                chan.env_border[i - 1] = chan.env_border[i] - usize::from(delta);
+                chan.env_border[i] = chan.env_border[i + 1] - usize::from(delta);
             }
         },
         FrameClass::VarFix => {
@@ -147,18 +148,18 @@ fn read_grid(br: &mut BitReader, chan: &mut SBRChannel) -> DecoderResult<()> {
                 *el                 = br.read_bool()?;
             }
 
-            chan.env_border[0] = usize::from(var_bord_0 + rel_bord_0[0]);
-            for i in 1..chan.num_env {
-                chan.env_border[i] = chan.env_border[i - 1] + usize::from(rel_bord_0[i]);
+            chan.env_border[0] = usize::from(var_bord_0);
+            for i in 0..chan.num_env - 1 {
+                chan.env_border[i + 1] = chan.env_border[i] + usize::from(rel_bord_0[i]);
             }
-            chan.env_border[chan.num_env - 1] = MAX_SLOTS;
+            chan.env_border[chan.num_env] = MAX_SLOTS;
         },
         FrameClass::VarVar => {
             let var_bord_0          = br.read(2)? as u8;
             let var_bord_1          = br.read(2)? as u8;
             let num_rel_0           = br.read(2)? as usize;
             let num_rel_1           = br.read(2)? as usize;
-            chan.num_env = (num_rel_0 as usize) + (num_rel_1 as usize) + 1;
+            chan.num_env = num_rel_0 + num_rel_1 + 1;
             let mut rel_bord_0 = [0u8; NUM_ENVELOPES];
             let mut rel_bord_1 = [0u8; NUM_ENVELOPES];
             for el in rel_bord_0[..num_rel_0].iter_mut() {
@@ -173,37 +174,39 @@ fn read_grid(br: &mut BitReader, chan: &mut SBRChannel) -> DecoderResult<()> {
                 *el                 = br.read_bool()?;
             }
 
-            chan.env_border[0] = usize::from(var_bord_0 + rel_bord_0[0]);
-            for i in 1..=num_rel_0 {
-                chan.env_border[i] = chan.env_border[i - 1] + usize::from(rel_bord_0[i]);
+            chan.env_border[0] = usize::from(var_bord_0);
+            for i in 0..num_rel_0 {
+                chan.env_border[i + 1] = chan.env_border[i] + usize::from(rel_bord_0[i]);
             }
-            chan.env_border[chan.num_env - 1] = MAX_SLOTS + usize::from(var_bord_1);
+            chan.env_border[chan.num_env] = MAX_SLOTS + usize::from(var_bord_1);
             for i in 0..num_rel_1 {
-                chan.env_border[chan.num_env - 2 - i] = chan.env_border[chan.num_env - 1 - i] - usize::from(rel_bord_1[i]);
+                chan.env_border[chan.num_env - 1 - i] = chan.env_border[chan.num_env - i] - usize::from(rel_bord_1[i]);
             }
         },
     };
-    for i in 0..chan.num_env - 1 {
+    for i in 0..chan.num_env {
         validate!(chan.env_border[i] < chan.env_border[i + 1]);
     }
 
     if chan.num_env > 1 {
         chan.num_noise = 2;
         let mid = match (chan.fclass, chan.pointer) {
-                (FrameClass::FixFix, _) => chan.num_env / 2 - 1,
-                (FrameClass::VarFix, 0) => 0,
-                (FrameClass::VarFix, 1) => chan.num_env - 2,
-                (FrameClass::VarFix, _) => chan.pointer as usize - 2,
-                (_, 0) | (_, 1)         => chan.num_env - 2,
-                (_, _)                  => chan.num_env - (chan.pointer as usize),
+                (FrameClass::FixFix, _) => chan.num_env / 2,
+                (FrameClass::VarFix, 0) => 1,
+                (FrameClass::VarFix, 1) => chan.num_env - 1,
+                (FrameClass::VarFix, _) => chan.pointer as usize - 1,
+                (_, 0) | (_, 1)         => chan.num_env - 1,
+                (_, _)                  => chan.num_env + 1 - (chan.pointer as usize),
             };
-        chan.noise_env_border[0] = chan.env_border[mid];
-        chan.noise_env_border[1] = chan.env_border[chan.num_env - 1];
+        chan.noise_env_border[0] = chan.env_border[0];
+        chan.noise_env_border[1] = chan.env_border[mid];
+        chan.noise_env_border[2] = chan.env_border[chan.num_env];
     } else {
         chan.num_noise = 1;
         chan.noise_env_border[0] = chan.env_border[0];
+        chan.noise_env_border[1] = chan.env_border[1];
     }
-    
+
 
     Ok(())
 }
@@ -256,8 +259,8 @@ fn read_envelope(br: &mut BitReader, chan: &mut SBRChannel, coupled: bool, cbs:
             for (i, band_env) in envelope[..num_env_bands].iter_mut().enumerate() {
                 let delta           = br.read_cb(t_cb)?;
                 let last = match (freq_res, chan.last_freq_res) {
-                        (true, false) => chan.last_envelope[state.high_to_low_res[i]],
-                        (false, true) => chan.last_envelope[state.low_to_high_res[i]],
+                        (false, true) => chan.last_envelope[state.high_to_low_res[i]],
+                        (true, false) => chan.last_envelope[state.low_to_high_res[i]],
                         _ => chan.last_envelope[i],
                     };
                 *band_env = last + delta * scale;