make an interface for working with demuxers
[nihav.git] / src / demuxers / mod.rs
index 6499517de33b15124bc4b1c1aa60ad02f2396e32..707984bcfca085f8e8d0d3418bff39e09f9eaccb 100644 (file)
@@ -193,3 +193,24 @@ impl FrameFromPacket for NAFrame {
         self.set_duration(pkt.duration);
     }
 }
+
+pub trait DemuxerCreator {
+    fn new_demuxer<'a>(&self, br: &'a mut ByteReader<'a>) -> Box<Demux<'a> + 'a>;
+    fn get_name(&self) -> &'static str;
+}
+
+const DEMUXERS: &[&'static DemuxerCreator] = &[
+#[cfg(feature="demuxer_avi")]
+    &avi::AVIDemuxerCreator {},
+#[cfg(feature="demuxer_gdv")]
+    &gdv::GDVDemuxerCreator {},
+];
+
+pub fn find_demuxer(name: &str) -> Option<&DemuxerCreator> {
+    for i in 0..DEMUXERS.len() {
+        if DEMUXERS[i].get_name() == name {
+            return Some(DEMUXERS[i]);
+        }
+    }
+    None
+}