-#[cfg(feature="demuxer_gdv")]
-mod gdv;
-#[cfg(feature="demuxer_avi")]
-mod avi;
-
use std::rc::Rc;
use frame::*;
use io::byteio::*;
IOError,
NotImplemented,
MemoryError,
+ TryAgain,
}
type DemuxerResult<T> = Result<T, DemuxerError>;
}
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(())
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;
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> {
pub fn create_demuxer<'a>(dmxcr: &DemuxerCreator, br: &'a mut ByteReader<'a>) -> DemuxerResult<Demuxer<'a>> {
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))
}