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.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.c | 21 |
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 | ||
265 | static void audio_clear_track_entries( | 265 | static 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); |
267 | static void initialize_buffer_fill(bool clear_tracks); | 267 | static bool initialize_buffer_fill(bool clear_tracks); |
268 | static void audio_fill_file_buffer( | 268 | static 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 | ||
2071 | static void initialize_buffer_fill(bool clear_tracks) | 2071 | static 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 | ||
2098 | static void audio_fill_file_buffer( | 2106 | static 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 */ |