summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrandon Low <lostlogic@rockbox.org>2007-11-05 01:56:12 +0000
committerBrandon Low <lostlogic@rockbox.org>2007-11-05 01:56:12 +0000
commitd02b5c744e39ea87980f75ad172aaaf0fcb29252 (patch)
tree0e4ce0b6bbba1ab3f7158a742a6a97d5766c7465
parent6be390f21091ac3438d4ddb7935d985f2e4286ab (diff)
downloadrockbox-d02b5c744e39ea87980f75ad172aaaf0fcb29252.zip
rockbox-d02b5c744e39ea87980f75ad172aaaf0fcb29252.tar.gz
rockbox-d02b5c744e39ea87980f75ad172aaaf0fcb29252.tar.bz2
rockbox-d02b5c744e39ea87980f75ad172aaaf0fcb29252.tar.xz
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
-rw-r--r--apps/buffering.c8
-rw-r--r--apps/codecs/mpa.c3
-rw-r--r--apps/codecs/shorten.c3
-rw-r--r--apps/playback.c5
4 files changed, 10 insertions, 9 deletions
diff --git a/apps/buffering.c b/apps/buffering.c
index 9c8d107..072517f 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 6d98677..113c81b 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 4b80367..fdc8142 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 5132bd6..650a69b 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)