X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-core%2Fsrc%2Fmuxers%2Fmod.rs;h=eb71df5ec36b2f7e57ee10f013ed5470bc2b112c;hb=e6aaad5c5273cd814b5748b7faf3751835a37217;hp=49f4e2d8da197cf0e0d015066d3bce4f2e3f0db5;hpb=575959e8472949f202277b2cac0225a63ab1acdd;p=nihav.git diff --git a/nihav-core/src/muxers/mod.rs b/nihav-core/src/muxers/mod.rs index 49f4e2d..eb71df5 100644 --- a/nihav-core/src/muxers/mod.rs +++ b/nihav-core/src/muxers/mod.rs @@ -74,10 +74,10 @@ pub struct Muxer<'a> { impl<'a> Muxer<'a> { /// Constructs a new `Muxer` instance. - fn new(mux: Box + 'a>, str: StreamManager) -> Self { + fn new(mux: Box + 'a>, strmgr: StreamManager) -> Self { Muxer { mux, - streams: str, + streams: strmgr, } } /// Returns a stream reference by its number. @@ -97,11 +97,11 @@ impl<'a> Muxer<'a> { self.streams.iter() } - /// Demuxes a new packet from the container. + /// Queues a new packet for muxing. pub fn mux_frame(&mut self, pkt: NAPacket) -> MuxerResult<()> { self.mux.mux_frame(&self.streams, pkt) } - /// Returns internal seek index. + /// Flushes the current muxing state. pub fn flush(&mut self) -> MuxerResult<()> { self.mux.flush() } @@ -134,16 +134,16 @@ pub trait MuxerCreator { } /// Creates muxer for a provided bytestream writer. -pub fn create_muxer<'a>(mxcr: &MuxerCreator, str: StreamManager, bw: &'a mut ByteWriter<'a>) -> MuxerResult> { +pub fn create_muxer<'a>(mxcr: &dyn MuxerCreator, strmgr: StreamManager, bw: &'a mut ByteWriter<'a>) -> MuxerResult> { let mut mux = mxcr.new_muxer(bw); - mux.create(&str)?; - Ok(Muxer::new(mux, str)) + mux.create(&strmgr)?; + Ok(Muxer::new(mux, strmgr)) } /// List of registered muxers. #[derive(Default)] pub struct RegisteredMuxers { - muxes: Vec<&'static MuxerCreator>, + muxes: Vec<&'static dyn MuxerCreator>, } impl RegisteredMuxers { @@ -152,16 +152,15 @@ impl RegisteredMuxers { Self { muxes: Vec::new() } } /// Registers a new muxer. - pub fn add_muxer(&mut self, mux: &'static MuxerCreator) { + pub fn add_muxer(&mut self, mux: &'static dyn MuxerCreator) { self.muxes.push(mux); } /// Searches for a muxer that supports requested container format. - pub fn find_muxer(&self, name: &str) -> Option<&MuxerCreator> { - for &mux in self.muxes.iter() { - if mux.get_name() == name { - return Some(mux); - } - } - None + pub fn find_muxer(&self, name: &str) -> Option<&dyn MuxerCreator> { + self.muxes.iter().find(|&&mux| mux.get_name() == name).copied() + } + /// Provides an iterator over currently registered muxers. + pub fn iter(&self) -> std::slice::Iter<&dyn MuxerCreator> { + self.muxes.iter() } }