}
impl<'a> DemuxCore<'a> for VMDDemuxer<'a> {
- #[allow(unused_variables)]
fn open(&mut self, strmgr: &mut StreamManager, _seek_index: &mut SeekIndex) -> DemuxerResult<()> {
let src = &mut self.src;
let mut width = read_u16le(&header[12..])? as usize;
let mut height = read_u16le(&header[14..])? as usize;
- self.is_indeo = &header[24..27] == b"iv3";
+ self.is_indeo = &header[24..27] == b"iv3" || &header[24..27] == b"IV3";
if self.is_indeo && width > 320 {
width >>= 1;
height >>= 1;
src.read_u16le()?
} else { 0 };
if is_ext_audio {
- validate!(ext_audio_id >= 3 && ext_audio_id <= 6);
+ validate!((3..=6).contains(&ext_audio_id));
self.is_lhaud = true;
}
let srate = u32::from(read_u16le(&header[804..])?);
let idx_off = u64::from(read_u32le(&header[812..])?);
src.seek(SeekFrom::Start(idx_off))?;
let mut offs: Vec<u32> = Vec::with_capacity(nframes);
- for i in 0..nframes {
+ for _ in 0..nframes {
let _flags = src.read_u16le()?;
let off = src.read_u32le()?;
offs.push(off);
}
self.frames.reserve(nframes * fpb);
let mut ats = adelay;
- for i in 0..nframes {
- let mut off = offs[i];
+ for (i, &offset) in offs.iter().enumerate() {
+ let mut off = offset;
for _ in 0..fpb {
let chtype = src.read_byte()?;
src.read_skip(1)?;
self.fno += 1;
let str_id = if is_video { self.vid_id } else { self.aud_id };
- let str = strmgr.get_stream(str_id).unwrap();
- let (tb_num, tb_den) = str.get_timebase();
- let ts = NATimeInfo::new(Some(u64::from(cur_frame.ts)), None, None, tb_num, tb_den);
- let pkt = NAPacket::new(str, ts, false, buf);
+ let stream = strmgr.get_stream(str_id).unwrap();
+ let ts = stream.make_ts(Some(u64::from(cur_frame.ts)), None, None);
+ let pkt = NAPacket::new(stream, ts, false, buf);
Ok(pkt)
}
#[test]
fn test_vmd_demux() {
- let mut file = File::open("assets/Game/128.vmd").unwrap();
+ // sample: https://samples.mplayerhq.hu/game-formats/sierra-vmd/Lighthouse/128.vmd
+ let mut file = File::open("assets/Game/sierra/128.vmd").unwrap();
//let mut file = File::open("assets/Game/1491.VMD").unwrap();
let mut fr = FileReader::new_read(&mut file);
let mut br = ByteReader::new(&mut fr);