X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-llaudio%2Fsrc%2Fdemuxers%2Ftta.rs;h=88589a65d06f1a9178846c1604005fecc1326059;hb=8e14efb001fac3fecb0cb56df8705d23fa2231a8;hp=97ee808c01163898d54d112184606ad89a0bfcf9;hpb=87927c5732b39bb23209486bed8d7bb7fc56b92e;p=nihav.git diff --git a/nihav-llaudio/src/demuxers/tta.rs b/nihav-llaudio/src/demuxers/tta.rs index 97ee808..88589a6 100644 --- a/nihav-llaudio/src/demuxers/tta.rs +++ b/nihav-llaudio/src/demuxers/tta.rs @@ -9,6 +9,7 @@ struct TTADemuxer<'a> { offtab: Vec, sizetab: Vec, 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; @@ -62,7 +65,7 @@ impl<'a> DemuxCore<'a> for TTADemuxer<'a> { let ahdr = NAAudioInfo::new(srate, channels as u8, SND_S16P_FORMAT, 1); let ainfo = NACodecInfo::new("tta", NACodecTypeInfo::Audio(ahdr), Some(hdr)); - strmgr.add_stream(NAStream::new(StreamType::Audio, 0, ainfo, self.framelen, srate)).unwrap(); + strmgr.add_stream(NAStream::new(StreamType::Audio, 0, ainfo, self.framelen, srate, u64::from(self.nframes))).unwrap(); self.cur_frame = 0; @@ -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,6 +98,7 @@ impl<'a> DemuxCore<'a> for TTADemuxer<'a> { Ok(()) } + fn get_duration(&self) -> u64 { self.duration } } impl<'a> NAOptionHandler for TTADemuxer<'a> { @@ -120,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);