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
This commit is contained in:
Petr Mikhalicin 2025-12-28 12:02:19 +05:00 committed by Christian Soffke
parent 716f45e291
commit 19a49220b1
2 changed files with 12 additions and 22 deletions

View file

@ -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);
}

View file

@ -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);