summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorMiika Pekkarinen <miipekk@ihme.org>2005-07-17 21:44:58 +0000
committerMiika Pekkarinen <miipekk@ihme.org>2005-07-17 21:44:58 +0000
commite361749fe25b03faf7cb5ca1a9c5c1934253c6bc (patch)
tree63ccffb8b39b7305546c2d0bcd73028259b257e5 /apps
parent2103cf4b74c25e7d199e28349e377c2edb9a7ec6 (diff)
downloadrockbox-e361749fe25b03faf7cb5ca1a9c5c1934253c6bc.tar.gz
rockbox-e361749fe25b03faf7cb5ca1a9c5c1934253c6bc.zip
Fixed a problem that caused codec switching to fail on certain rare
conditions. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7184 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps')
-rw-r--r--apps/playback.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/apps/playback.c b/apps/playback.c
index 3d7ba1a30a..1dabbc34a1 100644
--- a/apps/playback.c
+++ b/apps/playback.c
@@ -703,6 +703,8 @@ bool loadcodec(const char *trackname, bool start_play)
size = filesize(fd);
if ((off_t)fill_bytesleft < size + conf_watermark) {
logf("Not enough space");
+ /* Set codectype back to zero to indicate no codec was loaded. */
+ tracks[track_widx].id3.codectype = 0;
fill_bytesleft = 0;
close(fd);
return false;
@@ -833,6 +835,9 @@ bool audio_load_track(int offset, bool start_play, int peek_offset)
close(fd);
/* Stop buffer filling if codec load failed. */
fill_bytesleft = 0;
+ /* Set filesize to zero to indicate no file was loaded. */
+ tracks[track_widx].filesize = 0;
+ tracks[track_widx].filerem = 0;
return false;
}
// tracks[track_widx].filebuf = &codecbuf[buf_widx];
@@ -1070,10 +1075,12 @@ void initialize_buffer_fill(void)
cur_idx = 0;
}
- track_count = i;
- if (tracks[track_widx].filesize != 0)
- track_count++;
-
+ track_count = i + 1;
+ if (tracks[track_widx].filesize == 0) {
+ if (--track_widx < 0)
+ track_widx = MAX_TRACK - 1;
+ }
+
/* Mark all buffered entries null (not metadata for next track). */
audio_clear_track_entries(true);
}
@@ -1491,8 +1498,8 @@ void codec_thread(void)
case CODEC_LOAD:
if (status != CODEC_OK) {
logf("Codec failure");
- splash(HZ*2, true, "Codec failure");
audio_stop_playback();
+ splash(HZ*2, true, "Codec failure");
} else {
logf("Codec finished");
}