X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-game%2Fsrc%2Fdemuxers%2Fvmd.rs;h=3341fd1de50a7076500ec6b25801f26c9e0c4e05;hb=a970b2110488aeff5855743d1728ee83462e8306;hp=f693e732ef93376216e57e68e46438cc46b329b9;hpb=24d998947d55228ec37a08cd391983c6239e3c0c;p=nihav.git diff --git a/nihav-game/src/demuxers/vmd.rs b/nihav-game/src/demuxers/vmd.rs index f693e73..3341fd1 100644 --- a/nihav-game/src/demuxers/vmd.rs +++ b/nihav-game/src/demuxers/vmd.rs @@ -61,7 +61,7 @@ impl<'a> DemuxCore<'a> for VMDDemuxer<'a> { let vhdr = NAVideoInfo::new(width, height, false, PAL8_FORMAT); let vci = NACodecTypeInfo::Video(vhdr); let vinfo = NACodecInfo::new(if !self.is_indeo { "vmd-video" } else { "indeo3" }, vci, Some(edata)); - self.vid_id = strmgr.add_stream(NAStream::new(StreamType::Video, 0, vinfo, 1, 12)).unwrap(); + self.vid_id = strmgr.add_stream(NAStream::new(StreamType::Video, 0, vinfo, 1, 12, nframes as u64)).unwrap(); let is_ext_audio = (hdr_size & 0xF) == 4; let ext_audio_id = if is_ext_audio { @@ -100,7 +100,7 @@ impl<'a> DemuxCore<'a> for VMDDemuxer<'a> { } }; let ainfo = NACodecInfo::new(ac_name, NACodecTypeInfo::Audio(ahdr), Some(aedata)); - self.aud_id = strmgr.add_stream(NAStream::new(StreamType::Audio, 1, ainfo, 1, srate)).unwrap(); + self.aud_id = strmgr.add_stream(NAStream::new(StreamType::Audio, 1, ainfo, 1, srate, 0)).unwrap(); } else { block_size = 0; } @@ -172,10 +172,9 @@ impl<'a> DemuxCore<'a> for VMDDemuxer<'a> { 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) } @@ -183,6 +182,8 @@ impl<'a> DemuxCore<'a> for VMDDemuxer<'a> { fn seek(&mut self, _time: NATimePoint, _seek_index: &SeekIndex) -> DemuxerResult<()> { Err(DemuxerError::NotPossible) } + + fn get_duration(&self) -> u64 { 0 } } impl<'a> NAOptionHandler for VMDDemuxer<'a> { @@ -221,6 +222,7 @@ mod test { #[test] fn test_vmd_demux() { + // sample: https://samples.mplayerhq.hu/game-formats/sierra-vmd/Lighthouse/128.vmd let mut file = File::open("assets/Game/128.vmd").unwrap(); //let mut file = File::open("assets/Game/1491.VMD").unwrap(); let mut fr = FileReader::new_read(&mut file);