summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMagnus Holmgren <magnushol@gmail.com>2008-02-23 17:46:33 +0000
committerMagnus Holmgren <magnushol@gmail.com>2008-02-23 17:46:33 +0000
commit68f9e6bfee2d7da5699a9d7e910c12cd1b52232f (patch)
tree4073371386d5480c9b633b45b669e775557a6b10
parent620da596fbfba14ea2e296220ec7313fcccbadb0 (diff)
downloadrockbox-68f9e6bfee2d7da5699a9d7e910c12cd1b52232f.tar.gz
rockbox-68f9e6bfee2d7da5699a9d7e910c12cd1b52232f.zip
When starting playback, prevent the codec from starting to decode too early, which would cause rebuffering (slowing things down) and incorrect playlist index. Hopefully fixes a bunch of playback-related bugs, such as FS#8520, FS#8525, FS#8555 and possibly FS#8511.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16392 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/playback.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/apps/playback.c b/apps/playback.c
index 87773f89ef..cca5b73247 100644
--- a/apps/playback.c
+++ b/apps/playback.c
@@ -1659,6 +1659,8 @@ static bool audio_load_track(int offset, bool start_play)
}
last_peek_offset++;
+ tracks[track_widx].taginfo_ready = false;
+
peek_again:
logf("Buffering track:%d/%d", track_widx, track_ridx);
/* Get track name from current playlist read position. */
@@ -1708,7 +1710,6 @@ static bool audio_load_track(int offset, bool start_play)
tracks[track_widx].id3_hid =
bufalloc(&id3, sizeof(struct mp3entry), TYPE_ID3);
- tracks[track_widx].taginfo_ready = (tracks[track_widx].id3_hid >= 0);
if (tracks[track_widx].id3_hid < 0)
{
@@ -1733,7 +1734,6 @@ static bool audio_load_track(int offset, bool start_play)
/* Skip invalid entry from playlist. */
playlist_skip_entry(NULL, last_peek_offset);
- tracks[track_widx].taginfo_ready = false;
close(fd);
goto peek_again;
}
@@ -1791,7 +1791,6 @@ static bool audio_load_track(int offset, bool start_play)
gui_syncsplash(HZ*2, msgbuf);
/* Skip invalid entry from playlist. */
playlist_skip_entry(NULL, last_peek_offset);
- tracks[track_widx].taginfo_ready = false;
goto peek_again;
}
@@ -1852,6 +1851,9 @@ static bool audio_load_track(int offset, bool start_play)
if (tracks[track_widx].audio_hid < 0)
return false;
+ /* All required data is now available for the codec. */
+ tracks[track_widx].taginfo_ready = true;
+
if (start_play)
{
ci.curpos=file_offset;