X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=src%2Fmain.rs;h=e37092badf81b46d1720f2b976d494b56335fa77;hb=e6cb09af4353d230189592e288497ea06471f0bd;hp=08aab6b35a3e99898ba8ff0eba9097b3196d50b9;hpb=c0052668cc247fde763261adb6796f8b91639e0e;p=nihav-encoder.git diff --git a/src/main.rs b/src/main.rs index 08aab6b..e37092b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -13,9 +13,13 @@ use nihav_core::muxers::*; use nihav_core::scale::*; use nihav_core::soundcvt::*; use nihav_registry::detect; +use nihav_registry::register; use nihav_allstuff::*; use std::env; +mod null; +use null::*; + fn print_options(name: &str, options: &[NAOptionDefinition]) { if options.is_empty() { println!("No custom options."); @@ -350,7 +354,8 @@ impl Transcoder { if let Some(str_idx) = self.ostr_opts.iter().position(|str| str.id == out_id) { let oopts = &mut self.ostr_opts[str_idx]; - if cname == "copy" && istr.get_info().get_name() == cname { + if oopts.enc_name.as_str() == "copy" && (cname == "any" || istr.get_info().get_name() == cname) { + out_sm.add_stream_ref(istr.clone()); self.encoders.push(OutputMode::Copy(out_id)); } else if cname == "any" || oopts.enc_name.as_str() == cname { let enc_create = enc_reg.find_encoder(oopts.enc_name.as_str()); @@ -430,6 +435,7 @@ println!("encoder {} is not supported by output (expected {})", istr.id, istr.ge } } else { if cname == "any" || istr.get_info().get_name() == cname { + out_sm.add_stream_ref(istr.clone()); self.encoders.push(OutputMode::Copy(out_id)); } else { println!("stream {} ({}) can't be handled", istr.id, istr.get_info().get_name()); @@ -556,14 +562,54 @@ fn main() { let mut mux_reg = RegisteredMuxers::new(); nihav_register_all_muxers(&mut mux_reg); + mux_reg.add_muxer(NULL_MUXER); let mut enc_reg = RegisteredEncoders::new(); nihav_register_all_encoders(&mut enc_reg); + enc_reg.add_encoder(NULL_ENCODER); let mut transcoder = Transcoder::new(); let mut arg_idx = 1; while arg_idx < args.len() { match args[arg_idx].as_str() { + "--list-decoders" => { + if dec_reg.iter().len() > 0 { + println!("Registered decoders:"); + for dec in dec_reg.iter() { + let cdesc = register::get_codec_description(dec.name); + let full_name = if let Some(cd) = cdesc { cd.get_full_name() } else { "???" }; + println!(" {} ({})", dec.name, full_name); + } + } else { + println!("No registered decoders."); + } + }, + "--list-encoders" => { + if enc_reg.iter().len() > 0 { + println!("Registered encoders:"); + for enc in enc_reg.iter() { + let cdesc = register::get_codec_description(enc.name); + let full_name = if let Some(cd) = cdesc { cd.get_full_name() } else { "???" }; + println!(" {} ({})", enc.name, full_name); + } + } else { + println!("No registered encoders."); + } + }, + "--list-demuxers" => { + print!("Registered demuxers:"); + for dmx in dmx_reg.iter() { + print!(" {}", dmx.get_name()); + } + println!(); + }, + "--list-muxers" => { + print!("Registered muxers:"); + for mux in mux_reg.iter() { + print!(" {}", mux.get_name()); + } + println!(); + }, "--query-decoder-options" => { next_arg!(args, arg_idx); let cname = args[arg_idx].as_str();