From e01055a287500d8cc90cda3b4816d3dc2f07bde4 Mon Sep 17 00:00:00 2001 From: William Wilgus Date: Tue, 19 Sep 2023 08:15:07 -0400 Subject: [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 --- apps/playback.c | 6 ++++++ apps/playlist.c | 18 +++--------------- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/apps/playback.c b/apps/playback.c index f698bed024..865d0d724f 100644 --- a/apps/playback.c +++ b/apps/playback.c @@ -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) { diff --git a/apps/playlist.c b/apps/playlist.c index 673b46c950..7c37333bd8 100644 --- a/apps/playlist.c +++ b/apps/playlist.c @@ -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(¤t_playlist, false); #endif /* HAVE_DIRCACHE */ - add_event(PLAYBACK_EVENT_TRACK_CHANGE, track_change_callback); } /* -- cgit v1.2.3