X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=src%2Fdemuxers%2Fmod.rs;h=5e337a50d4311ce56f56d16c2ce91370247b3a25;hb=3f7c7cfd270b5b75917508aee6ca5877433a984d;hp=6499517de33b15124bc4b1c1aa60ad02f2396e32;hpb=6611650404a13bca86a311afdc314406e725897c;p=nihav.git diff --git a/src/demuxers/mod.rs b/src/demuxers/mod.rs index 6499517..5e337a5 100644 --- a/src/demuxers/mod.rs +++ b/src/demuxers/mod.rs @@ -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 + '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 +}