X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-rad%2Fsrc%2Fdemuxers%2Fsmacker.rs;h=3fb1a6ee5963d67ad038a166c3bbb98b35b23ed5;hb=dc19613ec7fe72fc0796422f3b0e4f688af12fe1;hp=3e612efca146fab51264130ec9ba7712b91f21b9;hpb=7e6086e50dce8780e59c8d9c0d2d74aa25aaae9e;p=nihav.git diff --git a/nihav-rad/src/demuxers/smacker.rs b/nihav-rad/src/demuxers/smacker.rs index 3e612ef..3fb1a6e 100644 --- a/nihav-rad/src/demuxers/smacker.rs +++ b/nihav-rad/src/demuxers/smacker.rs @@ -95,7 +95,7 @@ fn get_pts_inc(val: i32) -> u64 { } impl<'a> DemuxCore<'a> for SmackerVideoDemuxer<'a> { - fn open(&mut self, strmgr: &mut StreamManager) -> DemuxerResult<()> { + fn open(&mut self, strmgr: &mut StreamManager, _seek_idx: &mut SeekIndex) -> DemuxerResult<()> { let src = &mut self.src; let mut magic: [u8; 4] = [0; 4]; src.read_buf(&mut magic)?; @@ -161,7 +161,7 @@ impl<'a> DemuxCore<'a> for SmackerVideoDemuxer<'a> { self.start = src.tell(); self.cur_frame = 0; self.reset_state(); - + Ok(()) } fn get_frame(&mut self, strmgr: &mut StreamManager) -> DemuxerResult { @@ -213,11 +213,14 @@ impl<'a> DemuxCore<'a> for SmackerVideoDemuxer<'a> { let ts = NATimeInfo::new(Some(self.cur_pts), None, None, 1, 100000); for i in 0..NUM_AUDIO_TRACKS { if ((frame_flags >> (i + 1)) & 1) == 0 { continue; } - validate!(self.ainfo[i].is_present()); let size = self.src.read_u32le()? as usize; validate!(size > 4); validate!(payload_size >= size); payload_size -= size; + if !self.ainfo[i].is_present() { + self.src.read_skip(size - 4)?; + continue; + } let strres = strmgr.get_stream(self.ainfo[i].id); validate!(strres.is_some()); let stream = strres.unwrap(); @@ -245,8 +248,7 @@ impl<'a> DemuxCore<'a> for SmackerVideoDemuxer<'a> { Ok(pkt) } - #[allow(unused_variables)] - fn seek(&mut self, time: u64) -> DemuxerResult<()> { + fn seek(&mut self, time: u64, _seek_idx: &SeekIndex) -> DemuxerResult<()> { if time == 0 { let start = self.start; self.src.seek(SeekFrom::Start(start))?; @@ -305,7 +307,8 @@ mod test { let mut br = ByteReader::new(&mut fr); let mut dmx = SmackerVideoDemuxer::new(&mut br); let mut sm = StreamManager::new(); - dmx.open(&mut sm).unwrap(); + let mut si = SeekIndex::new(); + dmx.open(&mut sm, &mut si).unwrap(); loop { let pktres = dmx.get_frame(&mut sm); if let Err(e) = pktres {