switch demuxers to use NAStream::make_ts()
[nihav.git] / nihav-llaudio / src / demuxers / tta.rs
index 973ff84183f2b0e5486e3322fe05773da3172f63..88589a65d06f1a9178846c1604005fecc1326059 100644 (file)
@@ -9,6 +9,7 @@ struct TTADemuxer<'a> {
     offtab:         Vec<u64>,
     sizetab:        Vec<u32>,
     framelen:       u32,
+    duration:       u64,
 }
 
 impl<'a> TTADemuxer<'a> {
@@ -21,6 +22,7 @@ impl<'a> TTADemuxer<'a> {
             offtab:         Vec::new(),
             sizetab:        Vec::new(),
             framelen:       0,
+            duration:       0,
         }
     }
 }
@@ -46,6 +48,7 @@ impl<'a> DemuxCore<'a> for TTADemuxer<'a> {
         self.framelen = srate * 256 / 245;
 
         self.nframes = (self.nsamples + self.framelen - 1) / self.framelen;
+        self.duration = u64::from(self.nsamples) * 1000 / u64::from(srate);
 
         seek_index.mode = SeekIndexMode::Present;
         let mut off = u64::from(self.nframes) * 4 + 4 + 22;
@@ -78,8 +81,7 @@ impl<'a> DemuxCore<'a> for TTADemuxer<'a> {
         self.src.seek(SeekFrom::Start(off))?;
 
         let stream = strmgr.get_stream(0).unwrap();
-        let (tb_num, tb_den) = stream.get_timebase();
-        let ts = NATimeInfo::new(Some(self.cur_frame.into()), None, None, tb_num, tb_den);
+        let ts = stream.make_ts(Some(self.cur_frame.into()), None, None);
         let pkt = self.src.read_packet(stream, ts, true, size)?;
 
         self.cur_frame += 1;
@@ -96,7 +98,7 @@ impl<'a> DemuxCore<'a> for TTADemuxer<'a> {
 
         Ok(())
     }
-    fn get_duration(&self) -> u64 { 0 }
+    fn get_duration(&self) -> u64 { self.duration }
 }
 
 impl<'a> NAOptionHandler for TTADemuxer<'a> {
@@ -121,6 +123,7 @@ mod test {
 
     #[test]
     fn test_tta_demux() {
+        // sample: https://samples.mplayerhq.hu/A-codecs/lossless/luckynight.tta
         let mut file = File::open("assets/LLaudio/luckynight.tta").unwrap();
         let mut fr = FileReader::new_read(&mut file);
         let mut br = ByteReader::new(&mut fr);