X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-game%2Fsrc%2Fdemuxers%2Fbmv.rs;h=66f1df91e53356059e185a9414d7c012e7a857a1;hb=817e487223b28379176a533f09485c27a68443f8;hp=19019d450d0c61cb3596a578e83abdbd50908464;hpb=787b8d03074419d7f8e6b52daba02a3807444bc2;p=nihav.git diff --git a/nihav-game/src/demuxers/bmv.rs b/nihav-game/src/demuxers/bmv.rs index 19019d4..66f1df9 100644 --- a/nihav-game/src/demuxers/bmv.rs +++ b/nihav-game/src/demuxers/bmv.rs @@ -18,11 +18,11 @@ impl<'a> DemuxCore<'a> for BMVDemuxer<'a> { let vhdr = NAVideoInfo::new(640, 429, false, PAL8_FORMAT); let vci = NACodecTypeInfo::Video(vhdr); let vinfo = NACodecInfo::new("bmv-video", vci, None); - 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, 0)).unwrap(); let ahdr = NAAudioInfo::new(22050, 2, SND_S16_FORMAT, 1); let ainfo = NACodecInfo::new("bmv-audio", NACodecTypeInfo::Audio(ahdr), None); - self.aud_id = strmgr.add_stream(NAStream::new(StreamType::Audio, 1, ainfo, 1, 22050)).unwrap(); + self.aud_id = strmgr.add_stream(NAStream::new(StreamType::Audio, 1, ainfo, 1, 22050, 0)).unwrap(); self.vpos = 0; self.apos = 0; @@ -47,10 +47,9 @@ impl<'a> DemuxCore<'a> for BMVDemuxer<'a> { let nblocks = self.src.peek_byte()?; asize = (nblocks as usize) * 65 + 1; validate!(asize < size); - let str = strmgr.get_stream(self.aud_id).unwrap(); - let (tb_num, tb_den) = str.get_timebase(); - let ts = NATimeInfo::new(Some(self.apos), None, None, tb_num, tb_den); - let apkt = self.src.read_packet(str, ts, false, asize)?; + let stream = strmgr.get_stream(self.aud_id).unwrap(); + let ts = stream.make_ts(Some(self.apos), None, None); + let apkt = self.src.read_packet(stream, ts, false, asize)?; self.apos += u64::from(nblocks) * 32; self.pkt_buf.push(apkt); } else { @@ -60,19 +59,19 @@ impl<'a> DemuxCore<'a> for BMVDemuxer<'a> { buf[0] = ctype; self.src.read_buf(&mut buf[1..])?; - let str = strmgr.get_stream(self.vid_id).unwrap(); - let (tb_num, tb_den) = str.get_timebase(); - let ts = NATimeInfo::new(Some(self.vpos), None, None, tb_num, tb_den); - let pkt = NAPacket::new(str, ts, (ctype & 3) == 3, buf); + let stream = strmgr.get_stream(self.vid_id).unwrap(); + let ts = stream.make_ts(Some(self.vpos), None, None); + let pkt = NAPacket::new(stream, ts, (ctype & 3) == 3, buf); self.vpos += 1; return Ok(pkt); } } - fn seek(&mut self, _time: u64, _seek_index: &SeekIndex) -> DemuxerResult<()> { + fn seek(&mut self, _time: NATimePoint, _seek_index: &SeekIndex) -> DemuxerResult<()> { Err(DemuxerError::NotPossible) } + fn get_duration(&self) -> u64 { 0 } } impl<'a> NAOptionHandler for BMVDemuxer<'a> { @@ -116,6 +115,7 @@ struct BMV3Demuxer<'a> { impl<'a> DemuxCore<'a> for BMV3Demuxer<'a> { #[allow(unused_variables)] + #[allow(clippy::cast_lossless)] fn open(&mut self, strmgr: &mut StreamManager, _seek_index: &mut SeekIndex) -> DemuxerResult<()> { let src = &mut self.src; @@ -150,11 +150,11 @@ impl<'a> DemuxCore<'a> for BMV3Demuxer<'a> { let vhdr = NAVideoInfo::new(width, height, false, RGB565_FORMAT); let vci = NACodecTypeInfo::Video(vhdr); let vinfo = NACodecInfo::new("bmv3-video", vci, None); - self.vid_id = strmgr.add_stream(NAStream::new(StreamType::Video, 0, vinfo, 256, fps)).unwrap(); + self.vid_id = strmgr.add_stream(NAStream::new(StreamType::Video, 0, vinfo, 256, fps, nframes as u64)).unwrap(); let ahdr = NAAudioInfo::new(22050, 2, SND_S16_FORMAT, audio_blob_size); let ainfo = NACodecInfo::new("bmv3-audio", NACodecTypeInfo::Audio(ahdr), None); - self.aud_id = strmgr.add_stream(NAStream::new(StreamType::Audio, 1, ainfo, 1, 22050)).unwrap(); + self.aud_id = strmgr.add_stream(NAStream::new(StreamType::Audio, 1, ainfo, 1, 22050, 0)).unwrap(); self.vpos = 0; self.apos = 0; @@ -186,10 +186,9 @@ impl<'a> DemuxCore<'a> for BMV3Demuxer<'a> { buf[0] = (self.src.tell() & 1) as u8; self.src.read_buf(&mut buf[1..])?; - let str = strmgr.get_stream(self.aud_id).unwrap(); - let (tb_num, tb_den) = str.get_timebase(); - let ts = NATimeInfo::new(Some(self.apos), None, None, tb_num, tb_den); - let apkt = NAPacket::new(str, ts, false, buf); + let stream = strmgr.get_stream(self.aud_id).unwrap(); + let ts = stream.make_ts(Some(self.apos), None, None); + let apkt = NAPacket::new(stream, ts, false, buf); self.apos += (asize as u64) / 41 * 32; self.pkt_buf.push(apkt); @@ -207,19 +206,19 @@ impl<'a> DemuxCore<'a> for BMV3Demuxer<'a> { buf[0] = ctype; self.src.read_buf(&mut buf[1..])?; - let str = strmgr.get_stream(self.vid_id).unwrap(); - let (tb_num, tb_den) = str.get_timebase(); - let ts = NATimeInfo::new(Some(self.vpos), None, None, tb_num, tb_den); - let pkt = NAPacket::new(str, ts, (ctype & 3) == 3, buf); + let stream = strmgr.get_stream(self.vid_id).unwrap(); + let ts = stream.make_ts(Some(self.vpos), None, None); + let pkt = NAPacket::new(stream, ts, (ctype & 3) == 3, buf); self.vpos += 1; return Ok(pkt); } } - fn seek(&mut self, _time: u64, _seek_index: &SeekIndex) -> DemuxerResult<()> { + fn seek(&mut self, _time: NATimePoint, _seek_index: &SeekIndex) -> DemuxerResult<()> { Err(DemuxerError::NotPossible) } + fn get_duration(&self) -> u64 { 0 } } impl<'a> NAOptionHandler for BMV3Demuxer<'a> { @@ -257,6 +256,7 @@ mod test { use super::*; use std::fs::File; + // samples from https://samples.mplayerhq.hu/game-formats/bmv #[test] fn test_bmv_demux() { let mut file = File::open("assets/Game/DW2-MOUSE.BMV").unwrap();