X-Git-Url: https://git.nihav.org/?p=nihav.git;a=blobdiff_plain;f=nihav-commonfmt%2Fsrc%2Fdemuxers%2Favi.rs;h=a5e52a7d3c429649111a9af6f6dc9fafda3e0cae;hp=05a0d640c8f4004ea3549ad5868d676003577cb4;hb=bae2781b8f255732bbeeb6cf471a5c39282cedf1;hpb=c031f98d54759403d8606dcc964f3a6ab9a33139 diff --git a/nihav-commonfmt/src/demuxers/avi.rs b/nihav-commonfmt/src/demuxers/avi.rs index 05a0d64..a5e52a7 100644 --- a/nihav-commonfmt/src/demuxers/avi.rs +++ b/nihav-commonfmt/src/demuxers/avi.rs @@ -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); }