pub use crate::frame::*;
pub use crate::io::byteio::*;
pub use crate::demuxers::{StreamManager, StreamIter};
+pub use crate::options::*;
/// A list specifying general muxing errors.
#[derive(Debug,Clone,Copy,PartialEq)]
}
/// A trait for muxing operations.
-pub trait MuxCore<'a> {
+pub trait MuxCore<'a>: NAOptionHandler {
/// Prepares everything for packet muxing.
fn create(&mut self, strmgr: &StreamManager) -> MuxerResult<()>;
/// Queues a packet for muxing.
impl<'a> Muxer<'a> {
/// Constructs a new `Muxer` instance.
- fn new(mux: Box<dyn MuxCore<'a> + 'a>, str: StreamManager) -> Self {
+ fn new(mux: Box<dyn MuxCore<'a> + 'a>, strmgr: StreamManager) -> Self {
Muxer {
mux,
- streams: str,
+ streams: strmgr,
}
}
/// Returns a stream reference by its number.
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()
}
}
}
+impl<'a> NAOptionHandler for Muxer<'a> {
+ fn get_supported_options(&self) -> &[NAOptionDefinition] {
+ self.mux.get_supported_options()
+ }
+ fn set_options(&mut self, options: &[NAOption]) {
+ self.mux.set_options(options);
+ }
+ fn query_option_value(&self, name: &str) -> Option<NAValue> {
+ self.mux.query_option_value(name)
+ }
+}
+
/// The trait for creating muxers.
pub trait MuxerCreator {
/// Creates new muxer instance that will use `ByteWriter` for output.
}
/// Creates muxer for a provided bytestream writer.
-pub fn create_muxer<'a>(mxcr: &MuxerCreator, str: StreamManager, bw: &'a mut ByteWriter<'a>) -> MuxerResult<Muxer<'a>> {
+pub fn create_muxer<'a>(mxcr: &dyn MuxerCreator, strmgr: StreamManager, bw: &'a mut ByteWriter<'a>) -> MuxerResult<Muxer<'a>> {
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 {
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()
}
}