From 19a49220b13bc91a8f87de5074027798531717a6 Mon Sep 17 00:00:00 2001 From: Petr Mikhalicin Date: Sun, 28 Dec 2025 12:02:19 +0500 Subject: [PATCH] plugin lrcplayer: Fix late rewinding at lrcplayer If you try to rewind music at lrcplayer it 1. returns back to old time 2. play for some time (1-2 seconds) 3. only after that returns for new time According to wps code audio_pre_ff_rewind function should be called before any rewinding. It stops playback and automatically resumes it after audio_ff_rewind call Change-Id: Id3755bfe4deeb7cd5d889ad7d8e1dec45061fa5c --- apps/gui/wps.c | 6 +----- apps/plugins/lrcplayer.c | 28 +++++++++++----------------- 2 files changed, 12 insertions(+), 22 deletions(-) diff --git a/apps/gui/wps.c b/apps/gui/wps.c index 30e76c121c..70bf33dfb6 100644 --- a/apps/gui/wps.c +++ b/apps/gui/wps.c @@ -498,11 +498,7 @@ static void play_hop(int direction) { elapsed += step * direction; } - if(audio_status() & AUDIO_STATUS_PLAY) - { - audio_pre_ff_rewind(); - } - + audio_pre_ff_rewind(); audio_ff_rewind(elapsed); } diff --git a/apps/plugins/lrcplayer.c b/apps/plugins/lrcplayer.c index b201a8deb8..9102f03264 100644 --- a/apps/plugins/lrcplayer.c +++ b/apps/plugins/lrcplayer.c @@ -2526,20 +2526,10 @@ static bool check_audio_status(void) } return false; } -static void ff_rewind(long time, bool resume) +static void ff_rewind(long time) { - if (AUDIO_PLAY) - { - if (!AUDIO_PAUSE) - { - resume = true; - rb->audio_pause(); - } - rb->audio_ff_rewind(time); - rb->sleep(HZ/10); /* take affect seeking */ - if (resume) - rb->audio_resume(); - } + rb->audio_ff_rewind(time); + rb->sleep(HZ/10); /* take effect seeking */ } static int handle_button(void) @@ -2603,15 +2593,14 @@ static int handle_button(void) else { current.ff_rewind = current.elapsed; - if (!AUDIO_PAUSE) - rb->audio_pause(); + rb->audio_pre_ff_rewind(); step = 1000 * rb->global_settings->ff_rewind_min_step; } break; case ACTION_WPS_STOPSEEK: if (current.ff_rewind == -1) break; - ff_rewind(current.ff_rewind, !AUDIO_PAUSE); + ff_rewind(current.ff_rewind); current.elapsed = current.ff_rewind; current.ff_rewind = -1; break; @@ -2620,9 +2609,14 @@ static int handle_button(void) break; case ACTION_WPS_SKIPPREV: if (current.elapsed < 3000) + { rb->audio_prev(); + } else - ff_rewind(0, false); + { + rb->audio_pre_ff_rewind(); + ff_rewind(0); + } break; case ACTION_WPS_VOLDOWN: rb->adjust_volume(-1);