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:
parent
2103cf4b74
commit
e361749fe2
1 changed files with 12 additions and 5 deletions
|
|
@ -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");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue