offtab: Vec<u64>,
sizetab: Vec<u32>,
framelen: u32,
+ duration: u64,
}
impl<'a> TTADemuxer<'a> {
offtab: Vec::new(),
sizetab: Vec::new(),
framelen: 0,
+ duration: 0,
}
}
}
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;
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;
Ok(())
}
- fn get_duration(&self) -> u64 { 0 }
+ fn get_duration(&self) -> u64 { self.duration }
}
impl<'a> NAOptionHandler for TTADemuxer<'a> {
#[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);