switch demuxers to use NAStream::make_ts()
[nihav.git] / nihav-llaudio / src / demuxers / wavpack.rs
index d07a5a2844cace2f49ebb82a10374986d074dc97..2d92e7b7f1fe3041bd33c0d2d12a5642b1e73cef 100644 (file)
@@ -20,7 +20,7 @@ const WV_FLAG_END_BLOCK: u32    = 1 << 12;
 const WV_FLAG_FALSE_STEREO: u32 = 1 << 30;
 //const WV_FLAG_DSD_AUDIO: u32    = 1 << 31;
 
-const WV_STREAM_FLAGS: u32 = 0x8000018B;
+const WV_STREAM_FLAGS: u32 = 0x8000008B;
 
 #[derive(Clone,Copy,Default)]
 struct WVHeader {
@@ -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);
@@ -189,8 +189,7 @@ impl<'a> DemuxCore<'a> for WavPackDemuxer<'a> {
             std::mem::swap(&mut fb, &mut self.first_blocks);
             let (refhdr, buf) = fb.unwrap();
             let stream = strmgr.get_stream(0).unwrap();
-            let (tb_num, tb_den) = stream.get_timebase();
-            let ts = NATimeInfo::new(Some(self.samplepos), None, None, tb_num, tb_den);
+            let ts = stream.make_ts(Some(self.samplepos), None, None);
             let pkt = NAPacket::new(stream, ts, true, buf);
 
             self.samplepos += u64::from(refhdr.block_samples);
@@ -205,8 +204,7 @@ impl<'a> DemuxCore<'a> for WavPackDemuxer<'a> {
         let (refhdr, buf) = self.read_blocks()?;
 
         let stream = strmgr.get_stream(0).unwrap();
-        let (tb_num, tb_den) = stream.get_timebase();
-        let ts = NATimeInfo::new(Some(self.samplepos), None, None, tb_num, tb_den);
+        let ts = stream.make_ts(Some(self.samplepos), None, None);
         let pkt = NAPacket::new(stream, ts, true, buf);
 
         self.samplepos += u64::from(refhdr.block_samples);
@@ -253,6 +251,7 @@ impl<'a> DemuxCore<'a> for WavPackDemuxer<'a> {
             Err(DemuxerError::NotPossible)
         }
     }
+    fn get_duration(&self) -> u64 { 0 }
 }
 
 impl<'a> NAOptionHandler for WavPackDemuxer<'a> {
@@ -278,6 +277,7 @@ mod test {
 
     #[test]
     fn test_wavpack_demux() {
+        // sample from the official WavPack test samples set
         let mut file = File::open("assets/LLaudio/wv/false_stereo.wv").unwrap();
         let mut fr = FileReader::new_read(&mut file);
         let mut br = ByteReader::new(&mut fr);