fn open(&mut self, strmgr: &mut StreamManager, seek_index: &mut SeekIndex) -> DemuxerResult<()> {
let riff = self.src.read_u32be()?;
let riff_size = self.src.read_u32le()? as usize;
- let riff_end = self.src.tell() + if riff_size > 0 { (riff_size as u64) } else { u64::from(std::u32::MAX) };
+ let riff_end = self.src.tell() + if riff_size > 0 { riff_size as u64 } else { u64::from(std::u32::MAX) };
let wave = self.src.read_u32be()?;
validate!(riff == mktag!(b"RIFF"));
validate!(wave == mktag!(b"WAVE"));
let str = strmgr.get_stream(0);
if str.is_none() { return Err(InvalidData); }
let stream = str.unwrap();
- let ts = NATimeInfo::new(None, None, None, 1, self.srate);
+ let pts = if self.avg_bytes != 0 {
+ let pos = self.src.tell() - self.data_pos;
+ Some(pos * u64::from(self.srate) / u64::from(self.avg_bytes))
+ } else {
+ None
+ };
+ let ts = NATimeInfo::new(pts, None, None, 1, self.srate);
if self.is_pcm {
let mut bsize = self.block_size;
while bsize < 256 {