X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-core%2Fsrc%2Fsoundcvt%2Fresample.rs;h=dc2f1789e5f16ee4fcdae6ce795883672ae5971a;hb=b8ea95bcd62ebd2a6b58a889c0a2e0e35fa212d3;hp=1315f0903c6443037d7d89e11c33493387335315;hpb=dcbb8668f806e9e9018f54936b419e4bf9163039;p=nihav.git diff --git a/nihav-core/src/soundcvt/resample.rs b/nihav-core/src/soundcvt/resample.rs index 1315f09..dc2f178 100644 --- a/nihav-core/src/soundcvt/resample.rs +++ b/nihav-core/src/soundcvt/resample.rs @@ -79,7 +79,7 @@ fn gen_sinc_coeffs(order: usize, num: usize, den: usize, norm: f32) -> Vec *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()); }