summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonathan Gordon <rockbox@jdgordon.info>2010-04-17 12:02:02 +0000
committerJonathan Gordon <rockbox@jdgordon.info>2010-04-17 12:02:02 +0000
commit6c175effc594734a02479d77736d97aac78a1184 (patch)
tree2e4ccbdf7933b28f946a6f71d90a11bd48473de8
parentbc18c894344dc3a74c2a71fc13e114b500cf18c1 (diff)
downloadrockbox-6c175effc594734a02479d77736d97aac78a1184.tar.gz
rockbox-6c175effc594734a02479d77736d97aac78a1184.zip
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
-rw-r--r--apps/gui/skin_engine/skin_display.c10
-rw-r--r--apps/playback.c5
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 5aa4d78cad..687c611a49 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 c4fb14ba3e..dc854cbb24 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;