summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Wilgus <wilgus.william@gmail.com>2023-09-19 08:15:07 -0400
committerWilliam Wilgus <me.theuser@yahoo.com>2023-09-19 19:47:22 -0400
commite01055a287500d8cc90cda3b4816d3dc2f07bde4 (patch)
tree4779332d98be4ce97692e2326e410b613124b7bb
parent3dbf5a97ad3ad8164d07a990e787feece1616f49 (diff)
downloadrockbox-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.c6
-rw-r--r--apps/playlist.c18
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(&current_playlist, false);
#endif /* HAVE_DIRCACHE */
- add_event(PLAYBACK_EVENT_TRACK_CHANGE, track_change_callback);
}
/*