1
0
Fork 0
forked from len0rd/rockbox

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
This commit is contained in:
Miika Pekkarinen 2005-07-17 21:44:58 +00:00
parent 2103cf4b74
commit e361749fe2

View file

@ -703,6 +703,8 @@ bool loadcodec(const char *trackname, bool start_play)
size = filesize(fd); size = filesize(fd);
if ((off_t)fill_bytesleft < size + conf_watermark) { if ((off_t)fill_bytesleft < size + conf_watermark) {
logf("Not enough space"); logf("Not enough space");
/* Set codectype back to zero to indicate no codec was loaded. */
tracks[track_widx].id3.codectype = 0;
fill_bytesleft = 0; fill_bytesleft = 0;
close(fd); close(fd);
return false; return false;
@ -833,6 +835,9 @@ bool audio_load_track(int offset, bool start_play, int peek_offset)
close(fd); close(fd);
/* Stop buffer filling if codec load failed. */ /* Stop buffer filling if codec load failed. */
fill_bytesleft = 0; 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; return false;
} }
// tracks[track_widx].filebuf = &codecbuf[buf_widx]; // tracks[track_widx].filebuf = &codecbuf[buf_widx];
@ -1070,9 +1075,11 @@ void initialize_buffer_fill(void)
cur_idx = 0; cur_idx = 0;
} }
track_count = i; track_count = i + 1;
if (tracks[track_widx].filesize != 0) if (tracks[track_widx].filesize == 0) {
track_count++; if (--track_widx < 0)
track_widx = MAX_TRACK - 1;
}
/* Mark all buffered entries null (not metadata for next track). */ /* Mark all buffered entries null (not metadata for next track). */
audio_clear_track_entries(true); audio_clear_track_entries(true);
@ -1491,8 +1498,8 @@ void codec_thread(void)
case CODEC_LOAD: case CODEC_LOAD:
if (status != CODEC_OK) { if (status != CODEC_OK) {
logf("Codec failure"); logf("Codec failure");
splash(HZ*2, true, "Codec failure");
audio_stop_playback(); audio_stop_playback();
splash(HZ*2, true, "Codec failure");
} else { } else {
logf("Codec finished"); logf("Codec finished");
} }