diff options
author | William Wilgus <wilgus.william@gmail.com> | 2023-09-19 08:15:07 -0400 |
---|---|---|
committer | William Wilgus <me.theuser@yahoo.com> | 2023-09-19 19:47:22 -0400 |
commit | e01055a287500d8cc90cda3b4816d3dc2f07bde4 (patch) | |
tree | 4779332d98be4ce97692e2326e410b613124b7bb | |
parent | 3dbf5a97ad3ad8164d07a990e787feece1616f49 (diff) | |
download | rockbox-e01055a287.tar.gz rockbox-e01055a287.zip |
[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
-rw-r--r-- | apps/playback.c | 6 | ||||
-rw-r--r-- | 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); } /* |