From d02b5c744e39ea87980f75ad172aaaf0fcb29252 Mon Sep 17 00:00:00 2001 From: Brandon Low Date: Mon, 5 Nov 2007 01:56:12 +0000 Subject: [PATCH] Don't keep useless id3v2 or other leading tag data on the buffer, it could be large git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15465 a1c6a512-1295-4272-9138-f99709370657 --- apps/buffering.c | 8 ++++---- apps/codecs/mpa.c | 3 +-- apps/codecs/shorten.c | 3 +-- apps/playback.c | 5 ++++- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/apps/buffering.c b/apps/buffering.c index 9c8d107a86..072517fe1c 100644 --- a/apps/buffering.c +++ b/apps/buffering.c @@ -563,12 +563,12 @@ static bool buffer_handle(int handle_id) /* This would read into the next handle, this is broken */ if (h->next && RINGBUF_ADD_CROSS(h->widx, copy_n, (unsigned)((void *)h->next - (void *)buffer)) > 0) { - logf("Handle allocation short"); /* Try to recover by truncating this file */ - int overlap = RINGBUF_ADD_CROSS(h->widx, copy_n, + copy_n = RINGBUF_ADD_CROSS(h->widx, copy_n, (unsigned)((void *)h->next - (void *)buffer)); - h->filerem -= overlap; - h->filesize -= overlap; + h->filerem -= copy_n; + h->filesize -= copy_n; + logf("buf alloc short %ld",copy_n); if (h->filerem) continue; else diff --git a/apps/codecs/mpa.c b/apps/codecs/mpa.c index 6d98677892..113c81b2a0 100644 --- a/apps/codecs/mpa.c +++ b/apps/codecs/mpa.c @@ -95,8 +95,7 @@ next_track: current_frequency = ci->id3->frequency; codec_set_replaygain(ci->id3); - ci->request_buffer(&size, ci->id3->first_frame_offset); - ci->advance_buffer(size); + ci->seek_buffer(ci->id3->first_frame_offset); if (ci->id3->lead_trim >= 0 && ci->id3->tail_trim >= 0) { stop_skip = ci->id3->tail_trim - mpeg_latency[ci->id3->layer]; diff --git a/apps/codecs/shorten.c b/apps/codecs/shorten.c index 4b803675f9..fdc8142041 100644 --- a/apps/codecs/shorten.c +++ b/apps/codecs/shorten.c @@ -68,8 +68,7 @@ next_track: /* Skip id3v2 tags */ if (ci->id3->first_frame_offset) { - buf = ci->request_buffer(&bytesleft, ci->id3->first_frame_offset); - ci->advance_buffer(ci->id3->first_frame_offset); + ci->seek_buffer(ci->id3->first_frame_offset); } /* Read the shorten & wave headers */ diff --git a/apps/playback.c b/apps/playback.c index 5132bd629a..650a69bbed 100644 --- a/apps/playback.c +++ b/apps/playback.c @@ -1803,7 +1803,7 @@ static bool codec_request_next_track_callback(void) /* Seek to the beginning of the new track because if the struct mp3entry was buffered, "elapsed" might not be zero (if the track has been played already but not unbuffered) */ - codec_seek_buffer_callback(0); + codec_seek_buffer_callback(curtrack_id3.first_frame_offset); /* Check if the next codec is the same file. */ if (prev_codectype == get_codec_base_type(curtrack_id3.codectype)) @@ -2441,6 +2441,9 @@ static bool audio_load_track(int offset, bool start_play) logf("alt:%s", trackname); + if (!file_offset && track_id3->first_frame_offset) + file_offset = track_id3->first_frame_offset; + tracks[track_widx].audio_hid = bufopen(trackname, file_offset, type); if (tracks[track_widx].audio_hid < 0)