]> git.nihav.org Git - nihav-encoder.git/commitdiff
parse stream-specific profile video options
authorKostya Shishkov <kostya.shishkov@gmail.com>
Mon, 30 Mar 2026 13:54:47 +0000 (15:54 +0200)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Mon, 30 Mar 2026 13:54:47 +0000 (15:54 +0200)
src/transcoder.rs

index ca82c99fb960c3dd1d64183c1af52cb3beff2935..a90484b36f79a0b5a3a59a84554aa87d86f2626f 100644 (file)
@@ -1034,7 +1034,59 @@ println!("encoder {} is not supported by output (expected {})", istr.id, istr.ge
                     StreamType::Video if !profile.vname.is_empty() => {
                         oopts.enc_name = profile.vname.to_owned();
                         for (name, argument) in profile.voptions.iter() {
-                            oopts.enc_opts.push(OptionArgs { name: name.to_string(), value: argument.map(|val| val.to_string()) });
+                            match *name {
+                                "pixfmt" => {
+                                    if let Some(arg) = argument {
+                                        if oopts.enc_params.format == NACodecTypeInfo::None {
+                                            oopts.enc_params.format = istr.get_info().get_properties();
+                                        }
+                                        if let NACodecTypeInfo::Video(ref mut vinfo) = oopts.enc_params.format {
+                                            if let Ok(val) = arg.parse::<NAPixelFormaton>() {
+                                                vinfo.format = val;
+                                            } else {
+                                                println!("invalid pixel format");
+                                            }
+                                        }
+                                    } else {
+                                        println!("pixfmt requires an argument");
+                                    }
+                                },
+                                "width" => {
+                                    if let Some(arg) = argument {
+                                        if oopts.enc_params.format == NACodecTypeInfo::None {
+                                            oopts.enc_params.format = istr.get_info().get_properties();
+                                        }
+                                        if let NACodecTypeInfo::Video(ref mut vinfo) = oopts.enc_params.format {
+                                            if let Ok(val) = arg.parse::<usize>() {
+                                                vinfo.width = val;
+                                            } else {
+                                                println!("invalid width");
+                                            }
+                                        }
+                                    } else {
+                                        println!("width requires an argument");
+                                    }
+                                },
+                                "height" => {
+                                    if let Some(arg) = argument {
+                                        if oopts.enc_params.format == NACodecTypeInfo::None {
+                                            oopts.enc_params.format = istr.get_info().get_properties();
+                                        }
+                                        if let NACodecTypeInfo::Video(ref mut vinfo) = oopts.enc_params.format {
+                                            if let Ok(val) = arg.parse::<usize>() {
+                                                vinfo.height = val;
+                                            } else {
+                                                println!("invalid height");
+                                            }
+                                        }
+                                    } else {
+                                        println!("height requires an argument");
+                                    }
+                                },
+                                _ => {
+                                    oopts.enc_opts.push(OptionArgs { name: name.to_string(), value: argument.map(|val| val.to_string()) });
+                                }
+                            }
                         }
                     },
                     _ => {},
@@ -1047,7 +1099,9 @@ println!("encoder {} is not supported by output (expected {})", istr.id, istr.ge
                 return RegisterResult::Failed;
             }
             let mut encoder = (enc_create.unwrap())();
-            oopts.enc_params.format = istr.get_info().get_properties();
+            if oopts.enc_params.format == NACodecTypeInfo::None {
+                oopts.enc_params.format = istr.get_info().get_properties();
+            }
             if self.global_tb != (0, 0) {
                 oopts.enc_params.tb_num = self.global_tb.0;
                 oopts.enc_params.tb_den = self.global_tb.1;