From 8e0b02a60f35a6a441fff782a76aba4b80332906 Mon Sep 17 00:00:00 2001 From: Miika Pekkarinen Date: Fri, 4 Aug 2006 10:29:04 +0000 Subject: 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 --- apps/playback.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) (limited to 'apps') diff --git a/apps/playback.c b/apps/playback.c index fdd097d29c..e7a20fb1af 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 */ -- cgit v1.2.3