diff options
author | Miika Pekkarinen <miipekk@ihme.org> | 2005-07-17 21:44:58 +0000 |
---|---|---|
committer | Miika Pekkarinen <miipekk@ihme.org> | 2005-07-17 21:44:58 +0000 |
commit | e361749fe25b03faf7cb5ca1a9c5c1934253c6bc (patch) | |
tree | 63ccffb8b39b7305546c2d0bcd73028259b257e5 /apps | |
parent | 2103cf4b74c25e7d199e28349e377c2edb9a7ec6 (diff) | |
download | rockbox-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.c | 17 |
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"); } |