enhance printed runtime stats
authorKostya Shishkov <kostya.shishkov@gmail.com>
Fri, 10 Mar 2023 18:35:17 +0000 (19:35 +0100)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Fri, 10 Mar 2023 18:35:17 +0000 (19:35 +0100)
src/main.rs

index 5e00cf08a8412bd9cac2dfa37c64602011bb5184..41a4a927b9c540a28c20f006fac5bae0ae3547d0 100644 (file)
@@ -99,7 +99,7 @@ struct Transcoder {
     no_audio:       bool,
     start:          NATimePoint,
     end:            NATimePoint,
-    verbose:        bool,
+    verbose:        u8,
 }
 
 macro_rules! parse_and_apply_options {
@@ -954,7 +954,9 @@ fn main() {
                     return;
                 }
             },
-            "--verbose" | "-v" => transcoder.verbose = true,
+            "--verbose" | "-v" => transcoder.verbose = 1,
+            "-vv" => transcoder.verbose = 2,
+            "-v-" => transcoder.verbose = 0,
             _ => {
                 if args[arg_idx].starts_with("--istream") {
                     let opt0 = &args[arg_idx];
@@ -1107,6 +1109,8 @@ println!("stream {} - {} {}", i, s, info.get_name());
 
     let mut time = Instant::now();
     let show_interval = Duration::from_millis(100);
+    let mut adata_size = 0;
+    let mut vdata_size = 0;
     'main_loop: loop {
         let pktres = dmx.get_frame();
         if let Err(DemuxerError::EOF) = pktres { break; }
@@ -1117,7 +1121,7 @@ println!("stream {} - {} {}", i, s, info.get_name());
         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();
-        if transcoder.verbose && time.elapsed() >= show_interval {
+        if transcoder.verbose > 0 && time.elapsed() >= show_interval {
             if let Some(pts) = pkt.get_pts() {
                  let cur_time = format_time(NATimeInfo::ts_to_time(pts, 1000, pkt.ts.tb_num, pkt.ts.tb_den));
                 print!(" {}", cur_time);
@@ -1127,6 +1131,9 @@ println!("stream {} - {} {}", i, s, info.get_name());
             if !duration_string.is_empty() {
                 print!(" / {}", duration_string);
             }
+            if transcoder.verbose > 1 {
+                print!(" data sizes V: {} A: {}", vdata_size, adata_size);
+            }
             print!("\r");
             std::io::stdout().flush().unwrap();
             time = Instant::now();
@@ -1137,6 +1144,12 @@ println!("stream {} - {} {}", i, s, info.get_name());
                 let dstr = mux.get_stream(dst_id as usize).unwrap();
                 pkt.reassign(dstr, pkt.get_time_information());
                 if transcoder.end != NATimePoint::None && !pkt.ts.less_than(transcoder.end) { break 'main_loop; }
+                let pkt_size = pkt.get_buffer().len();
+                match pkt.get_stream().get_media_type() {
+                    StreamType::Video => { vdata_size += pkt_size; },
+                    StreamType::Audio => { adata_size += pkt_size; },
+                    _ => {},
+                };
                 if mux.mux_frame(pkt).is_err() {
                     println!("error muxing packet");
                     break;
@@ -1160,6 +1173,12 @@ println!("stream {} - {} {}", i, s, info.get_name());
                         }
                         while let Ok(Some(pkt)) = encoder.get_packet() {
                             if transcoder.end != NATimePoint::None && !pkt.ts.less_than(transcoder.end) { break 'main_loop; }
+                            let pkt_size = pkt.get_buffer().len();
+                            match pkt.get_stream().get_media_type() {
+                                StreamType::Video => { vdata_size += pkt_size; },
+                                StreamType::Audio => { adata_size += pkt_size; },
+                                _ => {},
+                            };
                             mux.mux_frame(pkt).unwrap();
                         }
                     }
@@ -1205,7 +1224,7 @@ println!("stream {} - {} {}", i, s, info.get_name());
             _ => {},
         };
     }
-    if transcoder.verbose {
+    if transcoder.verbose > 0 {
         println!();
     }