]> git.nihav.org Git - nihav-player.git/commitdiff
videoplayer: introduce slightly more granular log level
authorKostya Shishkov <kostya.shishkov@gmail.com>
Wed, 1 Jul 2026 01:48:11 +0000 (03:48 +0200)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Wed, 1 Jul 2026 01:48:11 +0000 (03:48 +0200)
videoplayer/src/main.rs

index 6384241321d3c7006ef65dff01f1b359ceff1ad8..dfc59463c53e36409068d59bc884f3a8a196205b 100644 (file)
@@ -412,6 +412,14 @@ fn try_display(disp_queue: &mut DispQueue, canvas: &mut Canvas<Window>, osd: &mu
     None
 }
 
+#[derive(Clone,Copy,Default,PartialEq)]
+enum LogLevel {
+    #[default]
+    Verbose,
+    Essentials,
+    Quiet,
+}
+
 struct Player {
     sdl_context:    sdl2::Sdl,
     vsystem:        sdl2::VideoSubsystem,
@@ -451,7 +459,7 @@ struct Player {
 
     tkeep:          TimeKeep,
 
-    quiet:          bool,
+    loglevel:       LogLevel,
     debug:          bool,
     osd:            OSD,
     show_osd:       Option<bool>,
@@ -506,7 +514,7 @@ impl Player {
 
             tkeep:          TimeKeep::new(),
 
-            quiet:          false,
+            loglevel:       LogLevel::default(),
             debug:          false,
             osd:            OSD::new(),
             show_osd:       None,
@@ -525,7 +533,7 @@ impl Player {
 
         let ret = dmx.seek(NATimePoint::Milliseconds(seektime));
         if ret.is_err() {
-            if !self.quiet {
+            if self.loglevel != LogLevel::Quiet {
                 println!(" seek error");
             }
             return Ok(()); //TODO: not ignore some of seek errors?
@@ -639,7 +647,7 @@ impl Player {
         for event in event_pump.poll_iter() {
             if let Event::Quit {..} = event {
                 self.end = true;
-                if !self.quiet {
+                if self.loglevel == LogLevel::Verbose {
                     println!();
                 }
                 return Ok(true);
@@ -698,14 +706,14 @@ impl Player {
                 match keycode {
                     Keycode::Escape => {
                         self.end = true;
-                        if !self.quiet {
+                        if self.loglevel == LogLevel::Verbose {
                             println!();
                         }
                         return Ok(true);
                     },
                     Keycode::Q if keymod.contains(Mod::RSHIFTMOD) || keymod.contains(Mod::LSHIFTMOD) => {
                         self.end = true;
-                        if !self.quiet {
+                        if self.loglevel == LogLevel::Verbose {
                             println!();
                         }
                         return Ok(true);
@@ -776,7 +784,7 @@ impl Player {
                     },
                     _ => {},
                 };
-                if !self.paused && !self.quiet {
+                if !self.paused && self.loglevel == LogLevel::Verbose {
                     print!("{:60}\r", ' ');
                     std::io::stdout().flush().unwrap();
                 }
@@ -785,7 +793,7 @@ impl Player {
         Ok(false)
     }
     fn play(&mut self, mut window: Window, name: &str, start_time: NATimePoint) -> Window {
-        if !self.quiet {
+        if self.loglevel != LogLevel::Quiet {
             println!("Playing {name}");
         }
         debug_log!(self; {format!("Playing {}", name)});
@@ -830,7 +838,7 @@ impl Player {
         let mut audio_dec: Option<DecoderStuff> = None;
 
         let duration = dmx.get_duration();
-        if !self.quiet {
+        if self.loglevel != LogLevel::Quiet {
             print!(" {dmx}");
             if duration != 0 {
                 print!(" total duration {}", format_time(duration));
@@ -850,7 +858,7 @@ impl Player {
             let decfunc = self.full_reg.dec_reg.find_decoder(info.get_name());
             let decfunc_mt = if self.use_mt { self.full_reg.mtdec_reg.find_decoder(info.get_name()) } else { None };
             let stream_info = format_stream_info(i, &s);
-            if !self.quiet {
+            if self.loglevel != LogLevel::Quiet {
                 println!("{stream_info}");
             }
             debug_log!(self; {stream_info});
@@ -870,7 +878,7 @@ impl Player {
                             height = props.get_height();
                         }
                         if dec.init(info.clone()).is_err() {
-                            if !self.quiet {
+                            if self.loglevel != LogLevel::Quiet {
                                 println!("failed to initialise hwaccel video decoder");
                             }
                         } else {
@@ -880,7 +888,7 @@ impl Player {
                             tb_num = tbn;
                             tb_den = tbd;
                             self.has_video = true;
-                            if !self.quiet {
+                            if self.loglevel != LogLevel::Quiet {
                                 println!(" using hardware-accelerated decoding");
                             }
                             continue;
@@ -902,7 +910,7 @@ impl Player {
                             tb_den = tbd;
                             self.has_video = true;
                             continue;
-                        } else if !self.quiet {
+                        } else if self.loglevel != LogLevel::Quiet {
                             println!("failed to create multi-threaded decoder, falling back");
                         }
                     }
@@ -1074,7 +1082,7 @@ impl Player {
             self.seeked = false;
             let ret = self.handle_events(&mut event_pump, &mut canvas, &mut dmx, &mut disp_q);
             if matches!(ret, Ok(true) | Err(_)) {
-                if !self.quiet {
+                if self.loglevel == LogLevel::Verbose {
                     println!();
                 }
                 break 'main;
@@ -1142,7 +1150,7 @@ impl Player {
                 if last_disp.elapsed().as_millis() >= 10 {
                     let c_time = self.tkeep.get_cur_time();
 
-                    if !self.quiet {
+                    if self.loglevel == LogLevel::Verbose {
                         if !self.debug {
                             print!(" {}  {}% \r", format_time(c_time), self.acontrol.get_volume());
                         } else {
@@ -1167,7 +1175,7 @@ impl Player {
                 thread::sleep(Duration::from_millis(20));
             }
         }
-        if !self.quiet {
+        if self.loglevel == LogLevel::Verbose {
             println!();
         }
         std::mem::swap(&mut self.vcontrol, &mut new_vcontrol);
@@ -1333,7 +1341,13 @@ fn main() {
                 player.no_sdl_scale = true;
             },
             "-quiet" => {
-                player.quiet = true;
+                player.loglevel = LogLevel::Quiet;
+            },
+            "-quieter" => {
+                player.loglevel = LogLevel::Essentials;
+            },
+            "-verbose" => {
+                player.loglevel = LogLevel::Verbose;
             },
             "-osd" => {
                 player.show_osd = Some(true);