add short aliases for some commands
[nihav-encoder.git] / src / main.rs
index 0d5082d78162452bf0b74b10c1b501eba76dc574..38de7771b02bdbb9bd4f4d62c47716e0aa15e7d6 100644 (file)
@@ -121,7 +121,7 @@ impl Transcoder {
                 self.istr_opts.len() - 1
             };
         let istr = &mut self.istr_opts[sidx];
-        
+
         for opt in opt1.split(',') {
             let oval: Vec<_> = opt.split('=').collect();
             if oval.len() == 1 {
@@ -152,7 +152,7 @@ impl Transcoder {
                 self.ostr_opts.len() - 1
             };
         let ostr = &mut self.ostr_opts[sidx];
-        
+
         for opt in opt1.split(',') {
             let oval: Vec<_> = opt.split('=').collect();
             if oval.len() == 1 {
@@ -222,7 +222,21 @@ impl Transcoder {
                             println!("video option for audio stream");
                         }
                     },
-//todo formaton
+                    "pixfmt" => {
+                        if ostr.enc_params.format == NACodecTypeInfo::None {
+                            ostr.enc_params.format = NACodecTypeInfo::Video(NAVideoInfo::new(0, 0, false, YUV420_FORMAT));
+                        }
+                        if let NACodecTypeInfo::Video(ref mut vinfo) = ostr.enc_params.format {
+                            let ret = oval[1].parse::<NAPixelFormaton>();
+                            if let Ok(val) = ret {
+                                vinfo.format = val;
+                            } else {
+                                println!("invalid pixel format");
+                            }
+                        } else {
+                            println!("video option for audio stream");
+                        }
+                    },
                     "srate" => {
                         if ostr.enc_params.format == NACodecTypeInfo::None {
                             ostr.enc_params.format = NACodecTypeInfo::Audio(NAAudioInfo::new(0, 0, SND_S16_FORMAT, 0));
@@ -268,7 +282,37 @@ impl Transcoder {
                             println!("audio option for video stream");
                         }
                     },
-//todo soniton, channel map
+                    "sfmt" => {
+                        if ostr.enc_params.format == NACodecTypeInfo::None {
+                            ostr.enc_params.format = NACodecTypeInfo::Audio(NAAudioInfo::new(0, 0, SND_S16_FORMAT, 0));
+                        }
+                        if let NACodecTypeInfo::Audio(ref mut ainfo) = ostr.enc_params.format {
+                            let ret = oval[1].parse::<NASoniton>();
+                            if let Ok(val) = ret {
+                                ainfo.format = val;
+                            } else {
+                                println!("invalid audio format");
+                            }
+                        } else {
+                            println!("audio option for video stream");
+                        }
+                    },
+// todo channel map negotiation
+                    /*"chmap" => {
+                        if ostr.enc_params.format == NACodecTypeInfo::None {
+                            ostr.enc_params.format = NACodecTypeInfo::Audio(NAAudioInfo::new(0, 0, SND_S16_FORMAT, 0));
+                        }
+                        if let NACodecTypeInfo::Audio(ref mut ainfo) = ostr.enc_params.format {
+                            let ret = oval[1].parse::<NAChannelMap>();
+                            if let Ok(val) = ret {
+                                ainfo.chmap = val;
+                            } else {
+                                println!("invalid channel map");
+                            }
+                        } else {
+                            println!("audio option for video stream");
+                        }
+                    },*/
                     "bitrate" => {
                         let ret = oval[1].parse::<u32>();
                         if let Ok(val) = ret {
@@ -366,6 +410,7 @@ impl Transcoder {
                     return false;
                 }
                 let mut encoder = (enc_create.unwrap())();
+                let forced_out = oopts.enc_params.format != NACodecTypeInfo::None;
                 if oopts.enc_params.format == NACodecTypeInfo::None {
                     oopts.enc_params.format = istr.get_info().get_properties();
                 }
@@ -383,7 +428,7 @@ impl Transcoder {
 //todo check for params mismatch
                 let cvt = match (&oopts.enc_params.format, &ret_eparams.format) {
                         (NACodecTypeInfo::Video(svinfo), NACodecTypeInfo::Video(dvinfo)) => {
-                            if svinfo == dvinfo {
+                            if svinfo == dvinfo && !forced_out {
                                 OutputConvert::None
                             } else {
                                 let ofmt = ScaleInfo { fmt: dvinfo.format, width: dvinfo.width, height: dvinfo.height };
@@ -670,7 +715,7 @@ fn main() {
                 }
                 printed_info = true;
             },
-            "--input" => {
+            "--input" | "-i" => {
                 next_arg!(args, arg_idx);
                 transcoder.input_name = args[arg_idx].clone();
             },
@@ -678,7 +723,7 @@ fn main() {
                 next_arg!(args, arg_idx);
                 transcoder.input_fmt = Some(args[arg_idx].clone());
             },
-            "--output" => {
+            "--output" | "-o" => {
                 next_arg!(args, arg_idx);
                 transcoder.output_name = args[arg_idx].clone();
             },
@@ -693,10 +738,10 @@ fn main() {
                     return;
                 }
             },
-            "--no-video" => {
+            "--no-video" | "-vn" => {
                 transcoder.no_video = true;
             },
-            "--no-audio" => {
+            "--no-audio" | "-an" => {
                 transcoder.no_audio = true;
             },
             "--start" => {
@@ -715,7 +760,7 @@ fn main() {
                 if let Ok(val) = ret {
                     transcoder.end = val;
                 } else {
-                    println!("invalid start time");
+                    println!("invalid end time");
                     return;
                 }
             },