X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-llaudio%2Fsrc%2Fdemuxers%2Fwavpack.rs;h=6c5f8dd392b51d155abebc000ac519dc11439e36;hb=e6aaad5c5273cd814b5748b7faf3751835a37217;hp=d07a5a2844cace2f49ebb82a10374986d074dc97;hpb=7d6bb2e867e6f931a9791b2ee0ae66069edb4ae2;p=nihav.git diff --git a/nihav-llaudio/src/demuxers/wavpack.rs b/nihav-llaudio/src/demuxers/wavpack.rs index d07a5a2..6c5f8dd 100644 --- a/nihav-llaudio/src/demuxers/wavpack.rs +++ b/nihav-llaudio/src/demuxers/wavpack.rs @@ -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 { @@ -36,6 +36,7 @@ struct WVHeader { const WV_HEADER_SIZE: usize = 32; impl WVHeader { + #[allow(clippy::field_reassign_with_default)] fn parse(src: &[u8]) -> DemuxerResult { let mut mr = MemoryReader::new_read(src); let mut br = ByteReader::new(&mut mr); @@ -174,7 +175,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 +190,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 +205,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 +252,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 +278,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);