}
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 {
}
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;
}
}
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;
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