use crate::core::context::input::Input;
use crate::core::context::output::Output;
use crate::core::context::ffmpeg_context::FfmpegContext;
use crate::core::context::filter_complex::FilterComplex;
#[must_use]
pub struct FfmpegContextBuilder {
independent_readrate: bool,
inputs: Vec<Input>,
filter_descs: Vec<FilterComplex>,
outputs: Vec<Output>,
copy_ts: bool,
}
impl Default for FfmpegContextBuilder {
fn default() -> Self {
Self::new()
}
}
impl FfmpegContextBuilder {
pub fn new() -> Self {
Self {
independent_readrate: false,
inputs: vec![],
filter_descs: vec![],
outputs: vec![],
copy_ts: false,
}
}
pub fn independent_readrate(mut self) -> Self {
self.independent_readrate = true;
self
}
pub fn input(mut self, input: impl Into<Input>) -> Self {
self.inputs.push(input.into());
self
}
pub fn inputs(mut self, inputs: Vec<impl Into<Input>>) -> Self {
self.inputs = inputs.into_iter().map(|input| input.into()).collect();
self
}
pub fn output(mut self, output: impl Into<Output>) -> Self {
self.outputs.push(output.into());
self
}
pub fn outputs(mut self, outputs: Vec<impl Into<Output>>) -> Self {
self.outputs = outputs.into_iter().map(|output| output.into()).collect();
self
}
pub fn filter_desc(mut self, filter_desc: impl Into<FilterComplex>) -> Self {
self.filter_descs.push(filter_desc.into());
self
}
pub fn filter_descs(mut self, filter_descs: Vec<impl Into<FilterComplex>>) -> Self {
self.filter_descs = filter_descs.into_iter().map(|filter| filter.into()).collect();
self
}
pub fn copyts(mut self) -> Self {
self.copy_ts = true;
self
}
pub fn build(self) -> crate::error::Result<FfmpegContext> {
FfmpegContext::new_with_options(
self.independent_readrate,
self.inputs,
self.filter_descs,
self.outputs,
self.copy_ts
)
}
}