*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;
}
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());
}