[RFC] REPEAT_ONE manual track skip

I recently added track skipping while REPEAT_ONE was set

currently by registering a track skip callback
I'm not entirely happy with the additional constant overhead
of the event callback

Instead I went looking for a way to distinguish
a pending track skip from some limited testing
it appears to work just as well to compare
playback's skip_pending == TRACK_SKIP_AUTO
but the lack of lifetime control worries me slightly

Change-Id: Ic71b4c3925e991f5a1216d16ecd3af6cc777ef1e
This commit is contained in:
William Wilgus 2023-09-19 08:15:07 -04:00 committed by William Wilgus
parent 3dbf5a97ad
commit e01055a287
2 changed files with 9 additions and 15 deletions

View file

@ -3687,6 +3687,12 @@ void audio_resume(void)
audio_queue_send(Q_AUDIO_PAUSE, false);
}
/* Internal function used by REPEAT_ONE */
bool audio_pending_track_skip_is_auto(void)
{
return (skip_pending == TRACK_SKIP_AUTO);
}
/* Skip the specified number of tracks forward or backward from the current */
void audio_skip(int offset)
{

View file

@ -167,22 +167,11 @@
#define PLAYLIST_SKIPPED 0x10000000
static struct playlist_info current_playlist;
/* REPEAT_ONE support functions */
static long last_manual_skip_tick = 0;
/* REPEAT_ONE support function from playback.c */
extern bool audio_pending_track_skip_is_auto(void);
static inline bool is_manual_skip(void)
{
return (last_manual_skip_tick + HZ/2 > current_tick);
}
static void track_change_callback(unsigned short id, void *param)
{
(void)id;
unsigned int flags = ((struct track_event *)param)->flags;
if ((flags & TEF_AUTO_SKIP) != TEF_AUTO_SKIP)
{
last_manual_skip_tick = current_tick;
}
return !audio_pending_track_skip_is_auto();
}
/* Directory Cache*/
@ -1985,7 +1974,6 @@ void playlist_init(void)
dc_thread_start(&current_playlist, false);
#endif /* HAVE_DIRCACHE */
add_event(PLAYBACK_EVENT_TRACK_CHANGE, track_change_callback);
}
/*