diff options
| author | Brandon Low <lostlogic@rockbox.org> | 2006-04-11 14:13:41 +0000 |
|---|---|---|
| committer | Brandon Low <lostlogic@rockbox.org> | 2006-04-11 14:13:41 +0000 |
| commit | b6607459c2bac541381164bb8356983678e5c430 (patch) | |
| tree | 2cde27cb9ebd7c26d64663083f038cb3e42b15f0 | |
| parent | 8238b49c747afaf462ab5bdd45a37417eeae4dd9 (diff) | |
| download | rockbox-b6607459c2bac541381164bb8356983678e5c430.zip rockbox-b6607459c2bac541381164bb8356983678e5c430.tar.gz rockbox-b6607459c2bac541381164bb8356983678e5c430.tar.bz2 rockbox-b6607459c2bac541381164bb8356983678e5c430.tar.xz | |
Fix some signedness and exit condition stuff. Not sure if this addresses live bugs, but it was wrong nonetheless
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@9610 a1c6a512-1295-4272-9138-f99709370657
| -rw-r--r-- | apps/playback.c | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/apps/playback.c b/apps/playback.c index bddb4c3..99de8ad 100644 --- a/apps/playback.c +++ b/apps/playback.c @@ -1063,7 +1063,7 @@ static void audio_read_file(void) } while (tracks[track_widx].filerem > 0) { - if (fill_bytesleft <= 0) + if (fill_bytesleft == 0) break ; /* copy_n is the largest chunk that is safe to read */ @@ -1083,8 +1083,12 @@ static void audio_read_file(void) buf_widx -= filebuflen; tracks[track_widx].available += rc; tracks[track_widx].filerem -= rc; + filebufused += rc; - fill_bytesleft -= rc; + if (fill_bytesleft > (unsigned)rc) + fill_bytesleft -= rc; + else + fill_bytesleft = 0; /* Let the codec process until it is out of the danger zone, or there * is an event to handle. In the latter case, break this fill cycle @@ -1226,10 +1230,8 @@ static bool loadcodec(bool start_play) size = filesize(fd); /* Never load a partial codec */ - if (filebuflen - filebufused < size + conf_watermark) { + if (filebuflen - filebufused < size + AUDIO_REBUFFER_GUESS_SIZE) { 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; @@ -1370,13 +1372,14 @@ static bool audio_load_track(int offset, bool start_play) if (!tracks[track_widx].taginfo_ready) { if (!get_metadata(&tracks[track_widx],current_fd,trackname,v1first)) { logf("Metadata error:%s!",trackname); + /* Set filesize to zero to indicate no file was loaded. */ tracks[track_widx].filesize = 0; tracks[track_widx].filerem = 0; - tracks[track_widx].taginfo_ready = false; close(current_fd); current_fd = -1; /* Skip invalid entry from playlist. */ playlist_skip_entry(NULL, last_peek_offset); + tracks[track_widx].taginfo_ready = false; goto peek_again; } track_changed = true; @@ -1385,13 +1388,11 @@ static bool audio_load_track(int offset, bool start_play) /* Load the codec. */ tracks[track_widx].codecbuf = &filebuf[buf_widx]; if (!loadcodec(start_play)) { - close(current_fd); - current_fd = -1; - /* Set filesize to zero to indicate no file was loaded. */ tracks[track_widx].filesize = 0; tracks[track_widx].filerem = 0; - tracks[track_widx].taginfo_ready = false; + close(current_fd); + current_fd = -1; /* Try skipping to next track if there is space. */ if (fill_bytesleft > 0) { @@ -1401,6 +1402,7 @@ static bool audio_load_track(int offset, bool start_play) gui_syncsplash(HZ*2, true, msgbuf); /* Skip invalid entry from playlist. */ playlist_skip_entry(NULL, last_peek_offset); + tracks[track_widx].taginfo_ready = false; goto peek_again; } return false; @@ -1626,12 +1628,12 @@ static void audio_fill_file_buffer(bool start_play, size_t offset) fill_bytesleft = 0; /* Read next unbuffered track's metadata as soon as playback begins */ - if (pcm_is_playing() || fill_bytesleft <= 0) + if (pcm_is_playing() || fill_bytesleft == 0) { read_next_metadata(); /* If we're done buffering */ - if (fill_bytesleft <= 0) + if (fill_bytesleft == 0) { generate_postbuffer_events(); filling = false; |