X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-core%2Fsrc%2Fdemuxers%2Fmod.rs;fp=src%2Fdemuxers%2Fmod.rs;h=56e670db986575f50bf2e0e52f85955e2833844b;hb=5641dccfbf2a70d589cf094a0d4ed5a10f919f00;hp=adf954af270d215ed0bf5aa88f769308095b61af;hpb=b74ff9fac35d41737d71d97227fad233aa4a4b49;p=nihav.git diff --git a/src/demuxers/mod.rs b/nihav-core/src/demuxers/mod.rs similarity index 90% rename from src/demuxers/mod.rs rename to nihav-core/src/demuxers/mod.rs index adf954a..56e670d 100644 --- a/src/demuxers/mod.rs +++ b/nihav-core/src/demuxers/mod.rs @@ -14,7 +14,7 @@ pub enum DemuxerError { TryAgain, } -type DemuxerResult = Result; +pub type DemuxerResult = Result; pub trait DemuxCore<'a> { fn open(&mut self, strmgr: &mut StreamManager) -> DemuxerResult<()>; @@ -204,39 +204,45 @@ macro_rules! validate { ($a:expr) => { if !$a { println!("check failed at {}:{}", file!(), line!()); return Err(DemuxerError::InvalidData); } }; } -#[cfg(feature="demuxer_gdv")] -mod gdv; #[cfg(feature="demuxer_avi")] mod avi; -#[cfg(feature="demuxer_real")] -mod realmedia; const DEMUXERS: &[&'static DemuxerCreator] = &[ #[cfg(feature="demuxer_avi")] &avi::AVIDemuxerCreator {}, -#[cfg(feature="demuxer_gdv")] - &gdv::GDVDemuxerCreator {}, -#[cfg(feature="demuxer_real")] - &realmedia::RealMediaDemuxerCreator {}, -#[cfg(feature="demuxer_real")] - &realmedia::RealAudioDemuxerCreator {}, -#[cfg(feature="demuxer_real")] - &realmedia::RealIVRDemuxerCreator {}, ]; -pub fn find_demuxer(name: &str) -> Option<&DemuxerCreator> { - for &dmx in DEMUXERS { - if dmx.get_name() == name { - return Some(dmx); - } - } - None -} - pub fn create_demuxer<'a>(dmxcr: &DemuxerCreator, br: &'a mut ByteReader<'a>) -> DemuxerResult> { let mut dmx = dmxcr.new_demuxer(br); let mut str = StreamManager::new(); dmx.open(&mut str)?; Ok(Demuxer::new(dmx, str)) } + +pub struct RegisteredDemuxers { + dmxs: Vec<&'static DemuxerCreator>, +} + +impl RegisteredDemuxers { + pub fn new() -> Self { + Self { dmxs: Vec::new() } + } + pub fn add_demuxer(&mut self, dmx: &'static DemuxerCreator) { + self.dmxs.push(dmx); + } + pub fn find_demuxer(&self, name: &str) -> Option<&DemuxerCreator> { + for &dmx in self.dmxs.iter() { + if dmx.get_name() == name { + return Some(dmx); + } + } + None + } +} + +pub fn core_register_all_demuxers(rd: &mut RegisteredDemuxers) { + for demuxer in DEMUXERS.into_iter() { + rd.add_demuxer(*demuxer); + } +}