X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-commonfmt%2Fsrc%2Fdemuxers%2Favi.rs;h=f14c31a466042ae15fe2e969dfbfa722ea719fb9;hb=bc22bba650c0ad4cd84d748468539b5dae982dc5;hp=cd33c51ca150e210670834e3bfa4cee29bed411e;hpb=8e14efb001fac3fecb0cb56df8705d23fa2231a8;p=nihav.git diff --git a/nihav-commonfmt/src/demuxers/avi.rs b/nihav-commonfmt/src/demuxers/avi.rs index cd33c51..f14c31a 100644 --- a/nihav-commonfmt/src/demuxers/avi.rs +++ b/nihav-commonfmt/src/demuxers/avi.rs @@ -167,13 +167,13 @@ impl<'a> DemuxCore<'a> for AVIDemuxer<'a> { } continue; } - let str = strmgr.get_stream(stream_no as usize); - if str.is_none() { + let stream = strmgr.get_stream(stream_no as usize); + if stream.is_none() { self.src.read_skip(size)?; self.movi_size -= size + 8; continue; } - let stream = str.unwrap(); + let stream = stream.unwrap(); if size == 0 { self.movi_size -= 8; if self.movi_size == 0 { @@ -243,7 +243,7 @@ impl<'a> DemuxCore<'a> for AVIDemuxer<'a> { } if seek_info.pos < self.movi_pos { return Err(DemuxerError::SeekError); } let skip_size = (seek_info.pos - self.movi_pos) as usize; - if skip_size > self.movi_size { return Err(DemuxerError::SeekError); } + if skip_size > self.movi_orig { return Err(DemuxerError::SeekError); } self.movi_size = self.movi_orig - skip_size; self.cur_frame[seek_info.str_id as usize] = seek_info.pts; @@ -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); @@ -796,9 +797,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);