]> git.nihav.org Git - nihav-player.git/blobdiff - videoplayer/src/main.rs
videoplayer: add -start as an alias for -seek
[nihav-player.git] / videoplayer / src / main.rs
index 674a243ae49ab9d55e9a3198deb63781e6deb01d..2389e1f7f4d783ecd0cdcab0c655517b5294fa8b 100644 (file)
@@ -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<NAAudioInfo> = None;
+        let mut sbr_hack = false;
 
         let mut video_dec: Option<DecoderStuff> = None;
         let mut audio_dec: Option<DecoderStuff> = 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::<NATimePoint>() {
                         seek_time = time;