X-Git-Url: https://git.nihav.org/?p=nihav-encoder.git;a=blobdiff_plain;f=src%2Fdemux.rs;fp=src%2Fdemux.rs;h=61ddbaf08646d747fb052a6a61cbcd0e9f61cfe1;hp=0297c2fadc25636c181da1eff8f7c1ac69ede595;hb=90683bc3ac9d2adbe4a6b7239e727a36bd513678;hpb=76ea2e417f92e5709384b013b547aa1c9e08b88f diff --git a/src/demux.rs b/src/demux.rs index 0297c2f..61ddbaf 100644 --- a/src/demux.rs +++ b/src/demux.rs @@ -6,6 +6,7 @@ use nihav_registry::detect; use nihav_core::io::byteio::ByteReader; use nihav_allstuff::*; use crate::null::*; +use crate::imgseq::*; pub struct FullRegister { pub dmx_reg: RegisteredDemuxers, @@ -57,6 +58,7 @@ pub enum DemuxerObject<'a> { Normal(Demuxer<'a>), Raw(RawDemuxer<'a>, Vec>>, bool), RawStream(RawStreamCtx<'a>), + ImageSequence(ImgSeqDemuxer), } impl<'a> DemuxerObject<'a> { @@ -141,6 +143,9 @@ impl<'a> DemuxerObject<'a> { DemuxerObject::None } } + pub fn create_imgseq(isd: ImgSeqDemuxer) -> Self { + DemuxerObject::ImageSequence(isd) + } pub fn is_none(&self) -> bool { matches!(*self, DemuxerObject::None) } @@ -160,6 +165,7 @@ impl<'a> DemuxerObject<'a> { DemuxerObject::Normal(ref dmx) => dmx.get_num_streams(), DemuxerObject::Raw(ref dmx, _, _) => dmx.get_num_streams(), DemuxerObject::RawStream(_) => 1, + DemuxerObject::ImageSequence(_) => 1, } } pub fn get_stream(&self, idx: usize) -> Option { @@ -167,6 +173,7 @@ impl<'a> DemuxerObject<'a> { DemuxerObject::Normal(ref dmx) => dmx.get_stream(idx), DemuxerObject::Raw(ref dmx, _, _) => dmx.get_stream(idx), DemuxerObject::RawStream(ref ctx) if idx == 0 => Some(ctx.stream.clone()), + DemuxerObject::ImageSequence(ref ctx) if idx == 0 => Some(ctx.stream.clone()), _ => None, } } @@ -175,6 +182,7 @@ impl<'a> DemuxerObject<'a> { DemuxerObject::Normal(ref dmx) => dmx.get_streams(), DemuxerObject::Raw(ref dmx, _, _) => dmx.get_streams(), DemuxerObject::RawStream(ref ctx) => ctx.sm.iter(), + DemuxerObject::ImageSequence(ref ctx) => ctx.sm.iter(), _ => unreachable!(), } } @@ -183,6 +191,7 @@ impl<'a> DemuxerObject<'a> { DemuxerObject::Normal(ref dmx) => dmx.get_stream_manager(), DemuxerObject::Raw(ref dmx, _, _) => dmx.get_stream_manager(), DemuxerObject::RawStream(ref ctx) => &ctx.sm, + DemuxerObject::ImageSequence(ref ctx) => &ctx.sm, _ => unreachable!(), } } @@ -262,6 +271,7 @@ impl<'a> DemuxerObject<'a> { }; } }, + DemuxerObject::ImageSequence(ref mut ctx) => ctx.get_frame(), _ => unreachable!(), } } @@ -269,6 +279,7 @@ impl<'a> DemuxerObject<'a> { match *self { DemuxerObject::Normal(ref mut dmx) => dmx.seek(seek_time), DemuxerObject::Raw(ref mut dmx, _, _) => dmx.seek(seek_time), + DemuxerObject::ImageSequence(ref mut ctx) => ctx.seek(seek_time), _ => Err(DemuxerError::NotImplemented), } } @@ -279,6 +290,7 @@ impl<'a> NAOptionHandler for DemuxerObject<'a> { match *self { DemuxerObject::Normal(ref dmx) => dmx.get_supported_options(), DemuxerObject::Raw(ref dmx, _, _) => dmx.get_supported_options(), + DemuxerObject::ImageSequence(ref ctx) => ctx.get_supported_options(), _ => &[], } } @@ -286,6 +298,7 @@ impl<'a> NAOptionHandler for DemuxerObject<'a> { match *self { DemuxerObject::Normal(ref mut dmx) => dmx.set_options(options), DemuxerObject::Raw(ref mut dmx, _, _) => dmx.set_options(options), + DemuxerObject::ImageSequence(ref mut ctx) => ctx.set_options(options), _ => {}, } } @@ -293,6 +306,7 @@ impl<'a> NAOptionHandler for DemuxerObject<'a> { match *self { DemuxerObject::Normal(ref dmx) => dmx.query_option_value(name), DemuxerObject::Raw(ref dmx, _, _) => dmx.query_option_value(name), + DemuxerObject::ImageSequence(ref ctx) => ctx.query_option_value(name), _ => None, } }