projects
/
nihav.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
avi: correct offsets in idx1 chunks if required
[nihav.git]
/
nihav-commonfmt
/
src
/
demuxers
/
avi.rs
diff --git
a/nihav-commonfmt/src/demuxers/avi.rs
b/nihav-commonfmt/src/demuxers/avi.rs
index 05a0d640c8f4004ea3549ad5868d676003577cb4..a5e52a7d3c429649111a9af6f6dc9fafda3e0cae 100644
(file)
--- 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 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()?;
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()?;
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);
}
if tag[0] < b'0' || tag[0] > b'9' || tag[1] < b'0' || tag[1] > b'9' {
return Err(InvalidData);
}