X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=src%2Fdemuxers%2Fmod.rs;h=42399bfac5fed16cbcfcf2269d6b591f63097689;hb=d4df9ee1ede2aafa2fee47f327683cbdf165bb6b;hp=eb75d5711b4d66597af8573dbb8851e2a68e41c4;hpb=bcfeae48693ae98aa504b86e6ced38de0573e302;p=nihav.git diff --git a/src/demuxers/mod.rs b/src/demuxers/mod.rs index eb75d57..42399bf 100644 --- a/src/demuxers/mod.rs +++ b/src/demuxers/mod.rs @@ -1,8 +1,3 @@ -#[cfg(feature="demuxer_gdv")] -mod gdv; -#[cfg(feature="demuxer_avi")] -mod avi; - use std::rc::Rc; use frame::*; use io::byteio::*; @@ -16,6 +11,7 @@ pub enum DemuxerError { IOError, NotImplemented, MemoryError, + TryAgain, } type DemuxerResult = Result; @@ -43,7 +39,7 @@ impl<'a> NAPacketReader for ByteReader<'a> { } fn fill_packet(&mut self, pkt: &mut NAPacket) -> DemuxerResult<()> { let mut refbuf = pkt.get_buffer(); - let mut buf = Rc::make_mut(&mut refbuf); + let buf = Rc::make_mut(&mut refbuf); let res = self.read_buf(buf.as_mut_slice()); if let Err(_) = res { return Err(DemuxerError::IOError); } Ok(()) @@ -99,6 +95,14 @@ impl StreamManager { false } } + pub fn is_ignored_id(&self, id: u32) -> bool { + for i in 0..self.streams.len() { + if self.streams[i].get_id() == id { + return self.ignored[i]; + } + } + false + } pub fn set_ignored(&mut self, idx: usize) { if idx < self.ignored.len() { self.ignored[idx] = true; @@ -196,11 +200,29 @@ pub trait DemuxerCreator { fn get_name(&self) -> &'static str; } +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> { @@ -215,6 +237,6 @@ pub fn find_demuxer(name: &str) -> Option<&DemuxerCreator> { 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)?; + dmx.open(&mut str)?; Ok(Demuxer::new(dmx, str)) }