diff options
| author | Miika Pekkarinen <miipekk@ihme.org> | 2006-08-04 10:29:04 +0000 |
|---|---|---|
| committer | Miika Pekkarinen <miipekk@ihme.org> | 2006-08-04 10:29:04 +0000 |
| commit | 8e0b02a60f35a6a441fff782a76aba4b80332906 (patch) | |
| tree | 1d14899aad4e1d004e8bf493462a52d4abb14a41 /apps | |
| parent | 51d3dba10a207317983f06f4b417cbc79c487f33 (diff) | |
| download | rockbox-8e0b02a60f35a6a441fff782a76aba4b80332906.zip rockbox-8e0b02a60f35a6a441fff782a76aba4b80332906.tar.gz rockbox-8e0b02a60f35a6a441fff782a76aba4b80332906.tar.bz2 rockbox-8e0b02a60f35a6a441fff782a76aba4b80332906.tar.xz | |
Prevent buffer filling trying to start over and over causing playback
to skip when runtimedb has been enabled.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@10456 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps')
| -rw-r--r-- | apps/playback.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/apps/playback.c b/apps/playback.c index fdd097d..e7a20fb 100644 --- a/apps/playback.c +++ b/apps/playback.c @@ -264,7 +264,7 @@ static int mp3_get_file_pos(void); static void audio_clear_track_entries( bool clear_buffered, bool clear_unbuffered, bool may_yield); -static void initialize_buffer_fill(bool clear_tracks); +static bool initialize_buffer_fill(bool clear_tracks); static void audio_fill_file_buffer( bool start_play, bool rebuffer, size_t offset); @@ -2068,12 +2068,16 @@ static void generate_postbuffer_events(void) } } -static void initialize_buffer_fill(bool clear_tracks) +static bool initialize_buffer_fill(bool clear_tracks) { /* Don't initialize if we're already initialized */ if (filling) - return ; + return true; + /* Don't start buffer fill if buffer is already full. */ + if (filebufused > conf_watermark && !filling) + return false; + logf("Starting buffer fill"); fill_bytesleft = filebuflen - filebufused; @@ -2086,13 +2090,17 @@ static void initialize_buffer_fill(bool clear_tracks) // if (buf_ridx > cur_ti->buf_idx) // cur_ti->start_pos = buf_ridx - cur_ti->buf_idx; + /* Set the filling flag true before calling audio_clear_tracks as that + * function can yield and we start looping. */ + filling = true; + if (clear_tracks) audio_clear_track_entries(true, false, true); /* Save the current resume position once. */ playlist_update_resume_info(audio_current_track()); - - filling = true; + + return true; } static void audio_fill_file_buffer( @@ -2100,7 +2108,8 @@ static void audio_fill_file_buffer( { bool had_next_track = audio_next_track() != NULL; - initialize_buffer_fill(!start_play); + if (!initialize_buffer_fill(!start_play)) + return ; /* If we have a partially buffered track, continue loading, * otherwise load a new track */ |