X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;ds=sidebyside;f=nihav-commonfmt%2Fsrc%2Fdemuxers%2Favi.rs;h=d29ff45fbb3244caa58cbfa0c96deaad95467ce8;hb=5ebc04f1a78b84cdd0d35ab30afc3d84bf7f0ad5;hp=007e7c3f9326df410bb0b9cdc5e69b5c5ee06ee4;hpb=ff7cb24a554c244c7494a981f4ad2c712804a271;p=nihav.git diff --git a/nihav-commonfmt/src/demuxers/avi.rs b/nihav-commonfmt/src/demuxers/avi.rs index 007e7c3..d29ff45 100644 --- a/nihav-commonfmt/src/demuxers/avi.rs +++ b/nihav-commonfmt/src/demuxers/avi.rs @@ -429,6 +429,7 @@ impl<'a> AVIDemuxer<'a> { if pe.stream_no == stream_no { let start_clr = self.src.read_byte()? as usize; let len = self.src.read_byte()? as usize; + let len = if len == 0 { 256 } else { len }; let _flags = self.src.read_u16le()?; validate!(start_clr + len <= 256); validate!(len * 4 + 4 == size); @@ -502,6 +503,7 @@ const CHUNKS: &[RIFFParser] = &[ RIFFParser { tag: RIFFTag::Chunk(mktag!(b"indx")), parse: parse_indx }, RIFFParser { tag: RIFFTag::Chunk(mktag!(b"JUNK")), parse: parse_junk }, RIFFParser { tag: RIFFTag::List(mktag!(b"LIST"), mktag!(b"odml")), parse: parse_odml }, + RIFFParser { tag: RIFFTag::List(mktag!(b"LIST"), mktag!(b"rec ")), parse: parse_rec }, ]; fn is_list_tag(tag: u32) -> bool { @@ -530,6 +532,10 @@ fn parse_odml(dmx: &mut AVIDemuxer, _strmgr: &mut StreamManager, _size: usize) - Ok(0) } +fn parse_rec(_dmx: &mut AVIDemuxer, _strmgr: &mut StreamManager, _size: usize) -> DemuxerResult { + Ok(0) +} + #[allow(unused_variables)] fn parse_strh(dmx: &mut AVIDemuxer, strmgr: &mut StreamManager, size: usize) -> DemuxerResult { if size < 0x38 { return Err(InvalidData); } @@ -796,9 +802,9 @@ fn parse_idx1(src: &mut ByteReader, strmgr: &mut StreamManager, seek_idx: &mut S let stream_no = ((tag[0] - b'0') * 10 + (tag[1] - b'0')) as usize; if (flags & 0x10) != 0 { - if let Some(str) = strmgr.get_stream(stream_no) { - if str.get_media_type() == StreamType::Video { - let (tb_num, tb_den) = str.get_timebase(); + if let Some(stream) = strmgr.get_stream(stream_no) { + if stream.get_media_type() == StreamType::Video { + let (tb_num, tb_den) = stream.get_timebase(); let pts = counter[stream_no]; let time = NATimeInfo::ts_to_time(pts, 1000, tb_num, tb_den); validate!(offset >= movi_pos);