X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=sndplay%2Fsrc%2Fdemux.rs;h=d050bceb2ff592695575d1220927328547ddaea3;hb=c84ea16daef963fe73d4b2e69b20b68524563ae0;hp=9878500ae7a21710af2561f31cd2f685e370a7da;hpb=0ddbf4fce49821c4eb801cf05e93f05ab1c684a1;p=nihav-player.git diff --git a/sndplay/src/demux.rs b/sndplay/src/demux.rs index 9878500..d050bce 100644 --- a/sndplay/src/demux.rs +++ b/sndplay/src/demux.rs @@ -81,7 +81,7 @@ impl<'a> DemuxerObject<'a> { if !is_raw { let res = detect::detect_format(name, br); let (dmx_name, _) = res.unwrap_or(("", detect::DetectionScore::No)); - if dmx_name != "" { + if !dmx_name.is_empty() { println!("trying demuxer {} on {}", dmx_name, name); if let Some(dmx_fact) = reg.dmx_reg.find_demuxer(dmx_name) { br.seek(SeekFrom::Start(0)).unwrap(); @@ -89,7 +89,7 @@ impl<'a> DemuxerObject<'a> { return DemuxerObject::Normal(dmx); } } - if dmx_name != "" { + if !dmx_name.is_empty() { println!("trying raw demuxer {} on {}", dmx_name, name); if let Some(rdmx_fact) = reg.rdmx_reg.find_demuxer(dmx_name) { br.seek(SeekFrom::Start(0)).unwrap(); @@ -97,7 +97,8 @@ impl<'a> DemuxerObject<'a> { let mut pkts = Vec::new(); for stream in dmx.get_streams() { if let Some(pcreate) = reg.pkt_reg.find_packetiser(stream.get_info().get_name()) { - let packetiser = (pcreate)(); + let mut packetiser = (pcreate)(); + packetiser.attach_stream(stream); pkts.push(Some(packetiser)); } else { pkts.push(None); @@ -138,7 +139,7 @@ impl<'a> DemuxerObject<'a> { break; } } - if pname != "" { + if !pname.is_empty() { println!("found raw stream of type {} for {}", pname, name); let pcreate = reg.pkt_reg.find_packetiser(pname).unwrap(); let mut packetiser = (pcreate)(); @@ -151,10 +152,7 @@ impl<'a> DemuxerObject<'a> { } } pub fn is_none(&self) -> bool { - match *self { - DemuxerObject::None => true, - _ => false, - } + matches!(*self, DemuxerObject::None) } pub fn get_duration(&self) -> u64 { match *self { @@ -299,6 +297,10 @@ pub fn detect_tags(br: &mut ByteReader) -> (bool, u64, Option) { } start += size + 10; br.read_skip(size as usize).unwrap(); + while let Ok(0) = br.read_byte() { + start += 1; + } + br.seek(SeekFrom::Start(start)).unwrap(); is_raw = true; } else { break;