]> git.nihav.org Git - nihav-player.git/blobdiff - sndplay/src/demux.rs
use NAPacketiser::attach_stream() where appropriate
[nihav-player.git] / sndplay / src / demux.rs
index de9a06739df8bae6721d63ae64bee1b5974cd173..d050bceb2ff592695575d1220927328547ddaea3 100644 (file)
@@ -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);
@@ -126,7 +127,8 @@ impl<'a> DemuxerObject<'a> {
         }
         br.seek(SeekFrom::Start(0)).unwrap();
         let mut buf = vec![0; 1048576];
-        let size = br.peek_buf(&mut buf).unwrap();
+        let size = br.read_buf_some(&mut buf).unwrap();
+        br.seek(SeekFrom::Start(0)).unwrap();
         let mut pname = "";
 
         for pinfo in reg.pkt_reg.iter() {
@@ -137,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)();
@@ -150,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 {
@@ -298,6 +297,10 @@ pub fn detect_tags(br: &mut ByteReader) -> (bool, u64, Option<u64>) {
             }
             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;