summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorMiika Pekkarinen <miipekk@ihme.org>2006-08-04 10:29:04 +0000
committerMiika Pekkarinen <miipekk@ihme.org>2006-08-04 10:29:04 +0000
commit8e0b02a60f35a6a441fff782a76aba4b80332906 (patch)
tree1d14899aad4e1d004e8bf493462a52d4abb14a41 /apps
parent51d3dba10a207317983f06f4b417cbc79c487f33 (diff)
downloadrockbox-8e0b02a60f35a6a441fff782a76aba4b80332906.tar.gz
rockbox-8e0b02a60f35a6a441fff782a76aba4b80332906.zip
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.c21
1 files changed, 15 insertions, 6 deletions
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);
264 264
265static void audio_clear_track_entries( 265static void audio_clear_track_entries(
266 bool clear_buffered, bool clear_unbuffered, bool may_yield); 266 bool clear_buffered, bool clear_unbuffered, bool may_yield);
267static void initialize_buffer_fill(bool clear_tracks); 267static bool initialize_buffer_fill(bool clear_tracks);
268static void audio_fill_file_buffer( 268static void audio_fill_file_buffer(
269 bool start_play, bool rebuffer, size_t offset); 269 bool start_play, bool rebuffer, size_t offset);
270 270
@@ -2068,12 +2068,16 @@ static void generate_postbuffer_events(void)
2068 } 2068 }
2069} 2069}
2070 2070
2071static void initialize_buffer_fill(bool clear_tracks) 2071static bool initialize_buffer_fill(bool clear_tracks)
2072{ 2072{
2073 /* Don't initialize if we're already initialized */ 2073 /* Don't initialize if we're already initialized */
2074 if (filling) 2074 if (filling)
2075 return ; 2075 return true;
2076 2076
2077 /* Don't start buffer fill if buffer is already full. */
2078 if (filebufused > conf_watermark && !filling)
2079 return false;
2080
2077 logf("Starting buffer fill"); 2081 logf("Starting buffer fill");
2078 2082
2079 fill_bytesleft = filebuflen - filebufused; 2083 fill_bytesleft = filebuflen - filebufused;
@@ -2086,13 +2090,17 @@ static void initialize_buffer_fill(bool clear_tracks)
2086 // if (buf_ridx > cur_ti->buf_idx) 2090 // if (buf_ridx > cur_ti->buf_idx)
2087 // cur_ti->start_pos = buf_ridx - cur_ti->buf_idx; 2091 // cur_ti->start_pos = buf_ridx - cur_ti->buf_idx;
2088 2092
2093 /* Set the filling flag true before calling audio_clear_tracks as that
2094 * function can yield and we start looping. */
2095 filling = true;
2096
2089 if (clear_tracks) 2097 if (clear_tracks)
2090 audio_clear_track_entries(true, false, true); 2098 audio_clear_track_entries(true, false, true);
2091 2099
2092 /* Save the current resume position once. */ 2100 /* Save the current resume position once. */
2093 playlist_update_resume_info(audio_current_track()); 2101 playlist_update_resume_info(audio_current_track());
2094 2102
2095 filling = true; 2103 return true;
2096} 2104}
2097 2105
2098static void audio_fill_file_buffer( 2106static void audio_fill_file_buffer(
@@ -2100,7 +2108,8 @@ static void audio_fill_file_buffer(
2100{ 2108{
2101 bool had_next_track = audio_next_track() != NULL; 2109 bool had_next_track = audio_next_track() != NULL;
2102 2110
2103 initialize_buffer_fill(!start_play); 2111 if (!initialize_buffer_fill(!start_play))
2112 return ;
2104 2113
2105 /* If we have a partially buffered track, continue loading, 2114 /* If we have a partially buffered track, continue loading,
2106 * otherwise load a new track */ 2115 * otherwise load a new track */