diff options
author | Kostya Shishkov <kostya.shishkov@gmail.com> | 2020-12-12 17:53:11 +0100 |
---|---|---|
committer | Kostya Shishkov <kostya.shishkov@gmail.com> | 2020-12-12 18:02:07 +0100 |
commit | 079fff1d531162a4a5f90a28ad9a37929bcd97a1 (patch) | |
tree | ed07a70c4e58a608c56a2bed52ebd61352e98659 | |
parent | 696e4e20bf7167121352f247893370cb83213d5c (diff) | |
download | nihav-079fff1d531162a4a5f90a28ad9a37929bcd97a1.tar.gz |
mov: parse mdhd chunk
-rw-r--r-- | nihav-commonfmt/src/demuxers/mov.rs | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/nihav-commonfmt/src/demuxers/mov.rs b/nihav-commonfmt/src/demuxers/mov.rs index 847d494..4d36c05 100644 --- a/nihav-commonfmt/src/demuxers/mov.rs +++ b/nihav-commonfmt/src/demuxers/mov.rs @@ -343,11 +343,29 @@ fn read_mdia(track: &mut Track, br: &mut ByteReader, size: u64) -> DemuxerResult } const MDIA_CHUNK_HANDLERS: &[TrackChunkHandler] = &[ - TrackChunkHandler { ctype: mktag!(b"mdhd"), parse: skip_chunk }, + TrackChunkHandler { ctype: mktag!(b"mdhd"), parse: read_mdhd }, TrackChunkHandler { ctype: mktag!(b"hdlr"), parse: read_hdlr }, TrackChunkHandler { ctype: mktag!(b"minf"), parse: read_minf }, ]; +fn read_mdhd(track: &mut Track, br: &mut ByteReader, size: u64) -> DemuxerResult<u64> { + const KNOWN_MDHD_SIZE: u64 = 24; + validate!(size >= KNOWN_MDHD_SIZE); + let version = br.read_byte()?; + validate!(version == 0); + let flags = br.read_u24be()?; + validate!(flags == 0); + let _ctime = br.read_u32be()?; + let _mtime = br.read_u32be()?; + track.tb_den = br.read_u32be()?; + validate!(track.tb_den != 0); + track.duration = br.read_u32be()?; + let _language = br.read_u16be()?; + let _quality = br.read_u16be()?; + + Ok(KNOWN_MDHD_SIZE) +} + fn read_hdlr(track: &mut Track, br: &mut ByteReader, size: u64) -> DemuxerResult<u64> { const KNOWN_HDLR_SIZE: u64 = 24; validate!(size >= KNOWN_HDLR_SIZE); |