macro_rules! mktag {
($a:expr, $b:expr, $c:expr, $d:expr) => {
- (($a as u32) << 24) | (($b as u32) << 16) | (($c as u32) << 8) | ($d as u32)
+ (u32::from($a) << 24) | (u32::from($b) << 16) | (u32::from($c) << 8) | u32::from($d)
};
($arr:expr) => {
- (($arr[0] as u32) << 24) | (($arr[1] as u32) << 16) | (($arr[2] as u32) << 8) | ($arr[3] as u32)
+ (u32::from($arr[0]) << 24) | (u32::from($arr[1]) << 16) | (u32::from($arr[2]) << 8) | u32::from($arr[3])
};
}
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"));
}
}
- fn seek(&mut self, time: u64, _seek_index: &SeekIndex) -> DemuxerResult<()> {
+ fn seek(&mut self, time: NATimePoint, _seek_index: &SeekIndex) -> DemuxerResult<()> {
if self.block_size != 0 && self.avg_bytes != 0 {
- let seek_dst = u64::from(self.avg_bytes) * time / 1000;
- let seek_off = seek_dst / (self.block_size as u64) * (self.block_size as u64);
+ let seek_off = match time {
+ NATimePoint::Milliseconds(ms) => {
+ let seek_dst = u64::from(self.avg_bytes) * ms / 1000;
+ seek_dst / (self.block_size as u64) * (self.block_size as u64)
+ },
+ NATimePoint::PTS(pts) => (self.block_size as u64) * pts,
+ NATimePoint::None => return Ok(()),
+ };
self.src.seek(SeekFrom::Start(self.data_pos + seek_off))?;
Ok(())
} else {
}
}
+impl<'a> NAOptionHandler for WAVDemuxer<'a> {
+ fn get_supported_options(&self) -> &[NAOptionDefinition] { &[] }
+ fn set_options(&mut self, _options: &[NAOption]) { }
+ fn query_option_value(&self, _name: &str) -> Option<NAValue> { None }
+}
+
impl<'a> WAVDemuxer<'a> {
fn new(io: &'a mut ByteReader<'a>) -> Self {
WAVDemuxer {
let bits_per_sample = if csize >= 16 { self.src.read_u16le()? } else { 8 };
validate!(channels < 256);
- let edata;
- if csize > 16 {
- validate!(csize >= 18);
- let cb_size = self.src.read_u16le()? as usize;
- let mut buf = vec![0; cb_size];
+ let edata = if csize > 16 {
+ validate!(csize >= 18);
+ let cb_size = self.src.read_u16le()? as usize;
+ let mut buf = vec![0; cb_size];
self.src.read_buf(buf.as_mut_slice())?;
- edata = Some(buf);
- } else {
- edata = None;
- }
+ Some(buf)
+ } else {
+ None
+ };
let cname = register::find_codec_from_wav_twocc(format_tag).unwrap_or("unknown");
let soniton = if cname == "pcm" {