avi: correct offsets in idx1 chunks if required
authorKostya Shishkov <kostya.shishkov@gmail.com>
Wed, 15 Jul 2020 16:00:44 +0000 (18:00 +0200)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Wed, 15 Jul 2020 16:00:44 +0000 (18:00 +0200)
nihav-commonfmt/src/demuxers/avi.rs

index 05a0d640c8f4004ea3549ad5868d676003577cb4..a5e52a7d3c429649111a9af6f6dc9fafda3e0cae 100644 (file)
@@ -517,12 +517,21 @@ fn parse_idx1(src: &mut ByteReader, strmgr: &mut StreamManager, seek_idx: &mut S
     let mut tag = [0u8; 4];
     let num_entries = size >> 4;
     let mut counter = [0u64; 100];
+    let mut add_offset = 0;
+    let mut set_offset = false;
     for _ in 0..num_entries {
                               src.read_buf(&mut tag)?;
         let flags           = src.read_u32le()?;
-        let offset          = src.read_u32le()? as u64;
+        let mut offset      = src.read_u32le()? as u64;
         let _length         = src.read_u32le()?;
 
+        if !set_offset && offset < movi_pos {
+            add_offset = movi_pos - offset;
+        }
+        set_offset = true;
+
+        offset += add_offset;
+
         if tag[0] < b'0' || tag[0] > b'9' || tag[1] < b'0' || tag[1] > b'9' {
             return Err(InvalidData);
         }