]> git.nihav.org Git - nihav.git/blobdiff - src/demuxers/mod.rs
prettier demuxers module
[nihav.git] / src / demuxers / mod.rs
index 6499517de33b15124bc4b1c1aa60ad02f2396e32..5e337a50d4311ce56f56d16c2ce91370247b3a25 100644 (file)
@@ -9,13 +9,19 @@ use frame::*;
 use std::collections::HashMap;
 use io::byteio::*;
 
+/// Possible stream types.
 #[derive(Debug,Clone,Copy)]
 #[allow(dead_code)]
 pub enum StreamType {
+    /// video stream
     Video,
+    /// audio stream
     Audio,
+    /// subtitles
     Subtitles,
+    /// any data stream (or might be an unrecognized audio/video stream)
     Data,
+    /// nonexistent stream
     None,
 }
 
@@ -193,3 +199,27 @@ impl FrameFromPacket for NAFrame {
         self.set_duration(pkt.duration);
     }
 }
+
+///The structure used to create demuxers.
+pub trait DemuxerCreator {
+    /// Create new demuxer instance that will use `ByteReader` source as an input.
+    fn new_demuxer<'a>(&self, br: &'a mut ByteReader<'a>) -> Box<Demux<'a> + 'a>;
+    /// Get the name of current demuxer creator.
+    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 &dmx in DEMUXERS {
+        if dmx.get_name() == name {
+            return Some(dmx);
+        }
+    }
+    None
+}