None
}
+#[derive(Clone,Copy,Default,PartialEq)]
+enum LogLevel {
+ #[default]
+ Verbose,
+ Essentials,
+ Quiet,
+}
+
struct Player {
sdl_context: sdl2::Sdl,
vsystem: sdl2::VideoSubsystem,
tkeep: TimeKeep,
- quiet: bool,
+ loglevel: LogLevel,
debug: bool,
osd: OSD,
show_osd: Option<bool>,
tkeep: TimeKeep::new(),
- quiet: false,
+ loglevel: LogLevel::default(),
debug: false,
osd: OSD::new(),
show_osd: None,
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?
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);
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);
},
_ => {},
};
- if !self.paused && !self.quiet {
+ if !self.paused && self.loglevel == LogLevel::Verbose {
print!("{:60}\r", ' ');
std::io::stdout().flush().unwrap();
}
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)});
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));
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});
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 {
tb_num = tbn;
tb_den = tbd;
self.has_video = true;
- if !self.quiet {
+ if self.loglevel != LogLevel::Quiet {
println!(" using hardware-accelerated decoding");
}
continue;
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");
}
}
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;
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 {
thread::sleep(Duration::from_millis(20));
}
}
- if !self.quiet {
+ if self.loglevel == LogLevel::Verbose {
println!();
}
std::mem::swap(&mut self.vcontrol, &mut new_vcontrol);
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);