]> git.nihav.org Git - nihav-encoder.git/commitdiff
add an option to prune unsupported input streams
authorKostya Shishkov <kostya.shishkov@gmail.com>
Thu, 12 Feb 2026 06:38:08 +0000 (07:38 +0100)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Thu, 12 Feb 2026 06:38:08 +0000 (07:38 +0100)
src/main.rs
src/transcoder.rs

index 1f5846c0c0c4b94926f96a15cb4f5e2e404b39d4..07ad781e85f17066f622096311bf579e2993ca05 100644 (file)
@@ -198,6 +198,7 @@ fn main() {
     let mut profile_name = "".to_string();
     let mut custom_profile = false;
     let mut ignerr = false;
+    let mut skip_unknown = false;
     while arg_idx < args.len() {
         match args[arg_idx].as_str() {
             "--list-decoders" => {
@@ -368,6 +369,9 @@ fn main() {
             "--ignerr" => {
                 ignerr = true;
             },
+            "--skip-unknown" => {
+                skip_unknown = true;
+            },
             "-f" => {
                 next_arg!(args, arg_idx);
                 transcoder.input_fmt[0] = Some(args[arg_idx].clone());
@@ -527,6 +531,10 @@ fn main() {
         }
     }
 
+    if skip_unknown {
+        transcoder.prune_input_streams();
+    }
+
     let output_fmt = if let Some(ref fmtname) = transcoder.output_fmt {
             fmtname
         } else if transcoder.output_name.as_str() == "/dev/null" {
index bef9f6c897c78952fd7d461382a37d134f4ac19c..a8e0c9b6cabd8cc9a08246aeb8d8dc524318c638 100644 (file)
@@ -394,6 +394,22 @@ pub struct Transcoder {
 
 impl Transcoder {
     pub fn new() -> Self { Self::default() }
+    pub fn prune_input_streams(&mut self) {
+        for (dec_no, dec) in self.decoders.iter().enumerate() {
+            if dec.is_some() {
+                continue;
+            }
+            let streamno = dec_no as u32;
+            let sidx = if let Some(idx) = self.istr_opts.iter().position(|el| el.id == streamno) {
+                idx
+            } else {
+                self.istr_opts.push(InputStreamOptions {id: streamno, drop: false, dec_opts: Vec::new() });
+                self.istr_opts.len() - 1
+            };
+            let istr = &mut self.istr_opts[sidx];
+            istr.drop = true;
+        }
+    }
     pub fn parse_istream_options(&mut self, opt0: &str, opt1: &str) -> bool {
         let (_, strno) = opt0.split_at(9);
         let ret = strno.parse::<u32>();