introduce option handling for demuxers
[nihav.git] / nihav-rad / src / demuxers / smacker.rs
index 741756c12b3418f0c44fe6b0006a3b5987c70274..41cad05e853d5bd3527b3d8da737bff660fb40bc 100644 (file)
@@ -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();
@@ -258,6 +261,12 @@ impl<'a> DemuxCore<'a> for SmackerVideoDemuxer<'a> {
     }
 }
 
+impl<'a> NAOptionHandler for SmackerVideoDemuxer<'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> SmackerVideoDemuxer<'a> {
     fn new(io: &'a mut ByteReader<'a>) -> Self {
         SmackerVideoDemuxer {