From da4e0fb3a4a0e5af164fcd7e5d6407192bdc2b93 Mon Sep 17 00:00:00 2001 From: Kostya Shishkov Date: Mon, 30 Mar 2026 15:54:47 +0200 Subject: [PATCH] parse stream-specific profile video options --- src/transcoder.rs | 58 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 56 insertions(+), 2 deletions(-) diff --git a/src/transcoder.rs b/src/transcoder.rs index ca82c99..a90484b 100644 --- a/src/transcoder.rs +++ b/src/transcoder.rs @@ -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::() { + 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::() { + 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::() { + 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; -- 2.39.5