core/soundcvt: fix some cases where resampler skipped its work
authorKostya Shishkov <kostya.shishkov@gmail.com>
Fri, 5 Jan 2024 17:08:05 +0000 (18:08 +0100)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Fri, 5 Jan 2024 17:08:05 +0000 (18:08 +0100)
nihav-core/src/soundcvt/resample.rs

index 9c612f9d6cd4b11fb4d1049fd2f6e4fae7cd517a..dc2f1789e5f16ee4fcdae6ce795883672ae5971a 100644 (file)
@@ -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());
         }