From d43b868c7c625cadaa44bc23ed139506cb6aabe1 Mon Sep 17 00:00:00 2001 From: Nicolas Pennequin Date: Tue, 2 Oct 2007 22:46:42 +0200 Subject: [PATCH] ID3 handling improvements * Implement switching of ID3 info in audio_check_new_track(). * Add a check in bufgetid3(). * Use the static struct in audio_next_track(). --- apps/playback.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/apps/playback.c b/apps/playback.c index 21ac7a116..6bdf65306 100644 --- a/apps/playback.c +++ b/apps/playback.c @@ -371,6 +371,9 @@ static void voice_stop(void); struct mp3entry *bufgetid3(int handle_id) { + if (handle_id < 0) + return NULL; + struct mp3entry *id3; ssize_t ret = bufgetdata(handle_id, 0, (unsigned char **)&id3); @@ -679,7 +682,7 @@ struct mp3entry* audio_next_track(void) if (tracks[next_idx].id3_hid <= 0) return NULL; - return bufgetid3(tracks[next_idx].id3_hid); + return &nexttrack_id3; } bool audio_has_changed_track(void) @@ -3032,8 +3035,11 @@ static void audio_rebuffer(void) static int audio_check_new_track(void) { + DEBUGF("audio_check_new_track\n"); + int track_count = audio_track_count(); int old_track_ridx = track_ridx; + int next_idx; bool forward; if (dir_skip) @@ -3094,6 +3100,15 @@ static int audio_check_new_track(void) track_ridx += ci.new_track; track_ridx &= MAX_TRACK_MASK; + if (CUR_TI->id3_hid > 0) + copy_mp3entry(&curtrack_id3, bufgetid3(CUR_TI->id3_hid)); + + next_idx = track_ridx + 1; + next_idx &= MAX_TRACK_MASK; + + if (tracks[next_idx].id3_hid > 0) + copy_mp3entry(&nexttrack_id3, bufgetid3(tracks[next_idx].id3_hid)); + if (automatic_skip) playlist_end = false; -- 2.11.4.GIT