From 6c175effc594734a02479d77736d97aac78a1184 Mon Sep 17 00:00:00 2001 From: Jonathan Gordon Date: Sat, 17 Apr 2010 12:02:02 +0000 Subject: drop the playlist viewer stack usage by reading straiught off the buffer instead of copying it. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@25661 a1c6a512-1295-4272-9138-f99709370657 --- apps/gui/skin_engine/skin_display.c | 10 ++++------ apps/playback.c | 5 +++-- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/apps/gui/skin_engine/skin_display.c b/apps/gui/skin_engine/skin_display.c index 5aa4d78..687c611 100644 --- a/apps/gui/skin_engine/skin_display.c +++ b/apps/gui/skin_engine/skin_display.c @@ -178,7 +178,7 @@ static void draw_progressbar(struct gui_wps *gwps, } } -bool audio_peek_track(struct mp3entry* id3, int offset); +bool audio_peek_track(struct mp3entry** id3, int offset); static void draw_playlist_viewer_list(struct gui_wps *gwps, struct playlistviewer *viewer) { @@ -192,9 +192,6 @@ static void draw_playlist_viewer_list(struct gui_wps *gwps, int x, length, alignment = WPS_TOKEN_ALIGN_LEFT; struct mp3entry *pid3; -#if CONFIG_CODEC == SWCODEC - struct mp3entry id3; -#endif char buf[MAX_PATH*2], tempbuf[MAX_PATH]; gwps->display->set_viewport(viewer->vp); @@ -209,9 +206,10 @@ static void draw_playlist_viewer_list(struct gui_wps *gwps, pid3 = state->nid3; } #if CONFIG_CODEC == SWCODEC - else if ((i>cur_playlist_pos) && audio_peek_track(&id3, i-cur_playlist_pos)) + else if (i>cur_playlist_pos) { - pid3 = &id3; + if (!audio_peek_track(&pid3, i-cur_playlist_pos)) + pid3 = NULL; } #endif else diff --git a/apps/playback.c b/apps/playback.c index c4fb14b..dc854cb 100644 --- a/apps/playback.c +++ b/apps/playback.c @@ -629,7 +629,8 @@ struct mp3entry* audio_next_track(void) return NULL; } -bool audio_peek_track(struct mp3entry* id3, int offset) +/* gets a pointer to the id3 data, Not thread safe!, DON'T yield()/sleep() */ +bool audio_peek_track(struct mp3entry** id3, int offset) { int next_idx; int new_offset = ci.new_track + wps_offset + offset; @@ -640,7 +641,7 @@ bool audio_peek_track(struct mp3entry* id3, int offset) if (tracks[next_idx].id3_hid >= 0) { - return bufread(tracks[next_idx].id3_hid, sizeof(struct mp3entry), id3) + return bufgetdata(tracks[next_idx].id3_hid, 0, (void**)id3) == sizeof(struct mp3entry); } return false; -- cgit v1.1