X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;ds=sidebyside;f=nihav-commonfmt%2Fsrc%2Fdemuxers%2Fmov.rs;h=1c52dfe24a06ef57d27aa1b05c138a394efef895;hb=d4809976880805236bed090e96fc8442c37d88d8;hp=b271b95e3e777d4b4b31676c30d08293e1865118;hpb=bbbf86dde30ec4f81e926b84ff58c7435da08b75;p=nihav.git diff --git a/nihav-commonfmt/src/demuxers/mov.rs b/nihav-commonfmt/src/demuxers/mov.rs index b271b95..1c52dfe 100644 --- a/nihav-commonfmt/src/demuxers/mov.rs +++ b/nihav-commonfmt/src/demuxers/mov.rs @@ -335,7 +335,7 @@ fn read_hdlr(track: &mut Track, br: &mut ByteReader, size: u64) -> DemuxerResult let _comp_flags = br.read_u32be()?; let _comp_flags_mask = br.read_u32be()?; - if comp_type == mktag!(b"mhlr") { + if comp_type == mktag!(b"mhlr") || comp_type == 0 { if comp_subtype == mktag!(b"vide") { track.stream_type = StreamType::Video; } else if comp_subtype == mktag!(b"soun") { @@ -592,8 +592,10 @@ fn read_stsd(track: &mut Track, br: &mut ByteReader, size: u64) -> DemuxerResult } else { "unknown" }; -//todo adjust format for various PCM kinds - let soniton = NASoniton::new(sample_size as u8, SONITON_FLAG_SIGNED | SONITON_FLAG_BE); + let mut soniton = NASoniton::new(sample_size as u8, SONITON_FLAG_SIGNED | SONITON_FLAG_BE); + if &fcc == b"raw " && sample_size == 8 { + soniton.signed = false; + } let block_align = 1; if sver == 1 { let samples_per_packet = br.read_u32be()?; @@ -628,14 +630,15 @@ fn read_stsd(track: &mut Track, br: &mut ByteReader, size: u64) -> DemuxerResult } fn read_stts(track: &mut Track, br: &mut ByteReader, size: u64) -> DemuxerResult { - validate!(size >= 16); + validate!(size >= 8); let start_pos = br.tell(); let version = br.read_byte()?; validate!(version == 0); let _flags = br.read_u24be()?; let entries = br.read_u32be()? as usize; validate!(entries as u64 <= (size - 8) / 8); - if entries == 1 { + if entries == 0 { + } else if entries == 1 { let _count = br.read_u32be()?; let tb_num = br.read_u32be()?; if let Some(ref mut stream) = track.stream {