From 5ab8389de5170d71ba926ad4ffd6580e67cb75a3 Mon Sep 17 00:00:00 2001 From: Kostya Shishkov Date: Mon, 2 Feb 2026 18:11:39 +0100 Subject: [PATCH] mov: improve search for headers in mov-macbin --- nihav-commonfmt/src/demuxers/mov.rs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/nihav-commonfmt/src/demuxers/mov.rs b/nihav-commonfmt/src/demuxers/mov.rs index 7016bbd..a1e2882 100644 --- a/nihav-commonfmt/src/demuxers/mov.rs +++ b/nihav-commonfmt/src/demuxers/mov.rs @@ -1765,6 +1765,28 @@ impl<'a> DemuxCore<'a> for MOVDemuxer<'a> { } self.src.read_skip(cur_size as usize)?; } + // if moov/mdat is not found, it may be in data part + if self.tracks.is_empty() || self.mdat_pos == 0 { + self.src.seek(SeekFrom::Start(0x80))?; + let end_pos = u64::from(data_length) + 0x80; + while self.src.tell() < end_pos && (self.mdat_pos == 0 || self.tracks.is_empty()) { + let size = self.src.read_u32be()?; + let tag = self.src.read_tag()?; + validate!(size >= 8); + match &tag { + b"moov" => { + self.read_moov(strmgr, u64::from(size - 8))?; + }, + b"mdat" => { + self.mdat_pos = self.src.tell() - 0x80; + self.src.read_skip(size as usize - 8)?; + }, + _ => { + self.src.read_skip(size as usize - 8)?; + }, + } + } + } }, DemuxMode::ResFork => { let res_data_offset = self.src.read_u32be()?; -- 2.39.5