]> git.nihav.org Git - nihav.git/commitdiff
mov: try to improve raw audio demuxing
authorKostya Shishkov <kostya.shishkov@gmail.com>
Sun, 22 Feb 2026 16:38:43 +0000 (17:38 +0100)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Sun, 22 Feb 2026 16:38:55 +0000 (17:38 +0100)
nihav-commonfmt/src/demuxers/mov.rs

index df81efce9938633d29fc2cec90247e5c08a3b146..72d19e70aaa4b9b0f8b8e4db037ff7f7f3c3db3e 100644 (file)
@@ -1475,19 +1475,29 @@ impl Track {
                 self.samples_left -= 1;
             } else {
                 const BLOCK_SAMPLES: usize = 1024 * 6; // should be multiple of 64 and 6 to fit both IMA ADPCM and MACE 6:1 blocks
-                let max_size = self.calculate_chunk_size(BLOCK_SAMPLES);
-                let cur_size = self.calculate_chunk_size(self.samples_left);
-                let add_off = (size - cur_size) as u64;
-                let dsize = cur_size.min(max_size);
-                if self.samples_left >= BLOCK_SAMPLES {
-                    self.cur_sample += BLOCK_SAMPLES;
-                    self.samples_left -= BLOCK_SAMPLES;
-                    self.last_offset -= size as u64;
+                if size > 1 {
+                    let max_size = self.calculate_chunk_size(BLOCK_SAMPLES);
+                    let cur_size = self.calculate_chunk_size(self.samples_left);
+                    let add_off = (size - cur_size) as u64;
+                    let dsize = cur_size.min(max_size);
+                    if self.samples_left >= BLOCK_SAMPLES {
+                        self.cur_sample += BLOCK_SAMPLES;
+                        self.samples_left -= BLOCK_SAMPLES;
+                        self.last_offset -= size as u64;
+                    } else {
+                        self.cur_sample += self.samples_left;
+                        self.samples_left = 0;
+                    }
+                    return Some((pts, offset + add_off, dsize));
                 } else {
-                    self.cur_sample += self.samples_left;
-                    self.samples_left = 0;
+                    self.last_offset -= size as u64;
+                    let samples = self.samples_left.min(BLOCK_SAMPLES);
+                    let cur_size = self.calculate_chunk_size(samples);
+                    self.cur_sample   += samples;
+                    self.samples_left -= samples;
+                    self.last_offset += cur_size as u64;
+                    return Some((pts, offset, cur_size));
                 }
-                return Some((pts, offset + add_off, dsize));
             }
             self.cur_sample += 1;
             Some((pts, offset, size))