aacsbr: fix high<->low resolution envelope mapping
authorKostya Shishkov <kostya.shishkov@gmail.com>
Mon, 13 Mar 2023 12:46:59 +0000 (13:46 +0100)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Mon, 13 Mar 2023 12:46:59 +0000 (13:46 +0100)
nihav-mpeg/src/codecs/aac/sbr/bs.rs
nihav-mpeg/src/codecs/aac/sbr/mod.rs

index 74e820da626bc669289021eb8c4d8181e2ddfdaf..f12e9d9dc0a9a4d7fda6c1409fde2ae76d5f32a0 100644 (file)
@@ -259,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;
index f337e965004f64fbdb8e621eb2f626e4aba0f177..d2477b98a45a5735d5c83a2b1c58a487158a2e23 100644 (file)
@@ -189,9 +189,10 @@ impl SBRState {
             }
         }
         for (dst, high) in self.low_to_high_res.iter_mut().zip(high_src.iter()) {
-            match low_src.binary_search(high) {
-                Ok(idx) | Err(idx) => *dst = idx,
-            };
+            *dst = match low_src.binary_search(high) {
+                    Ok(idx) => idx,
+                    Err(idx) => idx - 1,
+                };
         }
 
         let num_q = (((hdr.noise_bands as f32) * ((k2 as f32) / (k_x as f32)).log2()).round() as usize).max(1);