X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=videoplayer%2Fsrc%2Fmain.rs;h=2389e1f7f4d783ecd0cdcab0c655517b5294fa8b;hb=b452b665dbed05eff9b1560b220fadf1138d9f1d;hp=674a243ae49ab9d55e9a3198deb63781e6deb01d;hpb=86da77091a6bb3eca31d5b8066cd95e981e4f8f7;p=nihav-player.git diff --git a/videoplayer/src/main.rs b/videoplayer/src/main.rs index 674a243..2389e1f 100644 --- a/videoplayer/src/main.rs +++ b/videoplayer/src/main.rs @@ -13,7 +13,7 @@ use std::sync::atomic::{AtomicU8, Ordering}; use sdl2::event::{Event, WindowEvent}; use sdl2::keyboard::{Keycode, Mod}; -use sdl2::mouse::MouseButton; +use sdl2::mouse::{MouseButton, MouseWheelDirection}; use sdl2::render::{Canvas, Texture, TextureCreator}; use sdl2::pixels::PixelFormatEnum; use sdl2::video::{Window, WindowContext}; @@ -332,7 +332,7 @@ impl Player { let vsystem = sdl_context.video().expect("video subsystem init failure"); let asystem = sdl_context.audio().expect("audio subsystem init failure"); vsystem.disable_screen_saver(); - let acontrol = AudioControl::new(None, None, &asystem); + let acontrol = AudioControl::new(None, None, false, &asystem); let vcontrol = VideoControl::new(None, 0, 0, 0, 0); Self { sdl_context, asystem, vsystem, @@ -480,6 +480,9 @@ impl Player { _ => {}, }; } + if let Event::MouseWheel {direction: MouseWheelDirection::Normal, x: 0, y, ..} = event { + self.seek(10, y > 0, dmx, disp_queue)?; + } if let Event::KeyDown {keycode: Some(keycode), keymod, ..} = event { match keycode { Keycode::Escape => { @@ -487,7 +490,7 @@ impl Player { println!(); return Ok(true); }, - Keycode::Q if matches!(keymod, Mod::RSHIFTMOD | Mod::LSHIFTMOD) => { + Keycode::Q if keymod.contains(Mod::RSHIFTMOD) || keymod.contains(Mod::LSHIFTMOD) => { self.end = true; println!(); return Ok(true); @@ -596,6 +599,7 @@ impl Player { let mut tb_num = 0; let mut tb_den = 0; let mut ainfo: Option = None; + let mut sbr_hack = false; let mut video_dec: Option = None; let mut audio_dec: Option = None; @@ -677,6 +681,11 @@ impl Player { let mut dec = (decfunc)(); let mut dsupp = Box::new(NADecoderSupport::new()); ainfo = info.get_properties().get_audio_info(); + if let (true, Some(ref ai)) = (info.get_name() == "aac", ainfo) { + if ai.sample_rate < 32000 { + sbr_hack = true; + } + } if dec.init(&mut dsupp, info).is_err() { println!("failed to initialise audio decoder"); return; @@ -706,7 +715,7 @@ impl Player { let mut new_vcontrol = VideoControl::new(video_dec, width, height, tb_num, tb_den); std::mem::swap(&mut self.vcontrol, &mut new_vcontrol); - let mut new_acontrol = AudioControl::new(audio_dec, ainfo, &self.asystem); + let mut new_acontrol = AudioControl::new(audio_dec, ainfo, sbr_hack, &self.asystem); std::mem::swap(&mut self.acontrol, &mut new_acontrol); if self.mute { @@ -875,7 +884,7 @@ fn main() { "-ae" => { player.play_audio = true; }, "-vn" => { player.play_video = false; }, "-ve" => { player.play_video = true; }, - "-seek" => { + "-seek" | "-start" => { if let Some(arg) = aiter.next() { if let Ok(time) = arg.parse::() { seek_time = time;