From: Kostya Shishkov Date: Tue, 31 Mar 2026 16:04:41 +0000 (+0200) Subject: mov: support reading co64 atom X-Git-Url: https://git.nihav.org/?a=commitdiff_plain;h=7232a8b9c763205123d5a57be9ddcb131a8db34f;p=nihav.git mov: support reading co64 atom --- 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()?;