]> git.nihav.org Git - nihav-encoder.git/blobdiff - src/main.rs
skip packets before start point
[nihav-encoder.git] / src / main.rs
index 8d5efd377fd67aa680101adeacd4e6ea267caafe..a6d464aed1dfdd47f8ef2d133d7fb33ebb04f860 100644 (file)
@@ -410,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();
                 }
@@ -427,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 };
@@ -714,7 +715,7 @@ fn main() {
                 }
                 printed_info = true;
             },
-            "--input" => {
+            "--input" | "-i" => {
                 next_arg!(args, arg_idx);
                 transcoder.input_name = args[arg_idx].clone();
             },
@@ -722,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();
             },
@@ -737,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" => {
@@ -759,7 +760,7 @@ fn main() {
                 if let Ok(val) = ret {
                     transcoder.end = val;
                 } else {
-                    println!("invalid start time");
+                    println!("invalid end time");
                     return;
                 }
             },
@@ -918,6 +919,7 @@ println!("stream {} - {} {}", i, s, info.get_name());
             break;
         }
         let mut pkt = pktres.unwrap();
+        if transcoder.start != NATimePoint::None && pkt.ts.less_than(transcoder.start) { continue; }
         let src_id = pkt.get_stream().get_num();
         match transcoder.encoders[src_id] {
             OutputMode::Drop => {},
@@ -933,6 +935,9 @@ println!("stream {} - {} {}", i, s, info.get_name());
             OutputMode::Encode(dst_id, ref mut encoder, ref mut cvt) => {
                 if let Some((ref mut dsupp, ref mut decoder)) = transcoder.decoders[src_id] {
                     let ret = decoder.decode(dsupp, &pkt);
+                    if let (true, Err(DecoderError::MissingReference)) = (transcoder.start != NATimePoint::None, &ret) {
+                        continue;
+                    }
                     if ret.is_err() {
                         println!("error decoding stream {}", src_id);
                         break;