From 3184cbe10add23e0e4e53523a06e311db0ba15cd Mon Sep 17 00:00:00 2001 From: Andree Buschmann Date: Wed, 6 Apr 2011 19:11:40 +0000 Subject: Fix FS#12043. Next track was resumed when pausing and shutting down the player in the last seconds of a track. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29682 a1c6a512-1295-4272-9138-f99709370657 --- apps/playback.c | 2 ++ apps/playlist.c | 14 +++++++++----- apps/playlist.h | 1 + 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/apps/playback.c b/apps/playback.c index 2c34adf12d..ea26ed12ab 100644 --- a/apps/playback.c +++ b/apps/playback.c @@ -2207,6 +2207,8 @@ static void audio_thread(void) case Q_AUDIO_TRACK_CHANGED: /* PCM track change done */ LOGFQUEUE("audio < Q_AUDIO_TRACK_CHANGED"); + /* Set new playlist position for resuming. */ + thistrack_id3->index = playlist_get_index(); if (filling != STATE_ENDING) audio_finalise_track_change(); else if (playing) diff --git a/apps/playlist.c b/apps/playlist.c index bbbbe22349..f65be48069 100644 --- a/apps/playlist.c +++ b/apps/playlist.c @@ -2612,24 +2612,28 @@ int playlist_get_resume_info(int *resume_index) return 0; } +/* Get current playlist index. */ +int playlist_get_index(void) +{ + return current_playlist.index; +} + /* Update resume info for current playing song. Returns -1 on error. */ int playlist_update_resume_info(const struct mp3entry* id3) { - struct playlist_info* playlist = ¤t_playlist; - if (id3) { - if (global_status.resume_index != playlist->index || + if (global_status.resume_index != id3->index || global_status.resume_offset != id3->offset) { - global_status.resume_index = playlist->index; + global_status.resume_index = id3->index; global_status.resume_offset = id3->offset; status_save(); } } else { - global_status.resume_index = -1; + global_status.resume_index = -1; global_status.resume_offset = -1; status_save(); } diff --git a/apps/playlist.h b/apps/playlist.h index 9c45769981..e5826202fb 100644 --- a/apps/playlist.h +++ b/apps/playlist.h @@ -131,6 +131,7 @@ const char *playlist_peek(int steps, char* buf, size_t buf_size); int playlist_next(int steps); bool playlist_next_dir(int direction); int playlist_get_resume_info(int *resume_index); +int playlist_get_index(void); int playlist_update_resume_info(const struct mp3entry* id3); int playlist_get_display_index(void); int playlist_amount(void); -- cgit v1.2.3