introduce stream and container duration
[nihav.git] / nihav-llaudio / src / demuxers / wavpack.rs
index 9cfbba8b8ea10af2e809f2db9fb4285fd8a6b1e6..9cd50fa76e807ee6fb2db59312c518f670cd30b5 100644 (file)
@@ -174,7 +174,7 @@ impl<'a> DemuxCore<'a> for WavPackDemuxer<'a> {
 
         let ahdr = NAAudioInfo::new(srate, channels, SND_S16P_FORMAT, 1);
         let ainfo = NACodecInfo::new("wavpack", NACodecTypeInfo::Audio(ahdr), Some(buf.clone()));
-        strmgr.add_stream(NAStream::new(StreamType::Audio, 0, ainfo, 1, srate)).unwrap();
+        strmgr.add_stream(NAStream::new(StreamType::Audio, 0, ainfo, 1, srate, hdr.tot_samples)).unwrap();
         seek_index.mode = SeekIndexMode::Automatic;
         self.srate = srate;
         self.known_frames = Vec::with_capacity(((self.nsamples + u64::from(srate) - 1) / u64::from(srate)) as usize);
@@ -230,6 +230,8 @@ impl<'a> DemuxCore<'a> for WavPackDemuxer<'a> {
                 }
             } else {
                 let mut hdrbuf = [0u8; WV_HEADER_SIZE];
+                let lastoff = self.known_frames.last().unwrap_or(&FrameSeekInfo::default()).off;
+                self.src.seek(SeekFrom::Start(lastoff))?;
                 loop {
                                           self.src.peek_buf(&mut hdrbuf)?;
                     let hdr = WVHeader::parse(&hdrbuf)?;
@@ -251,6 +253,7 @@ impl<'a> DemuxCore<'a> for WavPackDemuxer<'a> {
             Err(DemuxerError::NotPossible)
         }
     }
+    fn get_duration(&self) -> u64 { 0 }
 }
 
 impl<'a> NAOptionHandler for WavPackDemuxer<'a> {