switch demuxers to use NAStream::make_ts()
[nihav.git] / nihav-commonfmt / src / demuxers / avi.rs
index c4b4817c633b335e62b01b739f3668da4ba7b8c2..cd33c51ca150e210670834e3bfa4cee29bed411e 100644 (file)
@@ -168,7 +168,11 @@ impl<'a> DemuxCore<'a> for AVIDemuxer<'a> {
                 continue;
             }
             let str = strmgr.get_stream(stream_no as usize);
-            if str.is_none() { return Err(InvalidData); }
+            if str.is_none() {
+                self.src.read_skip(size)?;
+                self.movi_size -= size + 8;
+                continue;
+            }
             let stream = str.unwrap();
             if size == 0 {
                 self.movi_size -= 8;
@@ -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;
             }
@@ -819,7 +823,7 @@ fn parse_odml_ix(src: &mut ByteReader, strmgr: &mut StreamManager, seek_idx: &mu
     let idx_type = src.read_byte()?;
     validate!(sub_type == 0 && idx_type == 1);
     let entries = src.read_u32le()? as usize;
-    validate!(size == 24 + entries * 4 * entry_size);
+    validate!(size >= 24 + entries * 4 * entry_size);
     src.read_tag()?; //chunk id
     let base_offset = src.read_u64le()?;
     src.read_u32le()?; //reserved