smkdemux: ignore unknown audio streams with payload being present
[nihav.git] / nihav-rad / src / demuxers / smacker.rs
index 09f1cd70e82c4c3468884ac3cea02ab0834335f7..3fb1a6ee5963d67ad038a166c3bbb98b35b23ed5 100644 (file)
@@ -161,7 +161,7 @@ impl<'a> DemuxCore<'a> for SmackerVideoDemuxer<'a> {
         self.start = src.tell();
         self.cur_frame = 0;
         self.reset_state();
-        
+
         Ok(())
     }
     fn get_frame(&mut self, strmgr: &mut StreamManager) -> DemuxerResult<NAPacket> {
@@ -213,11 +213,14 @@ impl<'a> DemuxCore<'a> for SmackerVideoDemuxer<'a> {
         let ts = NATimeInfo::new(Some(self.cur_pts), None, None, 1, 100000);
         for i in 0..NUM_AUDIO_TRACKS {
             if ((frame_flags >> (i + 1)) & 1) == 0 { continue; }
-            validate!(self.ainfo[i].is_present());
             let size                            = self.src.read_u32le()? as usize;
             validate!(size > 4);
             validate!(payload_size >= size);
             payload_size -= size;
+            if !self.ainfo[i].is_present() {
+                self.src.read_skip(size - 4)?;
+                continue;
+            }
             let strres = strmgr.get_stream(self.ainfo[i].id);
             validate!(strres.is_some());
             let stream = strres.unwrap();