From 26f396e4c87c09e02e8c331970844c4f5de0f96a Mon Sep 17 00:00:00 2001 From: Andrei Ivanou Date: Tue, 2 Jun 2026 21:54:10 +0200 Subject: [PATCH] Fix playback speed configuration after change playback options --- src/main.rs | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/src/main.rs b/src/main.rs index c231957..efe405a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -464,7 +464,9 @@ impl App { self.update_flags(); self.update_mpris_meta(); if self.playback_speed != 1.0 { - self.apply_playback_speed(); + if let Some(video) = &mut self.video_opt { + Self::apply_speed(video, self.playback_speed); + } } self.update_title() } @@ -859,19 +861,9 @@ impl App { } } - fn apply_playback_speed(&self) { - let Some(video) = &self.video_opt else { return }; - let pipeline = video.pipeline(); - let position = gst::ClockTime::from_nseconds(video.position().as_nanos() as u64); - if let Err(err) = pipeline.seek( - self.playback_speed, - gst::SeekFlags::FLUSH | gst::SeekFlags::ACCURATE, - gst::SeekType::Set, - position, - gst::SeekType::None, - gst::ClockTime::NONE, - ) { - log::warn!("failed to set playback speed {}: {}", self.playback_speed, err); + fn apply_speed(video: &mut Video, speed: f64) { + if let Err(err) = video.set_speed(speed) { + log::warn!("failed to set playback speed {}: {}", speed, err); } } } @@ -1511,7 +1503,9 @@ impl Application for App { Message::PlaybackSpeed(speed) => { self.playback_speed = speed; self.dropdown_opt = None; - self.apply_playback_speed(); + if let Some(video) = &mut self.video_opt { + Self::apply_speed(video, speed); + } self.update_controls(true); } Message::VideoAreaClick => {