From 7232a8b9c763205123d5a57be9ddcb131a8db34f Mon Sep 17 00:00:00 2001 From: Kostya Shishkov Date: Tue, 31 Mar 2026 18:04:41 +0200 Subject: [PATCH] mov: support reading co64 atom --- nihav-commonfmt/src/demuxers/mov.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/nihav-commonfmt/src/demuxers/mov.rs b/nihav-commonfmt/src/demuxers/mov.rs index c7bd456..47c0728 100644 --- a/nihav-commonfmt/src/demuxers/mov.rs +++ b/nihav-commonfmt/src/demuxers/mov.rs @@ -572,6 +572,7 @@ const STBL_CHUNK_HANDLERS: &[TrackChunkHandler] = &[ TrackChunkHandler { ctype: mktag!(b"stsc"), parse: read_stsc }, TrackChunkHandler { ctype: mktag!(b"stsz"), parse: read_stsz }, TrackChunkHandler { ctype: mktag!(b"stco"), parse: read_stco }, + TrackChunkHandler { ctype: mktag!(b"co64"), parse: read_co64 }, TrackChunkHandler { ctype: mktag!(b"stsh"), parse: skip_chunk }, TrackChunkHandler { ctype: mktag!(b"ctts"), parse: read_ctts }, ]; @@ -1039,6 +1040,17 @@ fn read_stco(track: &mut Track, br: &mut dyn ByteIO, size: u64) -> DemuxerResult Ok(size) } +fn read_co64(track: &mut Track, br: &mut dyn ByteIO, size: u64) -> DemuxerResult { + let version = br.read_byte()?; + validate!(version == 0); + let _flags = br.read_u24be()?; + let entries = br.read_u32be()? as usize; + validate!(entries > 0 && (entries * 8 + 8) as u64 == size); + track.chunk_offsets = vec![0; entries]; + br.read_u64be_arr(&mut track.chunk_offsets)?; + Ok(size) +} + fn read_ctts(track: &mut Track, br: &mut dyn ByteIO, size: u64) -> DemuxerResult { validate!(size >= 8); let version = br.read_byte()?; -- 2.39.5