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 {
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);
}
} else {
let mut hdrbuf = [0u8; WV_HEADER_SIZE];
+ let lastoff = self.known_frames.last().unwrap_or(&FrameSeekInfo::default()).off;
+ self.src.seek(SeekFrom::Start(lastoff))?;
loop {
self.src.peek_buf(&mut hdrbuf)?;
let hdr = WVHeader::parse(&hdrbuf)?;
Err(DemuxerError::NotPossible)
}
}
+ fn get_duration(&self) -> u64 { 0 }
}
impl<'a> NAOptionHandler for WavPackDemuxer<'a> {
#[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);