From e0926c0422c27e6175cd8bb0910a343842eefd4d Mon Sep 17 00:00:00 2001 From: Kostya Shishkov Date: Sun, 22 Feb 2026 17:38:43 +0100 Subject: [PATCH] mov: try to improve raw audio demuxing --- nihav-commonfmt/src/demuxers/mov.rs | 32 +++++++++++++++++++---------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/nihav-commonfmt/src/demuxers/mov.rs b/nihav-commonfmt/src/demuxers/mov.rs index df81efc..72d19e7 100644 --- a/nihav-commonfmt/src/demuxers/mov.rs +++ b/nihav-commonfmt/src/demuxers/mov.rs @@ -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)) -- 2.39.5