avi: rename str to stream for clarity
[nihav.git] / nihav-commonfmt / src / demuxers / avi.rs
index bc3923444c6e96bffff3afd5a1cacf4ca49447b0..0ab7711d089381abe992b91a9978d3c5592b9d98 100644 (file)
@@ -167,9 +167,13 @@ impl<'a> DemuxCore<'a> for AVIDemuxer<'a> {
                 }
                 continue;
             }
-            let str = strmgr.get_stream(stream_no as usize);
-            if str.is_none() { return Err(InvalidData); }
-            let stream = str.unwrap();
+            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 = stream.unwrap();
             if size == 0 {
                 self.movi_size -= 8;
                 if self.movi_size == 0 {
@@ -180,8 +184,8 @@ impl<'a> DemuxCore<'a> for AVIDemuxer<'a> {
                 }
                 continue;
             }
-            let (tb_num, tb_den) = stream.get_timebase();
-            let mut ts = NATimeInfo::new(Some(self.cur_frame[stream_no as usize]), None, None, tb_num, tb_den);
+            let (tb_num, _) = stream.get_timebase();
+            let mut ts = stream.make_ts(Some(self.cur_frame[stream_no as usize]), None, None);
             if stream.get_media_type() == StreamType::Audio && tb_num == 1 && stream.get_info().get_name() == "pcm" {
                 ts.pts = None;
             }
@@ -239,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;
@@ -792,9 +796,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);