]> git.nihav.org Git - nihav.git/blobdiff - nihav-core/src/soundcvt/resample.rs
Acorn Super Moving Blocks Decoder
[nihav.git] / nihav-core / src / soundcvt / resample.rs
index 1315f0903c6443037d7d89e11c33493387335315..dc2f1789e5f16ee4fcdae6ce795883672ae5971a 100644 (file)
@@ -79,7 +79,7 @@ fn gen_sinc_coeffs(order: usize, num: usize, den: usize, norm: f32) -> Vec<f32>
             *coef = norm;
             continue;
         }
-        let wval = f64::from((pos * win_scale).min(-1.0).max(1.0));
+        let wval = f64::from((pos * win_scale).max(-1.0).min(1.0));
         let win = bessel_i0(BESSEL_BETA - (1.0 - wval * wval).sqrt()) as f32;
         *coef = norm * (pos * sinc_scale).sinc() * win;
     }
@@ -262,9 +262,14 @@ impl NAResample {
 
         let src_fmt = src_info.get_format();
         let dst_fmt = self.dst_info.get_format();
-        let no_conversion = src_fmt == dst_fmt;
+        let mut no_conversion = src_fmt == dst_fmt;
 
-        if no_conversion && no_channel_needs {
+        // packed PCM needs to be processed
+        if no_conversion && matches!(src, NABufferType::AudioPacked(_)) && !src_fmt.is_packed() && ((src_fmt.bits % 8) == 0) {
+            no_conversion = false;
+        }
+
+        if no_conversion && no_channel_needs && !needs_resample {
             return Ok(src.clone());
         }